diff --git a/api/client/accesslist/accesslist.go b/api/client/accesslist/accesslist.go index d64b9db23e7a..de3cc2f34cf1 100644 --- a/api/client/accesslist/accesslist.go +++ b/api/client/accesslist/accesslist.go @@ -23,6 +23,7 @@ import ( accesslistv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" "github.com/gravitational/teleport/api/types/accesslist" conv "github.com/gravitational/teleport/api/types/accesslist/convert/v1" + traitv1 "github.com/gravitational/teleport/api/types/trait/convert/v1" ) // Client is an access list client that conforms to the following lib/services interfaces: @@ -113,6 +114,21 @@ func (c *Client) GetAccessListsToReview(ctx context.Context) ([]*accesslist.Acce return accessLists, nil } +// GetInheritedGrants returns grants inherited by access list accessListID from parent access lists. +func (c *Client) GetInheritedGrants(ctx context.Context, accessListID string) (*accesslist.Grants, error) { + resp, err := c.grpcClient.GetInheritedGrants(ctx, &accesslistv1.GetInheritedGrantsRequest{ + AccessListId: accessListID, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + return &accesslist.Grants{ + Roles: resp.Grants.Roles, + Traits: traitv1.FromProto(resp.Grants.Traits), + }, nil +} + // UpsertAccessList creates or updates an access list resource. func (c *Client) UpsertAccessList(ctx context.Context, accessList *accesslist.AccessList) (*accesslist.AccessList, error) { resp, err := c.grpcClient.UpsertAccessList(ctx, &accesslistv1.UpsertAccessListRequest{ @@ -151,15 +167,15 @@ func (c *Client) DeleteAllAccessLists(ctx context.Context) error { } // CountAccessListMembers will count all access list members. -func (c *Client) CountAccessListMembers(ctx context.Context, accessListName string) (uint32, error) { +func (c *Client) CountAccessListMembers(ctx context.Context, accessListName string) (users uint32, lists uint32, err error) { resp, err := c.grpcClient.CountAccessListMembers(ctx, &accesslistv1.CountAccessListMembersRequest{ AccessListName: accessListName, }) if err != nil { - return 0, trace.Wrap(err) + return 0, 0, trace.Wrap(err) } - return resp.Count, nil + return resp.Count, resp.ListCount, nil } // ListAccessListMembers returns a paginated list of all access list members for an access list. @@ -221,6 +237,26 @@ func (c *Client) GetAccessListMember(ctx context.Context, accessList string, mem return member, trace.Wrap(err) } +// GetAccessListOwners returns a list of all owners in an Access List, including those inherited from nested Access Lists. +// +// Returned Owners are not validated for ownership requirements – use `IsAccessListOwner` for validation. +func (c *Client) GetAccessListOwners(ctx context.Context, accessListName string) ([]*accesslist.Owner, error) { + resp, err := c.grpcClient.GetAccessListOwners(ctx, &accesslistv1.GetAccessListOwnersRequest{ + AccessList: accessListName, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + owners := make([]*accesslist.Owner, 0, len(resp.Owners)) + for _, owner := range resp.Owners { + ownerProto := conv.FromOwnerProto(owner) + owners = append(owners, &ownerProto) + } + + return owners, nil +} + // UpsertAccessListMember creates or updates an access list member resource. func (c *Client) UpsertAccessListMember(ctx context.Context, member *accesslist.AccessListMember) (*accesslist.AccessListMember, error) { resp, err := c.grpcClient.UpsertAccessListMember(ctx, &accesslistv1.UpsertAccessListMemberRequest{ diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go index 55ec345396c3..e7b61266933c 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go @@ -147,6 +147,60 @@ func (ReviewDayOfMonth) EnumDescriptor() ([]byte, []int) { return file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP(), []int{1} } +// MembershipKind represents the different kinds of list membership +type MembershipKind int32 + +const ( + // MEMBERSHIP_KIND_UNSPECIFIED represents list members that are of + // unknown membership kind, defaulting to being treated as type USER + MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED MembershipKind = 0 + // MEMBERSHIP_KIND_USER represents list members that are normal users + MembershipKind_MEMBERSHIP_KIND_USER MembershipKind = 1 + // MEMBERSHIP_KIND_LIST represents list members that are nested Access Lists + MembershipKind_MEMBERSHIP_KIND_LIST MembershipKind = 2 +) + +// Enum value maps for MembershipKind. +var ( + MembershipKind_name = map[int32]string{ + 0: "MEMBERSHIP_KIND_UNSPECIFIED", + 1: "MEMBERSHIP_KIND_USER", + 2: "MEMBERSHIP_KIND_LIST", + } + MembershipKind_value = map[string]int32{ + "MEMBERSHIP_KIND_UNSPECIFIED": 0, + "MEMBERSHIP_KIND_USER": 1, + "MEMBERSHIP_KIND_LIST": 2, + } +) + +func (x MembershipKind) Enum() *MembershipKind { + p := new(MembershipKind) + *p = x + return p +} + +func (x MembershipKind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MembershipKind) Descriptor() protoreflect.EnumDescriptor { + return file_teleport_accesslist_v1_accesslist_proto_enumTypes[2].Descriptor() +} + +func (MembershipKind) Type() protoreflect.EnumType { + return &file_teleport_accesslist_v1_accesslist_proto_enumTypes[2] +} + +func (x MembershipKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MembershipKind.Descriptor instead. +func (MembershipKind) EnumDescriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP(), []int{2} +} + // IneligibleStatus describes how the user is ineligible. type IneligibleStatus int32 @@ -196,11 +250,11 @@ func (x IneligibleStatus) String() string { } func (IneligibleStatus) Descriptor() protoreflect.EnumDescriptor { - return file_teleport_accesslist_v1_accesslist_proto_enumTypes[2].Descriptor() + return file_teleport_accesslist_v1_accesslist_proto_enumTypes[3].Descriptor() } func (IneligibleStatus) Type() protoreflect.EnumType { - return &file_teleport_accesslist_v1_accesslist_proto_enumTypes[2] + return &file_teleport_accesslist_v1_accesslist_proto_enumTypes[3] } func (x IneligibleStatus) Number() protoreflect.EnumNumber { @@ -209,7 +263,7 @@ func (x IneligibleStatus) Number() protoreflect.EnumNumber { // Deprecated: Use IneligibleStatus.Descriptor instead. func (IneligibleStatus) EnumDescriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP(), []int{2} + return file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP(), []int{3} } // AccessList describes the basic building block of access grants, which are @@ -409,6 +463,9 @@ type AccessListOwner struct { // ineligible_status describes if this owner is eligible or not // and if not, describes how they're lacking eligibility. IneligibleStatus IneligibleStatus `protobuf:"varint,3,opt,name=ineligible_status,json=ineligibleStatus,proto3,enum=teleport.accesslist.v1.IneligibleStatus" json:"ineligible_status,omitempty"` + // membership_kind describes the type of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind MembershipKind `protobuf:"varint,4,opt,name=membership_kind,json=membershipKind,proto3,enum=teleport.accesslist.v1.MembershipKind" json:"membership_kind,omitempty"` } func (x *AccessListOwner) Reset() { @@ -462,6 +519,13 @@ func (x *AccessListOwner) GetIneligibleStatus() IneligibleStatus { return IneligibleStatus_INELIGIBLE_STATUS_UNSPECIFIED } +func (x *AccessListOwner) GetMembershipKind() MembershipKind { + if x != nil { + return x.MembershipKind + } + return MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED +} + // AccessListAudit describes the audit configuration for an Access List. type AccessListAudit struct { state protoimpl.MessageState @@ -829,6 +893,9 @@ type MemberSpec struct { // ineligible_status describes if this member is eligible or not // and if not, describes how they're lacking eligibility. IneligibleStatus IneligibleStatus `protobuf:"varint,7,opt,name=ineligible_status,json=ineligibleStatus,proto3,enum=teleport.accesslist.v1.IneligibleStatus" json:"ineligible_status,omitempty"` + // membership_kind describes the type of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind MembershipKind `protobuf:"varint,9,opt,name=membership_kind,json=membershipKind,proto3,enum=teleport.accesslist.v1.MembershipKind" json:"membership_kind,omitempty"` } func (x *MemberSpec) Reset() { @@ -910,6 +977,13 @@ func (x *MemberSpec) GetIneligibleStatus() IneligibleStatus { return IneligibleStatus_INELIGIBLE_STATUS_UNSPECIFIED } +func (x *MemberSpec) GetMembershipKind() MembershipKind { + if x != nil { + return x.MembershipKind + } + return MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED +} + // Review is a review of an Access List. type Review struct { state protoimpl.MessageState @@ -1133,8 +1207,10 @@ type AccessListStatus struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // member_count is the number of members in the in the Access List. + // member_count is the number of members in the Access List. MemberCount *uint32 `protobuf:"varint,1,opt,name=member_count,json=memberCount,proto3,oneof" json:"member_count,omitempty"` + // member_list_count is the number of nested list members in the Access List. + MemberListCount *uint32 `protobuf:"varint,2,opt,name=member_list_count,json=memberListCount,proto3,oneof" json:"member_list_count,omitempty"` } func (x *AccessListStatus) Reset() { @@ -1174,6 +1250,13 @@ func (x *AccessListStatus) GetMemberCount() uint32 { return 0 } +func (x *AccessListStatus) GetMemberListCount() uint32 { + if x != nil && x.MemberListCount != nil { + return *x.MemberListCount + } + return 0 +} + var File_teleport_accesslist_v1_accesslist_proto protoreflect.FileDescriptor var file_teleport_accesslist_v1_accesslist_proto_rawDesc = []byte{ @@ -1238,7 +1321,7 @@ var file_teleport_accesslist_v1_accesslist_proto_rawDesc = []byte{ 0x72, 0x61, 0x6e, 0x74, 0x73, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0x9e, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x65, + 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0xef, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, @@ -1248,169 +1331,190 @@ var file_teleport_accesslist_v1_accesslist_proto_rawDesc = []byte{ 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x10, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, - 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, 0x42, 0x0a, 0x0f, - 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x02, 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, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, 0x61, 0x74, 0x65, - 0x12, 0x42, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x4b, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x22, 0x9f, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x12, 0x45, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x09, 0x66, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x61, 0x79, 0x5f, - 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, - 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x52, 0x0a, 0x64, 0x61, 0x79, 0x4f, 0x66, 0x4d, - 0x6f, 0x6e, 0x74, 0x68, 0x22, 0x40, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x5c, 0x0a, 0x12, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, - 0x61, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x74, 0x52, 0x06, 0x74, 0x72, - 0x61, 0x69, 0x74, 0x73, 0x22, 0x5a, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x30, - 0x0a, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x61, 0x69, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x74, 0x52, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, - 0x22, 0x7c, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x06, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xc7, - 0x02, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, - 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, - 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x73, 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, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x65, 0x64, 0x42, 0x79, 0x12, - 0x55, 0x0a, 0x11, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x10, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x52, 0x0a, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0x7c, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x12, 0x3a, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, - 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, + 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4f, 0x0a, 0x0f, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0xf7, 0x01, 0x0a, 0x0f, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, 0x42, 0x0a, + 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x02, 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, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x4b, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xdf, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, - 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, - 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x90, 0x03, 0x0a, 0x0d, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x1f, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x52, - 0x1d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x27, - 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x18, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x52, 0x16, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x66, 0x0a, 0x1b, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, - 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x63, 0x79, 0x22, 0x9f, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x45, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x09, + 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x61, 0x79, + 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, - 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x52, 0x17, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x11, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x4b, 0x0a, 0x10, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x26, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2a, 0xb6, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x1c, + 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x52, 0x0a, 0x64, 0x61, 0x79, 0x4f, 0x66, + 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x22, 0x40, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x5c, 0x0a, 0x12, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, + 0x72, 0x61, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x74, 0x52, 0x06, 0x74, + 0x72, 0x61, 0x69, 0x74, 0x73, 0x22, 0x5a, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, + 0x30, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x61, 0x69, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x74, 0x52, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, + 0x73, 0x22, 0x7c, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x06, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, + 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, + 0x98, 0x03, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, + 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x73, 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, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x62, + 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x65, 0x64, 0x42, 0x79, + 0x12, 0x55, 0x0a, 0x11, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x10, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4f, 0x0a, 0x0f, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x52, 0x0a, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0x7c, 0x0a, 0x06, 0x52, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x12, 0x3a, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x36, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xdf, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x90, 0x03, 0x0a, 0x0d, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x1f, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x73, 0x52, 0x1d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x18, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x79, 0x52, 0x16, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x66, 0x0a, 0x1b, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x52, 0x17, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x11, 0x66, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x92, 0x01, + 0x0a, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x11, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52, 0x0f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x14, 0x0a, 0x12, + 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x2a, 0xb6, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, + 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x56, 0x49, + 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x4f, 0x4e, 0x45, + 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x56, 0x49, + 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x54, 0x48, 0x52, + 0x45, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x53, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x52, + 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, + 0x53, 0x49, 0x58, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x53, 0x10, 0x06, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, - 0x0a, 0x1a, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, - 0x43, 0x59, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x10, 0x01, 0x12, 0x21, - 0x0a, 0x1d, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, - 0x43, 0x59, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x53, 0x10, - 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, - 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x53, 0x49, 0x58, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x53, - 0x10, 0x06, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, - 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x59, 0x45, 0x41, 0x52, 0x10, - 0x0c, 0x2a, 0x97, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, 0x79, 0x4f, - 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, - 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x52, - 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, - 0x54, 0x48, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, - 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, - 0x48, 0x5f, 0x46, 0x49, 0x46, 0x54, 0x45, 0x45, 0x4e, 0x54, 0x48, 0x10, 0x0f, 0x12, 0x1c, 0x0a, - 0x18, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, - 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x10, 0x1f, 0x2a, 0xc6, 0x01, 0x0a, 0x10, - 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, - 0x45, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x45, - 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4d, - 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x4d, 0x45, - 0x4e, 0x54, 0x53, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, - 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, - 0x45, 0x44, 0x10, 0x04, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, - 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, - 0x31, 0x3b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x59, 0x45, 0x41, 0x52, 0x10, 0x0c, 0x2a, 0x97, 0x01, 0x0a, 0x10, + 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, + 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, + 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, + 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x46, 0x49, 0x52, + 0x53, 0x54, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, + 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x46, 0x49, 0x46, 0x54, + 0x45, 0x45, 0x4e, 0x54, 0x48, 0x10, 0x0f, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x56, 0x49, 0x45, + 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x4c, + 0x41, 0x53, 0x54, 0x10, 0x1f, 0x2a, 0x65, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x1b, 0x4d, 0x45, 0x4d, 0x42, 0x45, + 0x52, 0x53, 0x48, 0x49, 0x50, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x45, 0x4d, 0x42, + 0x45, 0x52, 0x53, 0x48, 0x49, 0x50, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x53, 0x45, 0x52, + 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x48, 0x49, 0x50, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x2a, 0xc6, 0x01, 0x0a, + 0x10, 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, + 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, + 0x4c, 0x45, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, + 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, + 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, + 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x4d, + 0x45, 0x4e, 0x54, 0x53, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, + 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x50, 0x49, + 0x52, 0x45, 0x44, 0x10, 0x04, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, + 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2f, + 0x76, 0x31, 0x3b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x76, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1425,67 +1529,70 @@ func file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP() []byte { return file_teleport_accesslist_v1_accesslist_proto_rawDescData } -var file_teleport_accesslist_v1_accesslist_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_teleport_accesslist_v1_accesslist_proto_enumTypes = make([]protoimpl.EnumInfo, 4) var file_teleport_accesslist_v1_accesslist_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_teleport_accesslist_v1_accesslist_proto_goTypes = []any{ (ReviewFrequency)(0), // 0: teleport.accesslist.v1.ReviewFrequency (ReviewDayOfMonth)(0), // 1: teleport.accesslist.v1.ReviewDayOfMonth - (IneligibleStatus)(0), // 2: teleport.accesslist.v1.IneligibleStatus - (*AccessList)(nil), // 3: teleport.accesslist.v1.AccessList - (*AccessListSpec)(nil), // 4: teleport.accesslist.v1.AccessListSpec - (*AccessListOwner)(nil), // 5: teleport.accesslist.v1.AccessListOwner - (*AccessListAudit)(nil), // 6: teleport.accesslist.v1.AccessListAudit - (*Recurrence)(nil), // 7: teleport.accesslist.v1.Recurrence - (*Notifications)(nil), // 8: teleport.accesslist.v1.Notifications - (*AccessListRequires)(nil), // 9: teleport.accesslist.v1.AccessListRequires - (*AccessListGrants)(nil), // 10: teleport.accesslist.v1.AccessListGrants - (*Member)(nil), // 11: teleport.accesslist.v1.Member - (*MemberSpec)(nil), // 12: teleport.accesslist.v1.MemberSpec - (*Review)(nil), // 13: teleport.accesslist.v1.Review - (*ReviewSpec)(nil), // 14: teleport.accesslist.v1.ReviewSpec - (*ReviewChanges)(nil), // 15: teleport.accesslist.v1.ReviewChanges - (*AccessListStatus)(nil), // 16: teleport.accesslist.v1.AccessListStatus - (*v1.ResourceHeader)(nil), // 17: teleport.header.v1.ResourceHeader - (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 19: google.protobuf.Duration - (*v11.Trait)(nil), // 20: teleport.trait.v1.Trait + (MembershipKind)(0), // 2: teleport.accesslist.v1.MembershipKind + (IneligibleStatus)(0), // 3: teleport.accesslist.v1.IneligibleStatus + (*AccessList)(nil), // 4: teleport.accesslist.v1.AccessList + (*AccessListSpec)(nil), // 5: teleport.accesslist.v1.AccessListSpec + (*AccessListOwner)(nil), // 6: teleport.accesslist.v1.AccessListOwner + (*AccessListAudit)(nil), // 7: teleport.accesslist.v1.AccessListAudit + (*Recurrence)(nil), // 8: teleport.accesslist.v1.Recurrence + (*Notifications)(nil), // 9: teleport.accesslist.v1.Notifications + (*AccessListRequires)(nil), // 10: teleport.accesslist.v1.AccessListRequires + (*AccessListGrants)(nil), // 11: teleport.accesslist.v1.AccessListGrants + (*Member)(nil), // 12: teleport.accesslist.v1.Member + (*MemberSpec)(nil), // 13: teleport.accesslist.v1.MemberSpec + (*Review)(nil), // 14: teleport.accesslist.v1.Review + (*ReviewSpec)(nil), // 15: teleport.accesslist.v1.ReviewSpec + (*ReviewChanges)(nil), // 16: teleport.accesslist.v1.ReviewChanges + (*AccessListStatus)(nil), // 17: teleport.accesslist.v1.AccessListStatus + (*v1.ResourceHeader)(nil), // 18: teleport.header.v1.ResourceHeader + (*timestamppb.Timestamp)(nil), // 19: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 20: google.protobuf.Duration + (*v11.Trait)(nil), // 21: teleport.trait.v1.Trait } var file_teleport_accesslist_v1_accesslist_proto_depIdxs = []int32{ - 17, // 0: teleport.accesslist.v1.AccessList.header:type_name -> teleport.header.v1.ResourceHeader - 4, // 1: teleport.accesslist.v1.AccessList.spec:type_name -> teleport.accesslist.v1.AccessListSpec - 16, // 2: teleport.accesslist.v1.AccessList.status:type_name -> teleport.accesslist.v1.AccessListStatus - 5, // 3: teleport.accesslist.v1.AccessListSpec.owners:type_name -> teleport.accesslist.v1.AccessListOwner - 6, // 4: teleport.accesslist.v1.AccessListSpec.audit:type_name -> teleport.accesslist.v1.AccessListAudit - 9, // 5: teleport.accesslist.v1.AccessListSpec.membership_requires:type_name -> teleport.accesslist.v1.AccessListRequires - 9, // 6: teleport.accesslist.v1.AccessListSpec.ownership_requires:type_name -> teleport.accesslist.v1.AccessListRequires - 10, // 7: teleport.accesslist.v1.AccessListSpec.grants:type_name -> teleport.accesslist.v1.AccessListGrants - 10, // 8: teleport.accesslist.v1.AccessListSpec.owner_grants:type_name -> teleport.accesslist.v1.AccessListGrants - 2, // 9: teleport.accesslist.v1.AccessListOwner.ineligible_status:type_name -> teleport.accesslist.v1.IneligibleStatus - 18, // 10: teleport.accesslist.v1.AccessListAudit.next_audit_date:type_name -> google.protobuf.Timestamp - 7, // 11: teleport.accesslist.v1.AccessListAudit.recurrence:type_name -> teleport.accesslist.v1.Recurrence - 8, // 12: teleport.accesslist.v1.AccessListAudit.notifications:type_name -> teleport.accesslist.v1.Notifications - 0, // 13: teleport.accesslist.v1.Recurrence.frequency:type_name -> teleport.accesslist.v1.ReviewFrequency - 1, // 14: teleport.accesslist.v1.Recurrence.day_of_month:type_name -> teleport.accesslist.v1.ReviewDayOfMonth - 19, // 15: teleport.accesslist.v1.Notifications.start:type_name -> google.protobuf.Duration - 20, // 16: teleport.accesslist.v1.AccessListRequires.traits:type_name -> teleport.trait.v1.Trait - 20, // 17: teleport.accesslist.v1.AccessListGrants.traits:type_name -> teleport.trait.v1.Trait - 17, // 18: teleport.accesslist.v1.Member.header:type_name -> teleport.header.v1.ResourceHeader - 12, // 19: teleport.accesslist.v1.Member.spec:type_name -> teleport.accesslist.v1.MemberSpec - 18, // 20: teleport.accesslist.v1.MemberSpec.joined:type_name -> google.protobuf.Timestamp - 18, // 21: teleport.accesslist.v1.MemberSpec.expires:type_name -> google.protobuf.Timestamp - 2, // 22: teleport.accesslist.v1.MemberSpec.ineligible_status:type_name -> teleport.accesslist.v1.IneligibleStatus - 17, // 23: teleport.accesslist.v1.Review.header:type_name -> teleport.header.v1.ResourceHeader - 14, // 24: teleport.accesslist.v1.Review.spec:type_name -> teleport.accesslist.v1.ReviewSpec - 18, // 25: teleport.accesslist.v1.ReviewSpec.review_date:type_name -> google.protobuf.Timestamp - 15, // 26: teleport.accesslist.v1.ReviewSpec.changes:type_name -> teleport.accesslist.v1.ReviewChanges - 9, // 27: teleport.accesslist.v1.ReviewChanges.membership_requirements_changed:type_name -> teleport.accesslist.v1.AccessListRequires - 0, // 28: teleport.accesslist.v1.ReviewChanges.review_frequency_changed:type_name -> teleport.accesslist.v1.ReviewFrequency - 1, // 29: teleport.accesslist.v1.ReviewChanges.review_day_of_month_changed:type_name -> teleport.accesslist.v1.ReviewDayOfMonth - 30, // [30:30] is the sub-list for method output_type - 30, // [30:30] is the sub-list for method input_type - 30, // [30:30] is the sub-list for extension type_name - 30, // [30:30] is the sub-list for extension extendee - 0, // [0:30] is the sub-list for field type_name + 18, // 0: teleport.accesslist.v1.AccessList.header:type_name -> teleport.header.v1.ResourceHeader + 5, // 1: teleport.accesslist.v1.AccessList.spec:type_name -> teleport.accesslist.v1.AccessListSpec + 17, // 2: teleport.accesslist.v1.AccessList.status:type_name -> teleport.accesslist.v1.AccessListStatus + 6, // 3: teleport.accesslist.v1.AccessListSpec.owners:type_name -> teleport.accesslist.v1.AccessListOwner + 7, // 4: teleport.accesslist.v1.AccessListSpec.audit:type_name -> teleport.accesslist.v1.AccessListAudit + 10, // 5: teleport.accesslist.v1.AccessListSpec.membership_requires:type_name -> teleport.accesslist.v1.AccessListRequires + 10, // 6: teleport.accesslist.v1.AccessListSpec.ownership_requires:type_name -> teleport.accesslist.v1.AccessListRequires + 11, // 7: teleport.accesslist.v1.AccessListSpec.grants:type_name -> teleport.accesslist.v1.AccessListGrants + 11, // 8: teleport.accesslist.v1.AccessListSpec.owner_grants:type_name -> teleport.accesslist.v1.AccessListGrants + 3, // 9: teleport.accesslist.v1.AccessListOwner.ineligible_status:type_name -> teleport.accesslist.v1.IneligibleStatus + 2, // 10: teleport.accesslist.v1.AccessListOwner.membership_kind:type_name -> teleport.accesslist.v1.MembershipKind + 19, // 11: teleport.accesslist.v1.AccessListAudit.next_audit_date:type_name -> google.protobuf.Timestamp + 8, // 12: teleport.accesslist.v1.AccessListAudit.recurrence:type_name -> teleport.accesslist.v1.Recurrence + 9, // 13: teleport.accesslist.v1.AccessListAudit.notifications:type_name -> teleport.accesslist.v1.Notifications + 0, // 14: teleport.accesslist.v1.Recurrence.frequency:type_name -> teleport.accesslist.v1.ReviewFrequency + 1, // 15: teleport.accesslist.v1.Recurrence.day_of_month:type_name -> teleport.accesslist.v1.ReviewDayOfMonth + 20, // 16: teleport.accesslist.v1.Notifications.start:type_name -> google.protobuf.Duration + 21, // 17: teleport.accesslist.v1.AccessListRequires.traits:type_name -> teleport.trait.v1.Trait + 21, // 18: teleport.accesslist.v1.AccessListGrants.traits:type_name -> teleport.trait.v1.Trait + 18, // 19: teleport.accesslist.v1.Member.header:type_name -> teleport.header.v1.ResourceHeader + 13, // 20: teleport.accesslist.v1.Member.spec:type_name -> teleport.accesslist.v1.MemberSpec + 19, // 21: teleport.accesslist.v1.MemberSpec.joined:type_name -> google.protobuf.Timestamp + 19, // 22: teleport.accesslist.v1.MemberSpec.expires:type_name -> google.protobuf.Timestamp + 3, // 23: teleport.accesslist.v1.MemberSpec.ineligible_status:type_name -> teleport.accesslist.v1.IneligibleStatus + 2, // 24: teleport.accesslist.v1.MemberSpec.membership_kind:type_name -> teleport.accesslist.v1.MembershipKind + 18, // 25: teleport.accesslist.v1.Review.header:type_name -> teleport.header.v1.ResourceHeader + 15, // 26: teleport.accesslist.v1.Review.spec:type_name -> teleport.accesslist.v1.ReviewSpec + 19, // 27: teleport.accesslist.v1.ReviewSpec.review_date:type_name -> google.protobuf.Timestamp + 16, // 28: teleport.accesslist.v1.ReviewSpec.changes:type_name -> teleport.accesslist.v1.ReviewChanges + 10, // 29: teleport.accesslist.v1.ReviewChanges.membership_requirements_changed:type_name -> teleport.accesslist.v1.AccessListRequires + 0, // 30: teleport.accesslist.v1.ReviewChanges.review_frequency_changed:type_name -> teleport.accesslist.v1.ReviewFrequency + 1, // 31: teleport.accesslist.v1.ReviewChanges.review_day_of_month_changed:type_name -> teleport.accesslist.v1.ReviewDayOfMonth + 32, // [32:32] is the sub-list for method output_type + 32, // [32:32] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 32, // [32:32] is the sub-list for extension extendee + 0, // [0:32] is the sub-list for field type_name } func init() { file_teleport_accesslist_v1_accesslist_proto_init() } @@ -1499,7 +1606,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_teleport_accesslist_v1_accesslist_proto_rawDesc, - NumEnums: 3, + NumEnums: 4, NumMessages: 14, NumExtensions: 0, NumServices: 0, diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go index 0505304df5fe..bcf193955247 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go @@ -233,6 +233,100 @@ func (x *ListAccessListsResponse) GetNextToken() string { return "" } +// GetInheritedGrantsRequest is the request for getting inherited grants. +type GetInheritedGrantsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // access_list_id is the ID of the access list to retrieve. + AccessListId string `protobuf:"bytes,1,opt,name=access_list_id,json=accessListId,proto3" json:"access_list_id,omitempty"` +} + +func (x *GetInheritedGrantsRequest) Reset() { + *x = GetInheritedGrantsRequest{} + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetInheritedGrantsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetInheritedGrantsRequest) ProtoMessage() {} + +func (x *GetInheritedGrantsRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetInheritedGrantsRequest.ProtoReflect.Descriptor instead. +func (*GetInheritedGrantsRequest) Descriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{4} +} + +func (x *GetInheritedGrantsRequest) GetAccessListId() string { + if x != nil { + return x.AccessListId + } + return "" +} + +// GetInheritedGrantsResponse is the response for getting inherited grants. +type GetInheritedGrantsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // grants is the list of inherited member grants. + Grants *AccessListGrants `protobuf:"bytes,1,opt,name=grants,proto3" json:"grants,omitempty"` +} + +func (x *GetInheritedGrantsResponse) Reset() { + *x = GetInheritedGrantsResponse{} + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetInheritedGrantsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetInheritedGrantsResponse) ProtoMessage() {} + +func (x *GetInheritedGrantsResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetInheritedGrantsResponse.ProtoReflect.Descriptor instead. +func (*GetInheritedGrantsResponse) Descriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{5} +} + +func (x *GetInheritedGrantsResponse) GetGrants() *AccessListGrants { + if x != nil { + return x.Grants + } + return nil +} + // GetAccessListRequest is the request for retrieving an access list. type GetAccessListRequest struct { state protoimpl.MessageState @@ -245,7 +339,7 @@ type GetAccessListRequest struct { func (x *GetAccessListRequest) Reset() { *x = GetAccessListRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[4] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -257,7 +351,7 @@ func (x *GetAccessListRequest) String() string { func (*GetAccessListRequest) ProtoMessage() {} func (x *GetAccessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[4] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -270,7 +364,7 @@ func (x *GetAccessListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAccessListRequest.ProtoReflect.Descriptor instead. func (*GetAccessListRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{4} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{6} } func (x *GetAccessListRequest) GetName() string { @@ -292,7 +386,7 @@ type UpsertAccessListRequest struct { func (x *UpsertAccessListRequest) Reset() { *x = UpsertAccessListRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[5] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -304,7 +398,7 @@ func (x *UpsertAccessListRequest) String() string { func (*UpsertAccessListRequest) ProtoMessage() {} func (x *UpsertAccessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[5] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -317,7 +411,7 @@ func (x *UpsertAccessListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertAccessListRequest.ProtoReflect.Descriptor instead. func (*UpsertAccessListRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{5} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{7} } func (x *UpsertAccessListRequest) GetAccessList() *AccessList { @@ -339,7 +433,7 @@ type UpdateAccessListRequest struct { func (x *UpdateAccessListRequest) Reset() { *x = UpdateAccessListRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[6] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -351,7 +445,7 @@ func (x *UpdateAccessListRequest) String() string { func (*UpdateAccessListRequest) ProtoMessage() {} func (x *UpdateAccessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[6] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -364,7 +458,7 @@ func (x *UpdateAccessListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAccessListRequest.ProtoReflect.Descriptor instead. func (*UpdateAccessListRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{6} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{8} } func (x *UpdateAccessListRequest) GetAccessList() *AccessList { @@ -386,7 +480,7 @@ type DeleteAccessListRequest struct { func (x *DeleteAccessListRequest) Reset() { *x = DeleteAccessListRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[7] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -398,7 +492,7 @@ func (x *DeleteAccessListRequest) String() string { func (*DeleteAccessListRequest) ProtoMessage() {} func (x *DeleteAccessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[7] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -411,7 +505,7 @@ func (x *DeleteAccessListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccessListRequest.ProtoReflect.Descriptor instead. func (*DeleteAccessListRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{7} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{9} } func (x *DeleteAccessListRequest) GetName() string { @@ -430,7 +524,7 @@ type DeleteAllAccessListsRequest struct { func (x *DeleteAllAccessListsRequest) Reset() { *x = DeleteAllAccessListsRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[8] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -442,7 +536,7 @@ func (x *DeleteAllAccessListsRequest) String() string { func (*DeleteAllAccessListsRequest) ProtoMessage() {} func (x *DeleteAllAccessListsRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[8] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -455,7 +549,7 @@ func (x *DeleteAllAccessListsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAllAccessListsRequest.ProtoReflect.Descriptor instead. func (*DeleteAllAccessListsRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{8} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{10} } // GetAccessListsToReviewRequest is the request for getting access lists that @@ -468,7 +562,7 @@ type GetAccessListsToReviewRequest struct { func (x *GetAccessListsToReviewRequest) Reset() { *x = GetAccessListsToReviewRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[9] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -480,7 +574,7 @@ func (x *GetAccessListsToReviewRequest) String() string { func (*GetAccessListsToReviewRequest) ProtoMessage() {} func (x *GetAccessListsToReviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[9] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -493,7 +587,7 @@ func (x *GetAccessListsToReviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAccessListsToReviewRequest.ProtoReflect.Descriptor instead. func (*GetAccessListsToReviewRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{9} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{11} } // GetAccessListsToReviewResponse is the response for getting access lists that @@ -508,7 +602,7 @@ type GetAccessListsToReviewResponse struct { func (x *GetAccessListsToReviewResponse) Reset() { *x = GetAccessListsToReviewResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[10] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -520,7 +614,7 @@ func (x *GetAccessListsToReviewResponse) String() string { func (*GetAccessListsToReviewResponse) ProtoMessage() {} func (x *GetAccessListsToReviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[10] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -533,7 +627,7 @@ func (x *GetAccessListsToReviewResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAccessListsToReviewResponse.ProtoReflect.Descriptor instead. func (*GetAccessListsToReviewResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{10} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{12} } func (x *GetAccessListsToReviewResponse) GetAccessLists() []*AccessList { @@ -556,7 +650,7 @@ type CountAccessListMembersRequest struct { func (x *CountAccessListMembersRequest) Reset() { *x = CountAccessListMembersRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[11] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -568,7 +662,7 @@ func (x *CountAccessListMembersRequest) String() string { func (*CountAccessListMembersRequest) ProtoMessage() {} func (x *CountAccessListMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[11] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -581,7 +675,7 @@ func (x *CountAccessListMembersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CountAccessListMembersRequest.ProtoReflect.Descriptor instead. func (*CountAccessListMembersRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{11} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{13} } func (x *CountAccessListMembersRequest) GetAccessListName() string { @@ -600,11 +694,13 @@ type CountAccessListMembersResponse struct { // count is the number of access list members in the access list. Count uint32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + // list_count is the number of access list members of type list in the access list. + ListCount uint32 `protobuf:"varint,2,opt,name=list_count,json=listCount,proto3" json:"list_count,omitempty"` } func (x *CountAccessListMembersResponse) Reset() { *x = CountAccessListMembersResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -616,7 +712,7 @@ func (x *CountAccessListMembersResponse) String() string { func (*CountAccessListMembersResponse) ProtoMessage() {} func (x *CountAccessListMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -629,7 +725,7 @@ func (x *CountAccessListMembersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CountAccessListMembersResponse.ProtoReflect.Descriptor instead. func (*CountAccessListMembersResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{12} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{14} } func (x *CountAccessListMembersResponse) GetCount() uint32 { @@ -639,6 +735,13 @@ func (x *CountAccessListMembersResponse) GetCount() uint32 { return 0 } +func (x *CountAccessListMembersResponse) GetListCount() uint32 { + if x != nil { + return x.ListCount + } + return 0 +} + // ListAccessListMembersRequest is the request for getting paginated access list // members. type ListAccessListMembersRequest struct { @@ -656,7 +759,7 @@ type ListAccessListMembersRequest struct { func (x *ListAccessListMembersRequest) Reset() { *x = ListAccessListMembersRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -668,7 +771,7 @@ func (x *ListAccessListMembersRequest) String() string { func (*ListAccessListMembersRequest) ProtoMessage() {} func (x *ListAccessListMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -681,7 +784,7 @@ func (x *ListAccessListMembersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAccessListMembersRequest.ProtoReflect.Descriptor instead. func (*ListAccessListMembersRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{13} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{15} } func (x *ListAccessListMembersRequest) GetPageSize() int32 { @@ -720,7 +823,7 @@ type ListAccessListMembersResponse struct { func (x *ListAccessListMembersResponse) Reset() { *x = ListAccessListMembersResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -732,7 +835,7 @@ func (x *ListAccessListMembersResponse) String() string { func (*ListAccessListMembersResponse) ProtoMessage() {} func (x *ListAccessListMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -745,7 +848,7 @@ func (x *ListAccessListMembersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAccessListMembersResponse.ProtoReflect.Descriptor instead. func (*ListAccessListMembersResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{14} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{16} } func (x *ListAccessListMembersResponse) GetMembers() []*Member { @@ -777,7 +880,7 @@ type ListAllAccessListMembersRequest struct { func (x *ListAllAccessListMembersRequest) Reset() { *x = ListAllAccessListMembersRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -789,7 +892,7 @@ func (x *ListAllAccessListMembersRequest) String() string { func (*ListAllAccessListMembersRequest) ProtoMessage() {} func (x *ListAllAccessListMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -802,7 +905,7 @@ func (x *ListAllAccessListMembersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAllAccessListMembersRequest.ProtoReflect.Descriptor instead. func (*ListAllAccessListMembersRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{15} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{17} } func (x *ListAllAccessListMembersRequest) GetPageSize() int32 { @@ -834,7 +937,7 @@ type ListAllAccessListMembersResponse struct { func (x *ListAllAccessListMembersResponse) Reset() { *x = ListAllAccessListMembersResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -846,7 +949,7 @@ func (x *ListAllAccessListMembersResponse) String() string { func (*ListAllAccessListMembersResponse) ProtoMessage() {} func (x *ListAllAccessListMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -859,7 +962,7 @@ func (x *ListAllAccessListMembersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAllAccessListMembersResponse.ProtoReflect.Descriptor instead. func (*ListAllAccessListMembersResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{16} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{18} } func (x *ListAllAccessListMembersResponse) GetMembers() []*Member { @@ -891,7 +994,7 @@ type UpsertAccessListWithMembersRequest struct { func (x *UpsertAccessListWithMembersRequest) Reset() { *x = UpsertAccessListWithMembersRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -903,7 +1006,7 @@ func (x *UpsertAccessListWithMembersRequest) String() string { func (*UpsertAccessListWithMembersRequest) ProtoMessage() {} func (x *UpsertAccessListWithMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -916,7 +1019,7 @@ func (x *UpsertAccessListWithMembersRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpsertAccessListWithMembersRequest.ProtoReflect.Descriptor instead. func (*UpsertAccessListWithMembersRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{17} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{19} } func (x *UpsertAccessListWithMembersRequest) GetAccessList() *AccessList { @@ -948,7 +1051,7 @@ type UpsertAccessListWithMembersResponse struct { func (x *UpsertAccessListWithMembersResponse) Reset() { *x = UpsertAccessListWithMembersResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -960,7 +1063,7 @@ func (x *UpsertAccessListWithMembersResponse) String() string { func (*UpsertAccessListWithMembersResponse) ProtoMessage() {} func (x *UpsertAccessListWithMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -973,7 +1076,7 @@ func (x *UpsertAccessListWithMembersResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use UpsertAccessListWithMembersResponse.ProtoReflect.Descriptor instead. func (*UpsertAccessListWithMembersResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{18} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{20} } func (x *UpsertAccessListWithMembersResponse) GetAccessList() *AccessList { @@ -1005,7 +1108,7 @@ type GetAccessListMemberRequest struct { func (x *GetAccessListMemberRequest) Reset() { *x = GetAccessListMemberRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1017,7 +1120,7 @@ func (x *GetAccessListMemberRequest) String() string { func (*GetAccessListMemberRequest) ProtoMessage() {} func (x *GetAccessListMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1030,7 +1133,7 @@ func (x *GetAccessListMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAccessListMemberRequest.ProtoReflect.Descriptor instead. func (*GetAccessListMemberRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{19} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{21} } func (x *GetAccessListMemberRequest) GetAccessList() string { @@ -1047,6 +1150,103 @@ func (x *GetAccessListMemberRequest) GetMemberName() string { return "" } +// GetAccessListOwnersRequest is the request for getting a list of all owners +// in an Access List, including those inherited from nested Access Lists. +type GetAccessListOwnersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // access_list is the name of the access list. + AccessList string `protobuf:"bytes,1,opt,name=access_list,json=accessList,proto3" json:"access_list,omitempty"` +} + +func (x *GetAccessListOwnersRequest) Reset() { + *x = GetAccessListOwnersRequest{} + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetAccessListOwnersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAccessListOwnersRequest) ProtoMessage() {} + +func (x *GetAccessListOwnersRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAccessListOwnersRequest.ProtoReflect.Descriptor instead. +func (*GetAccessListOwnersRequest) Descriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{22} +} + +func (x *GetAccessListOwnersRequest) GetAccessList() string { + if x != nil { + return x.AccessList + } + return "" +} + +// GetAccessListOwnersResponse is the response for getting a list of all +// owners in an Access List, including those inherited from nested Access Lists. +type GetAccessListOwnersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // owners is the list of all owners in the Access List, including those + // inherited from nested Access Lists. + Owners []*AccessListOwner `protobuf:"bytes,1,rep,name=owners,proto3" json:"owners,omitempty"` +} + +func (x *GetAccessListOwnersResponse) Reset() { + *x = GetAccessListOwnersResponse{} + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetAccessListOwnersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAccessListOwnersResponse) ProtoMessage() {} + +func (x *GetAccessListOwnersResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAccessListOwnersResponse.ProtoReflect.Descriptor instead. +func (*GetAccessListOwnersResponse) Descriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{23} +} + +func (x *GetAccessListOwnersResponse) GetOwners() []*AccessListOwner { + if x != nil { + return x.Owners + } + return nil +} + // UpsertAccessListMemberRequest is the request for upserting an access list // member. type UpsertAccessListMemberRequest struct { @@ -1060,7 +1260,7 @@ type UpsertAccessListMemberRequest struct { func (x *UpsertAccessListMemberRequest) Reset() { *x = UpsertAccessListMemberRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1072,7 +1272,7 @@ func (x *UpsertAccessListMemberRequest) String() string { func (*UpsertAccessListMemberRequest) ProtoMessage() {} func (x *UpsertAccessListMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1085,7 +1285,7 @@ func (x *UpsertAccessListMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertAccessListMemberRequest.ProtoReflect.Descriptor instead. func (*UpsertAccessListMemberRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{20} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{24} } func (x *UpsertAccessListMemberRequest) GetMember() *Member { @@ -1108,7 +1308,7 @@ type UpdateAccessListMemberRequest struct { func (x *UpdateAccessListMemberRequest) Reset() { *x = UpdateAccessListMemberRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1120,7 +1320,7 @@ func (x *UpdateAccessListMemberRequest) String() string { func (*UpdateAccessListMemberRequest) ProtoMessage() {} func (x *UpdateAccessListMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1133,7 +1333,7 @@ func (x *UpdateAccessListMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateAccessListMemberRequest.ProtoReflect.Descriptor instead. func (*UpdateAccessListMemberRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{21} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{25} } func (x *UpdateAccessListMemberRequest) GetMember() *Member { @@ -1158,7 +1358,7 @@ type DeleteAccessListMemberRequest struct { func (x *DeleteAccessListMemberRequest) Reset() { *x = DeleteAccessListMemberRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1170,7 +1370,7 @@ func (x *DeleteAccessListMemberRequest) String() string { func (*DeleteAccessListMemberRequest) ProtoMessage() {} func (x *DeleteAccessListMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1183,7 +1383,7 @@ func (x *DeleteAccessListMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccessListMemberRequest.ProtoReflect.Descriptor instead. func (*DeleteAccessListMemberRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{22} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{26} } func (x *DeleteAccessListMemberRequest) GetAccessList() string { @@ -1213,7 +1413,7 @@ type DeleteAllAccessListMembersForAccessListRequest struct { func (x *DeleteAllAccessListMembersForAccessListRequest) Reset() { *x = DeleteAllAccessListMembersForAccessListRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1225,7 +1425,7 @@ func (x *DeleteAllAccessListMembersForAccessListRequest) String() string { func (*DeleteAllAccessListMembersForAccessListRequest) ProtoMessage() {} func (x *DeleteAllAccessListMembersForAccessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1238,7 +1438,7 @@ func (x *DeleteAllAccessListMembersForAccessListRequest) ProtoReflect() protoref // Deprecated: Use DeleteAllAccessListMembersForAccessListRequest.ProtoReflect.Descriptor instead. func (*DeleteAllAccessListMembersForAccessListRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{23} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{27} } func (x *DeleteAllAccessListMembersForAccessListRequest) GetAccessList() string { @@ -1258,7 +1458,7 @@ type DeleteAllAccessListMembersRequest struct { func (x *DeleteAllAccessListMembersRequest) Reset() { *x = DeleteAllAccessListMembersRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1270,7 +1470,7 @@ func (x *DeleteAllAccessListMembersRequest) String() string { func (*DeleteAllAccessListMembersRequest) ProtoMessage() {} func (x *DeleteAllAccessListMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1283,7 +1483,7 @@ func (x *DeleteAllAccessListMembersRequest) ProtoReflect() protoreflect.Message // Deprecated: Use DeleteAllAccessListMembersRequest.ProtoReflect.Descriptor instead. func (*DeleteAllAccessListMembersRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{24} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{28} } // ListAccessListReviewsRequest is the request for getting paginated access list @@ -1303,7 +1503,7 @@ type ListAccessListReviewsRequest struct { func (x *ListAccessListReviewsRequest) Reset() { *x = ListAccessListReviewsRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1315,7 +1515,7 @@ func (x *ListAccessListReviewsRequest) String() string { func (*ListAccessListReviewsRequest) ProtoMessage() {} func (x *ListAccessListReviewsRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1328,7 +1528,7 @@ func (x *ListAccessListReviewsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAccessListReviewsRequest.ProtoReflect.Descriptor instead. func (*ListAccessListReviewsRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{25} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{29} } func (x *ListAccessListReviewsRequest) GetAccessList() string { @@ -1367,7 +1567,7 @@ type ListAccessListReviewsResponse struct { func (x *ListAccessListReviewsResponse) Reset() { *x = ListAccessListReviewsResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1379,7 +1579,7 @@ func (x *ListAccessListReviewsResponse) String() string { func (*ListAccessListReviewsResponse) ProtoMessage() {} func (x *ListAccessListReviewsResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1392,7 +1592,7 @@ func (x *ListAccessListReviewsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAccessListReviewsResponse.ProtoReflect.Descriptor instead. func (*ListAccessListReviewsResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{26} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{30} } func (x *ListAccessListReviewsResponse) GetReviews() []*Review { @@ -1424,7 +1624,7 @@ type ListAllAccessListReviewsRequest struct { func (x *ListAllAccessListReviewsRequest) Reset() { *x = ListAllAccessListReviewsRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1436,7 +1636,7 @@ func (x *ListAllAccessListReviewsRequest) String() string { func (*ListAllAccessListReviewsRequest) ProtoMessage() {} func (x *ListAllAccessListReviewsRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1449,7 +1649,7 @@ func (x *ListAllAccessListReviewsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAllAccessListReviewsRequest.ProtoReflect.Descriptor instead. func (*ListAllAccessListReviewsRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{27} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{31} } func (x *ListAllAccessListReviewsRequest) GetPageSize() int32 { @@ -1481,7 +1681,7 @@ type ListAllAccessListReviewsResponse struct { func (x *ListAllAccessListReviewsResponse) Reset() { *x = ListAllAccessListReviewsResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1493,7 +1693,7 @@ func (x *ListAllAccessListReviewsResponse) String() string { func (*ListAllAccessListReviewsResponse) ProtoMessage() {} func (x *ListAllAccessListReviewsResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1506,7 +1706,7 @@ func (x *ListAllAccessListReviewsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAllAccessListReviewsResponse.ProtoReflect.Descriptor instead. func (*ListAllAccessListReviewsResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{28} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{32} } func (x *ListAllAccessListReviewsResponse) GetReviews() []*Review { @@ -1536,7 +1736,7 @@ type CreateAccessListReviewRequest struct { func (x *CreateAccessListReviewRequest) Reset() { *x = CreateAccessListReviewRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1548,7 +1748,7 @@ func (x *CreateAccessListReviewRequest) String() string { func (*CreateAccessListReviewRequest) ProtoMessage() {} func (x *CreateAccessListReviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1561,7 +1761,7 @@ func (x *CreateAccessListReviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAccessListReviewRequest.ProtoReflect.Descriptor instead. func (*CreateAccessListReviewRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{29} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{33} } func (x *CreateAccessListReviewRequest) GetReview() *Review { @@ -1586,7 +1786,7 @@ type CreateAccessListReviewResponse struct { func (x *CreateAccessListReviewResponse) Reset() { *x = CreateAccessListReviewResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1598,7 +1798,7 @@ func (x *CreateAccessListReviewResponse) String() string { func (*CreateAccessListReviewResponse) ProtoMessage() {} func (x *CreateAccessListReviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1611,7 +1811,7 @@ func (x *CreateAccessListReviewResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAccessListReviewResponse.ProtoReflect.Descriptor instead. func (*CreateAccessListReviewResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{30} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{34} } func (x *CreateAccessListReviewResponse) GetReviewName() string { @@ -1643,7 +1843,7 @@ type DeleteAccessListReviewRequest struct { func (x *DeleteAccessListReviewRequest) Reset() { *x = DeleteAccessListReviewRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1655,7 +1855,7 @@ func (x *DeleteAccessListReviewRequest) String() string { func (*DeleteAccessListReviewRequest) ProtoMessage() {} func (x *DeleteAccessListReviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1668,7 +1868,7 @@ func (x *DeleteAccessListReviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccessListReviewRequest.ProtoReflect.Descriptor instead. func (*DeleteAccessListReviewRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{31} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{35} } func (x *DeleteAccessListReviewRequest) GetReviewName() string { @@ -1702,7 +1902,7 @@ type AccessRequestPromoteRequest struct { func (x *AccessRequestPromoteRequest) Reset() { *x = AccessRequestPromoteRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[32] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1714,7 +1914,7 @@ func (x *AccessRequestPromoteRequest) String() string { func (*AccessRequestPromoteRequest) ProtoMessage() {} func (x *AccessRequestPromoteRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[32] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1727,7 +1927,7 @@ func (x *AccessRequestPromoteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AccessRequestPromoteRequest.ProtoReflect.Descriptor instead. func (*AccessRequestPromoteRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{32} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{36} } func (x *AccessRequestPromoteRequest) GetRequestId() string { @@ -1764,7 +1964,7 @@ type AccessRequestPromoteResponse struct { func (x *AccessRequestPromoteResponse) Reset() { *x = AccessRequestPromoteResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[33] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1776,7 +1976,7 @@ func (x *AccessRequestPromoteResponse) String() string { func (*AccessRequestPromoteResponse) ProtoMessage() {} func (x *AccessRequestPromoteResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[33] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1789,7 +1989,7 @@ func (x *AccessRequestPromoteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AccessRequestPromoteResponse.ProtoReflect.Descriptor instead. func (*AccessRequestPromoteResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{33} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{37} } func (x *AccessRequestPromoteResponse) GetAccessRequest() *types.AccessRequestV3 { @@ -1812,7 +2012,7 @@ type GetSuggestedAccessListsRequest struct { func (x *GetSuggestedAccessListsRequest) Reset() { *x = GetSuggestedAccessListsRequest{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[34] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1824,7 +2024,7 @@ func (x *GetSuggestedAccessListsRequest) String() string { func (*GetSuggestedAccessListsRequest) ProtoMessage() {} func (x *GetSuggestedAccessListsRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[34] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1837,7 +2037,7 @@ func (x *GetSuggestedAccessListsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSuggestedAccessListsRequest.ProtoReflect.Descriptor instead. func (*GetSuggestedAccessListsRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{34} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{38} } func (x *GetSuggestedAccessListsRequest) GetAccessRequestId() string { @@ -1860,7 +2060,7 @@ type GetSuggestedAccessListsResponse struct { func (x *GetSuggestedAccessListsResponse) Reset() { *x = GetSuggestedAccessListsResponse{} - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[35] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1872,7 +2072,7 @@ func (x *GetSuggestedAccessListsResponse) String() string { func (*GetSuggestedAccessListsResponse) ProtoMessage() {} func (x *GetSuggestedAccessListsResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[35] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1885,7 +2085,7 @@ func (x *GetSuggestedAccessListsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSuggestedAccessListsResponse.ProtoReflect.Descriptor instead. func (*GetSuggestedAccessListsResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{35} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{39} } func (x *GetSuggestedAccessListsResponse) GetAccessLists() []*AccessList { @@ -1932,396 +2132,434 @@ var file_teleport_accesslist_v1_accesslist_service_proto_rawDesc = []byte{ 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x5e, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0b, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x5e, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0b, 0x61, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x41, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x68, 0x65, 0x72, + 0x69, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, + 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, + 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x5e, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, + 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x1d, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x1f, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x67, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x22, 0x49, 0x0a, 0x1d, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x55, 0x0a, 0x1e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x7b, 0x0a, + 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x81, 0x01, 0x0a, 0x1d, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, + 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5d, + 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x84, 0x01, + 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, + 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x22, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x2d, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x1d, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1f, - 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, - 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x67, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x22, 0x49, 0x0a, 0x1d, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x36, 0x0a, 0x1e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x7b, 0x0a, 0x1c, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x81, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, - 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5d, 0x0a, 0x1f, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x20, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x38, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x22, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, - 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xa4, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x73, - 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, - 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, - 0x5e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x84, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x36, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x12, 0x38, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, - 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x57, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xa4, 0x01, 0x0a, 0x23, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, + 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, - 0x6d, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x51, - 0x0a, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x46, 0x6f, 0x72, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x36, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x0b, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x1c, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, - 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x78, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0x5d, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, - 0x7b, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x57, 0x0a, 0x1d, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, - 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, - 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x22, 0x85, 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0f, 0x6e, 0x65, 0x78, - 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 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, 0x0d, - 0x6e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, 0x61, 0x74, 0x65, 0x22, 0x6a, 0x0a, - 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7e, 0x0a, 0x1b, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x5d, 0x0a, 0x1c, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x33, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x53, - 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x22, 0x5e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x3d, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x22, 0x5e, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3f, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, - 0x32, 0x81, 0x17, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x69, 0x73, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, + 0x22, 0x84, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, + 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x0b, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x57, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x22, 0x6d, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x51, 0x0a, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x46, 0x6f, 0x72, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x36, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x0b, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x1c, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, + 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x78, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x22, 0x5d, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x22, 0x7b, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x12, 0x1d, + 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x57, 0x0a, + 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, + 0x0a, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x06, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x22, 0x85, 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0f, 0x6e, 0x65, + 0x78, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 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, + 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, 0x61, 0x74, 0x65, 0x22, 0x6a, + 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7e, 0x0a, 0x1b, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x5d, 0x0a, 0x1c, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x33, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x1e, 0x47, 0x65, 0x74, + 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x53, 0x75, + 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x73, 0x32, 0xfe, 0x18, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0d, 0x47, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x67, - 0x0a, 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x67, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x5b, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x63, 0x0a, - 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x87, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0d, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x87, 0x01, 0x0a, - 0x16, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x67, 0x0a, 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x67, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, + 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x5b, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x63, + 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8d, 0x01, - 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x37, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x12, 0x87, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x87, 0x01, + 0x0a, 0x16, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x6f, 0x0a, 0x16, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8d, + 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x37, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x6f, 0x0a, 0x16, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, + 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x16, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x16, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x6f, 0x0a, 0x16, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x89, 0x01, 0x0a, 0x27, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, - 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x46, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x16, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x89, 0x01, 0x0a, 0x27, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x6f, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x39, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, - 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x12, 0x46, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x96, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x12, 0x3a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x12, 0x6f, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x39, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, + 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x96, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x8d, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x12, 0x37, 0x2e, + 0x73, 0x12, 0x3a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, - 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x87, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x16, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x33, 0x2e, 0x74, + 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x12, 0x37, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x87, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, - 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x73, 0x12, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x16, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x33, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, + 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x74, 0x65, + 0x69, 0x73, 0x74, 0x73, 0x12, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x68, 0x65, + 0x72, 0x69, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, - 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, - 0x31, 0x3b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, + 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x68, 0x65, 0x72, + 0x69, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x3b, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2336,124 +2574,136 @@ func file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP() []byte { return file_teleport_accesslist_v1_accesslist_service_proto_rawDescData } -var file_teleport_accesslist_v1_accesslist_service_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_teleport_accesslist_v1_accesslist_service_proto_msgTypes = make([]protoimpl.MessageInfo, 40) var file_teleport_accesslist_v1_accesslist_service_proto_goTypes = []any{ (*GetAccessListsRequest)(nil), // 0: teleport.accesslist.v1.GetAccessListsRequest (*GetAccessListsResponse)(nil), // 1: teleport.accesslist.v1.GetAccessListsResponse (*ListAccessListsRequest)(nil), // 2: teleport.accesslist.v1.ListAccessListsRequest (*ListAccessListsResponse)(nil), // 3: teleport.accesslist.v1.ListAccessListsResponse - (*GetAccessListRequest)(nil), // 4: teleport.accesslist.v1.GetAccessListRequest - (*UpsertAccessListRequest)(nil), // 5: teleport.accesslist.v1.UpsertAccessListRequest - (*UpdateAccessListRequest)(nil), // 6: teleport.accesslist.v1.UpdateAccessListRequest - (*DeleteAccessListRequest)(nil), // 7: teleport.accesslist.v1.DeleteAccessListRequest - (*DeleteAllAccessListsRequest)(nil), // 8: teleport.accesslist.v1.DeleteAllAccessListsRequest - (*GetAccessListsToReviewRequest)(nil), // 9: teleport.accesslist.v1.GetAccessListsToReviewRequest - (*GetAccessListsToReviewResponse)(nil), // 10: teleport.accesslist.v1.GetAccessListsToReviewResponse - (*CountAccessListMembersRequest)(nil), // 11: teleport.accesslist.v1.CountAccessListMembersRequest - (*CountAccessListMembersResponse)(nil), // 12: teleport.accesslist.v1.CountAccessListMembersResponse - (*ListAccessListMembersRequest)(nil), // 13: teleport.accesslist.v1.ListAccessListMembersRequest - (*ListAccessListMembersResponse)(nil), // 14: teleport.accesslist.v1.ListAccessListMembersResponse - (*ListAllAccessListMembersRequest)(nil), // 15: teleport.accesslist.v1.ListAllAccessListMembersRequest - (*ListAllAccessListMembersResponse)(nil), // 16: teleport.accesslist.v1.ListAllAccessListMembersResponse - (*UpsertAccessListWithMembersRequest)(nil), // 17: teleport.accesslist.v1.UpsertAccessListWithMembersRequest - (*UpsertAccessListWithMembersResponse)(nil), // 18: teleport.accesslist.v1.UpsertAccessListWithMembersResponse - (*GetAccessListMemberRequest)(nil), // 19: teleport.accesslist.v1.GetAccessListMemberRequest - (*UpsertAccessListMemberRequest)(nil), // 20: teleport.accesslist.v1.UpsertAccessListMemberRequest - (*UpdateAccessListMemberRequest)(nil), // 21: teleport.accesslist.v1.UpdateAccessListMemberRequest - (*DeleteAccessListMemberRequest)(nil), // 22: teleport.accesslist.v1.DeleteAccessListMemberRequest - (*DeleteAllAccessListMembersForAccessListRequest)(nil), // 23: teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest - (*DeleteAllAccessListMembersRequest)(nil), // 24: teleport.accesslist.v1.DeleteAllAccessListMembersRequest - (*ListAccessListReviewsRequest)(nil), // 25: teleport.accesslist.v1.ListAccessListReviewsRequest - (*ListAccessListReviewsResponse)(nil), // 26: teleport.accesslist.v1.ListAccessListReviewsResponse - (*ListAllAccessListReviewsRequest)(nil), // 27: teleport.accesslist.v1.ListAllAccessListReviewsRequest - (*ListAllAccessListReviewsResponse)(nil), // 28: teleport.accesslist.v1.ListAllAccessListReviewsResponse - (*CreateAccessListReviewRequest)(nil), // 29: teleport.accesslist.v1.CreateAccessListReviewRequest - (*CreateAccessListReviewResponse)(nil), // 30: teleport.accesslist.v1.CreateAccessListReviewResponse - (*DeleteAccessListReviewRequest)(nil), // 31: teleport.accesslist.v1.DeleteAccessListReviewRequest - (*AccessRequestPromoteRequest)(nil), // 32: teleport.accesslist.v1.AccessRequestPromoteRequest - (*AccessRequestPromoteResponse)(nil), // 33: teleport.accesslist.v1.AccessRequestPromoteResponse - (*GetSuggestedAccessListsRequest)(nil), // 34: teleport.accesslist.v1.GetSuggestedAccessListsRequest - (*GetSuggestedAccessListsResponse)(nil), // 35: teleport.accesslist.v1.GetSuggestedAccessListsResponse - (*AccessList)(nil), // 36: teleport.accesslist.v1.AccessList - (*Member)(nil), // 37: teleport.accesslist.v1.Member - (*Review)(nil), // 38: teleport.accesslist.v1.Review - (*timestamppb.Timestamp)(nil), // 39: google.protobuf.Timestamp - (*types.AccessRequestV3)(nil), // 40: types.AccessRequestV3 - (*emptypb.Empty)(nil), // 41: google.protobuf.Empty + (*GetInheritedGrantsRequest)(nil), // 4: teleport.accesslist.v1.GetInheritedGrantsRequest + (*GetInheritedGrantsResponse)(nil), // 5: teleport.accesslist.v1.GetInheritedGrantsResponse + (*GetAccessListRequest)(nil), // 6: teleport.accesslist.v1.GetAccessListRequest + (*UpsertAccessListRequest)(nil), // 7: teleport.accesslist.v1.UpsertAccessListRequest + (*UpdateAccessListRequest)(nil), // 8: teleport.accesslist.v1.UpdateAccessListRequest + (*DeleteAccessListRequest)(nil), // 9: teleport.accesslist.v1.DeleteAccessListRequest + (*DeleteAllAccessListsRequest)(nil), // 10: teleport.accesslist.v1.DeleteAllAccessListsRequest + (*GetAccessListsToReviewRequest)(nil), // 11: teleport.accesslist.v1.GetAccessListsToReviewRequest + (*GetAccessListsToReviewResponse)(nil), // 12: teleport.accesslist.v1.GetAccessListsToReviewResponse + (*CountAccessListMembersRequest)(nil), // 13: teleport.accesslist.v1.CountAccessListMembersRequest + (*CountAccessListMembersResponse)(nil), // 14: teleport.accesslist.v1.CountAccessListMembersResponse + (*ListAccessListMembersRequest)(nil), // 15: teleport.accesslist.v1.ListAccessListMembersRequest + (*ListAccessListMembersResponse)(nil), // 16: teleport.accesslist.v1.ListAccessListMembersResponse + (*ListAllAccessListMembersRequest)(nil), // 17: teleport.accesslist.v1.ListAllAccessListMembersRequest + (*ListAllAccessListMembersResponse)(nil), // 18: teleport.accesslist.v1.ListAllAccessListMembersResponse + (*UpsertAccessListWithMembersRequest)(nil), // 19: teleport.accesslist.v1.UpsertAccessListWithMembersRequest + (*UpsertAccessListWithMembersResponse)(nil), // 20: teleport.accesslist.v1.UpsertAccessListWithMembersResponse + (*GetAccessListMemberRequest)(nil), // 21: teleport.accesslist.v1.GetAccessListMemberRequest + (*GetAccessListOwnersRequest)(nil), // 22: teleport.accesslist.v1.GetAccessListOwnersRequest + (*GetAccessListOwnersResponse)(nil), // 23: teleport.accesslist.v1.GetAccessListOwnersResponse + (*UpsertAccessListMemberRequest)(nil), // 24: teleport.accesslist.v1.UpsertAccessListMemberRequest + (*UpdateAccessListMemberRequest)(nil), // 25: teleport.accesslist.v1.UpdateAccessListMemberRequest + (*DeleteAccessListMemberRequest)(nil), // 26: teleport.accesslist.v1.DeleteAccessListMemberRequest + (*DeleteAllAccessListMembersForAccessListRequest)(nil), // 27: teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest + (*DeleteAllAccessListMembersRequest)(nil), // 28: teleport.accesslist.v1.DeleteAllAccessListMembersRequest + (*ListAccessListReviewsRequest)(nil), // 29: teleport.accesslist.v1.ListAccessListReviewsRequest + (*ListAccessListReviewsResponse)(nil), // 30: teleport.accesslist.v1.ListAccessListReviewsResponse + (*ListAllAccessListReviewsRequest)(nil), // 31: teleport.accesslist.v1.ListAllAccessListReviewsRequest + (*ListAllAccessListReviewsResponse)(nil), // 32: teleport.accesslist.v1.ListAllAccessListReviewsResponse + (*CreateAccessListReviewRequest)(nil), // 33: teleport.accesslist.v1.CreateAccessListReviewRequest + (*CreateAccessListReviewResponse)(nil), // 34: teleport.accesslist.v1.CreateAccessListReviewResponse + (*DeleteAccessListReviewRequest)(nil), // 35: teleport.accesslist.v1.DeleteAccessListReviewRequest + (*AccessRequestPromoteRequest)(nil), // 36: teleport.accesslist.v1.AccessRequestPromoteRequest + (*AccessRequestPromoteResponse)(nil), // 37: teleport.accesslist.v1.AccessRequestPromoteResponse + (*GetSuggestedAccessListsRequest)(nil), // 38: teleport.accesslist.v1.GetSuggestedAccessListsRequest + (*GetSuggestedAccessListsResponse)(nil), // 39: teleport.accesslist.v1.GetSuggestedAccessListsResponse + (*AccessList)(nil), // 40: teleport.accesslist.v1.AccessList + (*AccessListGrants)(nil), // 41: teleport.accesslist.v1.AccessListGrants + (*Member)(nil), // 42: teleport.accesslist.v1.Member + (*AccessListOwner)(nil), // 43: teleport.accesslist.v1.AccessListOwner + (*Review)(nil), // 44: teleport.accesslist.v1.Review + (*timestamppb.Timestamp)(nil), // 45: google.protobuf.Timestamp + (*types.AccessRequestV3)(nil), // 46: types.AccessRequestV3 + (*emptypb.Empty)(nil), // 47: google.protobuf.Empty } var file_teleport_accesslist_v1_accesslist_service_proto_depIdxs = []int32{ - 36, // 0: teleport.accesslist.v1.GetAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 36, // 1: teleport.accesslist.v1.ListAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 36, // 2: teleport.accesslist.v1.UpsertAccessListRequest.access_list:type_name -> teleport.accesslist.v1.AccessList - 36, // 3: teleport.accesslist.v1.UpdateAccessListRequest.access_list:type_name -> teleport.accesslist.v1.AccessList - 36, // 4: teleport.accesslist.v1.GetAccessListsToReviewResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 37, // 5: teleport.accesslist.v1.ListAccessListMembersResponse.members:type_name -> teleport.accesslist.v1.Member - 37, // 6: teleport.accesslist.v1.ListAllAccessListMembersResponse.members:type_name -> teleport.accesslist.v1.Member - 36, // 7: teleport.accesslist.v1.UpsertAccessListWithMembersRequest.access_list:type_name -> teleport.accesslist.v1.AccessList - 37, // 8: teleport.accesslist.v1.UpsertAccessListWithMembersRequest.members:type_name -> teleport.accesslist.v1.Member - 36, // 9: teleport.accesslist.v1.UpsertAccessListWithMembersResponse.access_list:type_name -> teleport.accesslist.v1.AccessList - 37, // 10: teleport.accesslist.v1.UpsertAccessListWithMembersResponse.members:type_name -> teleport.accesslist.v1.Member - 37, // 11: teleport.accesslist.v1.UpsertAccessListMemberRequest.member:type_name -> teleport.accesslist.v1.Member - 37, // 12: teleport.accesslist.v1.UpdateAccessListMemberRequest.member:type_name -> teleport.accesslist.v1.Member - 38, // 13: teleport.accesslist.v1.ListAccessListReviewsResponse.reviews:type_name -> teleport.accesslist.v1.Review - 38, // 14: teleport.accesslist.v1.ListAllAccessListReviewsResponse.reviews:type_name -> teleport.accesslist.v1.Review - 38, // 15: teleport.accesslist.v1.CreateAccessListReviewRequest.review:type_name -> teleport.accesslist.v1.Review - 39, // 16: teleport.accesslist.v1.CreateAccessListReviewResponse.next_audit_date:type_name -> google.protobuf.Timestamp - 40, // 17: teleport.accesslist.v1.AccessRequestPromoteResponse.access_request:type_name -> types.AccessRequestV3 - 36, // 18: teleport.accesslist.v1.GetSuggestedAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 0, // 19: teleport.accesslist.v1.AccessListService.GetAccessLists:input_type -> teleport.accesslist.v1.GetAccessListsRequest - 2, // 20: teleport.accesslist.v1.AccessListService.ListAccessLists:input_type -> teleport.accesslist.v1.ListAccessListsRequest - 4, // 21: teleport.accesslist.v1.AccessListService.GetAccessList:input_type -> teleport.accesslist.v1.GetAccessListRequest - 5, // 22: teleport.accesslist.v1.AccessListService.UpsertAccessList:input_type -> teleport.accesslist.v1.UpsertAccessListRequest - 6, // 23: teleport.accesslist.v1.AccessListService.UpdateAccessList:input_type -> teleport.accesslist.v1.UpdateAccessListRequest - 7, // 24: teleport.accesslist.v1.AccessListService.DeleteAccessList:input_type -> teleport.accesslist.v1.DeleteAccessListRequest - 8, // 25: teleport.accesslist.v1.AccessListService.DeleteAllAccessLists:input_type -> teleport.accesslist.v1.DeleteAllAccessListsRequest - 9, // 26: teleport.accesslist.v1.AccessListService.GetAccessListsToReview:input_type -> teleport.accesslist.v1.GetAccessListsToReviewRequest - 11, // 27: teleport.accesslist.v1.AccessListService.CountAccessListMembers:input_type -> teleport.accesslist.v1.CountAccessListMembersRequest - 13, // 28: teleport.accesslist.v1.AccessListService.ListAccessListMembers:input_type -> teleport.accesslist.v1.ListAccessListMembersRequest - 15, // 29: teleport.accesslist.v1.AccessListService.ListAllAccessListMembers:input_type -> teleport.accesslist.v1.ListAllAccessListMembersRequest - 19, // 30: teleport.accesslist.v1.AccessListService.GetAccessListMember:input_type -> teleport.accesslist.v1.GetAccessListMemberRequest - 20, // 31: teleport.accesslist.v1.AccessListService.UpsertAccessListMember:input_type -> teleport.accesslist.v1.UpsertAccessListMemberRequest - 21, // 32: teleport.accesslist.v1.AccessListService.UpdateAccessListMember:input_type -> teleport.accesslist.v1.UpdateAccessListMemberRequest - 22, // 33: teleport.accesslist.v1.AccessListService.DeleteAccessListMember:input_type -> teleport.accesslist.v1.DeleteAccessListMemberRequest - 23, // 34: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembersForAccessList:input_type -> teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest - 24, // 35: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembers:input_type -> teleport.accesslist.v1.DeleteAllAccessListMembersRequest - 17, // 36: teleport.accesslist.v1.AccessListService.UpsertAccessListWithMembers:input_type -> teleport.accesslist.v1.UpsertAccessListWithMembersRequest - 25, // 37: teleport.accesslist.v1.AccessListService.ListAccessListReviews:input_type -> teleport.accesslist.v1.ListAccessListReviewsRequest - 27, // 38: teleport.accesslist.v1.AccessListService.ListAllAccessListReviews:input_type -> teleport.accesslist.v1.ListAllAccessListReviewsRequest - 29, // 39: teleport.accesslist.v1.AccessListService.CreateAccessListReview:input_type -> teleport.accesslist.v1.CreateAccessListReviewRequest - 31, // 40: teleport.accesslist.v1.AccessListService.DeleteAccessListReview:input_type -> teleport.accesslist.v1.DeleteAccessListReviewRequest - 32, // 41: teleport.accesslist.v1.AccessListService.AccessRequestPromote:input_type -> teleport.accesslist.v1.AccessRequestPromoteRequest - 34, // 42: teleport.accesslist.v1.AccessListService.GetSuggestedAccessLists:input_type -> teleport.accesslist.v1.GetSuggestedAccessListsRequest - 1, // 43: teleport.accesslist.v1.AccessListService.GetAccessLists:output_type -> teleport.accesslist.v1.GetAccessListsResponse - 3, // 44: teleport.accesslist.v1.AccessListService.ListAccessLists:output_type -> teleport.accesslist.v1.ListAccessListsResponse - 36, // 45: teleport.accesslist.v1.AccessListService.GetAccessList:output_type -> teleport.accesslist.v1.AccessList - 36, // 46: teleport.accesslist.v1.AccessListService.UpsertAccessList:output_type -> teleport.accesslist.v1.AccessList - 36, // 47: teleport.accesslist.v1.AccessListService.UpdateAccessList:output_type -> teleport.accesslist.v1.AccessList - 41, // 48: teleport.accesslist.v1.AccessListService.DeleteAccessList:output_type -> google.protobuf.Empty - 41, // 49: teleport.accesslist.v1.AccessListService.DeleteAllAccessLists:output_type -> google.protobuf.Empty - 10, // 50: teleport.accesslist.v1.AccessListService.GetAccessListsToReview:output_type -> teleport.accesslist.v1.GetAccessListsToReviewResponse - 12, // 51: teleport.accesslist.v1.AccessListService.CountAccessListMembers:output_type -> teleport.accesslist.v1.CountAccessListMembersResponse - 14, // 52: teleport.accesslist.v1.AccessListService.ListAccessListMembers:output_type -> teleport.accesslist.v1.ListAccessListMembersResponse - 16, // 53: teleport.accesslist.v1.AccessListService.ListAllAccessListMembers:output_type -> teleport.accesslist.v1.ListAllAccessListMembersResponse - 37, // 54: teleport.accesslist.v1.AccessListService.GetAccessListMember:output_type -> teleport.accesslist.v1.Member - 37, // 55: teleport.accesslist.v1.AccessListService.UpsertAccessListMember:output_type -> teleport.accesslist.v1.Member - 37, // 56: teleport.accesslist.v1.AccessListService.UpdateAccessListMember:output_type -> teleport.accesslist.v1.Member - 41, // 57: teleport.accesslist.v1.AccessListService.DeleteAccessListMember:output_type -> google.protobuf.Empty - 41, // 58: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembersForAccessList:output_type -> google.protobuf.Empty - 41, // 59: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembers:output_type -> google.protobuf.Empty - 18, // 60: teleport.accesslist.v1.AccessListService.UpsertAccessListWithMembers:output_type -> teleport.accesslist.v1.UpsertAccessListWithMembersResponse - 26, // 61: teleport.accesslist.v1.AccessListService.ListAccessListReviews:output_type -> teleport.accesslist.v1.ListAccessListReviewsResponse - 28, // 62: teleport.accesslist.v1.AccessListService.ListAllAccessListReviews:output_type -> teleport.accesslist.v1.ListAllAccessListReviewsResponse - 30, // 63: teleport.accesslist.v1.AccessListService.CreateAccessListReview:output_type -> teleport.accesslist.v1.CreateAccessListReviewResponse - 41, // 64: teleport.accesslist.v1.AccessListService.DeleteAccessListReview:output_type -> google.protobuf.Empty - 33, // 65: teleport.accesslist.v1.AccessListService.AccessRequestPromote:output_type -> teleport.accesslist.v1.AccessRequestPromoteResponse - 35, // 66: teleport.accesslist.v1.AccessListService.GetSuggestedAccessLists:output_type -> teleport.accesslist.v1.GetSuggestedAccessListsResponse - 43, // [43:67] is the sub-list for method output_type - 19, // [19:43] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 40, // 0: teleport.accesslist.v1.GetAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 40, // 1: teleport.accesslist.v1.ListAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 41, // 2: teleport.accesslist.v1.GetInheritedGrantsResponse.grants:type_name -> teleport.accesslist.v1.AccessListGrants + 40, // 3: teleport.accesslist.v1.UpsertAccessListRequest.access_list:type_name -> teleport.accesslist.v1.AccessList + 40, // 4: teleport.accesslist.v1.UpdateAccessListRequest.access_list:type_name -> teleport.accesslist.v1.AccessList + 40, // 5: teleport.accesslist.v1.GetAccessListsToReviewResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 42, // 6: teleport.accesslist.v1.ListAccessListMembersResponse.members:type_name -> teleport.accesslist.v1.Member + 42, // 7: teleport.accesslist.v1.ListAllAccessListMembersResponse.members:type_name -> teleport.accesslist.v1.Member + 40, // 8: teleport.accesslist.v1.UpsertAccessListWithMembersRequest.access_list:type_name -> teleport.accesslist.v1.AccessList + 42, // 9: teleport.accesslist.v1.UpsertAccessListWithMembersRequest.members:type_name -> teleport.accesslist.v1.Member + 40, // 10: teleport.accesslist.v1.UpsertAccessListWithMembersResponse.access_list:type_name -> teleport.accesslist.v1.AccessList + 42, // 11: teleport.accesslist.v1.UpsertAccessListWithMembersResponse.members:type_name -> teleport.accesslist.v1.Member + 43, // 12: teleport.accesslist.v1.GetAccessListOwnersResponse.owners:type_name -> teleport.accesslist.v1.AccessListOwner + 42, // 13: teleport.accesslist.v1.UpsertAccessListMemberRequest.member:type_name -> teleport.accesslist.v1.Member + 42, // 14: teleport.accesslist.v1.UpdateAccessListMemberRequest.member:type_name -> teleport.accesslist.v1.Member + 44, // 15: teleport.accesslist.v1.ListAccessListReviewsResponse.reviews:type_name -> teleport.accesslist.v1.Review + 44, // 16: teleport.accesslist.v1.ListAllAccessListReviewsResponse.reviews:type_name -> teleport.accesslist.v1.Review + 44, // 17: teleport.accesslist.v1.CreateAccessListReviewRequest.review:type_name -> teleport.accesslist.v1.Review + 45, // 18: teleport.accesslist.v1.CreateAccessListReviewResponse.next_audit_date:type_name -> google.protobuf.Timestamp + 46, // 19: teleport.accesslist.v1.AccessRequestPromoteResponse.access_request:type_name -> types.AccessRequestV3 + 40, // 20: teleport.accesslist.v1.GetSuggestedAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 0, // 21: teleport.accesslist.v1.AccessListService.GetAccessLists:input_type -> teleport.accesslist.v1.GetAccessListsRequest + 2, // 22: teleport.accesslist.v1.AccessListService.ListAccessLists:input_type -> teleport.accesslist.v1.ListAccessListsRequest + 6, // 23: teleport.accesslist.v1.AccessListService.GetAccessList:input_type -> teleport.accesslist.v1.GetAccessListRequest + 7, // 24: teleport.accesslist.v1.AccessListService.UpsertAccessList:input_type -> teleport.accesslist.v1.UpsertAccessListRequest + 8, // 25: teleport.accesslist.v1.AccessListService.UpdateAccessList:input_type -> teleport.accesslist.v1.UpdateAccessListRequest + 9, // 26: teleport.accesslist.v1.AccessListService.DeleteAccessList:input_type -> teleport.accesslist.v1.DeleteAccessListRequest + 10, // 27: teleport.accesslist.v1.AccessListService.DeleteAllAccessLists:input_type -> teleport.accesslist.v1.DeleteAllAccessListsRequest + 11, // 28: teleport.accesslist.v1.AccessListService.GetAccessListsToReview:input_type -> teleport.accesslist.v1.GetAccessListsToReviewRequest + 13, // 29: teleport.accesslist.v1.AccessListService.CountAccessListMembers:input_type -> teleport.accesslist.v1.CountAccessListMembersRequest + 15, // 30: teleport.accesslist.v1.AccessListService.ListAccessListMembers:input_type -> teleport.accesslist.v1.ListAccessListMembersRequest + 17, // 31: teleport.accesslist.v1.AccessListService.ListAllAccessListMembers:input_type -> teleport.accesslist.v1.ListAllAccessListMembersRequest + 21, // 32: teleport.accesslist.v1.AccessListService.GetAccessListMember:input_type -> teleport.accesslist.v1.GetAccessListMemberRequest + 22, // 33: teleport.accesslist.v1.AccessListService.GetAccessListOwners:input_type -> teleport.accesslist.v1.GetAccessListOwnersRequest + 24, // 34: teleport.accesslist.v1.AccessListService.UpsertAccessListMember:input_type -> teleport.accesslist.v1.UpsertAccessListMemberRequest + 25, // 35: teleport.accesslist.v1.AccessListService.UpdateAccessListMember:input_type -> teleport.accesslist.v1.UpdateAccessListMemberRequest + 26, // 36: teleport.accesslist.v1.AccessListService.DeleteAccessListMember:input_type -> teleport.accesslist.v1.DeleteAccessListMemberRequest + 27, // 37: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembersForAccessList:input_type -> teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest + 28, // 38: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembers:input_type -> teleport.accesslist.v1.DeleteAllAccessListMembersRequest + 19, // 39: teleport.accesslist.v1.AccessListService.UpsertAccessListWithMembers:input_type -> teleport.accesslist.v1.UpsertAccessListWithMembersRequest + 29, // 40: teleport.accesslist.v1.AccessListService.ListAccessListReviews:input_type -> teleport.accesslist.v1.ListAccessListReviewsRequest + 31, // 41: teleport.accesslist.v1.AccessListService.ListAllAccessListReviews:input_type -> teleport.accesslist.v1.ListAllAccessListReviewsRequest + 33, // 42: teleport.accesslist.v1.AccessListService.CreateAccessListReview:input_type -> teleport.accesslist.v1.CreateAccessListReviewRequest + 35, // 43: teleport.accesslist.v1.AccessListService.DeleteAccessListReview:input_type -> teleport.accesslist.v1.DeleteAccessListReviewRequest + 36, // 44: teleport.accesslist.v1.AccessListService.AccessRequestPromote:input_type -> teleport.accesslist.v1.AccessRequestPromoteRequest + 38, // 45: teleport.accesslist.v1.AccessListService.GetSuggestedAccessLists:input_type -> teleport.accesslist.v1.GetSuggestedAccessListsRequest + 4, // 46: teleport.accesslist.v1.AccessListService.GetInheritedGrants:input_type -> teleport.accesslist.v1.GetInheritedGrantsRequest + 1, // 47: teleport.accesslist.v1.AccessListService.GetAccessLists:output_type -> teleport.accesslist.v1.GetAccessListsResponse + 3, // 48: teleport.accesslist.v1.AccessListService.ListAccessLists:output_type -> teleport.accesslist.v1.ListAccessListsResponse + 40, // 49: teleport.accesslist.v1.AccessListService.GetAccessList:output_type -> teleport.accesslist.v1.AccessList + 40, // 50: teleport.accesslist.v1.AccessListService.UpsertAccessList:output_type -> teleport.accesslist.v1.AccessList + 40, // 51: teleport.accesslist.v1.AccessListService.UpdateAccessList:output_type -> teleport.accesslist.v1.AccessList + 47, // 52: teleport.accesslist.v1.AccessListService.DeleteAccessList:output_type -> google.protobuf.Empty + 47, // 53: teleport.accesslist.v1.AccessListService.DeleteAllAccessLists:output_type -> google.protobuf.Empty + 12, // 54: teleport.accesslist.v1.AccessListService.GetAccessListsToReview:output_type -> teleport.accesslist.v1.GetAccessListsToReviewResponse + 14, // 55: teleport.accesslist.v1.AccessListService.CountAccessListMembers:output_type -> teleport.accesslist.v1.CountAccessListMembersResponse + 16, // 56: teleport.accesslist.v1.AccessListService.ListAccessListMembers:output_type -> teleport.accesslist.v1.ListAccessListMembersResponse + 18, // 57: teleport.accesslist.v1.AccessListService.ListAllAccessListMembers:output_type -> teleport.accesslist.v1.ListAllAccessListMembersResponse + 42, // 58: teleport.accesslist.v1.AccessListService.GetAccessListMember:output_type -> teleport.accesslist.v1.Member + 23, // 59: teleport.accesslist.v1.AccessListService.GetAccessListOwners:output_type -> teleport.accesslist.v1.GetAccessListOwnersResponse + 42, // 60: teleport.accesslist.v1.AccessListService.UpsertAccessListMember:output_type -> teleport.accesslist.v1.Member + 42, // 61: teleport.accesslist.v1.AccessListService.UpdateAccessListMember:output_type -> teleport.accesslist.v1.Member + 47, // 62: teleport.accesslist.v1.AccessListService.DeleteAccessListMember:output_type -> google.protobuf.Empty + 47, // 63: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembersForAccessList:output_type -> google.protobuf.Empty + 47, // 64: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembers:output_type -> google.protobuf.Empty + 20, // 65: teleport.accesslist.v1.AccessListService.UpsertAccessListWithMembers:output_type -> teleport.accesslist.v1.UpsertAccessListWithMembersResponse + 30, // 66: teleport.accesslist.v1.AccessListService.ListAccessListReviews:output_type -> teleport.accesslist.v1.ListAccessListReviewsResponse + 32, // 67: teleport.accesslist.v1.AccessListService.ListAllAccessListReviews:output_type -> teleport.accesslist.v1.ListAllAccessListReviewsResponse + 34, // 68: teleport.accesslist.v1.AccessListService.CreateAccessListReview:output_type -> teleport.accesslist.v1.CreateAccessListReviewResponse + 47, // 69: teleport.accesslist.v1.AccessListService.DeleteAccessListReview:output_type -> google.protobuf.Empty + 37, // 70: teleport.accesslist.v1.AccessListService.AccessRequestPromote:output_type -> teleport.accesslist.v1.AccessRequestPromoteResponse + 39, // 71: teleport.accesslist.v1.AccessListService.GetSuggestedAccessLists:output_type -> teleport.accesslist.v1.GetSuggestedAccessListsResponse + 5, // 72: teleport.accesslist.v1.AccessListService.GetInheritedGrants:output_type -> teleport.accesslist.v1.GetInheritedGrantsResponse + 47, // [47:73] is the sub-list for method output_type + 21, // [21:47] is the sub-list for method input_type + 21, // [21:21] is the sub-list for extension type_name + 21, // [21:21] is the sub-list for extension extendee + 0, // [0:21] is the sub-list for field type_name } func init() { file_teleport_accesslist_v1_accesslist_service_proto_init() } @@ -2468,7 +2718,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_teleport_accesslist_v1_accesslist_service_proto_rawDesc, NumEnums: 0, - NumMessages: 36, + NumMessages: 40, NumExtensions: 0, NumServices: 1, }, diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go index acadf7f48426..3bdae0029e54 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go @@ -46,6 +46,7 @@ const ( AccessListService_ListAccessListMembers_FullMethodName = "/teleport.accesslist.v1.AccessListService/ListAccessListMembers" AccessListService_ListAllAccessListMembers_FullMethodName = "/teleport.accesslist.v1.AccessListService/ListAllAccessListMembers" AccessListService_GetAccessListMember_FullMethodName = "/teleport.accesslist.v1.AccessListService/GetAccessListMember" + AccessListService_GetAccessListOwners_FullMethodName = "/teleport.accesslist.v1.AccessListService/GetAccessListOwners" AccessListService_UpsertAccessListMember_FullMethodName = "/teleport.accesslist.v1.AccessListService/UpsertAccessListMember" AccessListService_UpdateAccessListMember_FullMethodName = "/teleport.accesslist.v1.AccessListService/UpdateAccessListMember" AccessListService_DeleteAccessListMember_FullMethodName = "/teleport.accesslist.v1.AccessListService/DeleteAccessListMember" @@ -58,6 +59,7 @@ const ( AccessListService_DeleteAccessListReview_FullMethodName = "/teleport.accesslist.v1.AccessListService/DeleteAccessListReview" AccessListService_AccessRequestPromote_FullMethodName = "/teleport.accesslist.v1.AccessListService/AccessRequestPromote" AccessListService_GetSuggestedAccessLists_FullMethodName = "/teleport.accesslist.v1.AccessListService/GetSuggestedAccessLists" + AccessListService_GetInheritedGrants_FullMethodName = "/teleport.accesslist.v1.AccessListService/GetInheritedGrants" ) // AccessListServiceClient is the client API for AccessListService service. @@ -93,6 +95,9 @@ type AccessListServiceClient interface { ListAllAccessListMembers(ctx context.Context, in *ListAllAccessListMembersRequest, opts ...grpc.CallOption) (*ListAllAccessListMembersResponse, error) // GetAccessListMember returns the specified access list member resource. GetAccessListMember(ctx context.Context, in *GetAccessListMemberRequest, opts ...grpc.CallOption) (*Member, error) + // GetAccessListOwners returns a list of all owners in an Access List, + // including those inherited from nested Access Lists. + GetAccessListOwners(ctx context.Context, in *GetAccessListOwnersRequest, opts ...grpc.CallOption) (*GetAccessListOwnersResponse, error) // UpsertAccessListMember creates or updates an access list member resource. UpsertAccessListMember(ctx context.Context, in *UpsertAccessListMemberRequest, opts ...grpc.CallOption) (*Member, error) // UpdateAccessListMember conditionally updates an access list member resource. @@ -125,6 +130,8 @@ type AccessListServiceClient interface { // GetSuggestedAccessLists returns suggested access lists for an access // request. GetSuggestedAccessLists(ctx context.Context, in *GetSuggestedAccessListsRequest, opts ...grpc.CallOption) (*GetSuggestedAccessListsResponse, error) + // GetInheritedGrants returns the inherited grants for an access list. + GetInheritedGrants(ctx context.Context, in *GetInheritedGrantsRequest, opts ...grpc.CallOption) (*GetInheritedGrantsResponse, error) } type accessListServiceClient struct { @@ -255,6 +262,16 @@ func (c *accessListServiceClient) GetAccessListMember(ctx context.Context, in *G return out, nil } +func (c *accessListServiceClient) GetAccessListOwners(ctx context.Context, in *GetAccessListOwnersRequest, opts ...grpc.CallOption) (*GetAccessListOwnersResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetAccessListOwnersResponse) + err := c.cc.Invoke(ctx, AccessListService_GetAccessListOwners_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *accessListServiceClient) UpsertAccessListMember(ctx context.Context, in *UpsertAccessListMemberRequest, opts ...grpc.CallOption) (*Member, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(Member) @@ -375,6 +392,16 @@ func (c *accessListServiceClient) GetSuggestedAccessLists(ctx context.Context, i return out, nil } +func (c *accessListServiceClient) GetInheritedGrants(ctx context.Context, in *GetInheritedGrantsRequest, opts ...grpc.CallOption) (*GetInheritedGrantsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetInheritedGrantsResponse) + err := c.cc.Invoke(ctx, AccessListService_GetInheritedGrants_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // AccessListServiceServer is the server API for AccessListService service. // All implementations must embed UnimplementedAccessListServiceServer // for forward compatibility. @@ -408,6 +435,9 @@ type AccessListServiceServer interface { ListAllAccessListMembers(context.Context, *ListAllAccessListMembersRequest) (*ListAllAccessListMembersResponse, error) // GetAccessListMember returns the specified access list member resource. GetAccessListMember(context.Context, *GetAccessListMemberRequest) (*Member, error) + // GetAccessListOwners returns a list of all owners in an Access List, + // including those inherited from nested Access Lists. + GetAccessListOwners(context.Context, *GetAccessListOwnersRequest) (*GetAccessListOwnersResponse, error) // UpsertAccessListMember creates or updates an access list member resource. UpsertAccessListMember(context.Context, *UpsertAccessListMemberRequest) (*Member, error) // UpdateAccessListMember conditionally updates an access list member resource. @@ -440,6 +470,8 @@ type AccessListServiceServer interface { // GetSuggestedAccessLists returns suggested access lists for an access // request. GetSuggestedAccessLists(context.Context, *GetSuggestedAccessListsRequest) (*GetSuggestedAccessListsResponse, error) + // GetInheritedGrants returns the inherited grants for an access list. + GetInheritedGrants(context.Context, *GetInheritedGrantsRequest) (*GetInheritedGrantsResponse, error) mustEmbedUnimplementedAccessListServiceServer() } @@ -486,6 +518,9 @@ func (UnimplementedAccessListServiceServer) ListAllAccessListMembers(context.Con func (UnimplementedAccessListServiceServer) GetAccessListMember(context.Context, *GetAccessListMemberRequest) (*Member, error) { return nil, status.Errorf(codes.Unimplemented, "method GetAccessListMember not implemented") } +func (UnimplementedAccessListServiceServer) GetAccessListOwners(context.Context, *GetAccessListOwnersRequest) (*GetAccessListOwnersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAccessListOwners not implemented") +} func (UnimplementedAccessListServiceServer) UpsertAccessListMember(context.Context, *UpsertAccessListMemberRequest) (*Member, error) { return nil, status.Errorf(codes.Unimplemented, "method UpsertAccessListMember not implemented") } @@ -522,6 +557,9 @@ func (UnimplementedAccessListServiceServer) AccessRequestPromote(context.Context func (UnimplementedAccessListServiceServer) GetSuggestedAccessLists(context.Context, *GetSuggestedAccessListsRequest) (*GetSuggestedAccessListsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetSuggestedAccessLists not implemented") } +func (UnimplementedAccessListServiceServer) GetInheritedGrants(context.Context, *GetInheritedGrantsRequest) (*GetInheritedGrantsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetInheritedGrants not implemented") +} func (UnimplementedAccessListServiceServer) mustEmbedUnimplementedAccessListServiceServer() {} func (UnimplementedAccessListServiceServer) testEmbeddedByValue() {} @@ -759,6 +797,24 @@ func _AccessListService_GetAccessListMember_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _AccessListService_GetAccessListOwners_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAccessListOwnersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AccessListServiceServer).GetAccessListOwners(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AccessListService_GetAccessListOwners_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AccessListServiceServer).GetAccessListOwners(ctx, req.(*GetAccessListOwnersRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _AccessListService_UpsertAccessListMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UpsertAccessListMemberRequest) if err := dec(in); err != nil { @@ -975,6 +1031,24 @@ func _AccessListService_GetSuggestedAccessLists_Handler(srv interface{}, ctx con return interceptor(ctx, in, info, handler) } +func _AccessListService_GetInheritedGrants_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetInheritedGrantsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AccessListServiceServer).GetInheritedGrants(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AccessListService_GetInheritedGrants_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AccessListServiceServer).GetInheritedGrants(ctx, req.(*GetInheritedGrantsRequest)) + } + return interceptor(ctx, in, info, handler) +} + // AccessListService_ServiceDesc is the grpc.ServiceDesc for AccessListService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1030,6 +1104,10 @@ var AccessListService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetAccessListMember", Handler: _AccessListService_GetAccessListMember_Handler, }, + { + MethodName: "GetAccessListOwners", + Handler: _AccessListService_GetAccessListOwners_Handler, + }, { MethodName: "UpsertAccessListMember", Handler: _AccessListService_UpsertAccessListMember_Handler, @@ -1078,6 +1156,10 @@ var AccessListService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetSuggestedAccessLists", Handler: _AccessListService_GetSuggestedAccessLists_Handler, }, + { + MethodName: "GetInheritedGrants", + Handler: _AccessListService_GetInheritedGrants_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "teleport/accesslist/v1/accesslist_service.proto", diff --git a/api/gen/proto/go/usageevents/v1/usageevents.pb.go b/api/gen/proto/go/usageevents/v1/usageevents.pb.go index c7b881bbf748..94e64af52d79 100644 --- a/api/gen/proto/go/usageevents/v1/usageevents.pb.go +++ b/api/gen/proto/go/usageevents/v1/usageevents.pb.go @@ -6,6 +6,7 @@ package usageeventsv1 import ( fmt "fmt" proto "github.com/gogo/protobuf/proto" + v1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" io "io" math "math" math_bits "math/bits" @@ -3153,6 +3154,64 @@ func (m *AccessListMetadata) GetId() string { return "" } +// AccessListMemberMetadata contains common metadata for Access List Member related events. +type AccessListMemberMetadata struct { + // name is the name of the member. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // membership_kind is the type of membership in the parent access list. + MembershipKind v1.MembershipKind `protobuf:"varint,2,opt,name=membership_kind,json=membershipKind,proto3,enum=teleport.accesslist.v1.MembershipKind" json:"membership_kind,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AccessListMemberMetadata) Reset() { *m = AccessListMemberMetadata{} } +func (m *AccessListMemberMetadata) String() string { return proto.CompactTextString(m) } +func (*AccessListMemberMetadata) ProtoMessage() {} +func (*AccessListMemberMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_94cf2ca1c69fd564, []int{44} +} +func (m *AccessListMemberMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AccessListMemberMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AccessListMemberMetadata.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 *AccessListMemberMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_AccessListMemberMetadata.Merge(m, src) +} +func (m *AccessListMemberMetadata) XXX_Size() int { + return m.Size() +} +func (m *AccessListMemberMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_AccessListMemberMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_AccessListMemberMetadata proto.InternalMessageInfo + +func (m *AccessListMemberMetadata) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *AccessListMemberMetadata) GetMembershipKind() v1.MembershipKind { + if m != nil { + return m.MembershipKind + } + return v1.MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED +} + // AccessListCreate is an event that is emitted when an access list is created. type AccessListCreate struct { Metadata *AccessListMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` @@ -3165,7 +3224,7 @@ func (m *AccessListCreate) Reset() { *m = AccessListCreate{} } func (m *AccessListCreate) String() string { return proto.CompactTextString(m) } func (*AccessListCreate) ProtoMessage() {} func (*AccessListCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{44} + return fileDescriptor_94cf2ca1c69fd564, []int{45} } func (m *AccessListCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3213,7 +3272,7 @@ func (m *AccessListUpdate) Reset() { *m = AccessListUpdate{} } func (m *AccessListUpdate) String() string { return proto.CompactTextString(m) } func (*AccessListUpdate) ProtoMessage() {} func (*AccessListUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{45} + return fileDescriptor_94cf2ca1c69fd564, []int{46} } func (m *AccessListUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3261,7 +3320,7 @@ func (m *AccessListDelete) Reset() { *m = AccessListDelete{} } func (m *AccessListDelete) String() string { return proto.CompactTextString(m) } func (*AccessListDelete) ProtoMessage() {} func (*AccessListDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{46} + return fileDescriptor_94cf2ca1c69fd564, []int{47} } func (m *AccessListDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3299,17 +3358,18 @@ func (m *AccessListDelete) GetMetadata() *AccessListMetadata { // AccessListMemberCreate is an event that is emitted when a member is added to an access list. type AccessListMemberCreate struct { - Metadata *AccessListMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Metadata *AccessListMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + MemberMetadata *AccessListMemberMetadata `protobuf:"bytes,2,opt,name=member_metadata,json=memberMetadata,proto3" json:"member_metadata,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AccessListMemberCreate) Reset() { *m = AccessListMemberCreate{} } func (m *AccessListMemberCreate) String() string { return proto.CompactTextString(m) } func (*AccessListMemberCreate) ProtoMessage() {} func (*AccessListMemberCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{47} + return fileDescriptor_94cf2ca1c69fd564, []int{48} } func (m *AccessListMemberCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3345,19 +3405,27 @@ func (m *AccessListMemberCreate) GetMetadata() *AccessListMetadata { return nil } +func (m *AccessListMemberCreate) GetMemberMetadata() *AccessListMemberMetadata { + if m != nil { + return m.MemberMetadata + } + return nil +} + // AccessListMemberCreate is an event that is emitted when a member is updated in an access list. type AccessListMemberUpdate struct { - Metadata *AccessListMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Metadata *AccessListMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + MemberMetadata *AccessListMemberMetadata `protobuf:"bytes,2,opt,name=member_metadata,json=memberMetadata,proto3" json:"member_metadata,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AccessListMemberUpdate) Reset() { *m = AccessListMemberUpdate{} } func (m *AccessListMemberUpdate) String() string { return proto.CompactTextString(m) } func (*AccessListMemberUpdate) ProtoMessage() {} func (*AccessListMemberUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{48} + return fileDescriptor_94cf2ca1c69fd564, []int{49} } func (m *AccessListMemberUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3393,19 +3461,27 @@ func (m *AccessListMemberUpdate) GetMetadata() *AccessListMetadata { return nil } +func (m *AccessListMemberUpdate) GetMemberMetadata() *AccessListMemberMetadata { + if m != nil { + return m.MemberMetadata + } + return nil +} + // AccessListMemberDelete is an event that is emitted when a member is removed from an access list. type AccessListMemberDelete struct { - Metadata *AccessListMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Metadata *AccessListMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + MemberMetadata *AccessListMemberMetadata `protobuf:"bytes,2,opt,name=member_metadata,json=memberMetadata,proto3" json:"member_metadata,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AccessListMemberDelete) Reset() { *m = AccessListMemberDelete{} } func (m *AccessListMemberDelete) String() string { return proto.CompactTextString(m) } func (*AccessListMemberDelete) ProtoMessage() {} func (*AccessListMemberDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{49} + return fileDescriptor_94cf2ca1c69fd564, []int{50} } func (m *AccessListMemberDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3441,23 +3517,34 @@ func (m *AccessListMemberDelete) GetMetadata() *AccessListMetadata { return nil } +func (m *AccessListMemberDelete) GetMemberMetadata() *AccessListMemberMetadata { + if m != nil { + return m.MemberMetadata + } + return nil +} + // AccessListGrantsToUser is an event that is emitted when access list permissions are granted to a user // on login. type AccessListGrantsToUser struct { // count_roles_granted is the number of roles granted to a user. CountRolesGranted int32 `protobuf:"varint,1,opt,name=count_roles_granted,json=countRolesGranted,proto3" json:"count_roles_granted,omitempty"` + // count_inherited_roles_granted is the number of roles granted to a user inherited from nested access lists. + CountInheritedRolesGranted int32 `protobuf:"varint,3,opt,name=count_inherited_roles_granted,json=countInheritedRolesGranted,proto3" json:"count_inherited_roles_granted,omitempty"` // count_traits_granted is the number of traits granted to a user. - CountTraitsGranted int32 `protobuf:"varint,2,opt,name=count_traits_granted,json=countTraitsGranted,proto3" json:"count_traits_granted,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + CountTraitsGranted int32 `protobuf:"varint,2,opt,name=count_traits_granted,json=countTraitsGranted,proto3" json:"count_traits_granted,omitempty"` + // count_inherited_traits_granted is the number of traits granted to a user inherited from nested access lists. + CountInheritedTraitsGranted int32 `protobuf:"varint,4,opt,name=count_inherited_traits_granted,json=countInheritedTraitsGranted,proto3" json:"count_inherited_traits_granted,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AccessListGrantsToUser) Reset() { *m = AccessListGrantsToUser{} } func (m *AccessListGrantsToUser) String() string { return proto.CompactTextString(m) } func (*AccessListGrantsToUser) ProtoMessage() {} func (*AccessListGrantsToUser) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{50} + return fileDescriptor_94cf2ca1c69fd564, []int{51} } func (m *AccessListGrantsToUser) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3493,6 +3580,13 @@ func (m *AccessListGrantsToUser) GetCountRolesGranted() int32 { return 0 } +func (m *AccessListGrantsToUser) GetCountInheritedRolesGranted() int32 { + if m != nil { + return m.CountInheritedRolesGranted + } + return 0 +} + func (m *AccessListGrantsToUser) GetCountTraitsGranted() int32 { if m != nil { return m.CountTraitsGranted @@ -3500,6 +3594,13 @@ func (m *AccessListGrantsToUser) GetCountTraitsGranted() int32 { return 0 } +func (m *AccessListGrantsToUser) GetCountInheritedTraitsGranted() int32 { + if m != nil { + return m.CountInheritedTraitsGranted + } + return 0 +} + // AccessListReviewCreate is an event that is emitted when an access list review is created. type AccessListReviewCreate struct { Metadata *AccessListMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` @@ -3522,7 +3623,7 @@ func (m *AccessListReviewCreate) Reset() { *m = AccessListReviewCreate{} func (m *AccessListReviewCreate) String() string { return proto.CompactTextString(m) } func (*AccessListReviewCreate) ProtoMessage() {} func (*AccessListReviewCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{51} + return fileDescriptor_94cf2ca1c69fd564, []int{52} } func (m *AccessListReviewCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3607,7 +3708,7 @@ func (m *AccessListReviewDelete) Reset() { *m = AccessListReviewDelete{} func (m *AccessListReviewDelete) String() string { return proto.CompactTextString(m) } func (*AccessListReviewDelete) ProtoMessage() {} func (*AccessListReviewDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{52} + return fileDescriptor_94cf2ca1c69fd564, []int{53} } func (m *AccessListReviewDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3669,7 +3770,7 @@ func (m *IntegrationEnrollMetadata) Reset() { *m = IntegrationEnrollMeta func (m *IntegrationEnrollMetadata) String() string { return proto.CompactTextString(m) } func (*IntegrationEnrollMetadata) ProtoMessage() {} func (*IntegrationEnrollMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{53} + return fileDescriptor_94cf2ca1c69fd564, []int{54} } func (m *IntegrationEnrollMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3732,7 +3833,7 @@ func (m *UIIntegrationEnrollStartEvent) Reset() { *m = UIIntegrationEnro func (m *UIIntegrationEnrollStartEvent) String() string { return proto.CompactTextString(m) } func (*UIIntegrationEnrollStartEvent) ProtoMessage() {} func (*UIIntegrationEnrollStartEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{54} + return fileDescriptor_94cf2ca1c69fd564, []int{55} } func (m *UIIntegrationEnrollStartEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3781,7 +3882,7 @@ func (m *UIIntegrationEnrollCompleteEvent) Reset() { *m = UIIntegrationE func (m *UIIntegrationEnrollCompleteEvent) String() string { return proto.CompactTextString(m) } func (*UIIntegrationEnrollCompleteEvent) ProtoMessage() {} func (*UIIntegrationEnrollCompleteEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{55} + return fileDescriptor_94cf2ca1c69fd564, []int{56} } func (m *UIIntegrationEnrollCompleteEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3837,7 +3938,7 @@ func (m *ResourceCreateEvent) Reset() { *m = ResourceCreateEvent{} } func (m *ResourceCreateEvent) String() string { return proto.CompactTextString(m) } func (*ResourceCreateEvent) ProtoMessage() {} func (*ResourceCreateEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{56} + return fileDescriptor_94cf2ca1c69fd564, []int{57} } func (m *ResourceCreateEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3909,7 +4010,7 @@ func (m *DiscoveredDatabaseMetadata) Reset() { *m = DiscoveredDatabaseMe func (m *DiscoveredDatabaseMetadata) String() string { return proto.CompactTextString(m) } func (*DiscoveredDatabaseMetadata) ProtoMessage() {} func (*DiscoveredDatabaseMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{57} + return fileDescriptor_94cf2ca1c69fd564, []int{58} } func (m *DiscoveredDatabaseMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3979,7 +4080,7 @@ func (m *FeatureRecommendationEvent) Reset() { *m = FeatureRecommendatio func (m *FeatureRecommendationEvent) String() string { return proto.CompactTextString(m) } func (*FeatureRecommendationEvent) ProtoMessage() {} func (*FeatureRecommendationEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{58} + return fileDescriptor_94cf2ca1c69fd564, []int{59} } func (m *FeatureRecommendationEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4049,7 +4150,7 @@ 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{59} + return fileDescriptor_94cf2ca1c69fd564, []int{60} } func (m *TAGExecuteQueryEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4133,7 +4234,7 @@ func (m *AccessGraphAWSScanEvent) Reset() { *m = AccessGraphAWSScanEvent func (m *AccessGraphAWSScanEvent) String() string { return proto.CompactTextString(m) } func (*AccessGraphAWSScanEvent) ProtoMessage() {} func (*AccessGraphAWSScanEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{60} + return fileDescriptor_94cf2ca1c69fd564, []int{61} } func (m *AccessGraphAWSScanEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4254,7 +4355,7 @@ func (m *UIAccessGraphCrownJewelDiffViewEvent) Reset() { *m = UIAccessGr func (m *UIAccessGraphCrownJewelDiffViewEvent) String() string { return proto.CompactTextString(m) } func (*UIAccessGraphCrownJewelDiffViewEvent) ProtoMessage() {} func (*UIAccessGraphCrownJewelDiffViewEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{61} + return fileDescriptor_94cf2ca1c69fd564, []int{62} } func (m *UIAccessGraphCrownJewelDiffViewEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4312,7 +4413,7 @@ func (m *SecurityReportGetResultEvent) Reset() { *m = SecurityReportGetR func (m *SecurityReportGetResultEvent) String() string { return proto.CompactTextString(m) } func (*SecurityReportGetResultEvent) ProtoMessage() {} func (*SecurityReportGetResultEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{62} + return fileDescriptor_94cf2ca1c69fd564, []int{63} } func (m *SecurityReportGetResultEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4373,7 +4474,7 @@ func (m *DiscoveryFetchEvent) Reset() { *m = DiscoveryFetchEvent{} } func (m *DiscoveryFetchEvent) String() string { return proto.CompactTextString(m) } func (*DiscoveryFetchEvent) ProtoMessage() {} func (*DiscoveryFetchEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{63} + return fileDescriptor_94cf2ca1c69fd564, []int{64} } func (m *DiscoveryFetchEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4452,7 +4553,7 @@ func (m *UserTaskStateEvent) Reset() { *m = UserTaskStateEvent{} } func (m *UserTaskStateEvent) String() string { return proto.CompactTextString(m) } func (*UserTaskStateEvent) ProtoMessage() {} func (*UserTaskStateEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{64} + return fileDescriptor_94cf2ca1c69fd564, []int{65} } func (m *UserTaskStateEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4583,7 +4684,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{65} + return fileDescriptor_94cf2ca1c69fd564, []int{66} } func (m *UsageEventOneOf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5395,6 +5496,7 @@ func init() { proto.RegisterType((*AssistAccessRequest)(nil), "teleport.usageevents.v1.AssistAccessRequest") proto.RegisterType((*AssistAction)(nil), "teleport.usageevents.v1.AssistAction") proto.RegisterType((*AccessListMetadata)(nil), "teleport.usageevents.v1.AccessListMetadata") + proto.RegisterType((*AccessListMemberMetadata)(nil), "teleport.usageevents.v1.AccessListMemberMetadata") proto.RegisterType((*AccessListCreate)(nil), "teleport.usageevents.v1.AccessListCreate") proto.RegisterType((*AccessListUpdate)(nil), "teleport.usageevents.v1.AccessListUpdate") proto.RegisterType((*AccessListDelete)(nil), "teleport.usageevents.v1.AccessListDelete") @@ -5424,339 +5526,346 @@ func init() { } var fileDescriptor_94cf2ca1c69fd564 = []byte{ - // 5297 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7c, 0x4d, 0x6c, 0xe3, 0x48, - 0x76, 0xbf, 0xe8, 0x8f, 0x6e, 0xbb, 0xda, 0xed, 0x66, 0xb3, 0xdb, 0xb6, 0xdc, 0x6e, 0xf7, 0x87, - 0xfa, 0xdb, 0x33, 0x6b, 0x4f, 0xbb, 0x67, 0x77, 0x7a, 0x67, 0xe6, 0xff, 0x9f, 0xd0, 0x14, 0x2d, - 0xb1, 0x2d, 0x89, 0x9a, 0x22, 0xd5, 0xbd, 0x9e, 0xc5, 0xa2, 0x42, 0x93, 0x65, 0x37, 0x63, 0x49, - 0xd4, 0x92, 0x94, 0x3d, 0x4e, 0x10, 0xec, 0xe6, 0x6b, 0x11, 0x64, 0x77, 0xb3, 0x09, 0x10, 0x2c, - 0x02, 0x2c, 0x10, 0x24, 0xc8, 0x07, 0x72, 0x08, 0x90, 0x53, 0xb0, 0xd7, 0x2c, 0x90, 0x43, 0x8e, - 0x01, 0x72, 0xcc, 0x25, 0xd8, 0x53, 0x6e, 0x39, 0x25, 0xc8, 0x27, 0x12, 0xd4, 0x07, 0x25, 0x4a, - 0xa2, 0x44, 0xce, 0xa4, 0x07, 0x0b, 0x74, 0xdf, 0xa4, 0xaa, 0xf7, 0xea, 0xfd, 0xea, 0xd5, 0xab, - 0x57, 0xaf, 0xea, 0x3d, 0x09, 0x3c, 0x0a, 0x71, 0x13, 0x77, 0x3c, 0x3f, 0xdc, 0xea, 0x06, 0xd6, - 0x11, 0xc6, 0x27, 0xb8, 0x1d, 0x06, 0x5b, 0x27, 0x8f, 0xe3, 0x5f, 0x37, 0x3b, 0xbe, 0x17, 0x7a, - 0xd2, 0x4a, 0x44, 0xba, 0x19, 0xef, 0x3b, 0x79, 0x5c, 0xd8, 0x00, 0x52, 0x43, 0xdb, 0xb1, 0xda, - 0x6d, 0xec, 0x2b, 0x4d, 0xd7, 0x3e, 0x56, 0x49, 0x8f, 0x74, 0x15, 0xcc, 0x5a, 0x4d, 0xec, 0x87, - 0x79, 0xe1, 0x96, 0xf0, 0x70, 0x1e, 0xb2, 0x2f, 0x85, 0x5d, 0xf0, 0xb0, 0xa1, 0xe9, 0xed, 0x03, - 0xcf, 0xf2, 0x1d, 0xc5, 0x6b, 0x75, 0x9a, 0x38, 0xc4, 0x25, 0xcf, 0xf4, 0x8a, 0x56, 0xf0, 0x92, - 0x35, 0xf6, 0x47, 0xb8, 0x06, 0xe6, 0xba, 0x01, 0xf6, 0xdb, 0x56, 0x0b, 0xf3, 0x41, 0x7a, 0xdf, - 0x0b, 0xf7, 0xc0, 0x9d, 0xde, 0x38, 0xb2, 0xe3, 0xec, 0xba, 0x7e, 0x10, 0x42, 0x1c, 0x78, 0x5d, - 0xdf, 0xc6, 0xfd, 0x21, 0x0a, 0x1b, 0x31, 0x71, 0xc3, 0x64, 0x15, 0x2b, 0x8c, 0x03, 0x2e, 0x7c, - 0x04, 0x6e, 0xf7, 0x68, 0x0d, 0x1c, 0x2a, 0x3e, 0x76, 0x70, 0x3b, 0x74, 0xad, 0xa6, 0xd1, 0x3d, - 0x68, 0xb9, 0x61, 0x3a, 0xa6, 0xf8, 0x00, 0x1f, 0x77, 0x71, 0x10, 0xba, 0x5e, 0xbb, 0x6d, 0xb9, - 0x3e, 0xce, 0x3a, 0xc0, 0x2f, 0x83, 0x7b, 0xbd, 0x01, 0x20, 0x3e, 0x72, 0x03, 0x02, 0xf0, 0xa5, - 0xd5, 0x6c, 0xe2, 0xf6, 0x51, 0xd6, 0x41, 0xa4, 0x55, 0x30, 0xd7, 0x3a, 0xb4, 0x50, 0x78, 0xd6, - 0xc1, 0xf9, 0x29, 0xda, 0x77, 0xbe, 0x75, 0x68, 0x99, 0x67, 0x1d, 0x2c, 0xad, 0x03, 0xd0, 0xf4, - 0x8e, 0xdc, 0x36, 0x3a, 0x6c, 0x7a, 0xa7, 0xf9, 0x69, 0xda, 0x39, 0x4f, 0x5b, 0x76, 0x9b, 0xde, - 0x29, 0xc3, 0x0f, 0xb1, 0xed, 0x9d, 0x60, 0xff, 0x4c, 0xf1, 0x1c, 0x1c, 0x28, 0x5e, 0x3b, 0x74, - 0xdb, 0x5d, 0x9c, 0x71, 0x51, 0x3e, 0x00, 0xeb, 0x23, 0x03, 0x74, 0xce, 0x32, 0x32, 0x7f, 0x08, - 0x6e, 0x0c, 0x31, 0xd7, 0x7d, 0xb7, 0x1d, 0x66, 0xe4, 0x2e, 0x00, 0xb1, 0xe8, 0x06, 0x94, 0xb9, - 0x8a, 0x43, 0xcb, 0xb1, 0x42, 0x4b, 0x5a, 0x04, 0x53, 0xae, 0xc3, 0x29, 0xa7, 0x5c, 0xa7, 0x60, - 0x81, 0x7c, 0x44, 0x13, 0xd9, 0x40, 0x8f, 0x56, 0x05, 0x73, 0x3e, 0x6f, 0xa3, 0x1c, 0x8b, 0xdb, - 0x8f, 0x36, 0xc7, 0xd8, 0xfb, 0xe6, 0xf0, 0x20, 0xb0, 0xc7, 0x5a, 0x38, 0x06, 0x52, 0xd4, 0x6b, - 0x84, 0xb8, 0x63, 0x84, 0x56, 0xd8, 0x0d, 0xa4, 0x8f, 0xc0, 0xb9, 0x80, 0x7e, 0xe2, 0x43, 0x3f, - 0x48, 0x1d, 0x9a, 0x31, 0x42, 0xce, 0x46, 0xf6, 0x12, 0xf6, 0x7d, 0xcf, 0xe7, 0x0b, 0xca, 0xbe, - 0x14, 0xfe, 0x44, 0x00, 0xcb, 0x0d, 0x2d, 0xc6, 0xe2, 0x87, 0xd8, 0x61, 0xaa, 0x52, 0xc1, 0x5c, - 0x8b, 0x4f, 0x8d, 0xca, 0xbc, 0x90, 0x61, 0x3a, 0x91, 0x2e, 0x60, 0x8f, 0x55, 0x52, 0x7a, 0xc0, - 0xa7, 0xe8, 0x20, 0x6f, 0x65, 0x00, 0x1e, 0xcd, 0x3a, 0x02, 0x5f, 0xf8, 0x6f, 0x01, 0xdc, 0xea, - 0xc3, 0x8c, 0x94, 0x66, 0xe0, 0x26, 0xb6, 0xc9, 0x0e, 0x79, 0xa5, 0x80, 0xab, 0xb1, 0x65, 0x64, - 0x90, 0x1f, 0x67, 0x5e, 0xc6, 0xfe, 0x70, 0xd1, 0x10, 0xb1, 0xf9, 0x4f, 0x7f, 0xfe, 0xf9, 0xff, - 0xc6, 0x14, 0x71, 0x42, 0x11, 0x81, 0xd6, 0x0e, 0xf1, 0x91, 0x6f, 0x91, 0x99, 0xcb, 0x2f, 0x0c, - 0x5d, 0x2b, 0x2a, 0x8a, 0xd7, 0x6e, 0x63, 0x3b, 0x7c, 0xed, 0xf5, 0xf0, 0xe3, 0xa9, 0xb8, 0x1d, - 0x14, 0xad, 0xd0, 0x3a, 0xb0, 0x02, 0x0c, 0x8b, 0x86, 0xda, 0xf6, 0xbd, 0x66, 0xf3, 0x75, 0x9f, - 0xbf, 0xf4, 0x14, 0xe4, 0x03, 0x6a, 0xf4, 0xd8, 0x41, 0xd1, 0xc8, 0x01, 0xb2, 0xbd, 0x6e, 0x3b, - 0xcc, 0xcf, 0xdc, 0x12, 0x1e, 0x4e, 0xc3, 0xe5, 0xa8, 0x3f, 0x82, 0x12, 0x28, 0xa4, 0xb7, 0xf0, - 0xef, 0x02, 0xb8, 0xde, 0xd7, 0xdc, 0x5e, 0xf7, 0x00, 0xab, 0x7b, 0x6f, 0x88, 0xd6, 0x0a, 0xcf, - 0x40, 0xbe, 0xa1, 0x29, 0x56, 0xb3, 0x69, 0x7a, 0x32, 0xf5, 0x17, 0xb1, 0x03, 0x61, 0x13, 0x4c, - 0xdb, 0x7c, 0xc6, 0x8b, 0xdb, 0xd7, 0xc7, 0x8e, 0xae, 0x98, 0x32, 0x24, 0x84, 0x85, 0xef, 0xcf, - 0xc6, 0xf5, 0x58, 0xc4, 0x9d, 0xa6, 0x77, 0x66, 0x60, 0xff, 0xc4, 0xb5, 0xf1, 0x6b, 0x6f, 0x7d, - 0x47, 0xe0, 0xa2, 0x43, 0x27, 0x8c, 0x5a, 0x38, 0x7c, 0xe9, 0x39, 0xd4, 0xe4, 0x16, 0xb7, 0x77, - 0xc6, 0x8e, 0x35, 0x49, 0x51, 0x9b, 0xac, 0xa9, 0x4a, 0x47, 0x82, 0x0b, 0x4e, 0xec, 0x9b, 0x64, - 0x81, 0x0b, 0x5c, 0x10, 0x0d, 0x41, 0x66, 0xa9, 0x98, 0x9f, 0xfb, 0xbf, 0x88, 0x21, 0xb1, 0x0b, - 0x04, 0x4e, 0xef, 0x73, 0x01, 0x81, 0x85, 0x38, 0x00, 0x69, 0x1d, 0xac, 0x16, 0xd5, 0x7a, 0x45, - 0xdf, 0x47, 0x55, 0xd5, 0x2c, 0xeb, 0x45, 0xd4, 0xa8, 0x19, 0x75, 0x55, 0xd1, 0x76, 0x35, 0xb5, - 0x28, 0xe6, 0xa4, 0x65, 0x20, 0x0d, 0x76, 0xcb, 0x0d, 0x53, 0x17, 0x05, 0x29, 0x0f, 0xae, 0x0e, - 0xb6, 0x57, 0xe5, 0x5a, 0x43, 0xae, 0x88, 0x53, 0x05, 0x0c, 0x40, 0x5f, 0xb4, 0xb4, 0x06, 0x56, - 0x38, 0x9d, 0xb9, 0x5f, 0x57, 0x87, 0x06, 0xbf, 0x01, 0xae, 0xc5, 0x3b, 0xb5, 0x9a, 0x61, 0xca, - 0x95, 0x0a, 0x32, 0x14, 0xa8, 0xd5, 0x4d, 0x51, 0x90, 0xae, 0x81, 0xe5, 0x78, 0xbf, 0x5c, 0x95, - 0x3f, 0xd1, 0x6b, 0x48, 0x55, 0x0c, 0x71, 0xaa, 0xf0, 0xa3, 0x19, 0x70, 0xb7, 0x3f, 0x7f, 0xc5, - 0xc7, 0x56, 0x88, 0xa3, 0x6f, 0x67, 0x8a, 0xd7, 0x3e, 0x74, 0x8f, 0x5e, 0x7b, 0xbb, 0xf4, 0xc0, - 0x45, 0x9b, 0xce, 0x74, 0xd0, 0x2e, 0x9f, 0x65, 0x30, 0x98, 0xf1, 0x0a, 0xdb, 0x64, 0x9f, 0x23, - 0xfb, 0xb4, 0x63, 0xdf, 0x0a, 0x7f, 0x26, 0x80, 0x85, 0x78, 0x37, 0xb1, 0x1e, 0x45, 0xaf, 0xed, - 0x6a, 0xa5, 0x64, 0xeb, 0x19, 0xe9, 0x96, 0x5f, 0x18, 0x48, 0x55, 0xb6, 0x91, 0x61, 0x54, 0x45, - 0x81, 0xac, 0x7f, 0x72, 0xb7, 0xaa, 0x29, 0xaa, 0x38, 0x95, 0xcc, 0x0e, 0x8b, 0x06, 0x35, 0x81, - 0x69, 0x69, 0x15, 0x2c, 0x25, 0xb0, 0xef, 0x19, 0xe2, 0x4c, 0xe1, 0xbf, 0x04, 0x70, 0x33, 0xe1, - 0xbc, 0xe4, 0xf7, 0x82, 0xd7, 0xde, 0xf1, 0xff, 0xca, 0x54, 0x7c, 0x73, 0x44, 0xd3, 0x67, 0x2b, - 0xd7, 0xf5, 0x71, 0xd5, 0xac, 0x18, 0xaf, 0xbd, 0x0e, 0x7e, 0x7b, 0x0a, 0x3c, 0x8e, 0x3b, 0xc8, - 0xe0, 0x38, 0xf4, 0x3a, 0xe4, 0x18, 0x3c, 0xc1, 0x45, 0xd7, 0xc7, 0x76, 0xe8, 0xf9, 0x67, 0xa6, - 0xe7, 0x35, 0x03, 0xad, 0x1d, 0x84, 0xd6, 0x1b, 0x10, 0x0d, 0x7c, 0x77, 0x0a, 0x6c, 0xa6, 0x29, - 0xa4, 0x67, 0x22, 0xaf, 0xbd, 0x36, 0xfe, 0x62, 0x0a, 0xdc, 0xef, 0x6b, 0x43, 0xee, 0x86, 0x5e, - 0xf4, 0x39, 0x16, 0x42, 0xbe, 0xf6, 0x27, 0xc8, 0x03, 0x70, 0x29, 0x39, 0x9c, 0x5e, 0xf4, 0x07, - 0xc3, 0xe8, 0x6f, 0x4f, 0x81, 0x3b, 0x7d, 0x75, 0xa9, 0xca, 0x36, 0xdd, 0x35, 0xed, 0x37, 0xe9, - 0x2e, 0xfa, 0xaf, 0x02, 0x58, 0x1d, 0x8e, 0xb8, 0xc8, 0x41, 0xf5, 0x86, 0x4d, 0x9c, 0x45, 0x0e, - 0x35, 0xcf, 0x79, 0xfd, 0x7d, 0xc4, 0x7f, 0x0a, 0xe0, 0xc6, 0xf0, 0xc4, 0xe5, 0x4e, 0x87, 0x84, - 0xd9, 0x6f, 0x40, 0x10, 0xf1, 0x9d, 0x29, 0xf0, 0x68, 0x42, 0x10, 0xa1, 0xc9, 0xd5, 0xba, 0xd7, - 0x74, 0xed, 0xb3, 0xd7, 0x5e, 0x11, 0xff, 0x23, 0x80, 0x42, 0x5f, 0x11, 0x75, 0xdf, 0x6d, 0xdb, - 0x6e, 0xc7, 0x6a, 0x06, 0x6f, 0xce, 0x61, 0xf9, 0x1f, 0x02, 0x58, 0xef, 0x6b, 0xc0, 0xc4, 0x41, - 0xc8, 0x1f, 0xde, 0xde, 0x04, 0xbf, 0xff, 0x2f, 0x02, 0xc8, 0xc7, 0xbc, 0x00, 0x4f, 0xbc, 0x38, - 0xaf, 0xfd, 0xbc, 0xd7, 0x88, 0xd7, 0xe7, 0xde, 0x1e, 0x9f, 0x42, 0xaf, 0x19, 0x4f, 0x0e, 0xdd, - 0x24, 0x06, 0x31, 0xd0, 0x69, 0x58, 0x27, 0x71, 0x82, 0xdb, 0xe4, 0x02, 0x36, 0xc8, 0x4d, 0xc2, - 0x85, 0x66, 0x8c, 0xe4, 0x6d, 0xb0, 0x31, 0x44, 0xf2, 0xdc, 0xc5, 0xa7, 0x45, 0xcf, 0xee, 0xb6, - 0x70, 0x3b, 0xb4, 0x06, 0x1f, 0xac, 0x0a, 0x7f, 0x25, 0x80, 0x25, 0x39, 0x08, 0x5c, 0x62, 0x7b, - 0x74, 0x09, 0x7a, 0xb6, 0xf7, 0x00, 0x5c, 0xb2, 0xbd, 0xf6, 0x09, 0xf6, 0x03, 0xca, 0x83, 0x7a, - 0x89, 0x8b, 0xc5, 0x78, 0xb3, 0xe6, 0x48, 0xb7, 0xc1, 0x42, 0xe8, 0x85, 0x56, 0x13, 0x85, 0xde, - 0x31, 0x6e, 0xb3, 0x87, 0xf9, 0x69, 0x78, 0x81, 0xb6, 0x99, 0xb4, 0x49, 0xba, 0x03, 0x2e, 0x76, - 0x7c, 0xaf, 0xd5, 0x09, 0x23, 0x9a, 0x69, 0x4a, 0xb3, 0xc0, 0x1a, 0x39, 0xd1, 0x5b, 0xe0, 0xb2, - 0xdd, 0xc3, 0x10, 0x11, 0xb2, 0xb8, 0x49, 0xec, 0x77, 0x30, 0xe2, 0xc2, 0xdf, 0x0b, 0xe0, 0x2a, - 0xc3, 0xad, 0x7e, 0x8a, 0xed, 0xee, 0xe7, 0x80, 0xbd, 0x0e, 0x40, 0xdb, 0x73, 0x30, 0x8f, 0xcf, - 0x18, 0xe8, 0x79, 0xd2, 0x42, 0x43, 0xb3, 0x91, 0x59, 0x4d, 0x67, 0x98, 0xd5, 0x4c, 0xd6, 0x59, - 0xcd, 0x8e, 0x99, 0xd5, 0x53, 0x70, 0x8d, 0x4d, 0xaa, 0x86, 0x4f, 0x95, 0x18, 0xdc, 0x5e, 0xb6, - 0xc9, 0xb6, 0x42, 0x7c, 0xe4, 0xf9, 0x67, 0x51, 0xb6, 0x29, 0xfa, 0x5e, 0xf8, 0x4b, 0x01, 0x5c, - 0x61, 0xac, 0xb2, 0x6d, 0xe3, 0x20, 0x80, 0xf8, 0x9b, 0x5d, 0x1c, 0x84, 0x04, 0x63, 0x64, 0xbf, - 0xec, 0xf5, 0x8b, 0x31, 0x2e, 0x44, 0x8d, 0xf4, 0x39, 0xe9, 0x67, 0xb2, 0x82, 0x3f, 0x12, 0xc0, - 0x42, 0x84, 0x98, 0x34, 0x4b, 0xcb, 0xe0, 0x9c, 0x45, 0x3f, 0x71, 0x8c, 0xfc, 0xdb, 0xcf, 0x06, - 0xdd, 0x5d, 0x20, 0x31, 0x45, 0x56, 0xdc, 0x20, 0x1c, 0x9b, 0xbf, 0xfb, 0x3a, 0x10, 0xfb, 0x54, - 0x6c, 0xcf, 0x49, 0xa5, 0x11, 0xdf, 0x35, 0xde, 0x4f, 0x8c, 0x8a, 0xe8, 0x7b, 0xaf, 0xc1, 0xc1, - 0x1b, 0x1d, 0xe7, 0x8b, 0x1b, 0xbc, 0x88, 0x89, 0xef, 0x7d, 0x75, 0x83, 0x5b, 0x60, 0x39, 0xde, - 0xdf, 0x3a, 0x88, 0xc2, 0xbc, 0x2f, 0x54, 0xc4, 0xab, 0x56, 0x51, 0x82, 0x88, 0x57, 0xad, 0xa8, - 0x5f, 0x8c, 0x8b, 0x28, 0xf9, 0x56, 0x3b, 0x0c, 0x4c, 0xaf, 0x11, 0x60, 0x5f, 0xda, 0x04, 0x57, - 0xa8, 0x63, 0x42, 0xbe, 0xd7, 0xc4, 0x01, 0x3a, 0x22, 0x7d, 0x98, 0x99, 0xde, 0x2c, 0xbc, 0x4c, - 0xbb, 0x88, 0x6b, 0x0f, 0x4a, 0xac, 0x43, 0x7a, 0x07, 0x5c, 0x65, 0xf4, 0xa1, 0x6f, 0xb9, 0x61, - 0x9f, 0x61, 0x8a, 0x32, 0x48, 0xb4, 0xcf, 0xa4, 0x5d, 0x9c, 0xa3, 0xf0, 0xc3, 0xe9, 0xb8, 0x70, - 0x88, 0x4f, 0x5c, 0x7c, 0xfa, 0x8a, 0x57, 0x49, 0x7a, 0x0a, 0x56, 0x1d, 0xeb, 0x2c, 0x40, 0x1d, - 0x2b, 0x08, 0x51, 0x1b, 0x7f, 0x1a, 0x22, 0xab, 0xeb, 0xb8, 0x21, 0x22, 0x0b, 0xc5, 0xa1, 0x2d, - 0x11, 0x82, 0xba, 0x45, 0x5c, 0xde, 0xa7, 0xa1, 0x4c, 0x7a, 0x8b, 0x04, 0xc2, 0x2e, 0xb8, 0xd9, - 0xa2, 0x2a, 0x0f, 0x5e, 0xba, 0x1d, 0xe4, 0xe3, 0x6f, 0x76, 0x5d, 0x1f, 0x93, 0x03, 0x2c, 0x40, - 0xf6, 0x4b, 0xab, 0x7d, 0x84, 0x1d, 0xba, 0xc7, 0xe7, 0xe0, 0x7a, 0x9f, 0x0c, 0xc6, 0xa8, 0x14, - 0x46, 0x24, 0x3d, 0x05, 0x79, 0x9f, 0x4e, 0x0d, 0x1d, 0x92, 0x41, 0x70, 0xdb, 0x3e, 0xeb, 0x0d, - 0x30, 0x43, 0x07, 0x58, 0x66, 0xfd, 0xbb, 0x51, 0x77, 0xc4, 0xf9, 0x21, 0x58, 0xe3, 0x9c, 0x8e, - 0x75, 0x86, 0xbc, 0x43, 0xd4, 0xf2, 0xda, 0xe1, 0xcb, 0x1e, 0xf3, 0x2c, 0x65, 0x5e, 0x61, 0x24, - 0x45, 0xeb, 0x4c, 0x3f, 0xac, 0x92, 0xfe, 0x88, 0xfb, 0xab, 0x60, 0xb5, 0xdd, 0x25, 0xc0, 0x08, - 0xa7, 0x8f, 0x5b, 0xde, 0x09, 0x76, 0x10, 0x87, 0x9a, 0x3f, 0x47, 0x67, 0xbe, 0xcc, 0x08, 0xf4, - 0x43, 0xc8, 0xba, 0x99, 0x89, 0x05, 0x85, 0xdf, 0x13, 0x46, 0x17, 0xe6, 0x15, 0x1b, 0x9e, 0xf4, - 0x18, 0x2c, 0x59, 0xb4, 0x1f, 0x35, 0xdd, 0x20, 0x44, 0x7c, 0xa2, 0xae, 0xc3, 0xd3, 0xf9, 0x92, - 0x35, 0x24, 0x5f, 0x73, 0x0a, 0xdf, 0x13, 0xc0, 0x6a, 0x2c, 0x55, 0xcc, 0x92, 0x7d, 0xe3, 0x3c, - 0xa3, 0xb4, 0x03, 0x66, 0x8e, 0xdd, 0x36, 0x1b, 0x6f, 0x71, 0x7b, 0x73, 0x2c, 0xca, 0x91, 0x11, - 0xf7, 0xdc, 0xb6, 0x03, 0x29, 0xaf, 0xb4, 0x06, 0xe6, 0xbb, 0x01, 0xf6, 0x11, 0x2d, 0xaf, 0x98, - 0xee, 0x97, 0x57, 0xd4, 0xac, 0x16, 0x2e, 0x78, 0x24, 0x54, 0x1a, 0xe1, 0xa6, 0x25, 0x07, 0xec, - 0xb4, 0xac, 0x8d, 0xe8, 0x6a, 0x3b, 0x3b, 0x8a, 0x84, 0xbd, 0xea, 0x83, 0x5b, 0x09, 0x02, 0xa3, - 0xc0, 0xf5, 0x8b, 0x91, 0xf9, 0x0f, 0x02, 0xb8, 0xd2, 0xab, 0x21, 0xa2, 0x7b, 0x93, 0xc9, 0xc9, - 0x74, 0xaa, 0xc7, 0x5e, 0xa1, 0x90, 0xe7, 0xbb, 0x47, 0x6e, 0x9b, 0xaf, 0x6e, 0xef, 0x15, 0x4a, - 0xa7, 0xad, 0xd2, 0x3d, 0xb0, 0x68, 0x37, 0xbd, 0xae, 0x83, 0x3a, 0xbe, 0x77, 0xe2, 0x3a, 0xd8, - 0xe7, 0xca, 0xbe, 0x48, 0x5b, 0xeb, 0xbc, 0x51, 0xd2, 0xc1, 0x9c, 0xc3, 0xaf, 0xab, 0x74, 0xeb, - 0x5c, 0xd8, 0x7e, 0x92, 0x1a, 0x00, 0x63, 0x27, 0xba, 0xe1, 0xf6, 0x67, 0x17, 0x0d, 0x52, 0x78, - 0x0e, 0xae, 0x8d, 0xa7, 0x93, 0x56, 0xc0, 0x79, 0xe7, 0x20, 0x3e, 0xbb, 0x73, 0xce, 0x01, 0x9d, - 0xd7, 0x4d, 0x70, 0xc1, 0x39, 0x40, 0xb4, 0x02, 0xcc, 0xf6, 0x9a, 0x7c, 0x4e, 0xc0, 0x39, 0xa8, - 0xf3, 0x96, 0xc2, 0x3f, 0x0b, 0xe0, 0xda, 0x2e, 0xb6, 0xc2, 0xae, 0x8f, 0x21, 0xb6, 0xbd, 0x56, - 0x0b, 0xb7, 0x9d, 0x58, 0x18, 0x35, 0x60, 0x56, 0xc2, 0xa0, 0x59, 0x49, 0xef, 0x83, 0xf3, 0x87, - 0x8c, 0x95, 0x9b, 0xee, 0xad, 0xb1, 0x73, 0x8c, 0x44, 0x44, 0x0c, 0xd2, 0xa7, 0x60, 0x9d, 0x7f, - 0x44, 0xfe, 0x80, 0x5c, 0x14, 0xbb, 0x36, 0x2c, 0x6e, 0xbf, 0x9b, 0x3a, 0xe2, 0x00, 0x33, 0xbf, - 0x3f, 0xac, 0x1d, 0x8e, 0xef, 0x2c, 0x9c, 0x82, 0xab, 0xa6, 0x5c, 0x62, 0x91, 0x30, 0xfe, 0xb8, - 0x8b, 0x7d, 0xfe, 0x7c, 0x70, 0x13, 0xb0, 0x30, 0x09, 0x91, 0xb8, 0x96, 0xd5, 0xfa, 0x4c, 0x43, - 0x40, 0x9b, 0x6a, 0xa4, 0xa5, 0x4f, 0x80, 0x9d, 0x23, 0x1c, 0x85, 0x56, 0x8c, 0x40, 0x25, 0x2d, - 0x24, 0x4a, 0x76, 0x03, 0x14, 0x74, 0xa9, 0x3f, 0xe0, 0x2e, 0x77, 0xde, 0x0d, 0x0c, 0xd6, 0x50, - 0xf8, 0xa7, 0x69, 0xb0, 0xc2, 0x1c, 0x4d, 0xc9, 0xb7, 0x3a, 0x2f, 0xe5, 0x17, 0x86, 0x61, 0x5b, - 0xed, 0x28, 0x17, 0x7e, 0x85, 0x8f, 0x6d, 0x6f, 0x23, 0x97, 0x3f, 0x6c, 0x32, 0x10, 0x33, 0xf0, - 0x32, 0x93, 0x61, 0xf7, 0x5e, 0x3c, 0x63, 0x58, 0xc8, 0x62, 0x30, 0x2c, 0x33, 0x1c, 0x0b, 0x39, - 0x12, 0x83, 0x7e, 0x20, 0x78, 0xe4, 0x7b, 0xdd, 0x0e, 0x43, 0x33, 0xc3, 0x03, 0xc1, 0x12, 0x6d, - 0xea, 0x8f, 0x41, 0x8f, 0x4d, 0x6a, 0xa6, 0xd1, 0x18, 0xf4, 0xb8, 0x24, 0xb6, 0xce, 0x08, 0x3a, - 0x5e, 0xd3, 0xb5, 0x5d, 0xcc, 0x62, 0xf1, 0x19, 0x78, 0x91, 0xb6, 0xd6, 0x79, 0xa3, 0xf4, 0x36, - 0x90, 0x38, 0xf6, 0xe3, 0x00, 0xd9, 0xcd, 0x6e, 0x10, 0x46, 0x7e, 0x7b, 0x06, 0x8a, 0x0c, 0xfa, - 0x71, 0xa0, 0xf0, 0xf6, 0xfe, 0x4c, 0x7d, 0x27, 0x88, 0xcd, 0xf4, 0x7c, 0x6c, 0xa6, 0xd0, 0x09, - 0xfa, 0x33, 0x7d, 0x08, 0xd8, 0x18, 0x28, 0x78, 0x82, 0x0e, 0xba, 0xf6, 0x31, 0x0e, 0x83, 0xfc, - 0x1c, 0x25, 0x66, 0xe0, 0x8c, 0x27, 0x3b, 0xac, 0x95, 0x1c, 0xeb, 0x9c, 0xd2, 0x6a, 0x35, 0x7b, - 0xfb, 0x33, 0xc8, 0xcf, 0x53, 0x6a, 0x86, 0xd1, 0xb0, 0x5a, 0xcd, 0x68, 0x93, 0xc6, 0x38, 0x3c, - 0xd7, 0xb1, 0x63, 0x1c, 0x20, 0xc6, 0xa1, 0xbb, 0x8e, 0xdd, 0xe7, 0xe8, 0xa9, 0xc4, 0xb2, 0x69, - 0x98, 0x10, 0xe4, 0x2f, 0xc4, 0x54, 0x22, 0xf3, 0xc6, 0xc2, 0x0f, 0x05, 0x70, 0xb7, 0xa1, 0xc5, - 0x16, 0x5b, 0xf1, 0xbd, 0xd3, 0xf6, 0x33, 0x7c, 0x8a, 0x9b, 0x45, 0xf7, 0xf0, 0x90, 0x5c, 0x32, - 0xd9, 0xba, 0x3f, 0x05, 0x79, 0xeb, 0xf0, 0x70, 0xb0, 0xaa, 0x04, 0xc5, 0x0a, 0xd9, 0xe6, 0xe1, - 0x72, 0xd4, 0xdf, 0x2b, 0xbd, 0x62, 0x17, 0xec, 0x77, 0xc1, 0xf2, 0x28, 0x67, 0xac, 0x6c, 0xf0, - 0xea, 0x30, 0x1f, 0xcd, 0xbd, 0xef, 0x82, 0xeb, 0x06, 0xb6, 0xbb, 0xbe, 0x1b, 0x9e, 0x41, 0xba, - 0xad, 0x4a, 0x38, 0x84, 0x38, 0xe8, 0x36, 0xf9, 0x41, 0x20, 0x81, 0x99, 0xd8, 0x56, 0xa7, 0x9f, - 0x49, 0x1b, 0x89, 0x3b, 0x78, 0x0c, 0x42, 0x3f, 0x17, 0x2c, 0x70, 0xa5, 0x97, 0xb9, 0xdd, 0xc5, - 0xa1, 0xfd, 0x92, 0xb1, 0x8f, 0x7a, 0x47, 0x21, 0xc9, 0x3b, 0x8e, 0xb8, 0xe4, 0xa9, 0x51, 0x97, - 0x5c, 0xf8, 0x81, 0x00, 0x24, 0x62, 0xcb, 0xa6, 0x15, 0x1c, 0x93, 0xad, 0x8b, 0x7b, 0x1e, 0x29, - 0xb4, 0x82, 0xe3, 0xb8, 0xb3, 0x9b, 0x23, 0x0d, 0x51, 0x89, 0xa4, 0x1b, 0x04, 0xdd, 0x81, 0x51, - 0xe7, 0x69, 0x0b, 0xed, 0xbe, 0x0a, 0x66, 0x89, 0x77, 0x89, 0x0e, 0x48, 0xf6, 0x85, 0xf8, 0xfe, - 0x9e, 0x1d, 0xc6, 0x32, 0x10, 0xb3, 0x70, 0xb1, 0xd7, 0xcc, 0x32, 0x10, 0x7f, 0xf3, 0x3e, 0xb8, - 0xd4, 0x20, 0x5e, 0x88, 0x22, 0xd1, 0xdb, 0x58, 0x3f, 0x94, 0x1a, 0xe0, 0x52, 0xd7, 0x45, 0x07, - 0xb4, 0x7c, 0x16, 0xd9, 0x4d, 0xd7, 0x3e, 0x4e, 0x0d, 0x36, 0x46, 0xab, 0x6d, 0xcb, 0x39, 0x78, - 0xb1, 0xeb, 0xc6, 0x5a, 0xa5, 0x1f, 0x09, 0xe0, 0x51, 0xd7, 0x45, 0x1e, 0xab, 0x26, 0x45, 0xfc, - 0xca, 0x85, 0xd1, 0x91, 0x87, 0x42, 0x0f, 0x39, 0x51, 0xb9, 0x2d, 0x97, 0xc8, 0x9e, 0x58, 0xe4, - 0x09, 0x12, 0xb3, 0xd5, 0xec, 0x96, 0x73, 0xf0, 0x4e, 0xd7, 0x4d, 0xa5, 0x95, 0xbe, 0x2b, 0x80, - 0x3b, 0x31, 0x74, 0x96, 0xe3, 0xa0, 0x43, 0xd7, 0xa7, 0xb1, 0x11, 0x5f, 0x55, 0x86, 0x8b, 0x9d, - 0x7c, 0x1f, 0xa6, 0xe3, 0x1a, 0x5f, 0x03, 0x5c, 0xce, 0xc1, 0x1b, 0x3d, 0x48, 0x89, 0x64, 0xc3, - 0xba, 0x4a, 0x40, 0xd3, 0xb4, 0xc2, 0xde, 0xea, 0xcc, 0x66, 0xd5, 0x55, 0x4a, 0xc1, 0xf1, 0x80, - 0xae, 0xc6, 0xd3, 0x4a, 0xbf, 0x2e, 0x80, 0x5b, 0x31, 0x74, 0x01, 0x0e, 0x91, 0xdd, 0xab, 0x4d, - 0x46, 0x01, 0x2d, 0x0b, 0xa6, 0xce, 0xf2, 0xc2, 0xf6, 0xfb, 0xe9, 0xa0, 0xc6, 0x55, 0x36, 0x97, - 0x73, 0xf0, 0x7a, 0x0f, 0x4d, 0x02, 0x91, 0xf4, 0x3b, 0x02, 0xb8, 0x1b, 0x83, 0xe1, 0xf3, 0x3a, - 0x04, 0x12, 0xa2, 0xb3, 0x02, 0xe5, 0x08, 0xca, 0x79, 0x0a, 0xe5, 0xff, 0xa7, 0x43, 0x99, 0x54, - 0xe2, 0x5c, 0xce, 0xc1, 0x5b, 0x3d, 0x38, 0x63, 0x08, 0x23, 0xcd, 0xf8, 0xbc, 0x68, 0x18, 0xd9, - 0xe4, 0x94, 0x45, 0x36, 0x2f, 0x5a, 0xe6, 0xcb, 0x35, 0x97, 0xaa, 0x99, 0x94, 0x92, 0x67, 0xa6, - 0x99, 0xf1, 0x44, 0xd2, 0xa7, 0xe0, 0x7a, 0x12, 0x8a, 0xce, 0x19, 0x47, 0x30, 0x4f, 0x11, 0x7c, - 0x25, 0x3b, 0x82, 0x78, 0xcd, 0x74, 0x39, 0x07, 0xf3, 0x23, 0xd2, 0x39, 0x81, 0xf4, 0x4b, 0x60, - 0x7d, 0x54, 0x72, 0xc7, 0x77, 0xdb, 0x21, 0x17, 0x0d, 0xa8, 0xe8, 0xf7, 0xb2, 0x8a, 0x1e, 0xaa, - 0xb8, 0x2e, 0xe7, 0xe0, 0xea, 0x90, 0xec, 0x3e, 0x85, 0xd4, 0x04, 0xab, 0x5d, 0x17, 0x39, 0xdc, - 0x89, 0x93, 0xa8, 0xcb, 0x27, 0x47, 0x09, 0x1d, 0x9c, 0x1e, 0x6a, 0x17, 0xb6, 0xb7, 0x32, 0x54, - 0xf1, 0xc4, 0xeb, 0x96, 0xcb, 0x39, 0xb8, 0xdc, 0x75, 0x13, 0x2b, 0x9a, 0xbf, 0xcb, 0xcc, 0xaf, - 0x27, 0xae, 0x7f, 0xd6, 0x45, 0xc9, 0x5b, 0x2e, 0x79, 0x81, 0x4a, 0xfe, 0x6a, 0x06, 0xc9, 0xc9, - 0xa5, 0xc8, 0xcc, 0xf2, 0x52, 0xca, 0x95, 0xbf, 0x45, 0x0d, 0xaf, 0x07, 0x86, 0x17, 0xbc, 0x05, - 0xac, 0x76, 0x8d, 0x03, 0xb9, 0x48, 0x81, 0x7c, 0xf9, 0x73, 0x55, 0xbe, 0x31, 0x9b, 0x9b, 0x50, - 0xa9, 0xf8, 0x9b, 0xcc, 0x81, 0xf6, 0x11, 0xf0, 0x80, 0xbe, 0xbf, 0x2f, 0x19, 0x88, 0x45, 0x0a, - 0xe2, 0x69, 0x16, 0x10, 0x49, 0x05, 0x46, 0xe5, 0x1c, 0xbc, 0x19, 0xc3, 0x91, 0x58, 0x83, 0xf4, - 0xfb, 0xcc, 0x7b, 0x8e, 0x42, 0xb1, 0xa3, 0xdc, 0x12, 0x6a, 0x85, 0xcd, 0x80, 0x03, 0xba, 0x44, - 0x01, 0xfd, 0xbf, 0xcf, 0x00, 0x68, 0xb4, 0xe4, 0xa7, 0x9c, 0x83, 0x77, 0x47, 0x51, 0xf5, 0xe9, - 0xc2, 0x26, 0xaf, 0x7a, 0xf8, 0x89, 0x00, 0x9e, 0x0e, 0xae, 0x13, 0x2d, 0x18, 0x41, 0x16, 0xad, - 0x18, 0x41, 0x4e, 0x54, 0x32, 0x82, 0x42, 0xcf, 0x6b, 0xf2, 0x60, 0xb2, 0xd9, 0xe4, 0x48, 0x45, - 0x8a, 0xf4, 0x59, 0xa6, 0xf5, 0xcb, 0x54, 0x98, 0x53, 0xce, 0xc1, 0xc7, 0xf1, 0x45, 0xcd, 0x56, - 0xcd, 0xf3, 0x63, 0x01, 0xbc, 0x9b, 0x69, 0x0e, 0x7d, 0x75, 0x33, 0xfc, 0x97, 0x29, 0xfe, 0xd2, - 0xe7, 0xc6, 0x3f, 0x98, 0x1a, 0x2c, 0xe7, 0xe0, 0x66, 0x1a, 0xf8, 0xa1, 0x64, 0xe2, 0x1f, 0x08, - 0xe0, 0xad, 0x38, 0x72, 0xab, 0x4b, 0x22, 0x8f, 0xde, 0x1d, 0x34, 0x56, 0x04, 0xcd, 0x00, 0x4b, - 0x14, 0xf0, 0x47, 0x19, 0x00, 0x4f, 0x2a, 0x75, 0x29, 0xe7, 0xe0, 0xfd, 0x3e, 0xd0, 0x89, 0x45, - 0x31, 0x7f, 0x2e, 0x80, 0xad, 0x14, 0xcb, 0x75, 0xad, 0x16, 0xbb, 0xbc, 0x9c, 0x71, 0x90, 0x57, - 0x28, 0xc8, 0x9d, 0xcf, 0x63, 0xbf, 0x83, 0xd9, 0xe6, 0x72, 0x0e, 0x3e, 0x9a, 0x60, 0xc4, 0x9a, - 0xd5, 0x8a, 0xa7, 0xa6, 0x7f, 0x57, 0x00, 0xf7, 0xe3, 0x50, 0x3b, 0xbd, 0x0c, 0xee, 0xc8, 0xba, - 0x5f, 0xa5, 0x08, 0x3f, 0xc8, 0x80, 0x70, 0x5c, 0x1a, 0xb8, 0x9c, 0x83, 0x85, 0x3e, 0xb4, 0xb1, - 0xc9, 0xe2, 0x5f, 0x15, 0xc0, 0xed, 0x38, 0xa6, 0x10, 0x07, 0x21, 0x41, 0xd3, 0x1e, 0xf0, 0xc7, - 0x4b, 0xa9, 0xa7, 0xdf, 0x84, 0x9c, 0x6c, 0x39, 0x07, 0xd7, 0xfb, 0x48, 0x92, 0x92, 0xb6, 0x3e, - 0x58, 0x8b, 0x63, 0x88, 0xe2, 0xdc, 0xe8, 0x1c, 0x5a, 0x4e, 0x49, 0x44, 0x8e, 0x4b, 0x8a, 0xb2, - 0x63, 0x77, 0x4c, 0xc2, 0xb4, 0x09, 0xf2, 0x5d, 0x97, 0x04, 0x61, 0x56, 0x88, 0x51, 0x1b, 0x9f, - 0xd2, 0xfb, 0x2f, 0x3f, 0x71, 0x57, 0x52, 0x1e, 0xa2, 0xc6, 0xa6, 0x23, 0xcb, 0x39, 0x78, 0xb5, - 0xeb, 0x8e, 0x76, 0x4a, 0x67, 0xf4, 0x90, 0x1f, 0x96, 0x16, 0x58, 0x27, 0x91, 0xc8, 0x7c, 0xaa, - 0x86, 0x27, 0x24, 0x39, 0xd9, 0x44, 0x93, 0x09, 0xa4, 0x6f, 0x81, 0x9b, 0x49, 0x13, 0xa5, 0x49, - 0x50, 0x2e, 0x7c, 0x35, 0xf5, 0x80, 0x99, 0x98, 0x40, 0x2d, 0xe7, 0xe0, 0xb5, 0xe1, 0x59, 0xf7, - 0x49, 0xa4, 0x3f, 0x62, 0x2e, 0x64, 0x18, 0x01, 0x7b, 0x28, 0x8e, 0x27, 0x59, 0x39, 0x9a, 0x6b, - 0x14, 0x8d, 0x92, 0x15, 0xcd, 0x84, 0x5c, 0x6d, 0x39, 0x07, 0xef, 0x0d, 0x01, 0x4b, 0xa6, 0x96, - 0xfe, 0x54, 0x00, 0x9b, 0x71, 0x13, 0x74, 0xfb, 0x4f, 0x8d, 0xc8, 0x3a, 0x0d, 0xd8, 0xd3, 0x00, - 0xdf, 0x16, 0xdc, 0x2a, 0xd7, 0x52, 0xaf, 0x10, 0xd9, 0x7e, 0x2e, 0x54, 0xce, 0xc1, 0x87, 0x7d, - 0x2b, 0x8d, 0xd3, 0x9e, 0x06, 0xba, 0xeb, 0xd8, 0x03, 0x3f, 0x2d, 0xfa, 0x9e, 0x00, 0xee, 0x25, - 0x87, 0x0c, 0x4e, 0x80, 0x30, 0x7d, 0x14, 0xe5, 0xf0, 0xae, 0x67, 0x0e, 0xa1, 0x92, 0x7f, 0xc5, - 0x33, 0x18, 0x42, 0xf5, 0x68, 0x9c, 0x20, 0xfe, 0x9b, 0x95, 0x90, 0x99, 0x35, 0x39, 0x6f, 0x43, - 0x0f, 0xb1, 0xec, 0x23, 0x5b, 0x45, 0x8e, 0x62, 0x3d, 0x75, 0xeb, 0x26, 0xff, 0x2c, 0x84, 0x5b, - 0x74, 0xf2, 0x4f, 0x46, 0xbe, 0x01, 0x2e, 0x5b, 0x34, 0x0d, 0x8a, 0xfa, 0x49, 0xc8, 0xfc, 0x0d, - 0x2a, 0x69, 0xfc, 0xb3, 0x79, 0x62, 0xca, 0xbe, 0x9c, 0x83, 0xa2, 0x35, 0xd4, 0x11, 0xb9, 0xc4, - 0xb8, 0x09, 0x70, 0xcd, 0xd2, 0xf0, 0x98, 0xcf, 0xec, 0x66, 0xea, 0x86, 0x9d, 0xf0, 0xd4, 0xce, - 0x5c, 0xe2, 0xa4, 0xb7, 0x78, 0x1e, 0x2a, 0x27, 0x80, 0xe8, 0xbd, 0x02, 0x30, 0x1c, 0xb7, 0x52, - 0xd7, 0x79, 0xf2, 0x0b, 0x3c, 0x5b, 0xe7, 0x94, 0x57, 0xfa, 0x5f, 0x13, 0xa8, 0x13, 0x89, 0xee, - 0x8d, 0xdf, 0x8c, 0xff, 0x30, 0x36, 0xba, 0x32, 0xde, 0xce, 0x7a, 0x7b, 0x1d, 0xf7, 0xb3, 0xda, - 0x81, 0xdb, 0x6b, 0x02, 0x91, 0xf4, 0x09, 0xe0, 0x8b, 0x85, 0x70, 0x54, 0xc1, 0x90, 0x2f, 0x50, - 0xa9, 0x5f, 0x4a, 0x59, 0xf6, 0xc1, 0x8a, 0x87, 0x72, 0x0e, 0x5e, 0xb2, 0x06, 0xdb, 0xa5, 0x16, - 0x58, 0xe1, 0x63, 0x13, 0x07, 0x15, 0x2f, 0x7c, 0xc8, 0xdf, 0x49, 0x79, 0xb9, 0x1f, 0x5f, 0x7f, - 0x50, 0xce, 0xc1, 0x25, 0x2b, 0xa9, 0x57, 0x3a, 0x00, 0x4b, 0xfd, 0x57, 0x12, 0xe6, 0x18, 0xd9, - 0x72, 0xde, 0xa5, 0xc2, 0xde, 0x1e, 0x2b, 0x2c, 0x21, 0xb7, 0x51, 0xce, 0xc1, 0x2b, 0x7e, 0x42, - 0xca, 0xe3, 0x14, 0x5c, 0x1f, 0xf3, 0xb8, 0xce, 0x44, 0xdd, 0x4b, 0x99, 0xd7, 0xf8, 0x84, 0x00, - 0x71, 0xf8, 0x87, 0xe3, 0xd3, 0x05, 0x07, 0x80, 0xcf, 0x1a, 0xf1, 0x8c, 0x99, 0xcf, 0x4a, 0x2b, - 0xf2, 0xf7, 0x53, 0x26, 0x97, 0x50, 0x8e, 0x41, 0x26, 0x67, 0x25, 0x54, 0x69, 0x54, 0xc0, 0xc5, - 0x9e, 0x0c, 0xba, 0x4a, 0x0f, 0xe8, 0xd8, 0xf7, 0x52, 0xc7, 0x26, 0xc4, 0xe5, 0x1c, 0x5c, 0xb0, - 0xe2, 0x85, 0x14, 0xfb, 0x40, 0x8a, 0x27, 0xf7, 0xd8, 0x8a, 0xe4, 0x1f, 0xa6, 0xd4, 0x51, 0x0d, - 0x17, 0x32, 0x50, 0x6f, 0x32, 0x5c, 0xdc, 0x30, 0x34, 0x74, 0x97, 0xa6, 0xdc, 0xf3, 0x8f, 0x32, - 0x0f, 0xcd, 0x72, 0xf4, 0x83, 0x43, 0xf3, 0xbc, 0xfd, 0xd0, 0xd0, 0x0e, 0xcd, 0x78, 0xe6, 0x37, - 0x32, 0x0f, 0xcd, 0x52, 0xa4, 0x83, 0x43, 0xf3, 0xb4, 0x69, 0x13, 0xac, 0xc6, 0x87, 0x66, 0x69, - 0xd8, 0x48, 0x2f, 0x6f, 0xa5, 0xbc, 0x0b, 0x24, 0x57, 0x32, 0x94, 0x73, 0x70, 0xd9, 0x4a, 0xae, - 0x71, 0x48, 0x96, 0xc6, 0x55, 0xf5, 0xf6, 0x67, 0x94, 0xd6, 0x53, 0xd8, 0x88, 0x34, 0xae, 0xb6, - 0x64, 0x69, 0x5c, 0x7b, 0x5f, 0xfa, 0x8c, 0xd2, 0x7a, 0x3a, 0x1c, 0x91, 0xc6, 0x35, 0xd9, 0x02, - 0xd7, 0xe2, 0xd2, 0x68, 0x95, 0x41, 0x40, 0x4e, 0xcb, 0x6e, 0x80, 0xfd, 0xfc, 0x66, 0x66, 0x71, - 0xf1, 0x5a, 0x87, 0x41, 0x71, 0x03, 0x55, 0x10, 0xbf, 0x25, 0x80, 0x42, 0x3c, 0x40, 0x88, 0x67, - 0x92, 0xfa, 0xcf, 0x2c, 0xf9, 0xad, 0xd4, 0x37, 0xd9, 0xd4, 0x12, 0x7b, 0xf6, 0x26, 0xdb, 0x23, - 0xb3, 0x47, 0xc9, 0xa4, 0x63, 0xb0, 0x92, 0xf0, 0xc2, 0x82, 0x5d, 0x1b, 0xe7, 0xdf, 0x49, 0x0d, - 0xb1, 0xc7, 0x14, 0xb8, 0xb3, 0x10, 0x7b, 0xa8, 0xd3, 0xb5, 0xf1, 0xb0, 0xb0, 0x28, 0xdc, 0xf4, - 0x1c, 0x9c, 0x7f, 0x9c, 0x59, 0xd8, 0x50, 0x51, 0xf9, 0xa0, 0xb0, 0x7e, 0xa7, 0xf4, 0x75, 0x70, - 0x39, 0xb4, 0x8e, 0xf8, 0x39, 0x84, 0xc9, 0x81, 0xe8, 0x9f, 0xe5, 0xb7, 0x53, 0xce, 0xa2, 0xa4, - 0x84, 0x23, 0x39, 0x8b, 0x42, 0xeb, 0x28, 0xde, 0x2e, 0x85, 0xe0, 0x5a, 0xc0, 0xd3, 0x33, 0xc8, - 0xa7, 0x23, 0xa1, 0x23, 0x4c, 0x1f, 0xb2, 0xbb, 0xcd, 0x30, 0xff, 0x24, 0xe5, 0x49, 0x6a, 0x52, - 0x66, 0xa7, 0x9c, 0x83, 0x2b, 0x41, 0x72, 0xff, 0xf0, 0xb6, 0xe0, 0x05, 0x0e, 0x7c, 0xcb, 0xbf, - 0x9b, 0xd9, 0x4e, 0xe3, 0x65, 0x31, 0x83, 0x76, 0x3a, 0x50, 0x30, 0x93, 0x2c, 0x8d, 0x6f, 0xc2, - 0x2f, 0x7f, 0x46, 0x69, 0x49, 0x9b, 0x70, 0xa0, 0x0a, 0xe4, 0x00, 0x2c, 0x45, 0x86, 0x71, 0x86, - 0x0e, 0x71, 0x68, 0xbf, 0xe4, 0x67, 0xe0, 0x57, 0x52, 0x4e, 0xa4, 0x84, 0xf4, 0x16, 0x39, 0x91, - 0x9c, 0x84, 0xac, 0xd7, 0xf7, 0x87, 0x5e, 0xf3, 0xb8, 0x01, 0xf6, 0xe5, 0xb2, 0x3b, 0x7e, 0xfe, - 0xbd, 0xcc, 0x8f, 0x67, 0xe3, 0x7f, 0x1b, 0x39, 0xf8, 0xa4, 0x97, 0x48, 0x27, 0x7d, 0x7b, 0xe8, - 0x66, 0x7f, 0xdc, 0x3d, 0xc0, 0x34, 0x39, 0x3b, 0x70, 0x4d, 0x78, 0x9a, 0xf9, 0x81, 0x73, 0xf4, - 0x27, 0xeb, 0x83, 0x0f, 0x9c, 0xb4, 0xff, 0x78, 0xe0, 0x7a, 0xf0, 0x9d, 0x64, 0x95, 0x58, 0x9d, - 0x0e, 0x7d, 0x66, 0xed, 0x3d, 0x70, 0x7e, 0x35, 0xf5, 0x85, 0x7b, 0xd2, 0x6f, 0x1f, 0x06, 0x1d, - 0x51, 0xe2, 0xaf, 0x23, 0x3a, 0x60, 0x8d, 0x5b, 0xdb, 0x91, 0x6f, 0x75, 0x5e, 0xd2, 0x2b, 0x5d, - 0x60, 0x5b, 0x51, 0x24, 0xf4, 0x3e, 0x95, 0xff, 0x4e, 0x8a, 0xbd, 0x8d, 0xe4, 0xeb, 0xc9, 0x6e, - 0xb2, 0x62, 0x5d, 0xa7, 0x41, 0x3f, 0x95, 0xff, 0x03, 0x76, 0x51, 0x1b, 0x90, 0x6a, 0xfb, 0xde, - 0x69, 0x1b, 0xfd, 0x02, 0x3e, 0xc5, 0x4d, 0xe4, 0xb8, 0x87, 0x87, 0xf4, 0x0a, 0x9c, 0xff, 0x20, - 0xd5, 0x1e, 0xd2, 0x33, 0xc8, 0xcc, 0x1e, 0x26, 0xd2, 0x49, 0x3f, 0x0f, 0x96, 0x68, 0x11, 0x07, - 0xcd, 0x9b, 0xd2, 0x9c, 0x27, 0x9f, 0xfd, 0x87, 0x69, 0x99, 0xca, 0x91, 0xf4, 0x6b, 0x39, 0x07, - 0xa5, 0xee, 0x48, 0xeb, 0xce, 0x79, 0x30, 0x4b, 0xb9, 0x9e, 0xcd, 0xcc, 0x4d, 0x89, 0xd3, 0xc4, - 0x36, 0x7a, 0x37, 0x06, 0xe2, 0xbf, 0xa2, 0xe4, 0x02, 0xbd, 0x1f, 0x6e, 0xfc, 0xf5, 0xa5, 0xfe, - 0xbf, 0xbd, 0x44, 0x41, 0xad, 0x74, 0x1b, 0xac, 0x17, 0x35, 0x43, 0xd1, 0x9f, 0xab, 0x10, 0x41, - 0xd5, 0xd0, 0x1b, 0x50, 0x19, 0xfe, 0xad, 0xf6, 0x75, 0x90, 0x1f, 0x25, 0x31, 0x54, 0xf8, 0x5c, - 0x85, 0xa2, 0x20, 0xdd, 0x02, 0xd7, 0x47, 0x7b, 0xf7, 0x1a, 0x3b, 0x2a, 0xac, 0xa9, 0xa6, 0x6a, - 0x88, 0x53, 0xd2, 0x13, 0xb0, 0x35, 0x4a, 0x51, 0x94, 0x4d, 0x79, 0x47, 0x36, 0x54, 0x54, 0xd7, - 0x0d, 0xb3, 0x04, 0x55, 0x03, 0x19, 0x6a, 0x65, 0x17, 0x95, 0x75, 0xc3, 0x54, 0x8b, 0xe2, 0xb4, - 0xf4, 0x0e, 0x78, 0x7b, 0x02, 0x53, 0x75, 0xdf, 0xf8, 0xb8, 0x32, 0xc0, 0x31, 0x23, 0x6d, 0x83, - 0xcd, 0x49, 0x1c, 0x7a, 0xad, 0xa4, 0x17, 0x77, 0x06, 0x78, 0x66, 0xa5, 0xb7, 0xc0, 0x83, 0x2c, - 0xd0, 0x60, 0xd1, 0x10, 0xcf, 0x49, 0x0f, 0xc1, 0xdd, 0x54, 0x48, 0x84, 0xf2, 0xbc, 0x74, 0x1f, - 0x14, 0x46, 0x29, 0xe5, 0x7a, 0xbd, 0xa2, 0x29, 0xb2, 0xa9, 0xe9, 0x35, 0x54, 0x36, 0xcd, 0xba, - 0x38, 0x27, 0xdd, 0x03, 0xb7, 0x27, 0xd3, 0x99, 0x4a, 0x5d, 0x9c, 0x4f, 0x26, 0x7b, 0xa1, 0xd5, - 0x8a, 0xfa, 0x0b, 0x03, 0x15, 0x55, 0x63, 0xcf, 0xd4, 0xeb, 0x22, 0x90, 0xde, 0x06, 0x0f, 0x27, - 0xe0, 0x33, 0x3e, 0xae, 0xb0, 0x35, 0xa3, 0x18, 0x2f, 0xa4, 0x28, 0xb8, 0x3f, 0x75, 0xb5, 0x68, - 0x94, 0xb5, 0x5d, 0x53, 0x5c, 0x90, 0xde, 0x05, 0xef, 0x64, 0x1a, 0x3f, 0xae, 0xe2, 0x8b, 0x29, - 0x72, 0xa0, 0x5a, 0xd4, 0x06, 0x97, 0x7e, 0x31, 0xeb, 0xa2, 0x94, 0x94, 0xba, 0x78, 0x29, 0xd3, - 0xa2, 0x10, 0x4a, 0x31, 0xb3, 0x7a, 0x08, 0xf5, 0x65, 0xe9, 0x03, 0xf0, 0xde, 0x67, 0x51, 0x0f, - 0xdf, 0x0f, 0x15, 0xd5, 0x30, 0x44, 0x49, 0xfa, 0x12, 0x78, 0x94, 0x85, 0x59, 0xfe, 0xa4, 0x01, - 0x55, 0xf1, 0x8a, 0xf4, 0x00, 0xdc, 0x99, 0x40, 0x5e, 0xdc, 0xaf, 0xc9, 0x55, 0xbd, 0xb8, 0x23, - 0x5e, 0x4d, 0x31, 0x71, 0x45, 0x36, 0x0c, 0xb9, 0x56, 0x84, 0x32, 0xda, 0x53, 0xf7, 0x8d, 0xba, - 0xac, 0xa8, 0x86, 0xb8, 0x94, 0xb2, 0x6a, 0x7d, 0x9e, 0xf8, 0x1a, 0x2c, 0x4b, 0x4f, 0xc1, 0xbb, - 0x13, 0xb8, 0xd4, 0x8a, 0x6c, 0x98, 0x9a, 0x62, 0xa8, 0x32, 0x54, 0xca, 0x03, 0x9c, 0x2b, 0x99, - 0xd6, 0x9b, 0xf3, 0xcb, 0x4a, 0x59, 0x15, 0xf3, 0x29, 0xda, 0x62, 0x1c, 0x55, 0xb5, 0xaa, 0xc3, - 0xfd, 0xe2, 0x8e, 0xb8, 0x9a, 0x49, 0x00, 0xd5, 0x2c, 0x62, 0x02, 0xae, 0xa5, 0x4c, 0x86, 0x71, - 0x28, 0x95, 0x86, 0x61, 0x0e, 0x19, 0xef, 0x9a, 0xb4, 0x01, 0xee, 0xa7, 0x5a, 0x17, 0x5b, 0xc5, - 0xeb, 0xd2, 0x26, 0xd8, 0xc8, 0x64, 0x5f, 0x8c, 0x7e, 0x3d, 0x65, 0x31, 0xfb, 0xf4, 0x55, 0x4d, - 0x81, 0xba, 0xa1, 0xef, 0x9a, 0xe2, 0x0d, 0xe9, 0x2b, 0x60, 0x7b, 0xd2, 0x62, 0xea, 0xca, 0x1e, - 0xd4, 0x65, 0xa5, 0x3c, 0xe4, 0xe7, 0x6e, 0xa6, 0xd8, 0x7e, 0xe4, 0x1b, 0x65, 0xb3, 0x22, 0x1b, - 0xe2, 0xad, 0x94, 0x3d, 0x65, 0xd4, 0xf4, 0x17, 0xbb, 0x15, 0x79, 0x4f, 0x15, 0x6f, 0x8f, 0x19, - 0x57, 0x57, 0x62, 0xda, 0x2d, 0x1a, 0xa8, 0x0e, 0xf5, 0xaf, 0xed, 0x8b, 0x85, 0x31, 0xa6, 0x18, - 0xa7, 0x2e, 0x6b, 0xa5, 0x32, 0x92, 0x9f, 0xcb, 0x5a, 0x45, 0xde, 0xd1, 0x2a, 0x9a, 0xb9, 0x2f, - 0xde, 0x91, 0xde, 0x03, 0x4f, 0x52, 0xb8, 0xe8, 0x0e, 0xd1, 0x14, 0x04, 0xd5, 0x92, 0x66, 0x98, - 0x90, 0xba, 0x4e, 0xf1, 0x6e, 0xb2, 0x17, 0x36, 0xe4, 0x6a, 0x25, 0xee, 0x62, 0xc5, 0x7b, 0x52, - 0x01, 0xdc, 0x18, 0xa5, 0x53, 0x95, 0x6d, 0xf6, 0xaf, 0x24, 0x35, 0x45, 0x15, 0xef, 0x8f, 0x31, - 0x3a, 0x5d, 0x19, 0x76, 0xc3, 0xa8, 0xa6, 0xd7, 0x90, 0x5c, 0x14, 0x1f, 0x48, 0x77, 0xc1, 0xad, - 0x49, 0xe7, 0x22, 0xfd, 0xb7, 0x8a, 0x87, 0xc9, 0xb6, 0x1f, 0x3f, 0x01, 0xe4, 0x17, 0x06, 0x52, - 0xf4, 0x9a, 0xa1, 0x57, 0x54, 0xf1, 0xd1, 0xc6, 0x1f, 0x0b, 0x60, 0x71, 0xf0, 0xcf, 0xce, 0xa4, - 0x9b, 0x60, 0xad, 0x37, 0x82, 0x61, 0xca, 0x66, 0xc3, 0x18, 0x3a, 0xbe, 0xd7, 0xc0, 0xca, 0x30, - 0x81, 0xd1, 0x50, 0x14, 0xe2, 0xa9, 0x84, 0xc4, 0xce, 0x3d, 0xad, 0x5e, 0x57, 0x8b, 0xe2, 0x94, - 0xb4, 0x0a, 0x96, 0x86, 0x3b, 0x55, 0x08, 0x75, 0x28, 0x4e, 0x27, 0xf1, 0xc9, 0x3b, 0x3a, 0xa4, - 0x27, 0xf1, 0xc6, 0x4f, 0xa6, 0xc0, 0xb4, 0x62, 0xca, 0xd2, 0x15, 0x70, 0x49, 0x31, 0xe5, 0xd1, - 0xbf, 0x95, 0x21, 0x8d, 0x72, 0xc3, 0x2c, 0x93, 0x89, 0xd5, 0x54, 0xc5, 0xd4, 0x49, 0x1c, 0xb1, - 0x02, 0xae, 0xd0, 0x76, 0xc5, 0xd4, 0x9e, 0x93, 0xf0, 0xc2, 0x30, 0x34, 0xbd, 0x46, 0xc2, 0x87, - 0x5e, 0x07, 0x81, 0x8c, 0xa0, 0xfa, 0x71, 0x43, 0x35, 0x4c, 0x43, 0x9c, 0x8e, 0x3a, 0xea, 0x50, - 0xad, 0x6a, 0x8d, 0x2a, 0x32, 0x1a, 0xf5, 0xba, 0x0e, 0x4d, 0x71, 0x26, 0xea, 0x30, 0x21, 0xd9, - 0xd2, 0x45, 0x54, 0x54, 0x9f, 0x6b, 0xc4, 0x17, 0xce, 0x46, 0xb2, 0x1b, 0xf5, 0x12, 0x94, 0x8b, - 0x2a, 0xda, 0x91, 0x6b, 0x35, 0x15, 0x8a, 0xe7, 0x22, 0x86, 0x1d, 0xad, 0x52, 0xd1, 0x6a, 0x25, - 0x64, 0x34, 0xaa, 0x55, 0x19, 0xee, 0x8b, 0xe7, 0xa3, 0x19, 0x70, 0xd9, 0x15, 0xcd, 0x30, 0xc5, - 0x39, 0xfa, 0xe7, 0x23, 0xfd, 0xc6, 0xaa, 0x5e, 0xd3, 0x4c, 0x1d, 0x6a, 0xb5, 0x92, 0x38, 0x4f, - 0xff, 0xd6, 0xc4, 0x94, 0x91, 0xfa, 0x35, 0x53, 0x85, 0x35, 0xb9, 0x82, 0xe4, 0x46, 0x51, 0x33, - 0x91, 0x61, 0xea, 0x50, 0x2e, 0xa9, 0x22, 0x88, 0x00, 0xe8, 0x7b, 0x04, 0x85, 0x41, 0x74, 0xb7, - 0x5f, 0x53, 0xc4, 0x0b, 0x92, 0x08, 0x16, 0x28, 0x5f, 0xcd, 0x84, 0x32, 0xd2, 0x8a, 0xe2, 0xc2, - 0xc6, 0xbf, 0x9d, 0x03, 0x4b, 0x89, 0x75, 0xe7, 0xe4, 0xb4, 0xd0, 0x6a, 0xa6, 0x5a, 0x62, 0x76, - 0x8e, 0xd4, 0x1a, 0xd4, 0x2b, 0x15, 0xb4, 0xa7, 0xd5, 0x86, 0xff, 0x82, 0xe5, 0x36, 0x58, 0x1f, - 0x47, 0x68, 0x54, 0x64, 0x65, 0x4f, 0x14, 0x88, 0x91, 0x8e, 0x23, 0x21, 0x86, 0xa7, 0x6b, 0x45, - 0x45, 0x9c, 0x22, 0xf1, 0xc7, 0x38, 0xaa, 0xba, 0x5c, 0x52, 0x61, 0xb1, 0x61, 0xee, 0x8b, 0xd3, - 0x93, 0xe4, 0xa9, 0x55, 0x59, 0xab, 0x88, 0x33, 0x24, 0x58, 0x1c, 0x47, 0xf2, 0x4c, 0x83, 0xb2, - 0x38, 0x2b, 0xdd, 0x01, 0x37, 0xc7, 0x51, 0x50, 0x83, 0x83, 0x45, 0xf1, 0x1c, 0xd9, 0xd9, 0xe3, - 0x88, 0xaa, 0xb2, 0x69, 0xaa, 0xb0, 0xaa, 0x1b, 0xa6, 0x78, 0x7e, 0xd2, 0xf4, 0xaa, 0x06, 0x32, - 0x55, 0xb9, 0x6a, 0x88, 0x73, 0x93, 0xa8, 0xf4, 0xba, 0x51, 0x52, 0x6b, 0x9a, 0x2a, 0xce, 0x4f, - 0x82, 0x4e, 0x96, 0x53, 0x04, 0x13, 0x27, 0x27, 0x57, 0x77, 0xc5, 0x0b, 0x93, 0x71, 0x2b, 0x65, - 0xad, 0xa6, 0xd2, 0xc5, 0x97, 0xbe, 0x0c, 0x1e, 0xa7, 0xd3, 0xa1, 0x92, 0x66, 0x96, 0x1b, 0x3b, - 0x74, 0xc7, 0x90, 0x9d, 0x72, 0x51, 0xda, 0x02, 0x6f, 0x65, 0x60, 0x53, 0x34, 0xa8, 0x54, 0x54, - 0x45, 0x13, 0x17, 0x89, 0xf7, 0xc9, 0x26, 0xa7, 0x22, 0xef, 0x88, 0x97, 0xc8, 0x09, 0x97, 0x81, - 0xfc, 0x99, 0x5a, 0xdb, 0xd3, 0x6a, 0x86, 0x28, 0x66, 0xa4, 0x97, 0x6b, 0x86, 0xb6, 0x53, 0x51, - 0xc5, 0xcb, 0x93, 0xd4, 0x43, 0xce, 0x42, 0x4d, 0x51, 0x6b, 0xfa, 0x0b, 0x51, 0x9a, 0xb4, 0x60, - 0xbd, 0x1d, 0x74, 0x85, 0x9c, 0x1b, 0x63, 0x2d, 0x49, 0x36, 0xe5, 0xa2, 0x5e, 0x42, 0x5a, 0x4d, - 0xd1, 0x8a, 0x6a, 0xcd, 0x44, 0x55, 0xb9, 0x26, 0x97, 0xd4, 0xaa, 0x5a, 0x33, 0xc5, 0xab, 0x1b, - 0x1f, 0x81, 0xf3, 0xfc, 0x21, 0x9e, 0x38, 0x86, 0x5d, 0x55, 0x36, 0x49, 0x30, 0x31, 0xe2, 0x54, - 0xa3, 0x8e, 0x61, 0x37, 0x23, 0x6c, 0xfc, 0xa1, 0x00, 0xd6, 0x26, 0x94, 0xc9, 0x13, 0xb5, 0x47, - 0xcc, 0x50, 0x55, 0xf4, 0x6a, 0x55, 0xad, 0x15, 0x19, 0xc8, 0x44, 0x07, 0xbe, 0x01, 0xee, 0x4f, - 0x26, 0xaf, 0xe9, 0x26, 0xa3, 0x15, 0x88, 0x0a, 0x27, 0xd3, 0x16, 0xf5, 0x9a, 0x2a, 0x4e, 0xed, - 0x7c, 0xe3, 0x6f, 0x7f, 0x7a, 0x43, 0xf8, 0xbb, 0x9f, 0xde, 0x10, 0xfe, 0xf1, 0xa7, 0x37, 0x84, - 0x4f, 0xf4, 0x23, 0x37, 0x7c, 0xd9, 0x3d, 0xd8, 0xb4, 0xbd, 0xd6, 0xd6, 0x91, 0x6f, 0x9d, 0xb8, - 0x2c, 0x51, 0x6b, 0x35, 0xb7, 0x7a, 0xff, 0x73, 0x6b, 0x75, 0xdc, 0xad, 0x23, 0xdc, 0xde, 0xa2, - 0x3f, 0x69, 0xd8, 0x3a, 0xf2, 0x86, 0xfe, 0xf8, 0xf6, 0x83, 0xd8, 0xd7, 0x93, 0xc7, 0x07, 0xe7, - 0x28, 0xd9, 0x93, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x04, 0x74, 0xeb, 0x28, 0x57, 0x00, - 0x00, + // 5417 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7c, 0x5b, 0x8c, 0xdb, 0xd8, + 0x79, 0xbf, 0x38, 0x17, 0x7b, 0x7c, 0x6c, 0x8f, 0x69, 0xda, 0x1e, 0x6b, 0x66, 0x3c, 0xbe, 0xc8, + 0xf7, 0xd9, 0xcd, 0x78, 0x3d, 0xde, 0x64, 0x9d, 0xdd, 0xfd, 0xff, 0xb7, 0x1c, 0x8a, 0x23, 0xd1, + 0x23, 0x89, 0xda, 0x43, 0xca, 0x8e, 0x37, 0x08, 0x4e, 0x39, 0xe4, 0x99, 0x19, 0x76, 0x24, 0x51, + 0x21, 0xa9, 0x99, 0x1d, 0x14, 0x45, 0xd2, 0xb4, 0x0d, 0x8a, 0x26, 0x69, 0x5a, 0xa0, 0x08, 0x0a, + 0x04, 0x28, 0x5a, 0xf4, 0x82, 0x3e, 0x14, 0xe8, 0x53, 0x91, 0xa7, 0x02, 0x0d, 0xd0, 0x87, 0x3e, + 0x16, 0xe8, 0x63, 0x5f, 0x8a, 0x3c, 0xf5, 0xad, 0x4f, 0x2d, 0x7a, 0x45, 0x8b, 0x73, 0xa1, 0x48, + 0x49, 0x94, 0xc8, 0xdd, 0x3a, 0x0d, 0x60, 0xbf, 0x49, 0xe7, 0x7c, 0x97, 0xdf, 0xf9, 0xce, 0x77, + 0xbe, 0x73, 0xf9, 0x3e, 0x09, 0x3c, 0x0c, 0x71, 0x1b, 0xf7, 0x3c, 0x3f, 0x7c, 0xd4, 0x0f, 0xac, + 0x7d, 0x8c, 0x8f, 0x70, 0x37, 0x0c, 0x1e, 0x1d, 0x3d, 0x4e, 0x7e, 0xdd, 0xe8, 0xf9, 0x5e, 0xe8, + 0x49, 0x57, 0x23, 0xd2, 0x8d, 0x64, 0xdf, 0xd1, 0xe3, 0x95, 0xfb, 0x03, 0x19, 0x96, 0x6d, 0xe3, + 0x20, 0x68, 0xbb, 0x41, 0x48, 0x44, 0xc4, 0xdf, 0x98, 0x84, 0xd2, 0x3a, 0x90, 0x5a, 0xda, 0x96, + 0xd5, 0xed, 0x62, 0x5f, 0x69, 0xbb, 0xf6, 0xa1, 0x4a, 0x44, 0x48, 0x97, 0xc1, 0xbc, 0xd5, 0xc6, + 0x7e, 0x58, 0x14, 0x6e, 0x0a, 0x0f, 0xce, 0x40, 0xf6, 0xa5, 0xb4, 0x0d, 0x1e, 0xb4, 0x34, 0xbd, + 0xbb, 0xeb, 0x59, 0xbe, 0xa3, 0x78, 0x9d, 0x5e, 0x1b, 0x87, 0xb8, 0xe2, 0x99, 0x5e, 0xd9, 0x0a, + 0x0e, 0x58, 0x63, 0x2c, 0x61, 0x05, 0x2c, 0xf4, 0x03, 0xec, 0x77, 0xad, 0x0e, 0xe6, 0x42, 0x06, + 0xdf, 0x4b, 0x77, 0xc1, 0xed, 0x81, 0x1c, 0xd9, 0x71, 0xb6, 0x5d, 0x3f, 0x08, 0x21, 0x0e, 0xbc, + 0xbe, 0x6f, 0xe3, 0x58, 0x44, 0x69, 0x3d, 0xa1, 0x6e, 0x94, 0xac, 0x66, 0x85, 0x49, 0xc0, 0xa5, + 0x8f, 0xc0, 0xad, 0x01, 0xad, 0x81, 0x43, 0xc5, 0xc7, 0x0e, 0xee, 0x86, 0xae, 0xd5, 0x36, 0xfa, + 0xbb, 0x1d, 0x37, 0xcc, 0xc6, 0x94, 0x14, 0xf0, 0x71, 0x1f, 0x07, 0xa1, 0xeb, 0x75, 0xbb, 0x96, + 0xeb, 0xe3, 0xbc, 0x02, 0x7e, 0x09, 0xdc, 0x1d, 0x08, 0x80, 0x78, 0xdf, 0x0d, 0x08, 0xc0, 0x03, + 0xab, 0xdd, 0xc6, 0xdd, 0xfd, 0xbc, 0x42, 0xa4, 0x65, 0xb0, 0xd0, 0xd9, 0xb3, 0x50, 0x78, 0xd2, + 0xc3, 0xc5, 0x19, 0xda, 0x77, 0xba, 0xb3, 0x67, 0x99, 0x27, 0x3d, 0x2c, 0xad, 0x01, 0xd0, 0xf6, + 0xf6, 0xdd, 0x2e, 0xda, 0x6b, 0x7b, 0xc7, 0xc5, 0x59, 0xda, 0x79, 0x86, 0xb6, 0x6c, 0xb7, 0xbd, + 0x63, 0x86, 0x1f, 0x62, 0xdb, 0x3b, 0xc2, 0xfe, 0x89, 0xe2, 0x39, 0x38, 0x50, 0xbc, 0x6e, 0xe8, + 0x76, 0xfb, 0x38, 0xe7, 0xa4, 0x7c, 0x00, 0xd6, 0xc6, 0x04, 0xf4, 0x4e, 0x72, 0x32, 0x7f, 0x08, + 0xae, 0x8f, 0x30, 0x37, 0x7d, 0xb7, 0x1b, 0xe6, 0xe4, 0x2e, 0x01, 0xb1, 0xec, 0x06, 0x94, 0xb9, + 0x8e, 0x43, 0xcb, 0xb1, 0x42, 0x4b, 0x5a, 0x04, 0x33, 0xae, 0xc3, 0x29, 0x67, 0x5c, 0xa7, 0x64, + 0x81, 0x62, 0x44, 0x13, 0xf9, 0xc0, 0x80, 0x56, 0x05, 0x0b, 0x3e, 0x6f, 0xa3, 0x1c, 0x8b, 0x9b, + 0x0f, 0x37, 0x26, 0x2c, 0x8c, 0x8d, 0x51, 0x21, 0x70, 0xc0, 0x5a, 0x3a, 0x04, 0x52, 0xd4, 0x6b, + 0x84, 0xb8, 0x67, 0x84, 0x56, 0xd8, 0x0f, 0xa4, 0x8f, 0xc0, 0xa9, 0x80, 0x7e, 0xe2, 0xa2, 0xef, + 0x67, 0x8a, 0x66, 0x8c, 0x90, 0xb3, 0x91, 0xb5, 0x84, 0x7d, 0xdf, 0xf3, 0xf9, 0x84, 0xb2, 0x2f, + 0xa5, 0x3f, 0x12, 0xc0, 0x52, 0x4b, 0x4b, 0xb0, 0xf8, 0x21, 0x76, 0x98, 0xa9, 0x54, 0xb0, 0xd0, + 0xe1, 0x43, 0xa3, 0x3a, 0xcf, 0xe6, 0x18, 0x4e, 0x64, 0x0b, 0x38, 0x60, 0x95, 0x94, 0x01, 0xf0, + 0x19, 0x2a, 0xe4, 0xad, 0x1c, 0xc0, 0xa3, 0x51, 0x47, 0xe0, 0x4b, 0xff, 0x25, 0x80, 0x9b, 0x31, + 0xcc, 0xc8, 0x68, 0x06, 0x6e, 0x63, 0x9b, 0xac, 0x90, 0x57, 0x0a, 0xb8, 0x9e, 0x98, 0x46, 0x06, + 0xf9, 0x71, 0xee, 0x69, 0x8c, 0xc5, 0x45, 0x22, 0x12, 0xe3, 0x9f, 0xfd, 0xfc, 0xe3, 0xff, 0xb5, + 0x19, 0x12, 0x84, 0x22, 0x02, 0xad, 0x1b, 0xe2, 0x7d, 0xdf, 0x22, 0x23, 0x97, 0x5f, 0x18, 0xba, + 0x56, 0x56, 0x14, 0xaf, 0xdb, 0xc5, 0x76, 0xf8, 0xda, 0xdb, 0xe1, 0x47, 0x33, 0x49, 0x3f, 0x28, + 0x5b, 0xa1, 0xb5, 0x6b, 0x05, 0x18, 0x96, 0x0d, 0xb5, 0xeb, 0x7b, 0xed, 0xf6, 0xeb, 0x3e, 0x7e, + 0xe9, 0x29, 0x28, 0x06, 0xd4, 0xe9, 0xb1, 0x83, 0x22, 0xc9, 0x01, 0xb2, 0xbd, 0x7e, 0x37, 0x2c, + 0xce, 0xdd, 0x14, 0x1e, 0xcc, 0xc2, 0xa5, 0xa8, 0x3f, 0x82, 0x12, 0x28, 0xa4, 0xb7, 0xf4, 0x6f, + 0x02, 0xb8, 0x16, 0x5b, 0x6e, 0xa7, 0xbf, 0x8b, 0xd5, 0x9d, 0x37, 0xc4, 0x6a, 0xa5, 0x67, 0xa0, + 0xd8, 0xd2, 0x14, 0xab, 0xdd, 0x36, 0x3d, 0x99, 0xc6, 0x8b, 0xc4, 0x86, 0xb0, 0x01, 0x66, 0x6d, + 0x3e, 0xe2, 0xc5, 0xcd, 0x6b, 0x13, 0xa5, 0x2b, 0xa6, 0x0c, 0x09, 0x61, 0xe9, 0x7b, 0xf3, 0x49, + 0x3b, 0x96, 0x71, 0xaf, 0xed, 0x9d, 0x18, 0xd8, 0x3f, 0x72, 0x6d, 0xfc, 0xda, 0x7b, 0xdf, 0x3e, + 0x38, 0xef, 0xd0, 0x01, 0xa3, 0x0e, 0x0e, 0x0f, 0x3c, 0x87, 0xba, 0xdc, 0xe2, 0xe6, 0xd6, 0x44, + 0x59, 0xd3, 0x0c, 0xb5, 0xc1, 0x9a, 0xea, 0x54, 0x12, 0x3c, 0xe7, 0x24, 0xbe, 0x49, 0x16, 0x38, + 0xcb, 0x15, 0xd1, 0x23, 0xc8, 0x3c, 0x55, 0xf3, 0x73, 0xff, 0x1b, 0x35, 0xe4, 0xec, 0x02, 0x81, + 0x33, 0xf8, 0x5c, 0x42, 0xe0, 0x5c, 0x12, 0x80, 0xb4, 0x06, 0x96, 0xcb, 0x6a, 0xb3, 0xa6, 0xbf, + 0x44, 0x75, 0xd5, 0xac, 0xea, 0x65, 0xd4, 0x6a, 0x18, 0x4d, 0x55, 0xd1, 0xb6, 0x35, 0xb5, 0x2c, + 0x16, 0xa4, 0x25, 0x20, 0x0d, 0x77, 0xcb, 0x2d, 0x53, 0x17, 0x05, 0xa9, 0x08, 0x2e, 0x0f, 0xb7, + 0xd7, 0xe5, 0x46, 0x4b, 0xae, 0x89, 0x33, 0x25, 0x0c, 0x40, 0xac, 0x5a, 0x5a, 0x05, 0x57, 0x39, + 0x9d, 0xf9, 0xb2, 0xa9, 0x8e, 0x08, 0xbf, 0x0e, 0x56, 0x92, 0x9d, 0x5a, 0xc3, 0x30, 0xe5, 0x5a, + 0x0d, 0x19, 0x0a, 0xd4, 0x9a, 0xa6, 0x28, 0x48, 0x2b, 0x60, 0x29, 0xd9, 0x2f, 0xd7, 0xe5, 0x4f, + 0xf4, 0x06, 0x52, 0x15, 0x43, 0x9c, 0x29, 0xfd, 0x70, 0x0e, 0xdc, 0x89, 0xc7, 0xaf, 0xf8, 0xd8, + 0x0a, 0x71, 0xf4, 0xed, 0x44, 0xf1, 0xba, 0x7b, 0xee, 0xfe, 0x6b, 0xef, 0x97, 0x1e, 0x38, 0x6f, + 0xd3, 0x91, 0x0e, 0xfb, 0xe5, 0xb3, 0x1c, 0x0e, 0x33, 0xd9, 0x60, 0x1b, 0xec, 0x73, 0xe4, 0x9f, + 0x76, 0xe2, 0x5b, 0xe9, 0x4f, 0x04, 0x70, 0x2e, 0xd9, 0x4d, 0xbc, 0x47, 0xd1, 0x1b, 0xdb, 0x5a, + 0x25, 0xdd, 0x7b, 0xc6, 0xba, 0xe5, 0x17, 0x06, 0x52, 0x95, 0x4d, 0x64, 0x18, 0x75, 0x51, 0x20, + 0xf3, 0x9f, 0xde, 0xad, 0x6a, 0x8a, 0x2a, 0xce, 0xa4, 0xb3, 0xc3, 0xb2, 0x41, 0x5d, 0x60, 0x56, + 0x5a, 0x06, 0x57, 0x52, 0xd8, 0x77, 0x0c, 0x71, 0xae, 0xf4, 0x9f, 0x02, 0xb8, 0x91, 0xb2, 0x5f, + 0xf2, 0x7b, 0xc1, 0x6b, 0x1f, 0xf8, 0x7f, 0x79, 0x26, 0xb9, 0x38, 0xa2, 0xe1, 0xb3, 0x99, 0xeb, + 0xfb, 0xb8, 0x6e, 0xd6, 0x8c, 0xd7, 0xde, 0x06, 0xbf, 0x39, 0x03, 0x1e, 0x27, 0x03, 0x64, 0x70, + 0x18, 0x7a, 0x3d, 0xb2, 0x0d, 0x1e, 0xe1, 0xb2, 0xeb, 0x63, 0x3b, 0xf4, 0xfc, 0x13, 0xd3, 0xf3, + 0xda, 0x81, 0xd6, 0x0d, 0x42, 0xeb, 0x0d, 0x38, 0x0d, 0x7c, 0x67, 0x06, 0x6c, 0x64, 0x19, 0x64, + 0xe0, 0x22, 0xaf, 0xbd, 0x35, 0xfe, 0x6c, 0x06, 0xdc, 0x8b, 0xad, 0x21, 0xf7, 0x43, 0x2f, 0xfa, + 0x9c, 0x38, 0x42, 0xbe, 0xf6, 0x3b, 0xc8, 0x7d, 0x70, 0x21, 0xfd, 0x38, 0xbd, 0xe8, 0x0f, 0x1f, + 0xa3, 0xbf, 0x39, 0x03, 0x6e, 0xc7, 0xe6, 0x52, 0x95, 0x4d, 0xba, 0x6a, 0xba, 0x6f, 0xd2, 0x5d, + 0xf4, 0x5f, 0x04, 0xb0, 0x3c, 0x7a, 0xe2, 0x22, 0x1b, 0xd5, 0x1b, 0x36, 0x70, 0x76, 0x72, 0x68, + 0x78, 0xce, 0xeb, 0x1f, 0x23, 0xfe, 0x43, 0x00, 0xd7, 0x47, 0x07, 0x2e, 0xf7, 0x7a, 0xe4, 0x98, + 0xfd, 0x06, 0x1c, 0x22, 0xbe, 0x3d, 0x03, 0x1e, 0x4e, 0x39, 0x44, 0x68, 0x72, 0xbd, 0xe9, 0xb5, + 0x5d, 0xfb, 0xe4, 0xb5, 0x37, 0xc4, 0x7f, 0x0b, 0xa0, 0x14, 0x1b, 0xa2, 0xe9, 0xbb, 0x5d, 0xdb, + 0xed, 0x59, 0xed, 0xe0, 0xcd, 0xd9, 0x2c, 0xff, 0x5d, 0x00, 0x6b, 0xb1, 0x05, 0x4c, 0x1c, 0x84, + 0xfc, 0xe1, 0xed, 0x4d, 0x88, 0xfb, 0xff, 0x2c, 0x80, 0x62, 0x22, 0x0a, 0xf0, 0xc4, 0x8b, 0xf3, + 0xda, 0x8f, 0x7b, 0x95, 0x44, 0x7d, 0x1e, 0xed, 0xf1, 0x31, 0xf4, 0xda, 0xc9, 0xe4, 0xd0, 0x0d, + 0xe2, 0x10, 0x43, 0x9d, 0x86, 0x75, 0x94, 0x24, 0xb8, 0x45, 0x2e, 0x60, 0xc3, 0xdc, 0xe4, 0xb8, + 0xd0, 0x4e, 0x90, 0xbc, 0x0d, 0xd6, 0x47, 0x48, 0x9e, 0xbb, 0xf8, 0xb8, 0xec, 0xd9, 0xfd, 0x0e, + 0xee, 0x86, 0xd6, 0xf0, 0x83, 0x55, 0xe9, 0x2f, 0x04, 0x70, 0x45, 0x0e, 0x02, 0x97, 0xf8, 0x1e, + 0x9d, 0x82, 0x81, 0xef, 0xdd, 0x07, 0x17, 0x6c, 0xaf, 0x7b, 0x84, 0xfd, 0x80, 0xf2, 0xa0, 0x41, + 0xe2, 0x62, 0x31, 0xd9, 0xac, 0x39, 0xd2, 0x2d, 0x70, 0x2e, 0xf4, 0x42, 0xab, 0x8d, 0x42, 0xef, + 0x10, 0x77, 0xd9, 0xc3, 0xfc, 0x2c, 0x3c, 0x4b, 0xdb, 0x4c, 0xda, 0x24, 0xdd, 0x06, 0xe7, 0x7b, + 0xbe, 0xd7, 0xe9, 0x85, 0x11, 0xcd, 0x2c, 0xa5, 0x39, 0xc7, 0x1a, 0x39, 0xd1, 0x5b, 0xe0, 0xa2, + 0x3d, 0xc0, 0x10, 0x11, 0xb2, 0x73, 0x93, 0x18, 0x77, 0x30, 0xe2, 0xd2, 0xdf, 0x09, 0xe0, 0x32, + 0xc3, 0xad, 0x7e, 0x8a, 0xed, 0xfe, 0xe7, 0x80, 0xbd, 0x06, 0x40, 0xd7, 0x73, 0x30, 0x3f, 0x9f, + 0x31, 0xd0, 0x67, 0x48, 0x0b, 0x3d, 0x9a, 0x8d, 0x8d, 0x6a, 0x36, 0xc7, 0xa8, 0xe6, 0xf2, 0x8e, + 0x6a, 0x7e, 0xc2, 0xa8, 0x9e, 0x82, 0x15, 0x36, 0xa8, 0x06, 0x3e, 0x56, 0x12, 0x70, 0x07, 0xd9, + 0x26, 0xdb, 0x0a, 0xf1, 0xbe, 0xe7, 0x9f, 0x44, 0xd9, 0xa6, 0xe8, 0x7b, 0xe9, 0xcf, 0x05, 0x70, + 0x89, 0xb1, 0xca, 0x34, 0x19, 0x0a, 0xf1, 0xd7, 0xfb, 0x38, 0x08, 0x09, 0xc6, 0xc8, 0x7f, 0xd9, + 0xeb, 0x17, 0x63, 0x3c, 0x17, 0x35, 0xd2, 0xe7, 0xa4, 0x9f, 0xc9, 0x0c, 0xfe, 0x50, 0x00, 0xe7, + 0x22, 0xc4, 0xa4, 0x59, 0x5a, 0x02, 0xa7, 0x2c, 0xfa, 0x89, 0x63, 0xe4, 0xdf, 0x7e, 0x36, 0xe8, + 0xee, 0x00, 0x89, 0x19, 0xb2, 0xe6, 0x06, 0xe1, 0xc4, 0xfc, 0xdd, 0x37, 0x40, 0x31, 0x49, 0xd5, + 0xd9, 0x4d, 0xe4, 0xfa, 0x24, 0x30, 0x97, 0xc8, 0x0b, 0xd2, 0xcf, 0x92, 0x0e, 0x2e, 0x74, 0x28, + 0x55, 0x70, 0xe0, 0xf6, 0xd0, 0xa1, 0xdb, 0x75, 0xe8, 0x68, 0x16, 0x37, 0xef, 0xc5, 0xa1, 0x24, + 0x91, 0xcc, 0x3e, 0x7a, 0xbc, 0x51, 0x1f, 0x90, 0xef, 0xb8, 0x5d, 0x07, 0x2e, 0x76, 0x86, 0xbe, + 0x97, 0xbe, 0x0a, 0xc4, 0x18, 0x00, 0x5b, 0xf4, 0x52, 0x65, 0x2c, 0x78, 0x4e, 0x0e, 0x54, 0xe3, + 0x63, 0x8c, 0xc3, 0xe7, 0xb0, 0xf0, 0x56, 0xcf, 0xf9, 0xe9, 0x09, 0x2f, 0x63, 0x12, 0xfc, 0x5f, + 0x9d, 0xf0, 0xbf, 0x14, 0xc0, 0xd2, 0xe8, 0xc4, 0xbc, 0x62, 0xeb, 0x48, 0x9f, 0x44, 0x73, 0x89, + 0x06, 0xf2, 0xb2, 0xf6, 0x98, 0x49, 0xbe, 0x12, 0x4d, 0x6b, 0x7d, 0x1a, 0xfe, 0x57, 0x3c, 0x01, + 0xff, 0xe7, 0xf8, 0x5f, 0xf1, 0x1c, 0xff, 0x54, 0xf1, 0x7f, 0x6b, 0x26, 0x89, 0xbf, 0xe2, 0x5b, + 0xdd, 0x30, 0x30, 0xbd, 0x56, 0x80, 0x7d, 0x69, 0x03, 0x5c, 0xa2, 0x3b, 0x06, 0xf2, 0xbd, 0x36, + 0x0e, 0xd0, 0x3e, 0xe9, 0xc3, 0x2c, 0x26, 0xcc, 0xc3, 0x8b, 0xb4, 0x8b, 0xec, 0xb9, 0x41, 0x85, + 0x75, 0x48, 0x32, 0x58, 0x63, 0xf4, 0x6e, 0xf7, 0x00, 0xfb, 0x2e, 0x4d, 0xb5, 0x0d, 0x71, 0xce, + 0x52, 0xce, 0x15, 0x4a, 0xa4, 0x45, 0x34, 0x43, 0x22, 0xde, 0x01, 0x97, 0x99, 0x88, 0xd0, 0xb7, + 0xdc, 0x30, 0xe6, 0x9c, 0xa1, 0x9c, 0x12, 0xed, 0x33, 0x69, 0x57, 0xc4, 0xa1, 0x80, 0xeb, 0xa3, + 0x4a, 0x47, 0x78, 0xe7, 0x28, 0xef, 0xea, 0xb0, 0xd6, 0x21, 0x21, 0xa5, 0x1f, 0xcc, 0x26, 0x8d, + 0x00, 0xf1, 0x91, 0x8b, 0x8f, 0x5f, 0xf5, 0x22, 0x7a, 0x0a, 0x96, 0x1d, 0xeb, 0x24, 0x40, 0x3d, + 0x2b, 0x08, 0x51, 0x17, 0x7f, 0x1a, 0x22, 0xab, 0xef, 0xb8, 0x21, 0x22, 0xae, 0xce, 0xc7, 0x77, + 0x85, 0x10, 0x34, 0x2d, 0xb2, 0x27, 0x7e, 0x1a, 0xca, 0xa4, 0xb7, 0x4c, 0x20, 0x6c, 0x83, 0x1b, + 0x89, 0x50, 0xea, 0xe3, 0xaf, 0xf7, 0x5d, 0x1f, 0x93, 0x13, 0x4e, 0x80, 0xec, 0x03, 0xab, 0xbb, + 0xcf, 0x2d, 0xbb, 0x00, 0xd7, 0x62, 0x32, 0x98, 0xa0, 0x52, 0x18, 0x91, 0xf4, 0x14, 0x14, 0x7d, + 0x3a, 0x34, 0xb4, 0x47, 0x84, 0xe0, 0xae, 0x7d, 0x32, 0x10, 0x30, 0x47, 0x05, 0x2c, 0xb1, 0xfe, + 0xed, 0xa8, 0x3b, 0xe2, 0xfc, 0x10, 0xac, 0x72, 0x4e, 0xc7, 0x3a, 0x41, 0xde, 0x1e, 0xea, 0x78, + 0xdd, 0xf0, 0x60, 0xc0, 0x3c, 0x4f, 0x99, 0xaf, 0x32, 0x92, 0xb2, 0x75, 0xa2, 0xef, 0xd5, 0x49, + 0x7f, 0xc4, 0xfd, 0x65, 0xb0, 0xdc, 0xed, 0x53, 0xf7, 0xf5, 0xf6, 0x90, 0x8f, 0x3b, 0xde, 0x11, + 0x76, 0x10, 0x87, 0x5a, 0x3c, 0x45, 0x47, 0xbe, 0xc4, 0x08, 0xf4, 0x3d, 0xc8, 0xba, 0xf9, 0x5e, + 0x50, 0xfa, 0x1d, 0x61, 0x7c, 0x62, 0x5e, 0xf5, 0xea, 0x7a, 0x0c, 0xae, 0xb0, 0x8d, 0x08, 0x91, + 0x9d, 0x08, 0xf1, 0x81, 0xba, 0x0e, 0xaf, 0xf7, 0x90, 0xac, 0x11, 0xfd, 0x9a, 0x53, 0xfa, 0xae, + 0x00, 0x96, 0x13, 0xb5, 0x04, 0x2c, 0x1b, 0x3c, 0x69, 0xeb, 0x94, 0xb6, 0xc0, 0x5c, 0x62, 0xff, + 0xdb, 0x98, 0x88, 0x72, 0x4c, 0x22, 0xdd, 0x07, 0x29, 0xaf, 0xb4, 0x0a, 0xce, 0xf4, 0x03, 0xec, + 0x23, 0xba, 0xcf, 0xce, 0xc6, 0xf5, 0x37, 0x0d, 0xab, 0x83, 0x4b, 0x1e, 0x39, 0x4b, 0x8f, 0x71, + 0xd3, 0x9a, 0x14, 0x76, 0x9c, 0x6a, 0x8c, 0xd9, 0x6a, 0x33, 0x3f, 0x8a, 0x94, 0x4d, 0xc7, 0x07, + 0x37, 0x53, 0x14, 0x46, 0x37, 0x9b, 0x9f, 0x8e, 0xce, 0xbf, 0x17, 0xc0, 0xa5, 0x41, 0x91, 0x19, + 0x5d, 0x9b, 0x4c, 0x4f, 0xae, 0x63, 0x5f, 0xe2, 0x99, 0x12, 0x79, 0xbe, 0xbb, 0xef, 0x76, 0xf9, + 0xec, 0x0e, 0x9e, 0x29, 0x75, 0xda, 0x2a, 0xdd, 0x05, 0x8b, 0x76, 0xdb, 0xeb, 0x3b, 0xa8, 0xe7, + 0x7b, 0x47, 0xae, 0x83, 0x7d, 0x6e, 0xec, 0xf3, 0xb4, 0xb5, 0xc9, 0x1b, 0x25, 0x1d, 0x2c, 0x38, + 0xfc, 0x3d, 0x83, 0x2e, 0x9d, 0xb3, 0x9b, 0x4f, 0x32, 0x6f, 0x48, 0xd8, 0x89, 0x9e, 0x40, 0xe2, + 0xd1, 0x45, 0x42, 0x4a, 0xcf, 0xc1, 0xca, 0x64, 0x3a, 0xe9, 0x2a, 0x38, 0xed, 0xec, 0x26, 0x47, + 0x77, 0xca, 0xd9, 0xa5, 0xe3, 0xba, 0x01, 0xce, 0x3a, 0xbb, 0x88, 0x56, 0x02, 0xda, 0x5e, 0x9b, + 0x8f, 0x09, 0x38, 0xbb, 0x4d, 0xde, 0x52, 0xfa, 0x27, 0x01, 0xac, 0x6c, 0x63, 0x2b, 0xec, 0xfb, + 0x18, 0x62, 0xdb, 0xeb, 0x74, 0x70, 0xd7, 0x49, 0x9c, 0xb3, 0x87, 0xdc, 0x4a, 0x18, 0x76, 0x2b, + 0xe9, 0x7d, 0x70, 0x7a, 0x8f, 0xb1, 0x72, 0xd7, 0xbd, 0x39, 0x71, 0x8c, 0x91, 0x8a, 0x88, 0x41, + 0xfa, 0x14, 0xac, 0xf1, 0x8f, 0xc8, 0x1f, 0xd2, 0x8b, 0x12, 0xf7, 0xca, 0xc5, 0xcd, 0x77, 0x33, + 0x25, 0x0e, 0x31, 0xf3, 0x0b, 0xe6, 0xea, 0xde, 0xe4, 0xce, 0xd2, 0x31, 0xb8, 0x6c, 0xca, 0x15, + 0x76, 0x55, 0xc2, 0x1f, 0xf7, 0xb1, 0xcf, 0xdf, 0x97, 0x6e, 0x00, 0x76, 0x8e, 0x46, 0xe4, 0xe2, + 0xc3, 0x8a, 0xc1, 0x66, 0x21, 0xa0, 0x4d, 0x0d, 0xd2, 0x12, 0x13, 0x60, 0x67, 0x1f, 0x47, 0x67, + 0x6f, 0x46, 0xa0, 0x92, 0x16, 0x72, 0x8d, 0x72, 0x03, 0x14, 0xf4, 0x69, 0x3c, 0xe0, 0x21, 0xf7, + 0x8c, 0x1b, 0x18, 0xac, 0xa1, 0xf4, 0x8f, 0xb3, 0xe0, 0x2a, 0x0b, 0x34, 0x15, 0xdf, 0xea, 0x1d, + 0xc8, 0x2f, 0x0c, 0xc3, 0xb6, 0xba, 0x51, 0xb1, 0xc4, 0x25, 0x2e, 0xdb, 0xde, 0x44, 0x2e, 0x7f, + 0xf9, 0x66, 0x20, 0xe6, 0xe0, 0x45, 0xa6, 0xc3, 0x1e, 0x3c, 0x89, 0x27, 0xb0, 0x90, 0xc9, 0x60, + 0x58, 0xe6, 0x38, 0x16, 0xb2, 0x35, 0x07, 0xf1, 0x4d, 0x61, 0xdf, 0xf7, 0xfa, 0x3d, 0x86, 0x66, + 0x8e, 0xdf, 0x14, 0x2a, 0xb4, 0x29, 0x96, 0x41, 0x37, 0x61, 0xea, 0xa6, 0x91, 0x0c, 0xba, 0xe7, + 0x12, 0x5f, 0x67, 0x04, 0x3d, 0xaf, 0xed, 0xda, 0x2e, 0x66, 0x97, 0xb5, 0x39, 0x78, 0x9e, 0xb6, + 0x36, 0x79, 0xa3, 0xf4, 0x36, 0x90, 0x38, 0xf6, 0xc3, 0x00, 0xd9, 0xed, 0x7e, 0x10, 0x46, 0x71, + 0x7b, 0x0e, 0x8a, 0x0c, 0xfa, 0x61, 0xa0, 0xf0, 0xf6, 0x78, 0xa4, 0xbe, 0x13, 0x24, 0x46, 0x7a, + 0x3a, 0x31, 0x52, 0xe8, 0x04, 0xf1, 0x48, 0x1f, 0x00, 0x26, 0x03, 0x05, 0x4f, 0xd0, 0x6e, 0xdf, + 0x3e, 0xc4, 0x61, 0x50, 0x5c, 0xa0, 0xc4, 0x0c, 0x9c, 0xf1, 0x64, 0x8b, 0xb5, 0x92, 0xb3, 0x01, + 0xa7, 0xb4, 0x3a, 0xed, 0xc1, 0xfa, 0x0c, 0x8a, 0x67, 0x28, 0x35, 0xc3, 0x68, 0x58, 0x9d, 0x76, + 0xb4, 0x48, 0x13, 0x1c, 0x9e, 0xeb, 0xd8, 0x09, 0x0e, 0x90, 0xe0, 0xd0, 0x5d, 0xc7, 0x8e, 0x39, + 0x06, 0x26, 0xb1, 0x6c, 0x7a, 0x5e, 0x08, 0x8a, 0x67, 0x13, 0x26, 0x91, 0x79, 0x63, 0xe9, 0x07, + 0x02, 0xb8, 0xd3, 0xd2, 0x12, 0x93, 0xad, 0xf8, 0xde, 0x71, 0xf7, 0x19, 0x3e, 0xc6, 0xed, 0xb2, + 0xbb, 0xb7, 0xf7, 0xdc, 0xc5, 0xc7, 0x6c, 0xde, 0x9f, 0x82, 0xa2, 0xb5, 0xb7, 0x37, 0x5c, 0x76, + 0x84, 0x12, 0x95, 0x8e, 0x67, 0xe0, 0x52, 0xd4, 0x3f, 0xa8, 0xcd, 0x63, 0x2f, 0x30, 0xef, 0x82, + 0xa5, 0x71, 0xce, 0x44, 0x5d, 0xe9, 0xe5, 0x51, 0x3e, 0x5a, 0x9c, 0xb1, 0x0d, 0xae, 0x19, 0xd8, + 0xee, 0xfb, 0x6e, 0x78, 0x02, 0xe9, 0xb2, 0xaa, 0xe0, 0x10, 0xe2, 0xa0, 0xdf, 0xe6, 0x1b, 0x41, + 0xda, 0x4d, 0x4d, 0x02, 0x73, 0xe4, 0xdc, 0xc1, 0xcf, 0x20, 0xf4, 0x73, 0xc9, 0x02, 0x97, 0x06, + 0xa9, 0xfd, 0x6d, 0x1c, 0xda, 0x07, 0x8c, 0x7d, 0x3c, 0x3a, 0x0a, 0x69, 0xd1, 0x71, 0x2c, 0x24, + 0xcf, 0x8c, 0x87, 0xe4, 0xd2, 0xf7, 0x05, 0x20, 0x11, 0x5f, 0x36, 0xad, 0xe0, 0x90, 0x2c, 0x5d, + 0x3c, 0x88, 0x48, 0xa1, 0x15, 0x1c, 0x26, 0x83, 0xdd, 0x02, 0x69, 0x88, 0x6a, 0x68, 0xdd, 0x20, + 0xe8, 0x0f, 0x49, 0x3d, 0x43, 0x5b, 0x68, 0xf7, 0x65, 0x30, 0x4f, 0xa2, 0x4b, 0xb4, 0x41, 0xb2, + 0x2f, 0x24, 0xf6, 0x0f, 0xfc, 0x30, 0x91, 0xa2, 0x9a, 0x87, 0x8b, 0x83, 0x66, 0x96, 0xa2, 0xfa, + 0xeb, 0xf7, 0xc1, 0x85, 0x16, 0x89, 0x42, 0x14, 0x89, 0xde, 0xc5, 0xfa, 0x9e, 0xd4, 0x02, 0x17, + 0xfa, 0x2e, 0xda, 0xa5, 0xf5, 0xd5, 0xc8, 0x6e, 0xbb, 0xf6, 0x61, 0xe6, 0x61, 0x63, 0xbc, 0x1c, + 0xbb, 0x5a, 0x80, 0xe7, 0xfb, 0x6e, 0xa2, 0x55, 0xfa, 0xa1, 0x00, 0x1e, 0xf6, 0x5d, 0xe4, 0xb1, + 0x72, 0x63, 0xc4, 0xef, 0xe4, 0x18, 0xed, 0x7b, 0x28, 0xf4, 0x90, 0x13, 0xd5, 0x63, 0x73, 0x8d, + 0xec, 0x0d, 0x4e, 0x9e, 0xa2, 0x31, 0x5f, 0x51, 0x77, 0xb5, 0x00, 0x6f, 0xf7, 0xdd, 0x4c, 0x5a, + 0xe9, 0x3b, 0x02, 0xb8, 0x9d, 0x40, 0x67, 0x39, 0x0e, 0xda, 0x73, 0x7d, 0x7a, 0x36, 0xe2, 0xb3, + 0xca, 0x70, 0xb1, 0x9d, 0xef, 0xc3, 0x6c, 0x5c, 0x93, 0x8b, 0xc4, 0xab, 0x05, 0x78, 0x7d, 0x00, + 0x29, 0x95, 0x6c, 0xd4, 0x56, 0x29, 0x68, 0xda, 0x56, 0x38, 0x98, 0x9d, 0xf9, 0xbc, 0xb6, 0xca, + 0xa8, 0x48, 0x1f, 0xb2, 0xd5, 0x64, 0x5a, 0xe9, 0x57, 0x05, 0x70, 0x33, 0x81, 0x2e, 0xc0, 0x21, + 0xb2, 0x07, 0xc5, 0xeb, 0x28, 0xa0, 0x75, 0xe3, 0x34, 0x58, 0x9e, 0xdd, 0x7c, 0x3f, 0x1b, 0xd4, + 0xa4, 0xd2, 0xf7, 0x6a, 0x01, 0x5e, 0x1b, 0xa0, 0x49, 0x21, 0x92, 0x7e, 0x4b, 0x00, 0x77, 0x12, + 0x30, 0x7c, 0x5e, 0xa8, 0x42, 0x8e, 0xe8, 0xac, 0x82, 0x3d, 0x82, 0x72, 0x9a, 0x42, 0xf9, 0xff, + 0xd9, 0x50, 0xa6, 0xd5, 0xc0, 0x57, 0x0b, 0xf0, 0xe6, 0x00, 0xce, 0x04, 0xc2, 0xc8, 0x32, 0x3e, + 0xaf, 0x2a, 0x47, 0x36, 0xd9, 0x65, 0x91, 0xcd, 0xab, 0xda, 0xf9, 0x74, 0x2d, 0x64, 0x5a, 0x26, + 0xa3, 0x26, 0x9e, 0x59, 0x66, 0x32, 0x91, 0xf4, 0x29, 0xb8, 0x96, 0x86, 0xa2, 0x77, 0xc2, 0x11, + 0x9c, 0xa1, 0x08, 0xbe, 0x94, 0x1f, 0x41, 0xb2, 0xa8, 0xbe, 0x5a, 0x80, 0xc5, 0x31, 0xed, 0x9c, + 0x40, 0xfa, 0x45, 0xb0, 0x36, 0xae, 0xb9, 0xe7, 0xbb, 0xdd, 0x90, 0xab, 0x06, 0x54, 0xf5, 0x7b, + 0x79, 0x55, 0x8f, 0x94, 0xe4, 0x57, 0x0b, 0x70, 0x79, 0x44, 0x77, 0x4c, 0x21, 0xb5, 0xc1, 0x72, + 0xdf, 0x45, 0x0e, 0x0f, 0xe2, 0xe4, 0xd4, 0xe5, 0x93, 0xad, 0x84, 0x0a, 0xa7, 0x9b, 0xda, 0xd9, + 0xcd, 0x47, 0x39, 0xca, 0xbc, 0x92, 0x85, 0xed, 0xd5, 0x02, 0x5c, 0xea, 0xbb, 0xa9, 0x25, 0xef, + 0xdf, 0x61, 0xee, 0x37, 0x50, 0x17, 0xef, 0x75, 0x51, 0x76, 0x9f, 0x6b, 0x3e, 0x47, 0x35, 0x7f, + 0x39, 0x87, 0xe6, 0xf4, 0x5a, 0x75, 0xe6, 0x79, 0x19, 0xf5, 0xec, 0xdf, 0xa0, 0x8e, 0x37, 0x00, + 0xc3, 0x2b, 0x22, 0x03, 0x56, 0xdc, 0xc8, 0x81, 0x9c, 0xa7, 0x40, 0xbe, 0xf8, 0xb9, 0x4a, 0x23, + 0x99, 0xcf, 0x4d, 0x29, 0x65, 0xfd, 0x75, 0x16, 0x40, 0x63, 0x04, 0xfc, 0x40, 0x1f, 0xaf, 0x4b, + 0x06, 0x62, 0x91, 0x82, 0x78, 0x9a, 0x07, 0x44, 0x5a, 0x05, 0x5a, 0xb5, 0x00, 0x6f, 0x24, 0x70, + 0xa4, 0x16, 0xa9, 0xfd, 0x2e, 0x8b, 0x9e, 0xe3, 0x50, 0xec, 0x28, 0xf9, 0x88, 0x3a, 0x61, 0x3b, + 0xe0, 0x80, 0x2e, 0x50, 0x40, 0xff, 0xef, 0x33, 0x00, 0x1a, 0xaf, 0x09, 0xab, 0x16, 0xe0, 0x9d, + 0x71, 0x54, 0x31, 0x5d, 0xd8, 0xe6, 0x65, 0x31, 0x3f, 0x16, 0xc0, 0xd3, 0xe1, 0x79, 0xa2, 0x15, + 0x45, 0xc8, 0xa2, 0x25, 0x45, 0xc8, 0x89, 0x6a, 0x8a, 0x50, 0xe8, 0x79, 0x6d, 0x7e, 0x98, 0x6c, + 0xb7, 0x39, 0x52, 0x91, 0x22, 0x7d, 0x96, 0x6b, 0xfe, 0x72, 0x55, 0x6e, 0x55, 0x0b, 0xf0, 0x71, + 0x72, 0x52, 0xf3, 0x95, 0x7b, 0xfd, 0x48, 0x00, 0xef, 0xe6, 0x1a, 0x43, 0x6c, 0x6e, 0x86, 0xff, + 0x22, 0xc5, 0x5f, 0xf9, 0xdc, 0xf8, 0x87, 0x73, 0xc7, 0xd5, 0x02, 0xdc, 0xc8, 0x02, 0x3f, 0x92, + 0x6d, 0xfe, 0x3d, 0x01, 0xbc, 0x95, 0x44, 0x6e, 0xf5, 0xc9, 0xc9, 0x63, 0x70, 0x07, 0x4d, 0x54, + 0xc9, 0x33, 0xc0, 0x12, 0x05, 0xfc, 0x51, 0x0e, 0xc0, 0xd3, 0x6a, 0xa1, 0xaa, 0x05, 0x78, 0x2f, + 0x06, 0x3a, 0xb5, 0x6a, 0xea, 0x4f, 0x05, 0xf0, 0x28, 0xc3, 0x73, 0x5d, 0xab, 0xc3, 0x2e, 0x2f, + 0x27, 0x1c, 0xe4, 0x25, 0x0a, 0x72, 0xeb, 0xf3, 0xf8, 0xef, 0x70, 0x39, 0x42, 0xb5, 0x00, 0x1f, + 0x4e, 0x71, 0x62, 0xcd, 0xea, 0x24, 0x6b, 0x17, 0x7e, 0x5b, 0x00, 0xf7, 0x92, 0x50, 0x7b, 0x83, + 0x14, 0xff, 0xd8, 0xbc, 0x5f, 0xa6, 0x08, 0x3f, 0xc8, 0x81, 0x70, 0x52, 0x9d, 0x40, 0xb5, 0x00, + 0x4b, 0x31, 0xb4, 0x89, 0xd5, 0x04, 0xdf, 0x12, 0xc0, 0xad, 0x24, 0xa6, 0x10, 0x07, 0x21, 0x41, + 0xd3, 0x1d, 0x8a, 0xc7, 0x57, 0x32, 0x77, 0xbf, 0x29, 0x49, 0xfb, 0x6a, 0x01, 0xae, 0xc5, 0x48, + 0xd2, 0xb2, 0xfa, 0x3e, 0x58, 0x4d, 0x62, 0x88, 0xce, 0xb9, 0xd1, 0x3e, 0xb4, 0x94, 0xf1, 0x8a, + 0x3d, 0x29, 0x6b, 0xce, 0xb6, 0xdd, 0x09, 0x19, 0xf5, 0x36, 0x28, 0xf6, 0x5d, 0x72, 0x08, 0xb3, + 0x42, 0x8c, 0xba, 0xf8, 0x98, 0xde, 0x7f, 0xf9, 0x8e, 0x7b, 0x35, 0xe3, 0x21, 0x6a, 0x62, 0xbe, + 0xba, 0x5a, 0x80, 0x97, 0xfb, 0xee, 0x78, 0xa7, 0x74, 0x42, 0x37, 0xf9, 0x51, 0x6d, 0x81, 0x75, + 0x14, 0xa9, 0x2c, 0x66, 0x5a, 0x78, 0x4a, 0x16, 0x9c, 0x0d, 0x34, 0x9d, 0x40, 0xfa, 0x06, 0xb8, + 0x91, 0x36, 0x50, 0x9a, 0x25, 0xe7, 0xca, 0x97, 0x33, 0x37, 0x98, 0xa9, 0x19, 0xf6, 0x6a, 0x01, + 0xae, 0x8c, 0x8e, 0x3a, 0x26, 0x91, 0xfe, 0x80, 0x85, 0x90, 0x51, 0x04, 0xec, 0xa1, 0x38, 0x99, + 0x85, 0xe7, 0x68, 0x56, 0x28, 0x1a, 0x25, 0x2f, 0x9a, 0x29, 0xc9, 0xfc, 0x6a, 0x01, 0xde, 0x1d, + 0x01, 0x96, 0x4e, 0x2d, 0xfd, 0xb1, 0x00, 0x36, 0x92, 0x2e, 0xe8, 0xc6, 0x4f, 0x8d, 0xc8, 0x3a, + 0x0e, 0xd8, 0xd3, 0x00, 0x5f, 0x16, 0xdc, 0x2b, 0x57, 0x33, 0xaf, 0x10, 0xf9, 0x7e, 0x4f, 0x56, + 0x2d, 0xc0, 0x07, 0xb1, 0x97, 0x26, 0x69, 0x8f, 0x03, 0xdd, 0x75, 0xec, 0xa1, 0xdf, 0x9e, 0x7d, + 0x57, 0x00, 0x77, 0xd3, 0x8f, 0x0c, 0x4e, 0x80, 0x30, 0x7d, 0x14, 0xe5, 0xf0, 0xae, 0xe5, 0x3e, + 0x42, 0xa5, 0xff, 0xcc, 0x6b, 0xf8, 0x08, 0x35, 0xa0, 0x71, 0x82, 0xe4, 0x8f, 0x9a, 0x42, 0xe6, + 0xd6, 0x64, 0xbf, 0x0d, 0x3d, 0xc4, 0xd2, 0xd3, 0x6c, 0x16, 0x39, 0x8a, 0xb5, 0xcc, 0xa5, 0x9b, + 0xfe, 0xbb, 0x21, 0xee, 0xd1, 0xe9, 0xbf, 0x29, 0xfa, 0x1a, 0xb8, 0x68, 0xd1, 0x3c, 0x39, 0x8a, + 0xb3, 0xd4, 0xc5, 0xeb, 0x54, 0xd3, 0xe4, 0x67, 0xf3, 0xd4, 0x9a, 0x8e, 0x6a, 0x01, 0x8a, 0xd6, + 0x48, 0x47, 0x14, 0x12, 0x93, 0x2e, 0xc0, 0x2d, 0x4b, 0x8f, 0xc7, 0x7c, 0x64, 0x37, 0x32, 0x17, + 0xec, 0x94, 0xa7, 0x76, 0x16, 0x12, 0xa7, 0xbd, 0xc5, 0xf3, 0xa3, 0x72, 0x0a, 0x88, 0xc1, 0x2b, + 0x00, 0xc3, 0x71, 0x33, 0x73, 0x9e, 0xa7, 0xbf, 0xc0, 0xb3, 0x79, 0xce, 0x78, 0xa5, 0xff, 0x15, + 0x81, 0x06, 0x91, 0xe8, 0xde, 0xf8, 0xf5, 0xe4, 0x2f, 0xa7, 0xa3, 0x2b, 0xe3, 0xad, 0xbc, 0xb7, + 0xd7, 0x49, 0xbf, 0xbb, 0x1e, 0xba, 0xbd, 0xa6, 0x10, 0x49, 0x9f, 0x00, 0x3e, 0x59, 0x08, 0x47, + 0x25, 0x2e, 0xc5, 0x12, 0xd5, 0xfa, 0x85, 0x8c, 0x69, 0x1f, 0x2e, 0x89, 0xa9, 0x16, 0xe0, 0x05, + 0x6b, 0xb8, 0x5d, 0xea, 0x80, 0xab, 0x5c, 0x36, 0x09, 0x50, 0xc9, 0xca, 0x98, 0xe2, 0xed, 0x8c, + 0x97, 0xfb, 0xc9, 0x05, 0x2a, 0xd5, 0x02, 0xbc, 0x62, 0xa5, 0xf5, 0x4a, 0xbb, 0xe0, 0x4a, 0xfc, + 0x4a, 0xc2, 0x02, 0x23, 0x9b, 0xce, 0x3b, 0x54, 0xd9, 0xdb, 0x13, 0x95, 0xa5, 0xe4, 0x36, 0xaa, + 0x05, 0x78, 0xc9, 0x4f, 0x49, 0x79, 0x1c, 0x83, 0x6b, 0x13, 0x1e, 0xd7, 0x99, 0xaa, 0xbb, 0x19, + 0xe3, 0x9a, 0x9c, 0x10, 0x20, 0x01, 0x7f, 0x6f, 0x72, 0xba, 0x60, 0x17, 0xf0, 0x51, 0x23, 0x9e, + 0x31, 0xf3, 0x59, 0xed, 0x4d, 0xf1, 0x5e, 0xc6, 0xe0, 0x52, 0xea, 0x75, 0xc8, 0xe0, 0xac, 0x94, + 0x32, 0x9e, 0x1a, 0x38, 0x3f, 0xd0, 0x41, 0x67, 0xe9, 0x3e, 0x95, 0x7d, 0x37, 0x53, 0x36, 0x21, + 0xae, 0x16, 0xe0, 0x39, 0x2b, 0x59, 0x69, 0xf3, 0x12, 0x48, 0xc9, 0xe4, 0x1e, 0x9b, 0x91, 0xe2, + 0x83, 0x8c, 0x42, 0xbb, 0xd1, 0x42, 0x13, 0x1a, 0x4d, 0x46, 0x8b, 0x4f, 0x46, 0x44, 0xf7, 0x69, + 0xd1, 0x42, 0xf1, 0x61, 0x6e, 0xd1, 0xac, 0xca, 0x61, 0x58, 0x34, 0xaf, 0x7c, 0x18, 0x11, 0xed, + 0xd0, 0x8c, 0x67, 0x71, 0x3d, 0xb7, 0x68, 0x96, 0x22, 0x1d, 0x16, 0xcd, 0xd3, 0xa6, 0x6d, 0xb0, + 0x9c, 0x14, 0xcd, 0xeb, 0x0a, 0xb8, 0x5d, 0xde, 0xca, 0x78, 0x17, 0x48, 0x2f, 0x34, 0xa9, 0x16, + 0xe0, 0x92, 0x95, 0x5e, 0x82, 0x92, 0xae, 0x8d, 0x9b, 0xea, 0xed, 0xcf, 0xa8, 0x6d, 0x60, 0xb0, + 0x31, 0x6d, 0xdc, 0x6c, 0xe9, 0xda, 0xb8, 0xf5, 0xbe, 0xf0, 0x19, 0xb5, 0x0d, 0x6c, 0x38, 0xa6, + 0x8d, 0x5b, 0xb2, 0x03, 0x56, 0x92, 0xda, 0x68, 0xb9, 0x41, 0x40, 0x76, 0xcb, 0x7e, 0x80, 0xfd, + 0xe2, 0x46, 0x6e, 0x75, 0xc9, 0x9a, 0x8b, 0x61, 0x75, 0x43, 0xd5, 0x18, 0xbf, 0x21, 0x80, 0x52, + 0xf2, 0x80, 0x90, 0xcc, 0x24, 0xc5, 0xcf, 0x2c, 0xc5, 0x47, 0x99, 0x6f, 0xb2, 0x99, 0xbf, 0xc1, + 0x60, 0x6f, 0xb2, 0x03, 0x32, 0x7b, 0x9c, 0x4c, 0x3a, 0x04, 0x57, 0x53, 0x5e, 0x58, 0xb0, 0x6b, + 0xe3, 0xe2, 0x3b, 0x99, 0x47, 0xec, 0x09, 0xbf, 0x80, 0x60, 0x47, 0xec, 0x91, 0x4e, 0xd7, 0xc6, + 0xa3, 0xca, 0xa2, 0xe3, 0xa6, 0xe7, 0xe0, 0xe2, 0xe3, 0xdc, 0xca, 0x46, 0x7e, 0x75, 0x30, 0xac, + 0x2c, 0xee, 0x94, 0xbe, 0x0a, 0x2e, 0x86, 0xd6, 0x3e, 0xdf, 0x87, 0x30, 0xd9, 0x10, 0xfd, 0x93, + 0xe2, 0x66, 0xc6, 0x5e, 0x94, 0x96, 0x70, 0x24, 0x7b, 0x51, 0x68, 0xed, 0x27, 0xdb, 0xa5, 0x10, + 0xac, 0x04, 0x3c, 0x3d, 0x83, 0x7c, 0x2a, 0x09, 0xed, 0x63, 0xfa, 0x90, 0xdd, 0x6f, 0x87, 0xc5, + 0x27, 0x19, 0x4f, 0x52, 0xd3, 0x32, 0x3b, 0xd5, 0x02, 0xbc, 0x1a, 0xa4, 0xf7, 0x8f, 0x2e, 0x0b, + 0x5e, 0xe0, 0xc0, 0x97, 0xfc, 0xbb, 0xb9, 0xfd, 0x34, 0x59, 0x16, 0x33, 0xec, 0xa7, 0x43, 0x05, + 0x33, 0xe9, 0xda, 0xf8, 0x22, 0xfc, 0xe2, 0x67, 0xd4, 0x96, 0xb6, 0x08, 0x87, 0xaa, 0x40, 0x76, + 0xc1, 0x95, 0xc8, 0x31, 0x4e, 0xd0, 0x1e, 0x0e, 0xed, 0x03, 0xbe, 0x07, 0x7e, 0x29, 0x63, 0x47, + 0x4a, 0x49, 0x6f, 0x91, 0x1d, 0xc9, 0x49, 0xc9, 0x7a, 0x7d, 0x6f, 0xe4, 0x35, 0x8f, 0x3b, 0x60, + 0xac, 0x97, 0xdd, 0xf1, 0x8b, 0xef, 0xe5, 0x7e, 0x3c, 0x9b, 0xfc, 0xe3, 0xd9, 0xe1, 0x27, 0xbd, + 0x54, 0x3a, 0xe9, 0x9b, 0x23, 0x37, 0xfb, 0xc3, 0xfe, 0x2e, 0xa6, 0xc9, 0xd9, 0xa1, 0x6b, 0xc2, + 0xd3, 0xdc, 0x0f, 0x9c, 0xe3, 0xff, 0x69, 0x30, 0xfc, 0xc0, 0x49, 0xfb, 0x0f, 0x87, 0xae, 0x07, + 0xdf, 0x4e, 0x37, 0x89, 0xd5, 0xeb, 0xd1, 0x67, 0xd6, 0xc1, 0x03, 0xe7, 0x97, 0x33, 0x5f, 0xb8, + 0xa7, 0xfd, 0x38, 0x66, 0x38, 0x10, 0xa5, 0xfe, 0x7c, 0xa6, 0x07, 0x56, 0xb9, 0xb7, 0xed, 0xfb, + 0x56, 0xef, 0x80, 0x5e, 0xe9, 0x02, 0xdb, 0x8a, 0x4e, 0x42, 0xef, 0x53, 0xfd, 0xef, 0x64, 0xf8, + 0xdb, 0x58, 0xbe, 0x9e, 0xac, 0x26, 0x2b, 0xd1, 0x75, 0x1c, 0xc4, 0xa9, 0xfc, 0xef, 0xb3, 0x8b, + 0xda, 0x90, 0x56, 0xdb, 0xf7, 0x8e, 0xbb, 0xe8, 0x17, 0xf0, 0x31, 0x6e, 0x23, 0xc7, 0xdd, 0xdb, + 0xa3, 0x57, 0xe0, 0xe2, 0x07, 0x99, 0xfe, 0x90, 0x9d, 0x41, 0x66, 0xfe, 0x30, 0x95, 0x4e, 0xfa, + 0x79, 0x70, 0x85, 0x16, 0x71, 0xd0, 0xbc, 0x29, 0xcd, 0x79, 0xf2, 0xd1, 0x7f, 0x98, 0x95, 0xa9, + 0x1c, 0x4b, 0xbf, 0x56, 0x0b, 0x50, 0xea, 0x8f, 0xb5, 0x6e, 0x9d, 0x06, 0xf3, 0x94, 0xeb, 0xd9, + 0xdc, 0xc2, 0x8c, 0x38, 0x4b, 0x7c, 0x63, 0x70, 0x63, 0x20, 0xf1, 0x2b, 0x4a, 0x2e, 0xd0, 0xfb, + 0xe1, 0xfa, 0x5f, 0x5d, 0x88, 0xff, 0x0e, 0x28, 0x3a, 0xd4, 0x4a, 0xb7, 0xc0, 0x5a, 0x59, 0x33, + 0x14, 0xfd, 0xb9, 0x0a, 0x11, 0x54, 0x0d, 0xbd, 0x05, 0x95, 0xd1, 0x1f, 0xf3, 0x5f, 0x03, 0xc5, + 0x71, 0x12, 0x43, 0x85, 0xcf, 0x55, 0x28, 0x0a, 0xd2, 0x4d, 0x70, 0x6d, 0xbc, 0x77, 0xa7, 0xb5, + 0xa5, 0xc2, 0x86, 0x6a, 0xaa, 0x86, 0x38, 0x23, 0x3d, 0x01, 0x8f, 0xc6, 0x29, 0xca, 0xb2, 0x29, + 0x6f, 0xc9, 0x86, 0x8a, 0x9a, 0xba, 0x61, 0x56, 0xa0, 0x6a, 0x20, 0x43, 0xad, 0x6d, 0xa3, 0xaa, + 0x6e, 0x98, 0x6a, 0x59, 0x9c, 0x95, 0xde, 0x01, 0x6f, 0x4f, 0x61, 0xaa, 0xbf, 0x34, 0x3e, 0xae, + 0x0d, 0x71, 0xcc, 0x49, 0x9b, 0x60, 0x63, 0x1a, 0x87, 0xde, 0xa8, 0xe8, 0xe5, 0xad, 0x21, 0x9e, + 0x79, 0xe9, 0x2d, 0x70, 0x3f, 0x0f, 0x34, 0x58, 0x36, 0xc4, 0x53, 0xd2, 0x03, 0x70, 0x27, 0x13, + 0x12, 0xa1, 0x3c, 0x2d, 0xdd, 0x03, 0xa5, 0x71, 0x4a, 0xb9, 0xd9, 0xac, 0x69, 0x8a, 0x6c, 0x6a, + 0x7a, 0x03, 0x55, 0x4d, 0xb3, 0x29, 0x2e, 0x48, 0x77, 0xc1, 0xad, 0xe9, 0x74, 0xa6, 0xd2, 0x14, + 0xcf, 0xa4, 0x93, 0xbd, 0xd0, 0x1a, 0x65, 0xfd, 0x85, 0x81, 0xca, 0xaa, 0xb1, 0x63, 0xea, 0x4d, + 0x11, 0x48, 0x6f, 0x83, 0x07, 0x53, 0xf0, 0x19, 0x1f, 0xd7, 0xd8, 0x9c, 0x51, 0x8c, 0x67, 0x33, + 0x0c, 0x1c, 0x0f, 0x5d, 0x2d, 0x1b, 0x55, 0x6d, 0xdb, 0x14, 0xcf, 0x49, 0xef, 0x82, 0x77, 0x72, + 0xc9, 0x4f, 0x9a, 0xf8, 0x7c, 0x86, 0x1e, 0xa8, 0x96, 0xb5, 0xe1, 0xa9, 0x5f, 0xcc, 0x3b, 0x29, + 0x15, 0xa5, 0x29, 0x5e, 0xc8, 0x35, 0x29, 0x84, 0x52, 0xcc, 0x6d, 0x1e, 0x42, 0x7d, 0x51, 0xfa, + 0x00, 0xbc, 0xf7, 0x59, 0xcc, 0xc3, 0xd7, 0x43, 0x4d, 0x35, 0x0c, 0x51, 0x92, 0xbe, 0x00, 0x1e, + 0xe6, 0x61, 0x96, 0x3f, 0x69, 0x41, 0x55, 0xbc, 0x24, 0xdd, 0x07, 0xb7, 0xa7, 0x90, 0x97, 0x5f, + 0x36, 0xe4, 0xba, 0x5e, 0xde, 0x12, 0x2f, 0x67, 0xb8, 0xb8, 0x22, 0x1b, 0x86, 0xdc, 0x28, 0x43, + 0x19, 0xed, 0xa8, 0x2f, 0x8d, 0xa6, 0xac, 0xa8, 0x86, 0x78, 0x25, 0x63, 0xd6, 0x62, 0x9e, 0xe4, + 0x1c, 0x2c, 0x49, 0x4f, 0xc1, 0xbb, 0x53, 0xb8, 0xd4, 0x9a, 0x6c, 0x98, 0x9a, 0x62, 0xa8, 0x32, + 0x54, 0xaa, 0x43, 0x9c, 0x57, 0x73, 0xcd, 0x37, 0xe7, 0x97, 0x95, 0xaa, 0x2a, 0x16, 0x33, 0xac, + 0xc5, 0x38, 0xea, 0x6a, 0x5d, 0x87, 0x2f, 0xcb, 0x5b, 0xe2, 0x72, 0x2e, 0x05, 0xd4, 0xb2, 0x88, + 0x29, 0x58, 0xc9, 0x18, 0x0c, 0xe3, 0x50, 0x6a, 0x2d, 0xc3, 0x1c, 0x71, 0xde, 0x55, 0x69, 0x1d, + 0xdc, 0xcb, 0xf4, 0x2e, 0x36, 0x8b, 0xd7, 0xa4, 0x0d, 0xb0, 0x9e, 0xcb, 0xbf, 0x18, 0xfd, 0x5a, + 0xc6, 0x64, 0xc6, 0xf4, 0x75, 0x4d, 0x81, 0xba, 0xa1, 0x6f, 0x9b, 0xe2, 0x75, 0xe9, 0x4b, 0x60, + 0x73, 0xda, 0x64, 0xea, 0xca, 0x0e, 0xd4, 0x65, 0xa5, 0x3a, 0x12, 0xe7, 0x6e, 0x64, 0xf8, 0x7e, + 0x14, 0x1b, 0x65, 0xb3, 0x26, 0x1b, 0xe2, 0xcd, 0x8c, 0x35, 0x65, 0x34, 0xf4, 0x17, 0xdb, 0x35, + 0x79, 0x47, 0x15, 0x6f, 0x4d, 0x90, 0xab, 0x2b, 0x09, 0xeb, 0x96, 0x0d, 0xd4, 0x84, 0xfa, 0x57, + 0x5e, 0x8a, 0xa5, 0x09, 0xae, 0x98, 0xa4, 0xae, 0x6a, 0x95, 0x2a, 0x92, 0x9f, 0xcb, 0x5a, 0x4d, + 0xde, 0xd2, 0x6a, 0x9a, 0xf9, 0x52, 0xbc, 0x2d, 0xbd, 0x07, 0x9e, 0x64, 0x70, 0xd1, 0x15, 0xa2, + 0x29, 0x08, 0xaa, 0x15, 0xcd, 0x30, 0x21, 0x0d, 0x9d, 0xe2, 0x9d, 0xf4, 0x28, 0x6c, 0xc8, 0xf5, + 0x5a, 0x32, 0xc4, 0x8a, 0x77, 0xa5, 0x12, 0xb8, 0x3e, 0x4e, 0xa7, 0x2a, 0x9b, 0xec, 0x6f, 0x6b, + 0x1a, 0x8a, 0x2a, 0xde, 0x9b, 0xe0, 0x74, 0xba, 0x32, 0x1a, 0x86, 0x51, 0x43, 0x6f, 0x20, 0xb9, + 0x2c, 0xde, 0x97, 0xee, 0x80, 0x9b, 0xd3, 0xf6, 0x45, 0xfa, 0x77, 0x26, 0x0f, 0xd2, 0x7d, 0x3f, + 0xb9, 0x03, 0xc8, 0x2f, 0x0c, 0xa4, 0xe8, 0x0d, 0x43, 0xaf, 0xa9, 0xe2, 0xc3, 0xf5, 0x3f, 0x14, + 0xc0, 0xe2, 0xf0, 0xbf, 0xe1, 0x49, 0x37, 0xc0, 0xea, 0x40, 0x82, 0x61, 0xca, 0x66, 0xcb, 0x18, + 0xd9, 0xbe, 0x57, 0xc1, 0xd5, 0x51, 0x02, 0xa3, 0xa5, 0x28, 0x24, 0x52, 0x09, 0xa9, 0x9d, 0x3b, + 0x5a, 0xb3, 0xa9, 0x96, 0xc5, 0x19, 0x69, 0x19, 0x5c, 0x19, 0xed, 0x54, 0x21, 0xd4, 0xa1, 0x38, + 0x9b, 0xc6, 0x27, 0x6f, 0xe9, 0x90, 0xee, 0xc4, 0xeb, 0x3f, 0x9e, 0x01, 0xb3, 0x8a, 0x29, 0x4b, + 0x97, 0xc0, 0x05, 0xc5, 0x94, 0xc7, 0xff, 0x77, 0x88, 0x34, 0xca, 0x2d, 0xb3, 0x4a, 0x06, 0xd6, + 0x50, 0x15, 0x53, 0x27, 0xe7, 0x88, 0xab, 0xe0, 0x12, 0x6d, 0x57, 0x4c, 0xed, 0x39, 0x39, 0x5e, + 0x18, 0x86, 0xa6, 0x37, 0xc8, 0xf1, 0x61, 0xd0, 0x41, 0x20, 0x23, 0xa8, 0x7e, 0xdc, 0x52, 0x0d, + 0xd3, 0x10, 0x67, 0xa3, 0x8e, 0x26, 0x54, 0xeb, 0x5a, 0xab, 0x8e, 0x8c, 0x56, 0xb3, 0xa9, 0x43, + 0x53, 0x9c, 0x8b, 0x3a, 0x4c, 0x48, 0x96, 0x74, 0x19, 0x95, 0xd5, 0xe7, 0x1a, 0x89, 0x85, 0xf3, + 0x91, 0xee, 0x56, 0xb3, 0x02, 0xe5, 0xb2, 0x8a, 0xb6, 0xe4, 0x46, 0x43, 0x85, 0xe2, 0xa9, 0x88, + 0x61, 0x4b, 0xab, 0xd5, 0xb4, 0x46, 0x05, 0x19, 0xad, 0x7a, 0x5d, 0x86, 0x2f, 0xc5, 0xd3, 0xd1, + 0x08, 0xb8, 0xee, 0x9a, 0x66, 0x98, 0xe2, 0x02, 0xfd, 0x77, 0x9a, 0xb8, 0xb1, 0xae, 0x37, 0x34, + 0x53, 0x87, 0x5a, 0xa3, 0x22, 0x9e, 0xa1, 0xff, 0x7b, 0x63, 0xca, 0x48, 0xfd, 0x8a, 0xa9, 0xc2, + 0x86, 0x5c, 0x43, 0x72, 0xab, 0xac, 0x99, 0xc8, 0x30, 0x75, 0x28, 0x57, 0x54, 0x11, 0x44, 0x00, + 0xf4, 0x1d, 0x82, 0xc2, 0x20, 0xb6, 0x7b, 0xd9, 0x50, 0xc4, 0xb3, 0x92, 0x08, 0xce, 0x51, 0xbe, + 0x86, 0x09, 0x65, 0xa4, 0x95, 0xc5, 0x73, 0xeb, 0xff, 0x7a, 0x0a, 0x5c, 0x49, 0xad, 0x3b, 0x27, + 0xbb, 0x85, 0xd6, 0x30, 0xd5, 0x0a, 0xf3, 0x73, 0xa4, 0x36, 0xa0, 0x5e, 0xab, 0xa1, 0x1d, 0xad, + 0x31, 0xfa, 0x1f, 0x3d, 0xb7, 0xc0, 0xda, 0x24, 0x42, 0xa3, 0x26, 0x2b, 0x3b, 0xa2, 0x40, 0x9c, + 0x74, 0x12, 0x09, 0x71, 0x3c, 0x5d, 0x2b, 0x2b, 0xe2, 0x0c, 0x39, 0x7f, 0x4c, 0xa2, 0x6a, 0xca, + 0x15, 0x15, 0x96, 0x5b, 0xe6, 0x4b, 0x71, 0x76, 0x9a, 0x3e, 0xb5, 0x2e, 0x6b, 0x35, 0x71, 0x8e, + 0x1c, 0x16, 0x27, 0x91, 0x3c, 0xd3, 0xa0, 0x2c, 0xce, 0x4b, 0xb7, 0xc1, 0x8d, 0x49, 0x14, 0xd4, + 0xe1, 0x60, 0x59, 0x3c, 0x45, 0x56, 0xf6, 0x24, 0xa2, 0xba, 0x6c, 0x9a, 0x2a, 0xac, 0xeb, 0x86, + 0x29, 0x9e, 0x9e, 0x36, 0xbc, 0xba, 0x81, 0x4c, 0x55, 0xae, 0x1b, 0xe2, 0xc2, 0x34, 0x2a, 0xbd, + 0x69, 0x54, 0xd4, 0x86, 0xa6, 0x8a, 0x67, 0xa6, 0x41, 0x27, 0xd3, 0x29, 0x82, 0xa9, 0x83, 0x93, + 0xeb, 0xdb, 0xe2, 0xd9, 0xe9, 0xb8, 0x95, 0xaa, 0xd6, 0x50, 0xe9, 0xe4, 0x4b, 0x5f, 0x04, 0x8f, + 0xb3, 0xe9, 0x50, 0x45, 0x33, 0xab, 0xad, 0x2d, 0xba, 0x62, 0xc8, 0x4a, 0x39, 0x2f, 0x3d, 0x02, + 0x6f, 0xe5, 0x60, 0x53, 0x34, 0xa8, 0xd4, 0x54, 0x45, 0x13, 0x17, 0x49, 0xf4, 0xc9, 0xa7, 0xa7, + 0x26, 0x6f, 0x89, 0x17, 0xc8, 0x0e, 0x97, 0x83, 0xfc, 0x99, 0xda, 0xd8, 0xd1, 0x1a, 0x86, 0x28, + 0xe6, 0xa4, 0x97, 0x1b, 0x86, 0xb6, 0x55, 0x53, 0xc5, 0x8b, 0xd3, 0xcc, 0x43, 0xf6, 0x42, 0x4d, + 0x51, 0x1b, 0xfa, 0x0b, 0x51, 0x9a, 0x36, 0x61, 0x83, 0x15, 0x74, 0x89, 0xec, 0x1b, 0x13, 0x3d, + 0x49, 0x36, 0xe5, 0xb2, 0x5e, 0x41, 0x5a, 0x43, 0xd1, 0xca, 0x6a, 0xc3, 0x44, 0x75, 0xb9, 0x21, + 0x57, 0xd4, 0xba, 0xda, 0x30, 0xc5, 0xcb, 0xeb, 0x1f, 0x81, 0xd3, 0xfc, 0x21, 0x9e, 0x04, 0x86, + 0x6d, 0x55, 0x36, 0xc9, 0x61, 0x62, 0x2c, 0xa8, 0x46, 0x1d, 0xa3, 0x61, 0x46, 0x58, 0xff, 0x7d, + 0x01, 0xac, 0x4e, 0x29, 0x93, 0x27, 0x66, 0x8f, 0x98, 0xa1, 0xaa, 0xe8, 0xf5, 0xba, 0xda, 0x28, + 0x33, 0x90, 0xa9, 0x01, 0x7c, 0x1d, 0xdc, 0x9b, 0x4e, 0xde, 0xd0, 0x4d, 0x46, 0x2b, 0x10, 0x13, + 0x4e, 0xa7, 0x2d, 0xeb, 0x0d, 0x55, 0x9c, 0xd9, 0xfa, 0xda, 0xdf, 0xfc, 0xe4, 0xba, 0xf0, 0xb7, + 0x3f, 0xb9, 0x2e, 0xfc, 0xc3, 0x4f, 0xae, 0x0b, 0x9f, 0xe8, 0xfb, 0x6e, 0x78, 0xd0, 0xdf, 0xdd, + 0xb0, 0xbd, 0xce, 0xa3, 0x7d, 0xdf, 0x3a, 0x72, 0x59, 0xa2, 0xd6, 0x6a, 0x3f, 0x8a, 0xff, 0xed, + 0xb8, 0xe7, 0x3e, 0xda, 0xc7, 0xdd, 0x47, 0xf4, 0x27, 0x0d, 0x8f, 0xf6, 0xbd, 0x91, 0xbf, 0x50, + 0xfe, 0x20, 0xf1, 0xf5, 0xe8, 0xf1, 0xee, 0x29, 0x4a, 0xf6, 0xe4, 0x7f, 0x02, 0x00, 0x00, 0xff, + 0xff, 0x6f, 0x86, 0xae, 0xa2, 0x72, 0x59, 0x00, 0x00, } func (m *UIBannerClickEvent) Marshal() (dAtA []byte, err error) { @@ -7886,6 +7995,45 @@ func (m *AccessListMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *AccessListMemberMetadata) 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 *AccessListMemberMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AccessListMemberMetadata) 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.MembershipKind != 0 { + i = encodeVarintUsageevents(dAtA, i, uint64(m.MembershipKind)) + i-- + dAtA[i] = 0x10 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintUsageevents(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *AccessListCreate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8027,6 +8175,18 @@ func (m *AccessListMemberCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.MemberMetadata != nil { + { + size, err := m.MemberMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintUsageevents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.Metadata != nil { { size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) @@ -8066,6 +8226,18 @@ func (m *AccessListMemberUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.MemberMetadata != nil { + { + size, err := m.MemberMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintUsageevents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.Metadata != nil { { size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) @@ -8105,6 +8277,18 @@ func (m *AccessListMemberDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.MemberMetadata != nil { + { + size, err := m.MemberMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintUsageevents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.Metadata != nil { { size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) @@ -8144,6 +8328,16 @@ func (m *AccessListGrantsToUser) MarshalToSizedBuffer(dAtA []byte) (int, error) i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.CountInheritedTraitsGranted != 0 { + i = encodeVarintUsageevents(dAtA, i, uint64(m.CountInheritedTraitsGranted)) + i-- + dAtA[i] = 0x20 + } + if m.CountInheritedRolesGranted != 0 { + i = encodeVarintUsageevents(dAtA, i, uint64(m.CountInheritedRolesGranted)) + i-- + dAtA[i] = 0x18 + } if m.CountTraitsGranted != 0 { i = encodeVarintUsageevents(dAtA, i, uint64(m.CountTraitsGranted)) i-- @@ -11129,6 +11323,25 @@ func (m *AccessListMetadata) Size() (n int) { return n } +func (m *AccessListMemberMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovUsageevents(uint64(l)) + } + if m.MembershipKind != 0 { + n += 1 + sovUsageevents(uint64(m.MembershipKind)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *AccessListCreate) Size() (n int) { if m == nil { return 0 @@ -11187,6 +11400,10 @@ func (m *AccessListMemberCreate) Size() (n int) { l = m.Metadata.Size() n += 1 + l + sovUsageevents(uint64(l)) } + if m.MemberMetadata != nil { + l = m.MemberMetadata.Size() + n += 1 + l + sovUsageevents(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -11203,6 +11420,10 @@ func (m *AccessListMemberUpdate) Size() (n int) { l = m.Metadata.Size() n += 1 + l + sovUsageevents(uint64(l)) } + if m.MemberMetadata != nil { + l = m.MemberMetadata.Size() + n += 1 + l + sovUsageevents(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -11219,6 +11440,10 @@ func (m *AccessListMemberDelete) Size() (n int) { l = m.Metadata.Size() n += 1 + l + sovUsageevents(uint64(l)) } + if m.MemberMetadata != nil { + l = m.MemberMetadata.Size() + n += 1 + l + sovUsageevents(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -11237,6 +11462,12 @@ func (m *AccessListGrantsToUser) Size() (n int) { if m.CountTraitsGranted != 0 { n += 1 + sovUsageevents(uint64(m.CountTraitsGranted)) } + if m.CountInheritedRolesGranted != 0 { + n += 1 + sovUsageevents(uint64(m.CountInheritedRolesGranted)) + } + if m.CountInheritedTraitsGranted != 0 { + n += 1 + sovUsageevents(uint64(m.CountInheritedTraitsGranted)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -17644,6 +17875,108 @@ func (m *AccessListMetadata) Unmarshal(dAtA []byte) error { } return nil } +func (m *AccessListMemberMetadata) 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: AccessListMemberMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AccessListMemberMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUsageevents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthUsageevents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUsageevents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MembershipKind", wireType) + } + m.MembershipKind = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUsageevents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MembershipKind |= v1.MembershipKind(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *AccessListCreate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -17970,6 +18303,42 @@ func (m *AccessListMemberCreate) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MemberMetadata", 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 + } + if m.MemberMetadata == nil { + m.MemberMetadata = &AccessListMemberMetadata{} + } + if err := m.MemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipUsageevents(dAtA[iNdEx:]) @@ -18057,6 +18426,42 @@ func (m *AccessListMemberUpdate) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MemberMetadata", 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 + } + if m.MemberMetadata == nil { + m.MemberMetadata = &AccessListMemberMetadata{} + } + if err := m.MemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipUsageevents(dAtA[iNdEx:]) @@ -18144,6 +18549,42 @@ func (m *AccessListMemberDelete) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MemberMetadata", 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 + } + if m.MemberMetadata == nil { + m.MemberMetadata = &AccessListMemberMetadata{} + } + if err := m.MemberMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipUsageevents(dAtA[iNdEx:]) @@ -18233,6 +18674,44 @@ func (m *AccessListGrantsToUser) Unmarshal(dAtA []byte) error { break } } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CountInheritedRolesGranted", wireType) + } + m.CountInheritedRolesGranted = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUsageevents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CountInheritedRolesGranted |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CountInheritedTraitsGranted", wireType) + } + m.CountInheritedTraitsGranted = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUsageevents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CountInheritedTraitsGranted |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipUsageevents(dAtA[iNdEx:]) diff --git a/api/proto/teleport/accesslist/v1/accesslist.proto b/api/proto/teleport/accesslist/v1/accesslist.proto index b83034160a9e..7cae7e08ee33 100644 --- a/api/proto/teleport/accesslist/v1/accesslist.proto +++ b/api/proto/teleport/accesslist/v1/accesslist.proto @@ -85,6 +85,10 @@ message AccessListOwner { // ineligible_status describes if this owner is eligible or not // and if not, describes how they're lacking eligibility. IneligibleStatus ineligible_status = 3; + + // membership_kind describes the type of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind membership_kind = 4; } // AccessListAudit describes the audit configuration for an Access List. @@ -197,6 +201,21 @@ message MemberSpec { // ineligible_status describes if this member is eligible or not // and if not, describes how they're lacking eligibility. IneligibleStatus ineligible_status = 7; + + // membership_kind describes the type of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind membership_kind = 9; +} + +// MembershipKind represents the different kinds of list membership +enum MembershipKind { + // MEMBERSHIP_KIND_UNSPECIFIED represents list members that are of + // unknown membership kind, defaulting to being treated as type USER + MEMBERSHIP_KIND_UNSPECIFIED = 0; + // MEMBERSHIP_KIND_USER represents list members that are normal users + MEMBERSHIP_KIND_USER = 1; + // MEMBERSHIP_KIND_LIST represents list members that are nested Access Lists + MEMBERSHIP_KIND_LIST = 2; } // IneligibleStatus describes how the user is ineligible. @@ -268,6 +287,8 @@ message ReviewChanges { // AccessListStatus contains dynamic fields calculated during retrieval. message AccessListStatus { - // member_count is the number of members in the in the Access List. + // member_count is the number of members in the Access List. optional uint32 member_count = 1; + // member_list_count is the number of nested list members in the Access List. + optional uint32 member_list_count = 2; } diff --git a/api/proto/teleport/accesslist/v1/accesslist_service.proto b/api/proto/teleport/accesslist/v1/accesslist_service.proto index 5dbe81ca3c9c..73fc691c92ab 100644 --- a/api/proto/teleport/accesslist/v1/accesslist_service.proto +++ b/api/proto/teleport/accesslist/v1/accesslist_service.proto @@ -53,6 +53,9 @@ service AccessListService { rpc ListAllAccessListMembers(ListAllAccessListMembersRequest) returns (ListAllAccessListMembersResponse); // GetAccessListMember returns the specified access list member resource. rpc GetAccessListMember(GetAccessListMemberRequest) returns (Member); + // GetAccessListOwners returns a list of all owners in an Access List, + // including those inherited from nested Access Lists. + rpc GetAccessListOwners(GetAccessListOwnersRequest) returns (GetAccessListOwnersResponse); // UpsertAccessListMember creates or updates an access list member resource. rpc UpsertAccessListMember(UpsertAccessListMemberRequest) returns (Member); // UpdateAccessListMember conditionally updates an access list member resource. @@ -89,6 +92,9 @@ service AccessListService { // GetSuggestedAccessLists returns suggested access lists for an access // request. rpc GetSuggestedAccessLists(GetSuggestedAccessListsRequest) returns (GetSuggestedAccessListsResponse); + + // GetInheritedGrants returns the inherited grants for an access list. + rpc GetInheritedGrants(GetInheritedGrantsRequest) returns (GetInheritedGrantsResponse); } // GetAccessListsRequest is the request for getting all access lists. @@ -117,6 +123,18 @@ message ListAccessListsResponse { string next_token = 2; } +// GetInheritedGrantsRequest is the request for getting inherited grants. +message GetInheritedGrantsRequest { + // access_list_id is the ID of the access list to retrieve. + string access_list_id = 1; +} + +// GetInheritedGrantsResponse is the response for getting inherited grants. +message GetInheritedGrantsResponse { + // grants is the list of inherited member grants. + AccessListGrants grants = 1; +} + // GetAccessListRequest is the request for retrieving an access list. message GetAccessListRequest { // name is the name of the access list to retrieve. @@ -166,6 +184,8 @@ message CountAccessListMembersRequest { message CountAccessListMembersResponse { // count is the number of access list members in the access list. uint32 count = 1; + // list_count is the number of access list members of type list in the access list. + uint32 list_count = 2; } // ListAccessListMembersRequest is the request for getting paginated access list @@ -237,6 +257,21 @@ message GetAccessListMemberRequest { string member_name = 2; } +// GetAccessListOwnersRequest is the request for getting a list of all owners +// in an Access List, including those inherited from nested Access Lists. +message GetAccessListOwnersRequest { + // access_list is the name of the access list. + string access_list = 1; +} + +// GetAccessListOwnersResponse is the response for getting a list of all +// owners in an Access List, including those inherited from nested Access Lists. +message GetAccessListOwnersResponse { + // owners is the list of all owners in the Access List, including those + // inherited from nested Access Lists. + repeated accesslist.v1.AccessListOwner owners = 1; +} + // UpsertAccessListMemberRequest is the request for upserting an access list // member. message UpsertAccessListMemberRequest { diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index ebf1cc1ee6be..96551bff2580 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -20,6 +20,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; +import "teleport/accesslist/v1/accesslist.proto"; import "teleport/legacy/types/types.proto"; import "teleport/legacy/types/wrappers/wrappers.proto"; @@ -280,6 +281,10 @@ message AccessListMember { // MemberName is the name of the member. string MemberName = 4 [(gogoproto.jsontag) = "member_name,omitempty"]; + + // MembershipKind describes the kind of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + teleport.accesslist.v1.MembershipKind membership_kind = 5 [(gogoproto.jsontag) = "membership_kind,omitempty"]; } // AccessListReviewMembershipRequirementsChanged contains information for when membership requirements change as part of a review. diff --git a/api/proto/teleport/usageevents/v1/usageevents.proto b/api/proto/teleport/usageevents/v1/usageevents.proto index 72ad43d21661..78cb6fa02a06 100644 --- a/api/proto/teleport/usageevents/v1/usageevents.proto +++ b/api/proto/teleport/usageevents/v1/usageevents.proto @@ -16,6 +16,8 @@ syntax = "proto3"; package teleport.usageevents.v1; +import "teleport/accesslist/v1/accesslist.proto"; + option go_package = "github.com/gravitational/teleport/api/gen/proto/go/usageevents/v1;usageeventsv1"; // UIBannerClickEvent is a usage event sent by the UI when the upgrade @@ -481,6 +483,14 @@ message AccessListMetadata { string id = 1; } +// AccessListMemberMetadata contains common metadata for Access List Member related events. +message AccessListMemberMetadata { + // name is the name of the member. + string name = 1; + // membership_kind is the type of membership in the parent access list. + teleport.accesslist.v1.MembershipKind membership_kind = 2; +} + // AccessListCreate is an event that is emitted when an access list is created. message AccessListCreate { AccessListMetadata metadata = 1; @@ -499,16 +509,19 @@ message AccessListDelete { // AccessListMemberCreate is an event that is emitted when a member is added to an access list. message AccessListMemberCreate { AccessListMetadata metadata = 1; + AccessListMemberMetadata member_metadata = 2; } // AccessListMemberCreate is an event that is emitted when a member is updated in an access list. message AccessListMemberUpdate { AccessListMetadata metadata = 1; + AccessListMemberMetadata member_metadata = 2; } // AccessListMemberDelete is an event that is emitted when a member is removed from an access list. message AccessListMemberDelete { AccessListMetadata metadata = 1; + AccessListMemberMetadata member_metadata = 2; } // AccessListGrantsToUser is an event that is emitted when access list permissions are granted to a user @@ -517,8 +530,14 @@ message AccessListGrantsToUser { // count_roles_granted is the number of roles granted to a user. int32 count_roles_granted = 1; + // count_inherited_roles_granted is the number of roles granted to a user inherited from nested access lists. + int32 count_inherited_roles_granted = 3; + // count_traits_granted is the number of traits granted to a user. int32 count_traits_granted = 2; + + // count_inherited_traits_granted is the number of traits granted to a user inherited from nested access lists. + int32 count_inherited_traits_granted = 4; } // AccessListReviewCreate is an event that is emitted when an access list review is created. diff --git a/api/types/accesslist/accesslist.go b/api/types/accesslist/accesslist.go index b9f42f553e1e..e61bf17d79bf 100644 --- a/api/types/accesslist/accesslist.go +++ b/api/types/accesslist/accesslist.go @@ -24,6 +24,7 @@ import ( "github.com/gravitational/trace" "github.com/jonboulle/clockwork" + accesslistv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/header" "github.com/gravitational/teleport/api/types/header/convert/legacy" @@ -75,6 +76,20 @@ func parseReviewFrequency(input string) ReviewFrequency { return 0 } +// MaxAllowedDepth is the maximum allowed depth for nested access lists. +const MaxAllowedDepth = 10 + +var ( + // MembershipKindUnspecified is the default membership kind (treated as 'user'). + MembershipKindUnspecified = accesslistv1.MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED.String() + + // MembershipKindUser is the user membership kind. + MembershipKindUser = accesslistv1.MembershipKind_MEMBERSHIP_KIND_USER.String() + + // MembershipKindList is the list membership kind. + MembershipKindList = accesslistv1.MembershipKind_MEMBERSHIP_KIND_LIST.String() +) + // ReviewDayOfMonth is the day of month the review should be repeated on. type ReviewDayOfMonth int @@ -167,6 +182,10 @@ type Owner struct { // IneligibleStatus describes the reason why this owner is not eligible. IneligibleStatus string `json:"ineligible_status" yaml:"ineligible_status"` + + // MembershipKind describes the kind of ownership, + // either "MEMBERSHIP_KIND_USER" or "MEMBERSHIP_KIND_LIST". + MembershipKind string `json:"membership_kind" yaml:"membership_kind"` } // Audit describes the audit configuration for an access list. @@ -225,6 +244,8 @@ type Grants struct { type Status struct { // MemberCount is the number of members in the access list. MemberCount *uint32 + // MemberListCount is the number of members in the access list that are lists themselves. + MemberListCount *uint32 } // NewAccessList will create a new access list. @@ -286,10 +307,6 @@ func (a *AccessList) CheckAndSetDefaults() error { a.Spec.Audit.Notifications.Start = twoWeeks } - if len(a.Spec.Grants.Roles) == 0 && len(a.Spec.Grants.Traits) == 0 { - return trace.BadParameter("grants must specify at least one role or trait") - } - // Deduplicate owners. The backend will currently prevent this, but it's possible that access lists // were created with duplicated owners before the backend checked for duplicate owners. In order to // ensure that these access lists are backwards compatible, we'll deduplicate them here. @@ -299,6 +316,9 @@ func (a *AccessList) CheckAndSetDefaults() error { if owner.Name == "" { return trace.BadParameter("owner name is missing") } + if owner.MembershipKind == "" { + owner.MembershipKind = MembershipKindUser + } if _, ok := ownerMap[owner.Name]; ok { continue @@ -317,7 +337,7 @@ func (a *AccessList) GetOwners() []Owner { return a.Spec.Owners } -// GetOwners returns the list of owners from the access list. +// SetOwners sets the owners of the access list. func (a *AccessList) SetOwners(owners []Owner) { a.Spec.Owners = owners } @@ -337,6 +357,11 @@ func (a *AccessList) GetGrants() Grants { return a.Spec.Grants } +// GetOwnerGrants returns the owner grants from the access list. +func (a *AccessList) GetOwnerGrants() Grants { + return a.Spec.OwnerGrants +} + // GetMetadata returns metadata. This is specifically for conforming to the Resource interface, // and should be removed when possible. func (a *AccessList) GetMetadata() types.Metadata { diff --git a/api/types/accesslist/convert/v1/accesslist.go b/api/types/accesslist/convert/v1/accesslist.go index fb0d00c8a090..a039c938c9c9 100644 --- a/api/types/accesslist/convert/v1/accesslist.go +++ b/api/types/accesslist/convert/v1/accesslist.go @@ -68,13 +68,10 @@ func FromProto(msg *accesslistv1.AccessList, opts ...AccessListOption) (*accessl owners := make([]accesslist.Owner, len(msg.Spec.Owners)) for i, owner := range msg.Spec.Owners { - owners[i] = accesslist.Owner{ - Name: owner.Name, - Description: owner.Description, - // Set it to empty as default. - // Must provide as options to set it with the provided value. - IneligibleStatus: "", - } + owners[i] = FromOwnerProto(owner) + // Set IneligibleStatus to empty as default. + // Must provide as options to set it with the provided value. + owners[i].IneligibleStatus = "" } var ownerGrants accesslist.Grants @@ -94,10 +91,15 @@ func FromProto(msg *accesslistv1.AccessList, opts ...AccessListOption) (*accessl } var memberCount *uint32 + var memberListCount *uint32 if msg.Status != nil && msg.Status.MemberCount != nil { memberCount = new(uint32) *memberCount = *msg.Status.MemberCount } + if msg.Status != nil && msg.Status.MemberListCount != nil { + memberListCount = new(uint32) + *memberListCount = *msg.Status.MemberListCount + } accessList, err := accesslist.NewAccessList(headerv1.FromMetadataProto(msg.Header.Metadata), accesslist.Spec{ Title: msg.Spec.Title, @@ -126,7 +128,8 @@ func FromProto(msg *accesslistv1.AccessList, opts ...AccessListOption) (*accessl return nil, trace.Wrap(err) } accessList.Status = accesslist.Status{ - MemberCount: memberCount, + MemberCount: memberCount, + MemberListCount: memberListCount, } for _, opt := range opts { @@ -140,15 +143,7 @@ func FromProto(msg *accesslistv1.AccessList, opts ...AccessListOption) (*accessl func ToProto(accessList *accesslist.AccessList) *accesslistv1.AccessList { owners := make([]*accesslistv1.AccessListOwner, len(accessList.Spec.Owners)) for i, owner := range accessList.Spec.Owners { - var ineligibleStatus accesslistv1.IneligibleStatus - if enumVal, ok := accesslistv1.IneligibleStatus_value[owner.IneligibleStatus]; ok { - ineligibleStatus = accesslistv1.IneligibleStatus(enumVal) - } - owners[i] = &accesslistv1.AccessListOwner{ - Name: owner.Name, - Description: owner.Description, - IneligibleStatus: ineligibleStatus, - } + owners[i] = ToOwnerProto(owner) } var ownerGrants *accesslistv1.AccessListGrants @@ -173,10 +168,15 @@ func ToProto(accessList *accesslist.AccessList) *accesslistv1.AccessList { } var memberCount *uint32 + var memberListCount *uint32 if accessList.Status.MemberCount != nil { memberCount = new(uint32) *memberCount = *accessList.Status.MemberCount } + if accessList.Status.MemberListCount != nil { + memberListCount = new(uint32) + *memberListCount = *accessList.Status.MemberListCount + } return &accesslistv1.AccessList{ Header: headerv1.ToResourceHeaderProto(accessList.ResourceHeader), @@ -209,11 +209,51 @@ func ToProto(accessList *accesslist.AccessList) *accesslistv1.AccessList { OwnerGrants: ownerGrants, }, Status: &accesslistv1.AccessListStatus{ - MemberCount: memberCount, + MemberCount: memberCount, + MemberListCount: memberListCount, }, } } +// ToOwnerProto converts an internal access list owner into a v1 access list owner object. +func ToOwnerProto(owner accesslist.Owner) *accesslistv1.AccessListOwner { + var ineligibleStatus accesslistv1.IneligibleStatus + if owner.IneligibleStatus != "" { + if enumVal, ok := accesslistv1.IneligibleStatus_value[owner.IneligibleStatus]; ok { + ineligibleStatus = accesslistv1.IneligibleStatus(enumVal) + } + } else { + ineligibleStatus = accesslistv1.IneligibleStatus_INELIGIBLE_STATUS_UNSPECIFIED + } + + var kind accesslistv1.MembershipKind + if enumVal, ok := accesslistv1.MembershipKind_value[owner.MembershipKind]; ok { + kind = accesslistv1.MembershipKind(enumVal) + } + + return &accesslistv1.AccessListOwner{ + Name: owner.Name, + Description: owner.Description, + IneligibleStatus: ineligibleStatus, + MembershipKind: kind, + } +} + +// FromOwnerProto converts a v1 access list owner into an internal access list owner object. +func FromOwnerProto(protoOwner *accesslistv1.AccessListOwner) accesslist.Owner { + ineligibleStatus := "" + if protoOwner.IneligibleStatus != accesslistv1.IneligibleStatus_INELIGIBLE_STATUS_UNSPECIFIED { + ineligibleStatus = protoOwner.IneligibleStatus.String() + } + + return accesslist.Owner{ + Name: protoOwner.Name, + Description: protoOwner.Description, + IneligibleStatus: ineligibleStatus, + MembershipKind: protoOwner.MembershipKind.String(), + } +} + // WithOwnersIneligibleStatusField sets the "ineligibleStatus" field to the provided proto value. func WithOwnersIneligibleStatusField(protoOwners []*accesslistv1.AccessListOwner) AccessListOption { return func(a *accesslist.AccessList) { diff --git a/api/types/accesslist/convert/v1/member.go b/api/types/accesslist/convert/v1/member.go index 3fe632b16738..8fe6e596db78 100644 --- a/api/types/accesslist/convert/v1/member.go +++ b/api/types/accesslist/convert/v1/member.go @@ -47,6 +47,7 @@ func FromMemberProto(msg *accesslistv1.Member, opts ...MemberOption) (*accesslis // Set it to empty as default. // Must provide as options to set it with the provided value. IneligibleStatus: "", + MembershipKind: msg.Spec.MembershipKind.String(), }) if err != nil { return nil, trace.Wrap(err) @@ -79,6 +80,11 @@ func ToMemberProto(member *accesslist.AccessListMember) *accesslistv1.Member { ineligibleStatus = accesslistv1.IneligibleStatus(enumVal) } + var membershipKind accesslistv1.MembershipKind + if enumVal, ok := accesslistv1.MembershipKind_value[member.Spec.MembershipKind]; ok { + membershipKind = accesslistv1.MembershipKind(enumVal) + } + return &accesslistv1.Member{ Header: headerv1.ToResourceHeaderProto(member.ResourceHeader), Spec: &accesslistv1.MemberSpec{ @@ -89,6 +95,7 @@ func ToMemberProto(member *accesslist.AccessListMember) *accesslistv1.Member { Reason: member.Spec.Reason, AddedBy: member.Spec.AddedBy, IneligibleStatus: ineligibleStatus, + MembershipKind: membershipKind, }, } } diff --git a/api/types/accesslist/member.go b/api/types/accesslist/member.go index 1ffeeccca834..28a71ac1bcf5 100644 --- a/api/types/accesslist/member.go +++ b/api/types/accesslist/member.go @@ -61,6 +61,10 @@ type AccessListMemberSpec struct { // IneligibleStatus describes the reason why this member is not eligible. IneligibleStatus string `json:"ineligible_status" yaml:"ineligible_status"` + + // MembershipKind describes the kind of membership, + // either "MEMBERSHIP_KIND_USER" or "MEMBERSHIP_KIND_LIST". + MembershipKind string `json:"membership_kind" yaml:"membership_kind"` } // NewAccessListMember will create a new access listm member. @@ -86,6 +90,10 @@ func (a *AccessListMember) CheckAndSetDefaults() error { return trace.Wrap(err) } + if a.Spec.MembershipKind == "" { + a.Spec.MembershipKind = MembershipKindUser + } + if a.Spec.AccessList == "" { return trace.BadParameter("access list is missing") } diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index c3abab4b52bf..2b44ab7c81ae 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -9,6 +9,7 @@ import ( proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + v1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" github_com_gravitational_teleport_api_types "github.com/gravitational/teleport/api/types" types1 "github.com/gravitational/teleport/api/types" _ "github.com/gravitational/teleport/api/types/wrappers" @@ -1034,10 +1035,13 @@ type AccessListMember struct { // Reason is the reason that the member was added, modified, or removed. Reason string `protobuf:"bytes,3,opt,name=Reason,proto3" json:"reason,omitempty"` // MemberName is the name of the member. - MemberName string `protobuf:"bytes,4,opt,name=MemberName,proto3" json:"member_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MemberName string `protobuf:"bytes,4,opt,name=MemberName,proto3" json:"member_name,omitempty"` + // MembershipKind describes the kind of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind v1.MembershipKind `protobuf:"varint,5,opt,name=membership_kind,json=membershipKind,proto3,enum=teleport.accesslist.v1.MembershipKind" json:"membership_kind,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AccessListMember) Reset() { *m = AccessListMember{} } @@ -14948,1037 +14952,1041 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 16480 bytes of a gzipped FileDescriptorProto + // 16534 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x74, 0x24, 0x49, - 0x72, 0x18, 0x86, 0xfe, 0x40, 0x03, 0x08, 0x7c, 0x0c, 0x90, 0xf3, 0x55, 0x3b, 0x3b, 0x3b, 0xd8, - 0xad, 0xbd, 0x9b, 0x9b, 0xd9, 0xdb, 0x9d, 0xb9, 0x9d, 0x9d, 0xdd, 0xbd, 0xfd, 0xba, 0xbd, 0x06, - 0x1a, 0x18, 0xf4, 0x0c, 0xbe, 0xb6, 0x1a, 0x33, 0x73, 0x7b, 0xe4, 0x5d, 0xb3, 0xd0, 0x95, 0x68, - 0xd4, 0x4e, 0x77, 0x55, 0xb3, 0xaa, 0x7a, 0x30, 0x58, 0x7f, 0xf1, 0x64, 0x8a, 0x22, 0xc5, 0xbb, - 0xd3, 0xf9, 0x68, 0x8a, 0x94, 0x28, 0x59, 0xa4, 0x3e, 0x6c, 0x8a, 0xa6, 0x48, 0x51, 0xa2, 0x49, - 0x1e, 0x69, 0x3e, 0x4b, 0x3a, 0x7f, 0x9c, 0xc4, 0x67, 0x3e, 0x49, 0xb6, 0xf5, 0xf4, 0x6c, 0x19, - 0x27, 0xd3, 0xd6, 0x1f, 0x3c, 0xfb, 0x3d, 0xda, 0xe6, 0xb3, 0xce, 0xb2, 0xec, 0xe7, 0x97, 0x91, - 0x59, 0x55, 0x59, 0x5f, 0x8d, 0xcf, 0x25, 0x16, 0x07, 0xfc, 0x99, 0x41, 0x47, 0x44, 0x46, 0x66, - 0x45, 0x46, 0x66, 0x46, 0x66, 0x46, 0x46, 0xc0, 0x75, 0x8f, 0xb6, 0x68, 0xc7, 0x76, 0xbc, 0x9b, - 0x2d, 0xda, 0xd4, 0x1b, 0x9b, 0x37, 0xbd, 0xcd, 0x0e, 0x75, 0x6f, 0xd2, 0xc7, 0xd4, 0xf2, 0xfc, - 0xff, 0x6e, 0x74, 0x1c, 0xdb, 0xb3, 0x49, 0x89, 0xff, 0xba, 0x74, 0xae, 0x69, 0x37, 0x6d, 0x04, - 0xdd, 0x64, 0x7f, 0x71, 0xec, 0xa5, 0xcb, 0x4d, 0xdb, 0x6e, 0xb6, 0xe8, 0x4d, 0xfc, 0xb5, 0xda, - 0x5d, 0xbb, 0xe9, 0x7a, 0x4e, 0xb7, 0xe1, 0x09, 0xec, 0x64, 0x1c, 0xeb, 0x99, 0x6d, 0xea, 0x7a, - 0x7a, 0xbb, 0x23, 0x08, 0xae, 0xc4, 0x09, 0x36, 0x1c, 0xbd, 0xd3, 0xa1, 0x8e, 0xa8, 0xfc, 0xd2, - 0x73, 0xe9, 0xed, 0xc4, 0x7f, 0x05, 0xc9, 0x4b, 0xe9, 0x24, 0x3e, 0xa3, 0x18, 0x47, 0xf5, 0x9b, - 0x79, 0x18, 0x5c, 0xa0, 0x9e, 0x6e, 0xe8, 0x9e, 0x4e, 0x2e, 0x43, 0x7f, 0xd5, 0x32, 0xe8, 0x13, - 0x25, 0xf7, 0x6c, 0xee, 0x5a, 0x61, 0xaa, 0xb4, 0xbd, 0x35, 0x99, 0xa7, 0xa6, 0xc6, 0x81, 0xe4, - 0x19, 0x28, 0xae, 0x6c, 0x76, 0xa8, 0x92, 0x7f, 0x36, 0x77, 0x6d, 0x68, 0x6a, 0x68, 0x7b, 0x6b, - 0xb2, 0x1f, 0x65, 0xa1, 0x21, 0x98, 0x3c, 0x07, 0xf9, 0x6a, 0x45, 0x29, 0x20, 0x72, 0x62, 0x7b, - 0x6b, 0x72, 0xb4, 0x6b, 0x1a, 0x2f, 0xda, 0x6d, 0xd3, 0xa3, 0xed, 0x8e, 0xb7, 0xa9, 0xe5, 0xab, - 0x15, 0x72, 0x15, 0x8a, 0xd3, 0xb6, 0x41, 0x95, 0x22, 0x12, 0x91, 0xed, 0xad, 0xc9, 0xb1, 0x86, - 0x6d, 0x50, 0x89, 0x0a, 0xf1, 0xe4, 0xf3, 0x50, 0x5c, 0x31, 0xdb, 0x54, 0xe9, 0x7f, 0x36, 0x77, - 0x6d, 0xf8, 0xd6, 0xa5, 0x1b, 0x5c, 0x2a, 0x37, 0x7c, 0xa9, 0xdc, 0x58, 0xf1, 0xc5, 0x36, 0x35, - 0xfe, 0x9d, 0xad, 0xc9, 0xbe, 0xed, 0xad, 0xc9, 0x22, 0x93, 0xe4, 0x37, 0xbe, 0x3b, 0x99, 0xd3, - 0xb0, 0x24, 0x79, 0x1b, 0x86, 0xa7, 0x5b, 0x5d, 0xd7, 0xa3, 0xce, 0xa2, 0xde, 0xa6, 0x4a, 0x09, - 0x2b, 0xbc, 0xb4, 0xbd, 0x35, 0x79, 0xa1, 0xc1, 0xc1, 0x75, 0x4b, 0x6f, 0xcb, 0x15, 0xcb, 0xe4, - 0xea, 0x6f, 0xe5, 0xe0, 0x4c, 0x8d, 0xba, 0xae, 0x69, 0x5b, 0x81, 0x6c, 0x3e, 0x09, 0x43, 0x02, - 0x54, 0xad, 0xa0, 0x7c, 0x86, 0xa6, 0x06, 0xb6, 0xb7, 0x26, 0x0b, 0xae, 0x69, 0x68, 0x21, 0x86, - 0x7c, 0x06, 0x06, 0x1e, 0x9a, 0xde, 0xfa, 0xc2, 0x6c, 0x59, 0xc8, 0xe9, 0xc2, 0xf6, 0xd6, 0x24, - 0xd9, 0x30, 0xbd, 0xf5, 0x7a, 0x7b, 0x4d, 0x97, 0x2a, 0xf4, 0xc9, 0xc8, 0x3c, 0x8c, 0x2f, 0x3b, - 0xe6, 0x63, 0xdd, 0xa3, 0xf7, 0xe8, 0xe6, 0xb2, 0xdd, 0x32, 0x1b, 0x9b, 0x42, 0x8a, 0xcf, 0x6e, - 0x6f, 0x4d, 0x5e, 0xee, 0x70, 0x5c, 0xfd, 0x11, 0xdd, 0xac, 0x77, 0x10, 0x2b, 0x31, 0x49, 0x94, - 0x54, 0x7f, 0xbb, 0x04, 0x23, 0xf7, 0x5d, 0xea, 0x04, 0xed, 0xbe, 0x0a, 0x45, 0xf6, 0x5b, 0x34, - 0x19, 0x65, 0xde, 0x75, 0xa9, 0x23, 0xcb, 0x9c, 0xe1, 0xc9, 0x75, 0xe8, 0x9f, 0xb7, 0x9b, 0xa6, - 0x25, 0x9a, 0x7d, 0x76, 0x7b, 0x6b, 0xf2, 0x4c, 0x8b, 0x01, 0x24, 0x4a, 0x4e, 0x41, 0x3e, 0x07, - 0x23, 0xd5, 0x36, 0xd3, 0x21, 0xdb, 0xd2, 0x3d, 0xdb, 0x11, 0xad, 0x45, 0xe9, 0x9a, 0x12, 0x5c, - 0x2a, 0x18, 0xa1, 0x27, 0x6f, 0x02, 0x94, 0x1f, 0xd6, 0x34, 0xbb, 0x45, 0xcb, 0xda, 0xa2, 0x50, - 0x06, 0x2c, 0xad, 0x6f, 0xb8, 0x75, 0xc7, 0x6e, 0xd1, 0xba, 0xee, 0xc8, 0xd5, 0x4a, 0xd4, 0x64, - 0x06, 0xc6, 0xca, 0x8d, 0x06, 0x75, 0x5d, 0x8d, 0xfe, 0x70, 0x97, 0xba, 0x9e, 0xab, 0xf4, 0x3f, - 0x5b, 0xb8, 0x36, 0x34, 0xf5, 0xcc, 0xf6, 0xd6, 0xe4, 0x53, 0x3a, 0x62, 0xea, 0x8e, 0x40, 0x49, - 0x2c, 0x62, 0x85, 0xc8, 0x14, 0x8c, 0x96, 0x3f, 0xec, 0x3a, 0xb4, 0x6a, 0x50, 0xcb, 0x33, 0xbd, - 0x4d, 0xa1, 0x21, 0x97, 0xb7, 0xb7, 0x26, 0x15, 0x9d, 0x21, 0xea, 0xa6, 0xc0, 0x48, 0x4c, 0xa2, - 0x45, 0xc8, 0x12, 0x4c, 0xdc, 0x99, 0x5e, 0xae, 0x51, 0xe7, 0xb1, 0xd9, 0xa0, 0xe5, 0x46, 0xc3, - 0xee, 0x5a, 0x9e, 0x32, 0x80, 0x7c, 0x9e, 0xdb, 0xde, 0x9a, 0x7c, 0xa6, 0xd9, 0xe8, 0xd4, 0x5d, - 0x8e, 0xad, 0xeb, 0x1c, 0x2d, 0x31, 0x4b, 0x96, 0x25, 0x5f, 0x84, 0xd1, 0x15, 0x87, 0x69, 0xa1, - 0x51, 0xa1, 0x0c, 0xae, 0x0c, 0xa2, 0xfe, 0x5f, 0xb8, 0x21, 0x26, 0x20, 0x0e, 0xf5, 0x7b, 0x96, - 0x37, 0xd6, 0xe3, 0x05, 0xea, 0x06, 0xe2, 0xe4, 0xc6, 0x46, 0x58, 0x11, 0x0a, 0x0a, 0xfb, 0x78, - 0xd3, 0xa1, 0x46, 0x42, 0xdb, 0x86, 0xb0, 0xcd, 0xd7, 0xb7, 0xb7, 0x26, 0x3f, 0xe9, 0x08, 0x9a, - 0x7a, 0x4f, 0xb5, 0xcb, 0x64, 0x45, 0x66, 0x60, 0x90, 0x69, 0xd3, 0x3d, 0xd3, 0x32, 0x14, 0x78, - 0x36, 0x77, 0x6d, 0xec, 0xd6, 0xb8, 0xdf, 0x7a, 0x1f, 0x3e, 0x75, 0x71, 0x7b, 0x6b, 0xf2, 0x2c, - 0xd3, 0xc1, 0xfa, 0x23, 0xd3, 0x92, 0xa7, 0x88, 0xa0, 0x28, 0x1b, 0x45, 0x53, 0xb6, 0x87, 0x43, - 0x77, 0x38, 0x1c, 0x45, 0xab, 0xb6, 0x17, 0x1f, 0xb6, 0x3e, 0x19, 0x99, 0x86, 0xd1, 0x29, 0xdb, - 0xab, 0x5a, 0xae, 0xa7, 0x5b, 0x0d, 0x5a, 0xad, 0x28, 0x23, 0x58, 0x0e, 0xd5, 0x82, 0x95, 0x33, - 0x05, 0xa6, 0x1e, 0x99, 0x94, 0xa2, 0x65, 0xd4, 0x7f, 0x59, 0x84, 0x31, 0xd6, 0x27, 0xd2, 0xf0, - 0x29, 0xb3, 0x99, 0x80, 0x41, 0x58, 0x2d, 0x6e, 0x47, 0x6f, 0x50, 0x31, 0x92, 0xf0, 0x2b, 0x2c, - 0x1f, 0x28, 0xf1, 0x8c, 0xd3, 0x93, 0xeb, 0x30, 0xc8, 0x41, 0xd5, 0x8a, 0x18, 0x5c, 0xa3, 0xdb, - 0x5b, 0x93, 0x43, 0x2e, 0xc2, 0xea, 0xa6, 0xa1, 0x05, 0x68, 0xa6, 0xdd, 0xfc, 0xef, 0x39, 0xdb, - 0xf5, 0x18, 0x73, 0x31, 0xb6, 0xf0, 0x33, 0x44, 0x81, 0x75, 0x81, 0x92, 0xb5, 0x3b, 0x5a, 0x88, - 0xbc, 0x01, 0xc0, 0x21, 0x65, 0xc3, 0x70, 0xc4, 0x00, 0x7b, 0x6a, 0x7b, 0x6b, 0xf2, 0xbc, 0x60, - 0xa1, 0x1b, 0x86, 0x3c, 0x3a, 0x25, 0x62, 0xd2, 0x86, 0x11, 0xfe, 0x6b, 0x5e, 0x5f, 0xa5, 0x2d, - 0x3e, 0xba, 0x86, 0x6f, 0x5d, 0xf3, 0x3b, 0x31, 0x2a, 0x9d, 0x1b, 0x32, 0xe9, 0x8c, 0xe5, 0x39, - 0x9b, 0x53, 0x93, 0x62, 0x42, 0xbe, 0x28, 0xaa, 0x6a, 0x21, 0x4e, 0x9e, 0x0a, 0xe4, 0x32, 0x6c, - 0x9e, 0x9e, 0xb5, 0x9d, 0x0d, 0xdd, 0x31, 0xa8, 0x31, 0xb5, 0x29, 0xcf, 0xd3, 0x6b, 0x3e, 0xb8, - 0xbe, 0x2a, 0xab, 0x9e, 0x4c, 0xce, 0x3a, 0x9d, 0x73, 0xab, 0x75, 0x57, 0x51, 0xe5, 0x06, 0x12, - 0xd2, 0x72, 0xbb, 0xab, 0x71, 0x35, 0x8b, 0x96, 0x61, 0x53, 0x01, 0x07, 0x3c, 0xa0, 0x0e, 0x9b, - 0xc4, 0x71, 0xd4, 0x89, 0xa9, 0x40, 0x30, 0x79, 0xcc, 0x31, 0x49, 0x1e, 0xa2, 0xc8, 0xa5, 0x77, - 0x61, 0x22, 0x21, 0x0a, 0x32, 0x0e, 0x85, 0x47, 0x74, 0x93, 0xab, 0x8b, 0xc6, 0xfe, 0x24, 0xe7, - 0xa0, 0xff, 0xb1, 0xde, 0xea, 0x8a, 0x25, 0x54, 0xe3, 0x3f, 0xde, 0xcc, 0x7f, 0x36, 0xc7, 0x56, - 0x1c, 0x32, 0x6d, 0x5b, 0x16, 0x6d, 0x78, 0xf2, 0xa2, 0xf3, 0x1a, 0x0c, 0xcd, 0xdb, 0x0d, 0xbd, - 0x85, 0xfd, 0xc8, 0xf5, 0x4e, 0xd9, 0xde, 0x9a, 0x3c, 0xc7, 0x3a, 0xf0, 0x46, 0x8b, 0x61, 0xa4, - 0x36, 0x85, 0xa4, 0x4c, 0x01, 0x34, 0xda, 0xb6, 0x3d, 0x8a, 0x05, 0xf3, 0xa1, 0x02, 0x60, 0x41, - 0x07, 0x51, 0xb2, 0x02, 0x84, 0xc4, 0xe4, 0x26, 0x0c, 0x2e, 0xb3, 0x75, 0xb6, 0x61, 0xb7, 0x84, - 0xf2, 0xe1, 0x52, 0x80, 0x6b, 0xaf, 0x3c, 0x56, 0x7d, 0x22, 0x75, 0x0e, 0xc6, 0xa6, 0x5b, 0x26, - 0xb5, 0x3c, 0xb9, 0xd5, 0x6c, 0x24, 0x97, 0x9b, 0xd4, 0xf2, 0xe4, 0x56, 0xe3, 0x98, 0xd7, 0x19, - 0x54, 0x6e, 0x75, 0x40, 0xaa, 0xfe, 0x7e, 0x01, 0x9e, 0xba, 0xd7, 0x5d, 0xa5, 0x8e, 0x45, 0x3d, - 0xea, 0x8a, 0x05, 0x39, 0xe0, 0xba, 0x08, 0x13, 0x09, 0xa4, 0xe0, 0x8e, 0x0b, 0xe5, 0xa3, 0x00, - 0x59, 0x17, 0x6b, 0xbc, 0x3c, 0xdb, 0x26, 0x8a, 0x92, 0x39, 0x38, 0x13, 0x02, 0x59, 0x23, 0x5c, - 0x25, 0x8f, 0x4b, 0xc9, 0x95, 0xed, 0xad, 0xc9, 0x4b, 0x12, 0x37, 0xd6, 0x6c, 0x59, 0x83, 0xe3, - 0xc5, 0xc8, 0x3d, 0x18, 0x0f, 0x41, 0x77, 0x1c, 0xbb, 0xdb, 0x71, 0x95, 0x02, 0xb2, 0x9a, 0xdc, - 0xde, 0x9a, 0x7c, 0x5a, 0x62, 0xd5, 0x44, 0xa4, 0xbc, 0x80, 0xc7, 0x0b, 0x92, 0x1f, 0xcd, 0xc9, - 0xdc, 0xc4, 0x28, 0x2c, 0xe2, 0x28, 0x7c, 0xdd, 0x1f, 0x85, 0x99, 0x42, 0xba, 0x11, 0x2f, 0x29, - 0x06, 0x65, 0xac, 0x19, 0x89, 0x41, 0x99, 0xa8, 0xf1, 0xd2, 0x34, 0x9c, 0x4f, 0xe5, 0xb5, 0x27, - 0xad, 0xfe, 0x17, 0x05, 0x99, 0xcb, 0xb2, 0x6d, 0x04, 0x9d, 0xb9, 0x24, 0x77, 0xe6, 0xb2, 0x6d, - 0xe0, 0x54, 0x9f, 0x0b, 0xd7, 0x4e, 0xa9, 0xb1, 0x1d, 0xdb, 0x88, 0xcf, 0xfa, 0xc9, 0xb2, 0xe4, - 0xcb, 0x70, 0x21, 0x01, 0xe4, 0xd3, 0x35, 0xd7, 0xfe, 0xab, 0xdb, 0x5b, 0x93, 0x6a, 0x0a, 0xd7, - 0xf8, 0xec, 0x9d, 0xc1, 0x85, 0xe8, 0x70, 0x51, 0x92, 0xba, 0x6d, 0x79, 0xba, 0x69, 0x09, 0xe3, - 0x92, 0x8f, 0x92, 0x4f, 0x6d, 0x6f, 0x4d, 0x3e, 0x2f, 0xeb, 0xa0, 0x4f, 0x13, 0x6f, 0x7c, 0x16, - 0x1f, 0x62, 0x80, 0x92, 0x82, 0xaa, 0xb6, 0xf5, 0xa6, 0x6f, 0x31, 0x5f, 0xdb, 0xde, 0x9a, 0xfc, - 0x44, 0x6a, 0x1d, 0x26, 0xa3, 0x92, 0x57, 0xe8, 0x2c, 0x4e, 0x44, 0x03, 0x12, 0xe2, 0x16, 0x6d, - 0x83, 0xe2, 0x37, 0xf4, 0x23, 0x7f, 0x75, 0x7b, 0x6b, 0xf2, 0x8a, 0xc4, 0xdf, 0xb2, 0x0d, 0x1a, - 0x6f, 0x7e, 0x4a, 0x69, 0xf5, 0xb7, 0x0a, 0x70, 0xa5, 0x56, 0x5e, 0x98, 0xaf, 0x1a, 0xbe, 0x49, - 0xb3, 0xec, 0xd8, 0x8f, 0x4d, 0x43, 0x1a, 0xbd, 0xab, 0x70, 0x31, 0x86, 0x9a, 0x41, 0x2b, 0x2a, - 0x30, 0xa6, 0xf1, 0xdb, 0x7c, 0x73, 0xa9, 0x23, 0x68, 0xea, 0xdc, 0xd4, 0x8a, 0x2e, 0xda, 0x59, - 0x8c, 0x58, 0x1f, 0xc5, 0x50, 0xb5, 0x75, 0xdb, 0xf1, 0x1a, 0x5d, 0x4f, 0x28, 0x01, 0xf6, 0x51, - 0xa2, 0x0e, 0x57, 0x10, 0xf5, 0xa8, 0xc2, 0xe7, 0x43, 0x7e, 0x22, 0x07, 0xe3, 0x65, 0xcf, 0x73, - 0xcc, 0xd5, 0xae, 0x47, 0x17, 0xf4, 0x4e, 0xc7, 0xb4, 0x9a, 0x38, 0xd6, 0x87, 0x6f, 0xbd, 0x1d, - 0xac, 0x91, 0x3d, 0x25, 0x71, 0x23, 0x5e, 0x5c, 0x1a, 0xa2, 0xba, 0x8f, 0xaa, 0xb7, 0x39, 0x4e, - 0x1e, 0xa2, 0xf1, 0x72, 0x6c, 0x88, 0xa6, 0xf2, 0xda, 0xd3, 0x10, 0xfd, 0x66, 0x01, 0x2e, 0x2f, - 0x3d, 0xf2, 0x74, 0x8d, 0xba, 0x76, 0xd7, 0x69, 0x50, 0xf7, 0x7e, 0xc7, 0xd0, 0x3d, 0x1a, 0x8e, - 0xd4, 0x49, 0xe8, 0x2f, 0x1b, 0x06, 0x35, 0x90, 0x5d, 0x3f, 0xdf, 0xf6, 0xe9, 0x0c, 0xa0, 0x71, - 0x38, 0xf9, 0x24, 0x0c, 0x88, 0x32, 0xc8, 0xbd, 0x7f, 0x6a, 0x78, 0x7b, 0x6b, 0x72, 0xa0, 0xcb, - 0x41, 0x9a, 0x8f, 0x63, 0x64, 0x15, 0xda, 0xa2, 0x8c, 0xac, 0x10, 0x92, 0x19, 0x1c, 0xa4, 0xf9, - 0x38, 0xf2, 0x1e, 0x8c, 0x21, 0xdb, 0xa0, 0x3d, 0x62, 0xee, 0x3b, 0xe7, 0x4b, 0x57, 0x6e, 0x2c, - 0x5f, 0x9a, 0xb0, 0x35, 0x75, 0xc7, 0x2f, 0xa0, 0xc5, 0x18, 0x90, 0x87, 0x30, 0x2e, 0x1a, 0x11, - 0x32, 0xed, 0xef, 0xc1, 0xf4, 0xfc, 0xf6, 0xd6, 0xe4, 0x84, 0x68, 0xbf, 0xc4, 0x36, 0xc1, 0x84, - 0x31, 0x16, 0xcd, 0x0e, 0x19, 0x97, 0x76, 0x62, 0x2c, 0xbe, 0x58, 0x66, 0x1c, 0x67, 0xa2, 0xbe, - 0x0f, 0x23, 0x72, 0x41, 0x72, 0x01, 0xb7, 0xd6, 0x7c, 0x9c, 0xe0, 0xa6, 0xdc, 0x34, 0x70, 0x3f, - 0xfd, 0x32, 0x0c, 0x57, 0xa8, 0xdb, 0x70, 0xcc, 0x0e, 0xb3, 0x1a, 0x84, 0x92, 0x9f, 0xd9, 0xde, - 0x9a, 0x1c, 0x36, 0x42, 0xb0, 0x26, 0xd3, 0xa8, 0xff, 0x57, 0x0e, 0x2e, 0x30, 0xde, 0x65, 0xd7, - 0x35, 0x9b, 0x56, 0x5b, 0x5e, 0xb6, 0x5f, 0x84, 0x52, 0x0d, 0xeb, 0x13, 0x35, 0x9d, 0xdb, 0xde, - 0x9a, 0x1c, 0xe7, 0x2d, 0x90, 0xf4, 0x50, 0xd0, 0x04, 0xfb, 0xca, 0xfc, 0x0e, 0xfb, 0x4a, 0x66, - 0xd2, 0x7a, 0xba, 0xe3, 0x99, 0x56, 0xb3, 0xe6, 0xe9, 0x5e, 0xd7, 0x8d, 0x98, 0xb4, 0x02, 0x53, - 0x77, 0x11, 0x15, 0x31, 0x69, 0x23, 0x85, 0xc8, 0xbb, 0x30, 0x32, 0x63, 0x19, 0x21, 0x13, 0x3e, - 0x21, 0x3e, 0xcd, 0x2c, 0x4d, 0x8a, 0xf0, 0x24, 0x8b, 0x48, 0x01, 0xf5, 0x6f, 0xe4, 0x40, 0xe1, - 0x9b, 0xc0, 0x79, 0xd3, 0xf5, 0x16, 0x68, 0x7b, 0x55, 0x9a, 0x9d, 0x66, 0xfd, 0x5d, 0x25, 0xc3, - 0x49, 0x6b, 0x11, 0x9a, 0x02, 0x62, 0x57, 0xd9, 0x32, 0xdd, 0xc4, 0xf6, 0x23, 0x56, 0x8a, 0x54, - 0x61, 0x80, 0x73, 0xe6, 0xb6, 0xc4, 0xf0, 0x2d, 0xc5, 0x57, 0x84, 0x78, 0xd5, 0x5c, 0x19, 0xda, - 0x9c, 0x58, 0xde, 0xd0, 0x88, 0xf2, 0xea, 0xdf, 0xcc, 0xc3, 0x78, 0xbc, 0x10, 0x79, 0x08, 0x83, - 0x77, 0x6d, 0xd3, 0xa2, 0xc6, 0x92, 0x85, 0x2d, 0xec, 0x7d, 0x38, 0xe2, 0xdb, 0xe2, 0x67, 0x3f, - 0xc0, 0x32, 0x75, 0xd9, 0x82, 0xc5, 0xb3, 0x92, 0x80, 0x19, 0xf9, 0x22, 0x0c, 0x31, 0x1b, 0xf0, - 0x31, 0x72, 0xce, 0xef, 0xc8, 0xf9, 0x59, 0xc1, 0xf9, 0x9c, 0xc3, 0x0b, 0x25, 0x59, 0x87, 0xec, + 0x72, 0x18, 0x86, 0xfe, 0x40, 0x03, 0x08, 0x7c, 0xe7, 0x7c, 0xd5, 0xce, 0xce, 0x2e, 0x76, 0x6b, + 0xef, 0xe6, 0x66, 0xf6, 0x76, 0x31, 0xb7, 0xb3, 0xb3, 0xbb, 0xb7, 0x5f, 0xb7, 0xd7, 0x40, 0x03, + 0x83, 0x9e, 0xc1, 0xd7, 0x56, 0x63, 0x66, 0x6e, 0x8f, 0xbc, 0x6b, 0x16, 0xba, 0x12, 0x40, 0xed, + 0x74, 0x57, 0x35, 0xab, 0xaa, 0x07, 0x83, 0xf5, 0x17, 0x4f, 0xa6, 0x28, 0x52, 0xbc, 0x3b, 0x9d, + 0x8f, 0xa6, 0x48, 0x89, 0x92, 0x75, 0xd4, 0x87, 0x4d, 0xd1, 0x14, 0x69, 0x4a, 0x34, 0xc9, 0x23, + 0xcd, 0x67, 0x49, 0xe7, 0x8f, 0x93, 0xf8, 0xcc, 0x27, 0xc9, 0xb6, 0x9e, 0x9e, 0x2d, 0xe3, 0x64, + 0xda, 0xfa, 0x83, 0x67, 0xbf, 0x47, 0xdb, 0xf7, 0xac, 0xb3, 0x2c, 0xfb, 0xe9, 0x65, 0x64, 0x56, + 0x55, 0xd6, 0x57, 0xe3, 0x73, 0x89, 0xc5, 0x02, 0x7f, 0x66, 0xd0, 0x11, 0x91, 0x91, 0x59, 0x91, + 0x91, 0x99, 0x91, 0x99, 0x91, 0x11, 0x70, 0xdd, 0xa3, 0x4d, 0xda, 0xb6, 0x1d, 0xef, 0x46, 0x93, + 0xae, 0xeb, 0x8d, 0xad, 0x1b, 0xde, 0x56, 0x9b, 0xba, 0x37, 0xe8, 0x23, 0x6a, 0x79, 0xfe, 0x7f, + 0x93, 0x6d, 0xc7, 0xf6, 0x6c, 0x52, 0xe2, 0xbf, 0x2e, 0x9f, 0x5f, 0xb7, 0xd7, 0x6d, 0x04, 0xdd, + 0x60, 0x7f, 0x71, 0xec, 0xe5, 0x2b, 0xeb, 0xb6, 0xbd, 0xde, 0xa4, 0x37, 0xf0, 0xd7, 0x6a, 0x67, + 0xed, 0x86, 0xeb, 0x39, 0x9d, 0x86, 0x27, 0xb0, 0x13, 0x71, 0xac, 0x67, 0xb6, 0xa8, 0xeb, 0xe9, + 0xad, 0xb6, 0x20, 0x78, 0x3a, 0x4e, 0xb0, 0xe9, 0xe8, 0xed, 0x36, 0x75, 0x44, 0xe5, 0x97, 0x3f, + 0x15, 0xb4, 0x53, 0x6f, 0x34, 0xa8, 0xeb, 0x36, 0x4d, 0xd7, 0xbb, 0xf1, 0xe8, 0x25, 0xe9, 0x97, + 0x20, 0x7c, 0x36, 0xfd, 0x83, 0xf0, 0x5f, 0x41, 0xf2, 0x62, 0x3a, 0x89, 0x5f, 0x63, 0xac, 0x6a, + 0xf5, 0x9b, 0x79, 0xe8, 0x5f, 0xa0, 0x9e, 0x6e, 0xe8, 0x9e, 0x4e, 0xae, 0x40, 0x6f, 0xd5, 0x32, + 0xe8, 0x63, 0x25, 0xf7, 0x4c, 0xee, 0x5a, 0x61, 0xaa, 0xb4, 0xb3, 0x3d, 0x91, 0xa7, 0xa6, 0xc6, + 0x81, 0xe4, 0x29, 0x28, 0xae, 0x6c, 0xb5, 0xa9, 0x92, 0x7f, 0x26, 0x77, 0x6d, 0x60, 0x6a, 0x60, + 0x67, 0x7b, 0xa2, 0x17, 0x85, 0xa6, 0x21, 0x98, 0x3c, 0x0b, 0xf9, 0x6a, 0x45, 0x29, 0x20, 0x72, + 0x7c, 0x67, 0x7b, 0x62, 0xb8, 0x63, 0x1a, 0x2f, 0xd8, 0x2d, 0xd3, 0xa3, 0xad, 0xb6, 0xb7, 0xa5, + 0xe5, 0xab, 0x15, 0x72, 0x15, 0x8a, 0xd3, 0xb6, 0x41, 0x95, 0x22, 0x12, 0x91, 0x9d, 0xed, 0x89, + 0x91, 0x86, 0x6d, 0x50, 0x89, 0x0a, 0xf1, 0xe4, 0xf3, 0x50, 0x5c, 0x31, 0x5b, 0x54, 0xe9, 0x7d, + 0x26, 0x77, 0x6d, 0xf0, 0xe6, 0xe5, 0x49, 0x2e, 0xbe, 0x49, 0x5f, 0x7c, 0x93, 0x2b, 0xbe, 0x7c, + 0xa7, 0xc6, 0xbe, 0xbb, 0x3d, 0xd1, 0xb3, 0xb3, 0x3d, 0x51, 0x64, 0x22, 0xff, 0xc6, 0xf7, 0x26, + 0x72, 0x1a, 0x96, 0x24, 0x6f, 0xc1, 0xe0, 0x74, 0xb3, 0xe3, 0x7a, 0xd4, 0x59, 0xd4, 0x5b, 0x54, + 0x29, 0x61, 0x85, 0x97, 0x77, 0xb6, 0x27, 0x2e, 0x36, 0x38, 0xb8, 0x6e, 0xe9, 0x2d, 0xb9, 0x62, + 0x99, 0x5c, 0xfd, 0xed, 0x1c, 0x8c, 0xd6, 0xa8, 0xeb, 0x9a, 0xb6, 0x15, 0xc8, 0xe6, 0x93, 0x30, + 0x20, 0x40, 0xd5, 0x0a, 0xca, 0x67, 0x60, 0xaa, 0x6f, 0x67, 0x7b, 0xa2, 0xe0, 0x9a, 0x86, 0x16, + 0x62, 0xc8, 0x67, 0xa0, 0xef, 0x81, 0xe9, 0x6d, 0x2c, 0xcc, 0x96, 0x85, 0x9c, 0x2e, 0xee, 0x6c, + 0x4f, 0x90, 0x4d, 0xd3, 0xdb, 0xa8, 0xb7, 0xd6, 0x74, 0xa9, 0x42, 0x9f, 0x8c, 0xcc, 0xc3, 0xd8, + 0xb2, 0x63, 0x3e, 0xd2, 0x3d, 0x7a, 0x97, 0x6e, 0x2d, 0xdb, 0x4d, 0xb3, 0xb1, 0x25, 0xa4, 0xf8, + 0xcc, 0xce, 0xf6, 0xc4, 0x95, 0x36, 0xc7, 0xd5, 0x1f, 0xd2, 0xad, 0x7a, 0x1b, 0xb1, 0x12, 0x93, + 0x44, 0x49, 0xf5, 0x77, 0x4a, 0x30, 0x74, 0xcf, 0xa5, 0x4e, 0xd0, 0xee, 0xab, 0x50, 0x64, 0xbf, + 0x45, 0x93, 0x51, 0xe6, 0x1d, 0x97, 0x3a, 0xb2, 0xcc, 0x19, 0x9e, 0x5c, 0x87, 0xde, 0x79, 0x7b, + 0xdd, 0xb4, 0x44, 0xb3, 0xcf, 0xed, 0x6c, 0x4f, 0x8c, 0x36, 0x19, 0x40, 0xa2, 0xe4, 0x14, 0xe4, + 0x73, 0x30, 0x54, 0x6d, 0x31, 0x1d, 0xb2, 0x2d, 0xdd, 0xb3, 0x1d, 0xd1, 0x5a, 0x94, 0xae, 0x29, + 0xc1, 0xa5, 0x82, 0x11, 0x7a, 0xf2, 0x06, 0x40, 0xf9, 0x41, 0x4d, 0xb3, 0x9b, 0xb4, 0xac, 0x2d, + 0x0a, 0x65, 0xc0, 0xd2, 0xfa, 0xa6, 0x5b, 0x77, 0xec, 0x26, 0xad, 0xeb, 0x8e, 0x5c, 0xad, 0x44, + 0x4d, 0x66, 0x60, 0xa4, 0x8c, 0xa3, 0x42, 0xa3, 0x3f, 0xda, 0xa1, 0xae, 0xe7, 0x2a, 0xbd, 0xcf, + 0x14, 0xae, 0x0d, 0x4c, 0x3d, 0xb5, 0xb3, 0x3d, 0xf1, 0x04, 0x1f, 0x2f, 0x75, 0x47, 0xa0, 0x24, + 0x16, 0xb1, 0x42, 0x64, 0x0a, 0x86, 0xcb, 0x1f, 0x74, 0x1c, 0x5a, 0x35, 0xa8, 0xe5, 0x99, 0xde, + 0x96, 0xd0, 0x90, 0x2b, 0x3b, 0xdb, 0x13, 0x8a, 0xce, 0x10, 0x75, 0x53, 0x60, 0x24, 0x26, 0xd1, + 0x22, 0x64, 0x09, 0xc6, 0x6f, 0x4f, 0x2f, 0xd7, 0xa8, 0xf3, 0xc8, 0x6c, 0xd0, 0x72, 0xa3, 0x61, + 0x77, 0x2c, 0x4f, 0xe9, 0x43, 0x3e, 0xcf, 0xee, 0x6c, 0x4f, 0x3c, 0xb5, 0xde, 0x68, 0xd7, 0x5d, + 0x8e, 0xad, 0xeb, 0x1c, 0x2d, 0x31, 0x4b, 0x96, 0x25, 0x5f, 0x84, 0xe1, 0x15, 0x87, 0x69, 0xa1, + 0x51, 0xa1, 0x0c, 0xae, 0xf4, 0xa3, 0xfe, 0x5f, 0x9c, 0x14, 0x33, 0x15, 0x87, 0xfa, 0x3d, 0xcb, + 0x1b, 0xeb, 0xf1, 0x02, 0x75, 0x03, 0x71, 0x72, 0x63, 0x23, 0xac, 0x08, 0x05, 0x85, 0x7d, 0xbc, + 0xe9, 0x50, 0x23, 0xa1, 0x6d, 0x03, 0xd8, 0xe6, 0xeb, 0x3b, 0xdb, 0x13, 0x9f, 0x74, 0x04, 0x4d, + 0xbd, 0xab, 0xda, 0x65, 0xb2, 0x22, 0x33, 0xd0, 0xcf, 0xb4, 0xe9, 0xae, 0x69, 0x19, 0x0a, 0x3c, + 0x93, 0xbb, 0x36, 0x72, 0x73, 0xcc, 0x6f, 0xbd, 0x0f, 0x9f, 0xba, 0xb4, 0xb3, 0x3d, 0x71, 0x8e, + 0xe9, 0x60, 0xfd, 0xa1, 0x69, 0xc9, 0x53, 0x44, 0x50, 0x94, 0x8d, 0xa2, 0x29, 0xdb, 0xc3, 0xa1, + 0x3b, 0x18, 0x8e, 0xa2, 0x55, 0xdb, 0x8b, 0x0f, 0x5b, 0x9f, 0x8c, 0x4c, 0xc3, 0xf0, 0x94, 0xed, + 0x55, 0x2d, 0xd7, 0xd3, 0xad, 0x06, 0xad, 0x56, 0x94, 0x21, 0x2c, 0x87, 0x6a, 0xc1, 0xca, 0x99, + 0x02, 0x53, 0x8f, 0x4c, 0x4a, 0xd1, 0x32, 0xea, 0xbf, 0x28, 0xc2, 0x08, 0xeb, 0x13, 0x69, 0xf8, + 0x94, 0xd9, 0x4c, 0xc0, 0x20, 0xac, 0x16, 0xb7, 0xad, 0x37, 0xa8, 0x18, 0x49, 0xf8, 0x15, 0x96, + 0x0f, 0x94, 0x78, 0xc6, 0xe9, 0xc9, 0x75, 0xe8, 0xe7, 0xa0, 0x6a, 0x45, 0x0c, 0xae, 0xe1, 0x9d, + 0xed, 0x89, 0x01, 0x17, 0x61, 0x75, 0xd3, 0xd0, 0x02, 0x34, 0xd3, 0x6e, 0xfe, 0xf7, 0x9c, 0xed, + 0x7a, 0x8c, 0xb9, 0x18, 0x5b, 0xf8, 0x19, 0xa2, 0xc0, 0x86, 0x40, 0xc9, 0xda, 0x1d, 0x2d, 0x44, + 0x5e, 0x07, 0xe0, 0x90, 0xb2, 0x61, 0x38, 0x62, 0x80, 0x3d, 0xb1, 0xb3, 0x3d, 0x71, 0x41, 0xb0, + 0xd0, 0x0d, 0x43, 0x1e, 0x9d, 0x12, 0x31, 0x69, 0xc1, 0x10, 0xff, 0x35, 0xaf, 0xaf, 0xd2, 0x26, + 0x1f, 0x5d, 0x83, 0x37, 0xaf, 0xf9, 0x9d, 0x18, 0x95, 0xce, 0xa4, 0x4c, 0x3a, 0x63, 0x79, 0xce, + 0xd6, 0xd4, 0x84, 0x98, 0x90, 0x2f, 0x89, 0xaa, 0x9a, 0x88, 0x93, 0xa7, 0x02, 0xb9, 0x0c, 0x9b, + 0xa7, 0x67, 0x6d, 0x67, 0x53, 0x77, 0x0c, 0x6a, 0x4c, 0x6d, 0xc9, 0xf3, 0xf4, 0x9a, 0x0f, 0xae, + 0xaf, 0xca, 0xaa, 0x27, 0x93, 0xb3, 0x4e, 0xe7, 0xdc, 0x6a, 0x9d, 0x55, 0x54, 0xb9, 0xbe, 0x84, + 0xb4, 0xdc, 0xce, 0x6a, 0x5c, 0xcd, 0xa2, 0x65, 0xd8, 0x54, 0xc0, 0x01, 0xf7, 0xa9, 0xc3, 0x26, + 0x71, 0x1c, 0x75, 0x62, 0x2a, 0x10, 0x4c, 0x1e, 0x71, 0x4c, 0x92, 0x87, 0x28, 0x72, 0xf9, 0x1d, + 0x18, 0x4f, 0x88, 0x82, 0x8c, 0x41, 0xe1, 0x21, 0xdd, 0xe2, 0xea, 0xa2, 0xb1, 0x3f, 0xc9, 0x79, + 0xe8, 0x7d, 0xa4, 0x37, 0x3b, 0x62, 0x09, 0xd5, 0xf8, 0x8f, 0x37, 0xf2, 0x9f, 0xcd, 0xb1, 0x15, + 0x87, 0x4c, 0xdb, 0x96, 0x45, 0x1b, 0x9e, 0xbc, 0xe8, 0xbc, 0x0a, 0x03, 0xf3, 0x76, 0x43, 0x6f, + 0x62, 0x3f, 0x72, 0xbd, 0x53, 0x76, 0xb6, 0x27, 0xce, 0xb3, 0x0e, 0x9c, 0x6c, 0x32, 0x8c, 0xd4, + 0xa6, 0x90, 0x94, 0x29, 0x80, 0x46, 0x5b, 0xb6, 0x47, 0xb1, 0x60, 0x3e, 0x54, 0x00, 0x2c, 0xe8, + 0x20, 0x4a, 0x56, 0x80, 0x90, 0x98, 0xdc, 0x80, 0xfe, 0x65, 0xb6, 0xce, 0x36, 0xec, 0xa6, 0x50, + 0x3e, 0x5c, 0x0a, 0x70, 0xed, 0x95, 0xc7, 0xaa, 0x4f, 0xa4, 0xce, 0xc1, 0xc8, 0x74, 0xd3, 0xa4, + 0x96, 0x27, 0xb7, 0x9a, 0x8d, 0xe4, 0xf2, 0x3a, 0xb5, 0x3c, 0xb9, 0xd5, 0x38, 0xe6, 0x75, 0x06, + 0x95, 0x5b, 0x1d, 0x90, 0xaa, 0x7f, 0x50, 0x80, 0x27, 0xee, 0x76, 0x56, 0xa9, 0x63, 0x51, 0x8f, + 0xba, 0x62, 0x41, 0x0e, 0xb8, 0x2e, 0xc2, 0x78, 0x02, 0x29, 0xb8, 0xe3, 0x42, 0xf9, 0x30, 0x40, + 0xd6, 0xc5, 0x1a, 0x2f, 0xcf, 0xb6, 0x89, 0xa2, 0x64, 0x0e, 0x46, 0x43, 0x20, 0x6b, 0x84, 0xab, + 0xe4, 0x71, 0x29, 0x79, 0x7a, 0x67, 0x7b, 0xe2, 0xb2, 0xc4, 0x8d, 0x35, 0x5b, 0xd6, 0xe0, 0x78, + 0x31, 0x72, 0x17, 0xc6, 0x42, 0xd0, 0x6d, 0xc7, 0xee, 0xb4, 0x5d, 0xa5, 0x80, 0xac, 0x26, 0x76, + 0xb6, 0x27, 0x9e, 0x94, 0x58, 0xad, 0x23, 0x52, 0x5e, 0xc0, 0xe3, 0x05, 0xc9, 0x8f, 0xe7, 0x64, + 0x6e, 0x62, 0x14, 0x16, 0x71, 0x14, 0xbe, 0xe6, 0x8f, 0xc2, 0x4c, 0x21, 0x4d, 0xc6, 0x4b, 0x8a, + 0x41, 0x19, 0x6b, 0x46, 0x62, 0x50, 0x26, 0x6a, 0xbc, 0x3c, 0x0d, 0x17, 0x52, 0x79, 0xed, 0x4b, + 0xab, 0xff, 0x79, 0x41, 0xe6, 0xb2, 0x6c, 0x1b, 0x41, 0x67, 0x2e, 0xc9, 0x9d, 0xb9, 0x6c, 0x1b, + 0x38, 0xd5, 0xe7, 0xc2, 0xb5, 0x53, 0x6a, 0x6c, 0xdb, 0x36, 0xe2, 0xb3, 0x7e, 0xb2, 0x2c, 0xf9, + 0x32, 0x5c, 0x4c, 0x00, 0xf9, 0x74, 0xcd, 0xb5, 0xff, 0xea, 0xce, 0xf6, 0x84, 0x9a, 0xc2, 0x35, + 0x3e, 0x7b, 0x67, 0x70, 0x21, 0x3a, 0x5c, 0x92, 0xa4, 0x6e, 0x5b, 0x9e, 0x6e, 0x5a, 0xc2, 0xb8, + 0xe4, 0xa3, 0xe4, 0x53, 0x3b, 0xdb, 0x13, 0xcf, 0xc9, 0x3a, 0xe8, 0xd3, 0xc4, 0x1b, 0x9f, 0xc5, + 0x87, 0x18, 0xa0, 0xa4, 0xa0, 0xaa, 0x2d, 0x7d, 0xdd, 0xb7, 0x98, 0xaf, 0xed, 0x6c, 0x4f, 0x7c, + 0x22, 0xb5, 0x0e, 0x93, 0x51, 0xc9, 0x2b, 0x74, 0x16, 0x27, 0xa2, 0x01, 0x09, 0x71, 0x8b, 0xb6, + 0x41, 0xf1, 0x1b, 0x7a, 0x91, 0xbf, 0xba, 0xb3, 0x3d, 0xf1, 0xb4, 0xc4, 0xdf, 0xb2, 0x0d, 0x1a, + 0x6f, 0x7e, 0x4a, 0x69, 0xf5, 0xb7, 0x0b, 0xf0, 0x74, 0xad, 0xbc, 0x30, 0x5f, 0x35, 0x7c, 0x93, + 0x66, 0xd9, 0xb1, 0x1f, 0x99, 0x86, 0x34, 0x7a, 0x57, 0xe1, 0x52, 0x0c, 0x35, 0x83, 0x56, 0x54, + 0x60, 0x4c, 0xe3, 0xb7, 0xf9, 0xe6, 0x52, 0x5b, 0xd0, 0xd4, 0xb9, 0xa9, 0x15, 0x5d, 0xb4, 0xb3, + 0x18, 0xb1, 0x3e, 0x8a, 0xa1, 0x6a, 0x1b, 0xb6, 0xe3, 0x35, 0x3a, 0x9e, 0x50, 0x02, 0xec, 0xa3, + 0x44, 0x1d, 0xae, 0x20, 0xea, 0x52, 0x85, 0xcf, 0x87, 0xfc, 0x54, 0x0e, 0xc6, 0xca, 0x9e, 0xe7, + 0x98, 0xab, 0x1d, 0x8f, 0x2e, 0xe8, 0xed, 0xb6, 0x69, 0xad, 0xe3, 0x58, 0x1f, 0xbc, 0xf9, 0x56, + 0xb0, 0x46, 0x76, 0x95, 0xc4, 0x64, 0xbc, 0xb8, 0x34, 0x44, 0x75, 0x1f, 0x55, 0x6f, 0x71, 0x9c, + 0x3c, 0x44, 0xe3, 0xe5, 0xd8, 0x10, 0x4d, 0xe5, 0xb5, 0xaf, 0x21, 0xfa, 0xcd, 0x02, 0x5c, 0x59, + 0x7a, 0xe8, 0xe9, 0x1a, 0x75, 0xed, 0x8e, 0xd3, 0xa0, 0xee, 0xbd, 0xb6, 0xa1, 0x7b, 0x34, 0x1c, + 0xa9, 0x13, 0xd0, 0x5b, 0x36, 0x0c, 0x6a, 0x20, 0xbb, 0x5e, 0xbe, 0xed, 0xd3, 0x19, 0x40, 0xe3, + 0x70, 0xf2, 0x49, 0xe8, 0x13, 0x65, 0x90, 0x7b, 0xef, 0xd4, 0xe0, 0xce, 0xf6, 0x44, 0x5f, 0x87, + 0x83, 0x34, 0x1f, 0xc7, 0xc8, 0x2a, 0xb4, 0x49, 0x19, 0x59, 0x21, 0x24, 0x33, 0x38, 0x48, 0xf3, + 0x71, 0xe4, 0x5d, 0x18, 0x41, 0xb6, 0x41, 0x7b, 0xc4, 0xdc, 0x77, 0xde, 0x97, 0xae, 0xdc, 0x58, + 0xbe, 0x34, 0x61, 0x6b, 0xea, 0x8e, 0x5f, 0x40, 0x8b, 0x31, 0x20, 0x0f, 0x60, 0x4c, 0x34, 0x22, + 0x64, 0xda, 0xdb, 0x85, 0xe9, 0x85, 0x9d, 0xed, 0x89, 0x71, 0xd1, 0x7e, 0x89, 0x6d, 0x82, 0x09, + 0x63, 0x2c, 0x9a, 0x1d, 0x32, 0x2e, 0xed, 0xc6, 0x58, 0x7c, 0xb1, 0xcc, 0x38, 0xce, 0x44, 0x7d, + 0x0f, 0x86, 0xe4, 0x82, 0xe4, 0x22, 0x6e, 0xad, 0xf9, 0x38, 0xc1, 0x4d, 0xb9, 0x69, 0xe0, 0x7e, + 0xfa, 0x25, 0x18, 0xac, 0x50, 0xb7, 0xe1, 0x98, 0x6d, 0x66, 0x35, 0x08, 0x25, 0x1f, 0xdd, 0xd9, + 0x9e, 0x18, 0x34, 0x42, 0xb0, 0x26, 0xd3, 0xa8, 0xff, 0x77, 0x0e, 0x2e, 0x32, 0xde, 0x65, 0xd7, + 0x35, 0xd7, 0xad, 0x96, 0xbc, 0x6c, 0xbf, 0x00, 0xa5, 0x1a, 0xd6, 0x27, 0x6a, 0x3a, 0xbf, 0xb3, + 0x3d, 0x31, 0xc6, 0x5b, 0x20, 0xe9, 0xa1, 0xa0, 0x09, 0xf6, 0x95, 0xf9, 0x5d, 0xf6, 0x95, 0xcc, + 0xa4, 0xf5, 0x74, 0xc7, 0x33, 0xad, 0xf5, 0x9a, 0xa7, 0x7b, 0x1d, 0x37, 0x62, 0xd2, 0x0a, 0x4c, + 0xdd, 0x45, 0x54, 0xc4, 0xa4, 0x8d, 0x14, 0x22, 0xef, 0xc0, 0xd0, 0x8c, 0x65, 0x84, 0x4c, 0xf8, + 0x84, 0xf8, 0x24, 0xb3, 0x34, 0x29, 0xc2, 0x93, 0x2c, 0x22, 0x05, 0xd4, 0xbf, 0x91, 0x03, 0x85, + 0x6f, 0x02, 0xe7, 0x4d, 0xd7, 0x5b, 0xa0, 0xad, 0x55, 0x69, 0x76, 0x9a, 0xf5, 0x77, 0x95, 0x0c, + 0x27, 0xad, 0x45, 0x68, 0x0a, 0x88, 0x5d, 0x65, 0xd3, 0x74, 0x13, 0xdb, 0x8f, 0x58, 0x29, 0x52, + 0x85, 0x3e, 0xce, 0x99, 0xdb, 0x12, 0x83, 0x37, 0x15, 0x5f, 0x11, 0xe2, 0x55, 0x73, 0x65, 0x68, + 0x71, 0x62, 0x79, 0x43, 0x23, 0xca, 0xab, 0xdf, 0x2a, 0xc0, 0x58, 0xbc, 0x10, 0x79, 0x00, 0xfd, + 0x77, 0x6c, 0xd3, 0xa2, 0xc6, 0x92, 0x85, 0x2d, 0xec, 0x7e, 0x38, 0xe2, 0xdb, 0xe2, 0xe7, 0xde, + 0xc7, 0x32, 0x75, 0xd9, 0x82, 0xc5, 0xb3, 0x92, 0x80, 0x19, 0xf9, 0x22, 0x0c, 0x30, 0x1b, 0xf0, + 0x11, 0x72, 0xce, 0xef, 0xca, 0xf9, 0x19, 0xc1, 0xf9, 0xbc, 0xc3, 0x0b, 0x25, 0x59, 0x87, 0xec, 0x98, 0x5e, 0x69, 0x54, 0x77, 0x6d, 0x4b, 0xf4, 0x3c, 0xea, 0x95, 0x83, 0x10, 0x59, 0xaf, 0x38, 0x0d, 0x33, 0x5d, 0xf9, 0xc7, 0x62, 0x37, 0x48, 0x7b, 0x17, 0x2e, 0xab, 0x78, 0x0f, 0x48, 0xc4, - 0xea, 0x8f, 0xe5, 0xe1, 0xa5, 0x50, 0x64, 0x1a, 0x7d, 0x6c, 0xd2, 0x0d, 0x21, 0xce, 0x75, 0xb3, - 0x23, 0xf6, 0xac, 0x4c, 0xe5, 0xdd, 0xe9, 0x75, 0xdd, 0x6a, 0x52, 0x83, 0x5c, 0x87, 0x7e, 0xcd, - 0x6e, 0x51, 0x57, 0xc9, 0xa1, 0xb9, 0x86, 0xd3, 0x89, 0xc3, 0x00, 0xf2, 0xa1, 0x07, 0x52, 0x10, - 0x1b, 0x4a, 0x2b, 0x8e, 0x6e, 0x7a, 0x7e, 0xcf, 0x96, 0x93, 0x3d, 0xbb, 0x8b, 0x1a, 0x6f, 0x70, - 0x1e, 0x7c, 0xce, 0x47, 0x41, 0x78, 0x08, 0x90, 0x05, 0xc1, 0x49, 0x2e, 0xbd, 0x01, 0xc3, 0x12, - 0xf1, 0x9e, 0x26, 0xf5, 0x6f, 0x15, 0x65, 0x5d, 0xf7, 0x9b, 0x25, 0x74, 0xfd, 0x26, 0xd3, 0x51, - 0xd7, 0x65, 0x56, 0x05, 0x57, 0x72, 0xa1, 0x89, 0x08, 0x8a, 0x6a, 0x22, 0x82, 0xc8, 0x2b, 0x30, - 0xc8, 0x59, 0x04, 0xfb, 0x57, 0xdc, 0xfb, 0x3a, 0x08, 0x8b, 0x2e, 0xcd, 0x01, 0x21, 0xf9, 0xa5, - 0x1c, 0x3c, 0xd3, 0x53, 0x12, 0xa8, 0x0c, 0xc3, 0xb7, 0x5e, 0xdd, 0x97, 0x18, 0xa7, 0x5e, 0xda, - 0xde, 0x9a, 0xbc, 0xde, 0x0e, 0x48, 0xea, 0x8e, 0x44, 0x53, 0x6f, 0x70, 0x22, 0xa9, 0x5d, 0xbd, - 0x9b, 0xc2, 0x8c, 0x47, 0x5e, 0xe9, 0x2c, 0x1e, 0x1d, 0x59, 0x8d, 0x4d, 0xbf, 0x91, 0xc5, 0xd0, - 0x78, 0x14, 0xdf, 0xbb, 0xe6, 0x93, 0xa4, 0x54, 0x93, 0xc1, 0x85, 0x34, 0xe0, 0x22, 0xc7, 0x54, - 0xf4, 0xcd, 0xa5, 0xb5, 0x05, 0xdb, 0xf2, 0xd6, 0xfd, 0x0a, 0xfa, 0xe5, 0xb3, 0x17, 0xac, 0xc0, - 0xd0, 0x37, 0xeb, 0xf6, 0x5a, 0xbd, 0xcd, 0xa8, 0x52, 0xea, 0xc8, 0xe2, 0xc4, 0x26, 0x5a, 0x31, - 0xe6, 0xfc, 0x29, 0xa8, 0x14, 0x9e, 0x8c, 0xf9, 0xe3, 0x34, 0x39, 0xe1, 0xc4, 0x0a, 0xa9, 0x55, - 0x18, 0x99, 0xb7, 0x1b, 0x8f, 0x02, 0x75, 0x79, 0x03, 0x4a, 0x2b, 0xba, 0xd3, 0xa4, 0x1e, 0xca, - 0x62, 0xf8, 0xd6, 0xc4, 0x0d, 0x7e, 0xda, 0xcc, 0x88, 0x38, 0x62, 0x6a, 0x4c, 0xcc, 0x06, 0x25, - 0x0f, 0x7f, 0x6b, 0xa2, 0x80, 0xfa, 0xdd, 0x7e, 0x18, 0x11, 0x27, 0xa3, 0x38, 0x9b, 0x93, 0x37, - 0xc3, 0xb3, 0x66, 0x31, 0x7d, 0x05, 0xa7, 0x43, 0xc1, 0xa9, 0xd6, 0x08, 0x63, 0xf6, 0x0f, 0xb7, - 0x26, 0x73, 0xdb, 0x5b, 0x93, 0x7d, 0xda, 0xa0, 0xb4, 0xa9, 0x0c, 0xd7, 0x1b, 0x69, 0x81, 0x95, - 0xcf, 0x3a, 0x63, 0x65, 0xf9, 0xfa, 0xf3, 0x2e, 0x0c, 0x88, 0x36, 0x08, 0x8d, 0xbb, 0x18, 0x9e, - 0x65, 0x44, 0x4e, 0x78, 0x63, 0xa5, 0xfd, 0x52, 0xe4, 0x6d, 0x28, 0xf1, 0xbd, 0xbd, 0x10, 0xc0, - 0x85, 0xf4, 0xb3, 0x90, 0x58, 0x71, 0x51, 0x86, 0xcc, 0x01, 0x84, 0xfb, 0xfa, 0xe0, 0x40, 0x5b, - 0x70, 0x48, 0xee, 0xf8, 0x63, 0x5c, 0xa4, 0xb2, 0xe4, 0x35, 0x18, 0x59, 0xa1, 0x4e, 0xdb, 0xb4, - 0xf4, 0x56, 0xcd, 0xfc, 0xd0, 0x3f, 0xd3, 0xc6, 0x85, 0xd7, 0x35, 0x3f, 0x94, 0x47, 0x6e, 0x84, - 0x8e, 0x7c, 0x29, 0x6d, 0xdf, 0x3c, 0x80, 0x0d, 0x79, 0x6e, 0xc7, 0x0d, 0x65, 0xac, 0x3d, 0x29, - 0xdb, 0xe8, 0xf7, 0x60, 0x34, 0xb2, 0x65, 0x12, 0x87, 0x96, 0xcf, 0x24, 0x59, 0x4b, 0xfb, 0xbf, - 0x18, 0xdb, 0x28, 0x07, 0xa6, 0xc9, 0x55, 0xcb, 0xf4, 0x4c, 0xbd, 0x35, 0x6d, 0xb7, 0xdb, 0xba, - 0x65, 0x28, 0x43, 0xa1, 0x26, 0x9b, 0x1c, 0x53, 0x6f, 0x70, 0x94, 0xac, 0xc9, 0xd1, 0x42, 0x6c, - 0x5b, 0x2e, 0xfa, 0x50, 0xa3, 0x0d, 0xdb, 0x61, 0xb6, 0x00, 0x9e, 0x49, 0x8a, 0x6d, 0xb9, 0xcb, - 0x71, 0x75, 0xc7, 0x47, 0xca, 0xc6, 0x76, 0xbc, 0xe0, 0xdd, 0xe2, 0xe0, 0xf0, 0xf8, 0x48, 0xfc, - 0x18, 0x59, 0xfd, 0xeb, 0x05, 0x18, 0x16, 0xa4, 0x6c, 0x29, 0x3d, 0x55, 0xf0, 0x83, 0x28, 0x78, - 0xaa, 0xa2, 0x96, 0x0e, 0x4b, 0x51, 0xd5, 0xaf, 0xe6, 0x83, 0xd9, 0x68, 0xd9, 0x31, 0xad, 0x83, - 0xcd, 0x46, 0x57, 0x01, 0xa6, 0xd7, 0xbb, 0xd6, 0x23, 0x7e, 0x5d, 0x96, 0x0f, 0xaf, 0xcb, 0x1a, - 0xa6, 0x26, 0x61, 0xc8, 0x33, 0x50, 0xac, 0x30, 0xfe, 0xac, 0x67, 0x46, 0xa6, 0x86, 0xbe, 0xc3, - 0x39, 0xe5, 0x5e, 0xd2, 0x10, 0xcc, 0x36, 0x57, 0x53, 0x9b, 0x1e, 0xe5, 0xe6, 0x6c, 0x81, 0x6f, - 0xae, 0x56, 0x19, 0x40, 0xe3, 0x70, 0x72, 0x1b, 0x26, 0x2a, 0xb4, 0xa5, 0x6f, 0x2e, 0x98, 0xad, - 0x96, 0xe9, 0xd2, 0x86, 0x6d, 0x19, 0x2e, 0x0a, 0x59, 0x54, 0xd7, 0x76, 0xb5, 0x24, 0x01, 0x51, - 0xa1, 0xb4, 0xb4, 0xb6, 0xe6, 0x52, 0x0f, 0xc5, 0x57, 0x98, 0x02, 0x36, 0x39, 0xdb, 0x08, 0xd1, - 0x04, 0x46, 0xfd, 0xd5, 0x1c, 0xdb, 0xbd, 0xb8, 0x8f, 0x3c, 0xbb, 0x13, 0x68, 0xf9, 0x81, 0x44, - 0x72, 0x3d, 0xb4, 0x2b, 0xf2, 0xf8, 0xb5, 0x67, 0xc4, 0xd7, 0x0e, 0x08, 0xdb, 0x22, 0xb4, 0x28, - 0x52, 0xbf, 0xaa, 0xb0, 0xc3, 0x57, 0xa9, 0x7f, 0x98, 0x87, 0x8b, 0xa2, 0xc5, 0xd3, 0x2d, 0xb3, - 0xb3, 0x6a, 0xeb, 0x8e, 0xa1, 0xd1, 0x06, 0x35, 0x1f, 0xd3, 0xe3, 0x39, 0xf0, 0xa2, 0x43, 0xa7, - 0x78, 0x80, 0xa1, 0x73, 0x0b, 0x37, 0x82, 0x4c, 0x32, 0x78, 0xe0, 0xcb, 0x8d, 0x8a, 0xf1, 0xed, - 0xad, 0xc9, 0x11, 0x83, 0x83, 0xf1, 0xc8, 0x5f, 0x93, 0x89, 0x98, 0x92, 0xcc, 0x53, 0xab, 0xe9, - 0xad, 0xa3, 0x92, 0xf4, 0x73, 0x25, 0x69, 0x21, 0x44, 0x13, 0x18, 0xf5, 0x7f, 0xcb, 0xc3, 0xb9, - 0xb8, 0xc8, 0x6b, 0xd4, 0x32, 0x4e, 0xe5, 0xfd, 0xd1, 0xc8, 0xfb, 0x8f, 0x0a, 0xf0, 0xb4, 0x28, - 0x53, 0x5b, 0xd7, 0x1d, 0x6a, 0x54, 0x4c, 0x87, 0x36, 0x3c, 0xdb, 0xd9, 0x3c, 0xc6, 0x06, 0xd4, - 0xe1, 0x89, 0xfd, 0x36, 0x94, 0xc4, 0xf6, 0x9f, 0xaf, 0x33, 0x63, 0x41, 0x4b, 0x10, 0x9a, 0x58, - 0xa1, 0xf8, 0xd1, 0x41, 0xac, 0xb3, 0x4a, 0xbb, 0xe9, 0xac, 0xcf, 0xc2, 0x68, 0x20, 0x7a, 0xdc, - 0x88, 0x0e, 0x84, 0xd6, 0x96, 0xe1, 0x23, 0x70, 0x2f, 0xaa, 0x45, 0x09, 0xb1, 0x36, 0x1f, 0x50, - 0xad, 0xa0, 0x35, 0x34, 0x2a, 0x6a, 0x0b, 0xca, 0x99, 0x86, 0x26, 0x13, 0xa9, 0x5b, 0x45, 0xb8, - 0x94, 0xde, 0xed, 0x1a, 0xd5, 0x8d, 0xd3, 0x5e, 0xff, 0xbe, 0xec, 0x75, 0xf2, 0x1c, 0x14, 0x97, - 0x75, 0x6f, 0x5d, 0x5c, 0xbf, 0xe3, 0x9d, 0xf0, 0x9a, 0xd9, 0xa2, 0xf5, 0x8e, 0xee, 0xad, 0x6b, - 0x88, 0x92, 0xe6, 0x0c, 0x40, 0x8e, 0x29, 0x73, 0x86, 0xb4, 0xd8, 0x0f, 0x3f, 0x9b, 0xbb, 0x56, - 0x4c, 0x5d, 0xec, 0xbf, 0x5b, 0xcc, 0x9a, 0x57, 0x1e, 0x3a, 0xa6, 0x47, 0x4f, 0x35, 0xec, 0x54, - 0xc3, 0x0e, 0xa8, 0x61, 0xff, 0x38, 0x0f, 0xa3, 0xc1, 0xa6, 0xe9, 0x03, 0xda, 0x38, 0x9a, 0xb5, - 0x2a, 0xdc, 0xca, 0x14, 0x0e, 0xbc, 0x95, 0x39, 0x88, 0x42, 0xa9, 0xc1, 0x91, 0x27, 0x37, 0x0d, - 0x50, 0x62, 0xfc, 0xc8, 0x33, 0x38, 0xe8, 0x7c, 0x0e, 0x06, 0x16, 0xf4, 0x27, 0x66, 0xbb, 0xdb, - 0x16, 0x56, 0x3a, 0xba, 0x93, 0xb5, 0xf5, 0x27, 0x9a, 0x0f, 0x57, 0xff, 0xdb, 0x1c, 0x8c, 0x09, - 0xa1, 0x0a, 0xe6, 0x07, 0x92, 0x6a, 0x28, 0x9d, 0xfc, 0x81, 0xa5, 0x53, 0xd8, 0xbf, 0x74, 0xd4, - 0xbf, 0x50, 0x00, 0x65, 0xd6, 0x6c, 0xd1, 0x15, 0x47, 0xb7, 0xdc, 0x35, 0xea, 0x88, 0xed, 0xf4, - 0x0c, 0x63, 0x75, 0xa0, 0x0f, 0x94, 0xa6, 0x94, 0xfc, 0xbe, 0xa6, 0x94, 0x4f, 0xc3, 0x90, 0x68, - 0x4c, 0xe0, 0xca, 0x88, 0xa3, 0xc6, 0xf1, 0x81, 0x5a, 0x88, 0x67, 0xc4, 0xe5, 0x4e, 0xc7, 0xb1, - 0x1f, 0x53, 0x87, 0xdf, 0x52, 0x09, 0x62, 0xdd, 0x07, 0x6a, 0x21, 0x5e, 0xe2, 0x4c, 0x7d, 0x7b, - 0x51, 0xe6, 0x4c, 0x1d, 0x2d, 0xc4, 0x93, 0x6b, 0x30, 0x38, 0x6f, 0x37, 0x74, 0x14, 0x34, 0x9f, - 0x56, 0x46, 0xb6, 0xb7, 0x26, 0x07, 0x5b, 0x02, 0xa6, 0x05, 0x58, 0x46, 0x59, 0xb1, 0x37, 0xac, - 0x96, 0xad, 0x73, 0xe7, 0x97, 0x41, 0x4e, 0x69, 0x08, 0x98, 0x16, 0x60, 0x19, 0x25, 0x93, 0x39, - 0x3a, 0x15, 0x0d, 0x86, 0x3c, 0xd7, 0x04, 0x4c, 0x0b, 0xb0, 0xea, 0xaf, 0x16, 0x99, 0xf6, 0xba, - 0xe6, 0x87, 0x27, 0x7e, 0x5d, 0x08, 0x07, 0x4c, 0xff, 0x3e, 0x06, 0xcc, 0x89, 0x39, 0xb0, 0x53, - 0xff, 0xe5, 0x00, 0x80, 0x90, 0xfe, 0xcc, 0xe9, 0xe6, 0xf0, 0x60, 0x5a, 0x53, 0x81, 0x89, 0x19, - 0x6b, 0x5d, 0xb7, 0x1a, 0xd4, 0x08, 0x8f, 0x2d, 0x4b, 0x38, 0xb4, 0xd1, 0x09, 0x92, 0x0a, 0x64, - 0x78, 0x6e, 0xa9, 0x25, 0x0b, 0x90, 0x97, 0x61, 0xb8, 0x6a, 0x79, 0xd4, 0xd1, 0x1b, 0x9e, 0xf9, - 0x98, 0x8a, 0xa9, 0x01, 0x6f, 0x86, 0xcd, 0x10, 0xac, 0xc9, 0x34, 0xe4, 0x36, 0x8c, 0x2c, 0xeb, - 0x8e, 0x67, 0x36, 0xcc, 0x8e, 0x6e, 0x79, 0xae, 0x32, 0x88, 0x33, 0x1a, 0x5a, 0x18, 0x1d, 0x09, - 0xae, 0x45, 0xa8, 0xc8, 0x97, 0x60, 0x08, 0xb7, 0xa6, 0xe8, 0xaf, 0x3d, 0xb4, 0xe3, 0xc5, 0xe1, - 0xf3, 0xa1, 0x7b, 0x20, 0x3f, 0x7d, 0xc5, 0x1b, 0xe0, 0xf8, 0xdd, 0x61, 0xc0, 0x91, 0x7c, 0x01, - 0x06, 0x66, 0x2c, 0x03, 0x99, 0xc3, 0x8e, 0xcc, 0x55, 0xc1, 0xfc, 0x42, 0xc8, 0xdc, 0xee, 0xc4, - 0x78, 0xfb, 0xec, 0xd2, 0x47, 0xd9, 0xf0, 0x47, 0x37, 0xca, 0x46, 0x3e, 0x82, 0x63, 0xf1, 0xd1, - 0xc3, 0x3a, 0x16, 0x1f, 0xdb, 0xe7, 0xb1, 0xb8, 0xfa, 0x21, 0x0c, 0x4f, 0x2d, 0xcf, 0x06, 0xa3, - 0xf7, 0x29, 0x28, 0x2c, 0x0b, 0x4f, 0x85, 0x22, 0xb7, 0x67, 0x3a, 0xa6, 0xa1, 0x31, 0x18, 0xb9, - 0x0e, 0x83, 0xd3, 0xe8, 0xfe, 0x26, 0x6e, 0x11, 0x8b, 0x7c, 0xfd, 0x6b, 0x20, 0x0c, 0xbd, 0x60, - 0x7d, 0x34, 0xf9, 0x24, 0x0c, 0x2c, 0x3b, 0x76, 0xd3, 0xd1, 0xdb, 0x62, 0x0d, 0x46, 0x57, 0x91, - 0x0e, 0x07, 0x69, 0x3e, 0x4e, 0xfd, 0xa9, 0x9c, 0x6f, 0xb6, 0xb3, 0x12, 0xb5, 0x2e, 0x1e, 0xcd, - 0x63, 0xdd, 0x83, 0xbc, 0x84, 0xcb, 0x41, 0x9a, 0x8f, 0x23, 0xd7, 0xa1, 0x7f, 0xc6, 0x71, 0x6c, - 0x47, 0xf6, 0x71, 0xa7, 0x0c, 0x20, 0x5f, 0xf7, 0x22, 0x05, 0x79, 0x1d, 0x86, 0xf9, 0x9c, 0xc3, - 0x4f, 0x34, 0x0b, 0xbd, 0x6e, 0x4a, 0x65, 0x4a, 0xf5, 0xdb, 0x05, 0xc9, 0x66, 0xe3, 0x12, 0x3f, - 0x81, 0xb7, 0x02, 0xaf, 0x40, 0x61, 0x6a, 0x79, 0x56, 0x4c, 0x80, 0x67, 0xfd, 0xa2, 0x92, 0xaa, - 0xc4, 0xca, 0x31, 0x6a, 0x72, 0x19, 0x8a, 0xcb, 0x4c, 0x7d, 0x4a, 0xa8, 0x1e, 0x83, 0xdb, 0x5b, - 0x93, 0xc5, 0x0e, 0xd3, 0x1f, 0x84, 0x22, 0x96, 0x6d, 0x66, 0xf8, 0x8e, 0x89, 0x63, 0xc3, 0x7d, - 0xcc, 0x65, 0x28, 0x96, 0x9d, 0xe6, 0x63, 0x31, 0x6b, 0x21, 0x56, 0x77, 0x9a, 0x8f, 0x35, 0x84, - 0x92, 0x9b, 0x00, 0x1a, 0xf5, 0xba, 0x8e, 0x85, 0xcf, 0x4f, 0x86, 0xf0, 0xfc, 0x0d, 0x67, 0x43, - 0x07, 0xa1, 0xf5, 0x86, 0x6d, 0x50, 0x4d, 0x22, 0x51, 0xff, 0x5a, 0x78, 0xb1, 0x53, 0x31, 0xdd, - 0x47, 0xa7, 0x5d, 0xb8, 0x87, 0x2e, 0xd4, 0xc5, 0x11, 0x67, 0xb2, 0x93, 0x26, 0xa1, 0x7f, 0xb6, - 0xa5, 0x37, 0x5d, 0xec, 0x43, 0xe1, 0x4b, 0xb6, 0xc6, 0x00, 0x1a, 0x87, 0xc7, 0xfa, 0x69, 0x70, - 0xe7, 0x7e, 0xfa, 0x99, 0xfe, 0x60, 0xb4, 0x2d, 0x52, 0x6f, 0xc3, 0x76, 0x4e, 0xbb, 0x6a, 0xb7, - 0x5d, 0x75, 0x15, 0x06, 0x6a, 0x4e, 0x43, 0x3a, 0xba, 0xc0, 0xfd, 0x80, 0xeb, 0x34, 0xf8, 0xb1, - 0x85, 0x8f, 0x64, 0x74, 0x15, 0xd7, 0x43, 0xba, 0x81, 0x90, 0xce, 0x70, 0x3d, 0x41, 0x27, 0x90, - 0x82, 0x6e, 0xd9, 0x76, 0x3c, 0xd1, 0x71, 0x01, 0x5d, 0xc7, 0x76, 0x3c, 0xcd, 0x47, 0x92, 0x4f, - 0x03, 0xac, 0x4c, 0x2f, 0xfb, 0xce, 0xf6, 0x43, 0xa1, 0x2f, 0xa0, 0xf0, 0xb2, 0xd7, 0x24, 0x34, - 0x59, 0x81, 0xa1, 0xa5, 0x0e, 0x75, 0xf8, 0x56, 0x88, 0x3f, 0x28, 0xf9, 0x54, 0x4c, 0xb4, 0xa2, - 0xdf, 0x6f, 0x88, 0xff, 0x03, 0x72, 0xbe, 0xbe, 0xd8, 0xfe, 0x4f, 0x2d, 0x64, 0x44, 0x5e, 0x87, - 0x52, 0x99, 0xdb, 0x79, 0xc3, 0xc8, 0x32, 0x10, 0x19, 0x6e, 0x41, 0x39, 0x8a, 0xef, 0xd9, 0x75, - 0xfc, 0x5b, 0x13, 0xe4, 0xea, 0x75, 0x18, 0x8f, 0x57, 0x43, 0x86, 0x61, 0x60, 0x7a, 0x69, 0x71, - 0x71, 0x66, 0x7a, 0x65, 0xbc, 0x8f, 0x0c, 0x42, 0xb1, 0x36, 0xb3, 0x58, 0x19, 0xcf, 0xa9, 0xbf, - 0x2c, 0xcd, 0x20, 0x4c, 0xb5, 0x4e, 0xaf, 0x86, 0x0f, 0x74, 0xdf, 0x32, 0x8e, 0xf7, 0xa1, 0x78, - 0x62, 0xd0, 0x36, 0x3d, 0x8f, 0x1a, 0x62, 0x95, 0xc0, 0xfb, 0x42, 0xef, 0x89, 0x96, 0xc0, 0x93, - 0x17, 0x61, 0x14, 0x61, 0xe2, 0x8a, 0x90, 0xef, 0x8f, 0x45, 0x01, 0xe7, 0x89, 0x16, 0x45, 0xaa, - 0xbf, 0x17, 0xde, 0x0e, 0xcf, 0x53, 0xfd, 0xb8, 0xde, 0x28, 0x7e, 0x4c, 0xfa, 0x4b, 0xfd, 0xd7, - 0x45, 0xfe, 0x04, 0x84, 0xbf, 0x17, 0x3c, 0x0a, 0x51, 0x86, 0x47, 0xba, 0x85, 0x3d, 0x1c, 0xe9, - 0xbe, 0x08, 0xa5, 0x05, 0xea, 0xad, 0xdb, 0xbe, 0xe3, 0x17, 0x7a, 0xe8, 0xb5, 0x11, 0x22, 0x7b, - 0xe8, 0x71, 0x1a, 0xf2, 0x08, 0x88, 0xff, 0x18, 0x30, 0x70, 0xc4, 0xf6, 0x8f, 0x90, 0x2f, 0x26, - 0xf6, 0x29, 0x35, 0x7c, 0x09, 0x8c, 0x3e, 0xf6, 0xe7, 0x02, 0x47, 0x6f, 0xc9, 0x13, 0xeb, 0x5f, - 0x6d, 0x4d, 0x96, 0x38, 0x8d, 0x96, 0xc2, 0x96, 0xbc, 0x07, 0x43, 0x0b, 0xb3, 0x65, 0xf1, 0x30, - 0x90, 0x7b, 0x45, 0x3c, 0x15, 0x48, 0xd1, 0x47, 0x04, 0x22, 0xc1, 0xf7, 0x36, 0xed, 0x35, 0x3d, - 0xf9, 0x2e, 0x30, 0xe4, 0xc2, 0xb4, 0x85, 0xbf, 0xdc, 0x11, 0xa7, 0x0b, 0x81, 0xb6, 0x44, 0xdf, - 0xf3, 0xc4, 0x65, 0xc5, 0xb1, 0x31, 0x6d, 0x19, 0x3c, 0xc0, 0xe8, 0x5e, 0x82, 0x89, 0x72, 0xa7, - 0xd3, 0x32, 0xa9, 0x81, 0xfa, 0xa2, 0x75, 0x5b, 0xd4, 0x15, 0x2e, 0x3f, 0xf8, 0x18, 0x44, 0xe7, - 0xc8, 0x3a, 0x3e, 0x47, 0xad, 0x3b, 0xdd, 0xa8, 0x7f, 0x66, 0xb2, 0xac, 0xfa, 0x67, 0xf3, 0x70, - 0x61, 0xda, 0xa1, 0xba, 0x47, 0x17, 0x66, 0xcb, 0xe5, 0x2e, 0xfa, 0xc8, 0xb5, 0x5a, 0xd4, 0x6a, - 0x1e, 0xcd, 0xb0, 0x7e, 0x0b, 0xc6, 0x82, 0x06, 0xd4, 0x1a, 0x76, 0x87, 0xca, 0x0f, 0xab, 0x1a, - 0x3e, 0xa6, 0xee, 0x32, 0x94, 0x16, 0x23, 0x25, 0xf7, 0xe0, 0x6c, 0x00, 0x29, 0xb7, 0x5a, 0xf6, - 0x86, 0x46, 0xbb, 0x2e, 0x77, 0x8c, 0x1d, 0xe4, 0x8e, 0xb1, 0x21, 0x07, 0x9d, 0xe1, 0xeb, 0x0e, - 0x23, 0xd0, 0xd2, 0x4a, 0xa9, 0x3f, 0x5f, 0x80, 0x8b, 0x0f, 0xf4, 0x96, 0x69, 0x84, 0xa2, 0xd1, - 0xa8, 0xdb, 0xb1, 0x2d, 0x97, 0x1e, 0xa3, 0x51, 0x1a, 0x19, 0x0a, 0xc5, 0x43, 0x19, 0x0a, 0xc9, - 0x2e, 0xea, 0x3f, 0x70, 0x17, 0x95, 0xf6, 0xd5, 0x45, 0xff, 0x6b, 0x0e, 0xc6, 0x7d, 0xc7, 0x7f, - 0xf9, 0x11, 0xb7, 0xe4, 0x95, 0x8e, 0x47, 0x88, 0x31, 0x3f, 0x68, 0xc4, 0x93, 0x1a, 0x0c, 0xcc, - 0x3c, 0xe9, 0x98, 0x0e, 0x75, 0x77, 0xe1, 0xc4, 0xfd, 0x8c, 0x38, 0x2e, 0x99, 0xa0, 0xbc, 0x48, - 0xe2, 0xa4, 0x84, 0x83, 0xf1, 0x39, 0x1f, 0x7f, 0xfa, 0x30, 0xe5, 0xbf, 0x4c, 0xe7, 0xcf, 0xf9, - 0xc4, 0x13, 0x89, 0xc8, 0xfb, 0xcc, 0x90, 0x94, 0x3c, 0x0f, 0x85, 0x95, 0x95, 0x79, 0x31, 0x93, - 0x62, 0x44, 0x00, 0xcf, 0x93, 0xdf, 0x2b, 0x32, 0xac, 0xfa, 0xcf, 0xf2, 0x00, 0x4c, 0x15, 0xf8, - 0x70, 0x3d, 0x12, 0x25, 0x9c, 0x82, 0x41, 0x5f, 0xe0, 0x42, 0x0d, 0x03, 0xaf, 0xfd, 0x78, 0x47, - 0xc4, 0xeb, 0x0e, 0x5e, 0x68, 0x4c, 0xfa, 0x8e, 0xe4, 0xfc, 0x1e, 0x00, 0x77, 0x36, 0xe8, 0x48, - 0xee, 0xbb, 0x8f, 0x7f, 0x1a, 0x86, 0xc4, 0x8c, 0x67, 0x47, 0xce, 0xff, 0x1b, 0x3e, 0x50, 0x0b, - 0xf1, 0xb1, 0xa9, 0xb5, 0x74, 0x80, 0x85, 0xd8, 0x17, 0x2f, 0xef, 0x95, 0x53, 0xf1, 0x1e, 0xb2, - 0x78, 0xbf, 0x2e, 0xc4, 0xcb, 0x5f, 0xf0, 0x1c, 0x5b, 0xf1, 0x1e, 0xda, 0xd9, 0xb7, 0xfa, 0x8f, - 0x73, 0x40, 0x58, 0xb3, 0x96, 0x75, 0xd7, 0xdd, 0xb0, 0x1d, 0x83, 0x3b, 0xa7, 0x1f, 0x89, 0x60, - 0x0e, 0xef, 0xbe, 0xf2, 0xdb, 0x83, 0x70, 0x36, 0xe2, 0xf8, 0x7b, 0xcc, 0x27, 0xab, 0xeb, 0xd1, - 0xd1, 0xd4, 0xeb, 0xd5, 0xcb, 0x27, 0xe4, 0x0b, 0xd1, 0xfe, 0xc8, 0x03, 0x34, 0xe9, 0x26, 0xf4, - 0x25, 0x18, 0x11, 0x3f, 0xd8, 0x0a, 0xed, 0xdf, 0x74, 0xe1, 0x28, 0x75, 0x19, 0x40, 0x8b, 0xa0, - 0xc9, 0xab, 0x30, 0xc4, 0x06, 0x4c, 0x13, 0x83, 0x87, 0x0c, 0x84, 0x2f, 0x4a, 0x0c, 0x1f, 0x28, - 0xaf, 0x27, 0x01, 0xa5, 0xf4, 0x8e, 0x68, 0x70, 0x17, 0xef, 0x88, 0xbe, 0x0c, 0xc3, 0x65, 0xcb, - 0xb2, 0x3d, 0xdc, 0xa4, 0xbb, 0xe2, 0x6a, 0x22, 0xd3, 0x2a, 0x7f, 0x1e, 0x1f, 0xc7, 0x87, 0xf4, - 0xa9, 0x66, 0xb9, 0xcc, 0x90, 0xdc, 0xf2, 0x5f, 0xc5, 0x50, 0x47, 0x78, 0x95, 0xe3, 0xf5, 0x8c, - 0x23, 0x60, 0xc9, 0x47, 0x31, 0xd8, 0x79, 0xa3, 0xcb, 0x8e, 0xdd, 0xb1, 0x5d, 0x6a, 0x70, 0x41, - 0x0d, 0x87, 0xa1, 0x06, 0x3a, 0x02, 0x81, 0xef, 0xd8, 0x22, 0x81, 0x3c, 0x22, 0x45, 0xc8, 0x1a, - 0x9c, 0xf3, 0x2f, 0x8a, 0x83, 0x17, 0x83, 0xd5, 0x8a, 0xab, 0x8c, 0xe0, 0xab, 0x24, 0x12, 0x57, - 0x86, 0x6a, 0x65, 0xea, 0x8a, 0x7f, 0x2d, 0xe2, 0x3f, 0x39, 0xac, 0x9b, 0x86, 0xdc, 0xd5, 0xa9, - 0xfc, 0xc8, 0x0f, 0xc1, 0xf0, 0x82, 0xfe, 0xa4, 0xd2, 0x15, 0x67, 0x2f, 0xa3, 0xbb, 0xbf, 0x7d, - 0x69, 0xeb, 0x4f, 0xea, 0x86, 0x28, 0x17, 0xb3, 0x29, 0x64, 0x96, 0xa4, 0x0e, 0x17, 0x96, 0x1d, - 0xbb, 0x6d, 0x7b, 0xd4, 0x88, 0x3d, 0xbe, 0x3b, 0x13, 0xbe, 0xd6, 0xed, 0x08, 0x8a, 0x7a, 0x8f, - 0x57, 0x78, 0x19, 0x6c, 0x48, 0x1b, 0xce, 0x94, 0x5d, 0xb7, 0xdb, 0xa6, 0xe1, 0x0d, 0xd5, 0xf8, - 0x8e, 0x9f, 0xf1, 0x29, 0xe1, 0xb5, 0xfc, 0xb4, 0x8e, 0x45, 0xf9, 0x05, 0x55, 0xdd, 0x33, 0xe5, - 0x1a, 0xf1, 0x5b, 0xe2, 0xbc, 0xef, 0x16, 0x07, 0xc7, 0xc6, 0xcf, 0x68, 0x17, 0x93, 0x8d, 0x59, - 0x31, 0xbd, 0x16, 0x55, 0x7f, 0x37, 0x07, 0x10, 0x0a, 0x98, 0xbc, 0x14, 0x8d, 0x50, 0x94, 0x0b, - 0x2f, 0x3a, 0x44, 0xf4, 0x82, 0x48, 0x48, 0x22, 0x72, 0x19, 0x8a, 0x18, 0xe1, 0x22, 0x1f, 0x1e, - 0xac, 0x3e, 0x32, 0x2d, 0x43, 0x43, 0x28, 0xc3, 0x4a, 0x4f, 0xd1, 0x11, 0x8b, 0x97, 0xfa, 0xdc, - 0x2a, 0xac, 0xc0, 0x99, 0x5a, 0x77, 0xd5, 0xaf, 0x5b, 0x7a, 0x57, 0x87, 0x81, 0x36, 0xdc, 0xee, - 0x6a, 0xf0, 0x18, 0x35, 0x12, 0xc6, 0x24, 0x5a, 0x44, 0xfd, 0xd5, 0x5c, 0x6c, 0x16, 0x3c, 0xc2, - 0x45, 0xef, 0x13, 0x49, 0x3f, 0x8d, 0xe4, 0xb4, 0xa4, 0xfe, 0xa5, 0x3c, 0x0c, 0x2f, 0xdb, 0x8e, - 0x27, 0x42, 0x86, 0x1c, 0xef, 0x55, 0x48, 0xda, 0x2b, 0x15, 0xf7, 0xb0, 0x57, 0xba, 0x0c, 0x45, - 0xc9, 0x45, 0x99, 0xdf, 0x8b, 0x18, 0x86, 0xa3, 0x21, 0x54, 0xfd, 0x91, 0x3c, 0xc0, 0x17, 0x5e, - 0x7e, 0xf9, 0x04, 0x0b, 0x48, 0xfd, 0xb9, 0x1c, 0x9c, 0x11, 0x17, 0x75, 0x52, 0xac, 0xaf, 0x01, - 0xff, 0x8a, 0x55, 0x1e, 0x97, 0x1c, 0xa4, 0xf9, 0x38, 0xb6, 0x04, 0xcc, 0x3c, 0x31, 0x3d, 0xbc, - 0xab, 0x90, 0x82, 0x7d, 0x51, 0x01, 0x93, 0x97, 0x00, 0x9f, 0x8e, 0xbc, 0xe4, 0x5f, 0x41, 0x16, - 0xc2, 0x75, 0x8f, 0x15, 0x98, 0x49, 0xbd, 0x86, 0x54, 0x7f, 0xa3, 0x08, 0xc5, 0x99, 0x27, 0xb4, - 0x71, 0xcc, 0xbb, 0x46, 0x3a, 0xd8, 0x2c, 0x1e, 0xf0, 0x60, 0x73, 0x3f, 0x3e, 0x15, 0xef, 0x86, - 0xfd, 0x59, 0x8a, 0x56, 0x1f, 0xeb, 0xf9, 0x78, 0xf5, 0x7e, 0x4f, 0x1f, 0x3f, 0x97, 0x9c, 0xff, - 0xa2, 0x00, 0x85, 0xda, 0xf4, 0xf2, 0xa9, 0xde, 0x1c, 0xa9, 0xde, 0xf4, 0xbe, 0xb3, 0x56, 0x83, - 0x6b, 0xa8, 0xc1, 0xd0, 0x4b, 0x34, 0x76, 0xe3, 0xf4, 0x47, 0x05, 0x18, 0xab, 0xcd, 0xae, 0x2c, - 0x4b, 0x27, 0xc1, 0xf7, 0xb8, 0x27, 0x1f, 0xfa, 0x94, 0xf1, 0x2e, 0xbd, 0x9c, 0xb0, 0x67, 0xee, - 0x57, 0x2d, 0xef, 0xb5, 0xdb, 0x0f, 0xf4, 0x56, 0x97, 0xe2, 0xd1, 0x0b, 0xf7, 0xfb, 0x75, 0xcd, - 0x0f, 0xe9, 0xcf, 0xe3, 0xc3, 0x7f, 0x9f, 0x01, 0x79, 0x0b, 0x0a, 0xf7, 0x85, 0x47, 0x46, 0x16, - 0x9f, 0x57, 0x6e, 0x71, 0x3e, 0x6c, 0x12, 0x2c, 0x74, 0x4d, 0x03, 0x39, 0xb0, 0x52, 0xac, 0xf0, - 0x1d, 0xb1, 0x00, 0xef, 0xaa, 0x70, 0xd3, 0x2f, 0x7c, 0xa7, 0x5a, 0x21, 0x35, 0x18, 0x5e, 0xa6, - 0x4e, 0xdb, 0xc4, 0x8e, 0xf2, 0xe7, 0xec, 0xde, 0x4c, 0xd8, 0x4e, 0x65, 0xb8, 0x13, 0x16, 0x42, - 0x66, 0x32, 0x17, 0xf2, 0x3e, 0x00, 0xb7, 0x51, 0x76, 0x19, 0x3f, 0xf2, 0x19, 0xb4, 0xfb, 0xb9, - 0x69, 0x99, 0x62, 0xe3, 0x49, 0xcc, 0xc8, 0x23, 0x18, 0x5f, 0xb0, 0x0d, 0x73, 0xcd, 0xe4, 0xae, - 0x97, 0x58, 0x41, 0x69, 0x67, 0x87, 0x27, 0x66, 0x4a, 0xb6, 0xa5, 0x72, 0x69, 0xd5, 0x24, 0x18, - 0xab, 0xff, 0x59, 0x3f, 0x14, 0x59, 0xb7, 0x9f, 0x8e, 0xdf, 0x83, 0x8c, 0xdf, 0x32, 0x8c, 0x3f, - 0xb4, 0x9d, 0x47, 0xa6, 0xd5, 0x0c, 0xbc, 0xe2, 0xc5, 0xde, 0x14, 0x3d, 0x79, 0x36, 0x38, 0xae, - 0x1e, 0x38, 0xd0, 0x6b, 0x09, 0xf2, 0x1d, 0x46, 0xf0, 0x1b, 0x00, 0xfc, 0xad, 0x3b, 0xd2, 0x0c, - 0x86, 0xc1, 0x2a, 0xf8, 0x4b, 0x78, 0x74, 0xb4, 0x97, 0x83, 0x55, 0x84, 0xc4, 0x6c, 0x13, 0xce, - 0x7d, 0x21, 0x86, 0xd0, 0xef, 0x1e, 0x37, 0xe1, 0xe8, 0x0b, 0x21, 0x1b, 0x01, 0xdc, 0x2b, 0x62, - 0x19, 0x40, 0xba, 0x5f, 0x82, 0x98, 0x20, 0x22, 0x93, 0x83, 0x08, 0x0f, 0x97, 0x72, 0xbd, 0xa4, - 0x49, 0x3c, 0xc8, 0x6b, 0xb1, 0x0b, 0x70, 0x12, 0xe1, 0x96, 0x79, 0xff, 0x1d, 0x3a, 0x50, 0x8d, - 0xec, 0xe4, 0x40, 0xa5, 0x7e, 0x35, 0x0f, 0x43, 0xb5, 0xee, 0xaa, 0xbb, 0xe9, 0x7a, 0xb4, 0x7d, - 0xcc, 0xd5, 0xd8, 0xdf, 0x5e, 0x15, 0x53, 0xb7, 0x57, 0xcf, 0xfb, 0x42, 0x91, 0xce, 0x1d, 0x03, - 0x93, 0xce, 0x17, 0xc7, 0xdf, 0xca, 0xc3, 0x38, 0xbf, 0x38, 0xab, 0x98, 0x6e, 0xe3, 0x10, 0x9c, - 0xf9, 0x8f, 0x5e, 0x2a, 0x07, 0xbb, 0x6c, 0xde, 0xc5, 0x13, 0x09, 0xf5, 0x2b, 0x79, 0x18, 0x2e, - 0x77, 0xbd, 0xf5, 0xb2, 0x87, 0xba, 0x75, 0x22, 0xf7, 0x27, 0x7f, 0x3f, 0x07, 0x67, 0x58, 0x43, - 0x56, 0xec, 0x47, 0xd4, 0x3a, 0x84, 0x83, 0x47, 0xf9, 0x00, 0x31, 0xbf, 0xcf, 0x03, 0x44, 0x5f, - 0x96, 0x85, 0xbd, 0xc9, 0x12, 0x8f, 0xcb, 0x35, 0xbb, 0x45, 0x8f, 0xf7, 0x67, 0x1c, 0xe2, 0x71, - 0xb9, 0x2f, 0x90, 0x43, 0xb8, 0x9e, 0xf9, 0xfe, 0x12, 0xc8, 0x21, 0x9c, 0x2d, 0x7d, 0x7f, 0x08, - 0xe4, 0xdb, 0x39, 0x18, 0x9a, 0xb2, 0xbd, 0x63, 0x3e, 0xf0, 0xc5, 0x57, 0x1c, 0x6f, 0x35, 0xf7, - 0xbf, 0xe2, 0x78, 0xeb, 0xa6, 0xfa, 0xb3, 0x79, 0x38, 0x27, 0x62, 0x83, 0x8b, 0xf3, 0x87, 0xd3, - 0xe9, 0x58, 0x0c, 0xb6, 0xa4, 0x68, 0x4e, 0xe7, 0x21, 0x21, 0x9a, 0x5f, 0x2c, 0xc0, 0x39, 0x0c, - 0x65, 0xca, 0xb6, 0x65, 0xdf, 0x07, 0xb6, 0x08, 0x69, 0x44, 0x2f, 0x41, 0x17, 0x52, 0x2e, 0x41, - 0xff, 0xd5, 0xd6, 0xe4, 0x6b, 0x4d, 0xd3, 0x5b, 0xef, 0xae, 0xde, 0x68, 0xd8, 0xed, 0x9b, 0x4d, - 0x47, 0x7f, 0x6c, 0xf2, 0xeb, 0x3f, 0xbd, 0x75, 0x33, 0x48, 0xb3, 0xa1, 0x77, 0x4c, 0x91, 0x80, - 0xa3, 0x86, 0x7b, 0x1d, 0xc6, 0xd5, 0xbf, 0x3e, 0x75, 0x01, 0xee, 0xda, 0xa6, 0x25, 0x7c, 0x0a, - 0xb9, 0xa1, 0x5b, 0x63, 0xfb, 0xc3, 0x0f, 0x6c, 0xd3, 0xaa, 0xc7, 0x1d, 0x0b, 0xf7, 0x5a, 0x5f, - 0xc8, 0x5a, 0x93, 0xaa, 0x51, 0xff, 0x9b, 0x1c, 0x3c, 0x15, 0xd5, 0xe2, 0xef, 0x07, 0xdb, 0xf1, - 0xcf, 0xe5, 0xe1, 0xfc, 0x1d, 0x14, 0x4e, 0xe0, 0xc8, 0x71, 0x3a, 0x6f, 0x89, 0xc1, 0x99, 0x22, - 0x9b, 0x53, 0x8b, 0x32, 0x5b, 0x36, 0xa7, 0x93, 0xba, 0x90, 0xcd, 0x7f, 0x9d, 0x83, 0xb3, 0x4b, - 0xd5, 0xca, 0xf4, 0xf7, 0xc9, 0x88, 0x4a, 0x7e, 0xcf, 0x31, 0x37, 0x38, 0x13, 0xdf, 0x73, 0xcc, - 0x4d, 0xcf, 0x6f, 0xe6, 0xe1, 0x6c, 0xad, 0xbc, 0x30, 0xff, 0xfd, 0x32, 0x83, 0x4f, 0xcb, 0x5e, - 0x87, 0xfe, 0x21, 0x98, 0xb0, 0x05, 0xe4, 0xcf, 0x7c, 0x70, 0x2b, 0xdb, 0x1b, 0x31, 0x29, 0x94, - 0x63, 0x3e, 0x75, 0x1f, 0x8a, 0x50, 0x98, 0xe6, 0x47, 0xa8, 0x8f, 0xb9, 0xe6, 0xff, 0xe7, 0x25, - 0x18, 0xbe, 0xd7, 0x5d, 0xa5, 0xc2, 0x39, 0xe5, 0x44, 0x9f, 0xfc, 0xde, 0x82, 0x61, 0x21, 0x06, - 0xbc, 0x35, 0x91, 0x82, 0xe7, 0x89, 0x60, 0x28, 0x3c, 0x3e, 0x91, 0x4c, 0x44, 0x2e, 0x43, 0xf1, - 0x01, 0x75, 0x56, 0xe5, 0x77, 0xa5, 0x8f, 0xa9, 0xb3, 0xaa, 0x21, 0x94, 0xcc, 0x87, 0x2e, 0xf3, - 0xe5, 0xe5, 0x2a, 0x26, 0x52, 0x11, 0x17, 0x36, 0x98, 0x19, 0x26, 0xf0, 0x7b, 0xd3, 0x3b, 0x26, - 0x4f, 0xc1, 0x22, 0xbf, 0x69, 0x8f, 0x97, 0x24, 0x8b, 0x30, 0x21, 0x3b, 0x3e, 0xf1, 0x2c, 0x22, - 0x83, 0x29, 0xec, 0xd2, 0xf2, 0x87, 0x24, 0x8b, 0x92, 0x77, 0x61, 0xc4, 0x07, 0xa2, 0x0b, 0xd7, - 0x50, 0x18, 0xba, 0x3e, 0x60, 0x15, 0x4b, 0x51, 0x14, 0x29, 0x20, 0x33, 0xc0, 0x6b, 0x08, 0x48, - 0x61, 0x10, 0x73, 0x89, 0x8b, 0x14, 0x20, 0xaf, 0x22, 0x03, 0x7c, 0xe6, 0x81, 0xce, 0x2a, 0xc3, - 0xf8, 0xe8, 0x12, 0x5d, 0xf2, 0x1d, 0x01, 0xe7, 0x4f, 0x6b, 0x23, 0x64, 0x64, 0x09, 0x20, 0x74, - 0x2a, 0x10, 0x01, 0x0c, 0xf6, 0xec, 0xee, 0x20, 0xb1, 0x90, 0xaf, 0x03, 0x47, 0xf7, 0x73, 0x1d, - 0xa8, 0xfe, 0xa3, 0x3c, 0x0c, 0x97, 0x3b, 0x9d, 0x60, 0x28, 0xbc, 0x04, 0xa5, 0x72, 0xa7, 0x73, - 0x5f, 0xab, 0xca, 0xa1, 0xcc, 0xf5, 0x4e, 0xa7, 0xde, 0x75, 0x4c, 0xd9, 0x27, 0x94, 0x13, 0x91, - 0x69, 0x18, 0x2d, 0x77, 0x3a, 0xcb, 0xdd, 0xd5, 0x96, 0xd9, 0x90, 0x32, 0x23, 0xf1, 0xdc, 0x71, - 0x9d, 0x4e, 0xbd, 0x83, 0x98, 0x78, 0x7a, 0xac, 0x68, 0x19, 0xf2, 0x65, 0x0c, 0xfb, 0x23, 0x12, - 0xf3, 0xf0, 0xd4, 0x1f, 0x6a, 0x10, 0xc4, 0x3c, 0x6c, 0xdb, 0x8d, 0x80, 0x88, 0x07, 0x7b, 0xbf, - 0xec, 0x87, 0xcc, 0x67, 0x15, 0x25, 0x12, 0xf0, 0x84, 0x2c, 0xc9, 0x67, 0x60, 0xa0, 0xdc, 0xe9, - 0x48, 0xf7, 0x4d, 0xe8, 0x54, 0xc4, 0x4a, 0xc5, 0x73, 0x9f, 0x09, 0xb2, 0x4b, 0x6f, 0xc3, 0x58, - 0xb4, 0xb2, 0x3d, 0x05, 0x8b, 0xff, 0x5e, 0x0e, 0x3f, 0xe8, 0x98, 0xfb, 0x34, 0xbf, 0x02, 0x85, - 0x72, 0xa7, 0x23, 0xe6, 0xa3, 0xb3, 0x29, 0xfd, 0x11, 0x7f, 0x02, 0x5d, 0xee, 0x74, 0xfc, 0x4f, - 0x3f, 0xe6, 0x8f, 0x23, 0xf6, 0xf5, 0xe9, 0xdf, 0xe6, 0x9f, 0x7e, 0xbc, 0x1f, 0x2e, 0xa8, 0xbf, - 0x51, 0x80, 0x33, 0xe5, 0x4e, 0xe7, 0x34, 0xc8, 0xfc, 0x61, 0x3d, 0xb4, 0x7e, 0x19, 0x40, 0x9a, - 0x1e, 0x07, 0x82, 0xa7, 0x5b, 0xc3, 0xd2, 0xd4, 0xa8, 0xe4, 0x34, 0x89, 0xc8, 0x57, 0xbf, 0xc1, - 0x3d, 0xa9, 0xdf, 0x57, 0x0a, 0x38, 0x15, 0x1f, 0xf7, 0xa0, 0x51, 0x1f, 0x97, 0x6e, 0x13, 0x7d, - 0x50, 0xda, 0x53, 0x1f, 0xfc, 0xdd, 0xc8, 0xe0, 0xc1, 0xa0, 0xe5, 0xa7, 0xbd, 0xd0, 0x7f, 0x20, - 0xb3, 0x78, 0x4c, 0x16, 0xa6, 0x88, 0x64, 0xe3, 0x27, 0x52, 0x12, 0x71, 0x95, 0x1a, 0x0c, 0x55, - 0x37, 0x0d, 0x2d, 0x46, 0xeb, 0xf7, 0xe1, 0xc0, 0x9e, 0xfa, 0x70, 0x2b, 0x8f, 0x6f, 0xa7, 0x83, - 0xb8, 0x4c, 0x07, 0xdf, 0x5d, 0xdc, 0x04, 0xe0, 0x9e, 0x07, 0x81, 0x5b, 0xf3, 0x28, 0x0f, 0xc1, - 0xc2, 0xf3, 0x2b, 0x89, 0x10, 0x2c, 0x21, 0x49, 0xe0, 0x21, 0x55, 0x48, 0xf5, 0x90, 0xba, 0x0e, - 0x83, 0x9a, 0xbe, 0xf1, 0x5e, 0x97, 0x3a, 0x9b, 0xc2, 0x9c, 0xe1, 0x61, 0x0f, 0xf5, 0x8d, 0xfa, - 0x0f, 0x33, 0xa0, 0x16, 0xa0, 0x89, 0x1a, 0x3c, 0xbe, 0x97, 0x3c, 0x42, 0xf8, 0x19, 0x79, 0xf0, - 0xe4, 0x7e, 0x3f, 0x8a, 0x4e, 0xde, 0x84, 0x42, 0xf9, 0x61, 0x4d, 0x48, 0x36, 0xe8, 0xda, 0xf2, - 0xc3, 0x9a, 0x90, 0x57, 0x66, 0xd9, 0x87, 0x35, 0xf5, 0x2b, 0x79, 0x20, 0x49, 0x4a, 0xf2, 0x1a, - 0x0c, 0x21, 0xb4, 0xc9, 0x74, 0x46, 0x4e, 0xcc, 0xb9, 0xe1, 0xd6, 0x1d, 0x84, 0x46, 0x8c, 0x3b, - 0x9f, 0x94, 0xbc, 0x81, 0xa9, 0x8f, 0x45, 0x6a, 0xb8, 0x48, 0x62, 0xce, 0x0d, 0xd7, 0x4f, 0x16, - 0x1c, 0xcb, 0x7c, 0x2c, 0x88, 0xd1, 0x2e, 0x7c, 0x58, 0x9b, 0xb3, 0x5d, 0x4f, 0x88, 0x9a, 0xdb, - 0x85, 0x1b, 0x2e, 0x66, 0x84, 0x8d, 0xd8, 0x85, 0x9c, 0x0c, 0xb3, 0x5a, 0x3d, 0xac, 0xf1, 0x67, - 0x2a, 0x86, 0x66, 0xb7, 0x7c, 0x83, 0x92, 0x67, 0xb5, 0xda, 0x70, 0xeb, 0xfc, 0x89, 0x8b, 0x81, - 0x39, 0x97, 0x23, 0x59, 0xad, 0x22, 0xa5, 0xd4, 0xaf, 0x0d, 0xc2, 0x78, 0x45, 0xf7, 0xf4, 0x55, - 0xdd, 0xa5, 0xd2, 0x6e, 0xfa, 0x8c, 0x0f, 0xf3, 0x3f, 0x47, 0x92, 0x83, 0xb1, 0x9a, 0xf2, 0x35, - 0xf1, 0x02, 0xe4, 0xad, 0x90, 0x6f, 0x90, 0x73, 0x54, 0x4e, 0x62, 0xb6, 0x5a, 0xef, 0x08, 0xb0, - 0x96, 0x20, 0x24, 0x2f, 0xc2, 0xb0, 0x0f, 0x63, 0x1b, 0x80, 0x42, 0xa8, 0x33, 0xc6, 0x2a, 0xb3, - 0xff, 0x35, 0x19, 0x4d, 0xde, 0x80, 0x11, 0xff, 0xa7, 0x64, 0x5a, 0xf3, 0x8c, 0x6c, 0xab, 0x89, - 0xdd, 0x93, 0x4c, 0x2a, 0x17, 0xc5, 0xf9, 0xad, 0x3f, 0x52, 0x34, 0x96, 0xf4, 0x2c, 0x42, 0x4a, - 0x7e, 0x18, 0xc6, 0xfc, 0xdf, 0x62, 0xc3, 0xc0, 0xf3, 0xc3, 0xbd, 0x18, 0xa4, 0x74, 0x8e, 0x89, - 0xf5, 0x46, 0x94, 0x9c, 0x6f, 0x1d, 0x9e, 0xf6, 0xf3, 0x78, 0x19, 0xab, 0xc9, 0x9d, 0x43, 0xac, - 0x02, 0x52, 0x85, 0x09, 0x1f, 0x12, 0x6a, 0xe8, 0x40, 0xb8, 0x63, 0x34, 0x56, 0xeb, 0xa9, 0x4a, - 0x9a, 0x2c, 0x45, 0x5a, 0x70, 0x39, 0x02, 0x34, 0xdc, 0x75, 0x73, 0xcd, 0x13, 0xdb, 0x3d, 0x11, - 0x83, 0x58, 0x24, 0x6e, 0x0c, 0xb8, 0x72, 0x1a, 0x3f, 0x03, 0x6b, 0x34, 0x3b, 0x54, 0x4f, 0x6e, - 0xa4, 0x06, 0xe7, 0x7c, 0xfc, 0x9d, 0xe9, 0xe5, 0x65, 0xc7, 0xfe, 0x80, 0x36, 0xbc, 0x6a, 0x45, - 0x6c, 0x97, 0x31, 0x36, 0x9d, 0xb1, 0x5a, 0x6f, 0x36, 0x3a, 0x4c, 0x29, 0x18, 0x2e, 0xca, 0x3c, - 0xb5, 0x30, 0x79, 0x00, 0xe7, 0x25, 0xb8, 0x94, 0x1e, 0x1a, 0xc2, 0xfd, 0xbc, 0xe0, 0x9a, 0x9e, - 0x21, 0x3a, 0xbd, 0x38, 0x79, 0x1b, 0x46, 0x7d, 0x04, 0xbf, 0x45, 0x1c, 0xc6, 0x5b, 0x44, 0x1c, - 0x92, 0xc6, 0x6a, 0x3d, 0xfe, 0x9a, 0x32, 0x4a, 0x2c, 0x6b, 0x14, 0x66, 0xd4, 0x1f, 0x89, 0x68, - 0x94, 0xb7, 0xd9, 0x49, 0x55, 0x46, 0xcc, 0xb2, 0xff, 0x6e, 0xa8, 0x51, 0x4b, 0x8e, 0xd9, 0x34, - 0xf9, 0x4e, 0xda, 0x7f, 0x40, 0xb9, 0x5a, 0xb7, 0x11, 0x98, 0xa6, 0x1f, 0x9c, 0xfc, 0x52, 0x19, - 0xce, 0xa6, 0xe8, 0xd8, 0x9e, 0x76, 0x8c, 0x5f, 0xcd, 0x87, 0x8d, 0x38, 0xe6, 0xdb, 0xc6, 0x29, - 0x18, 0xf4, 0xbf, 0x44, 0x18, 0x0f, 0x4a, 0xd6, 0xd0, 0x8c, 0xf3, 0xf0, 0xf1, 0x11, 0x71, 0x1c, - 0xf3, 0xad, 0xe4, 0x61, 0x88, 0xe3, 0x3b, 0xb9, 0x50, 0x1c, 0xc7, 0x7c, 0x7b, 0xf9, 0x93, 0xc5, - 0x70, 0x4e, 0x3a, 0xdd, 0x63, 0x1e, 0x96, 0x99, 0x1c, 0xfa, 0xc1, 0x96, 0xf6, 0xf0, 0x90, 0x51, - 0x56, 0xcd, 0x81, 0xfd, 0xa9, 0x26, 0x79, 0x1b, 0x86, 0x97, 0x6d, 0xd7, 0x6b, 0x3a, 0xd4, 0x5d, - 0x0e, 0x62, 0xe8, 0xe3, 0x23, 0xd8, 0x8e, 0x00, 0xd7, 0x3b, 0x91, 0xd9, 0x5f, 0x26, 0x57, 0xff, - 0x49, 0x21, 0xa1, 0x0d, 0xdc, 0x70, 0x3d, 0x96, 0xda, 0x70, 0x08, 0x43, 0x9d, 0xdc, 0x0a, 0x57, - 0x41, 0x6e, 0xe1, 0xf7, 0x4b, 0x01, 0x02, 0x57, 0x85, 0x81, 0x1f, 0x25, 0x21, 0x3f, 0x00, 0x17, - 0x23, 0x80, 0x65, 0xdd, 0xd1, 0xdb, 0xd4, 0x0b, 0xf3, 0x15, 0x62, 0xc8, 0x27, 0xbf, 0x74, 0xbd, - 0x13, 0xa0, 0xe5, 0x1c, 0x88, 0x19, 0x1c, 0x24, 0xd5, 0x1a, 0xd8, 0x83, 0x8b, 0xf5, 0xcf, 0x14, - 0x42, 0x43, 0x27, 0x1a, 0xba, 0x55, 0xa3, 0x6e, 0xb7, 0xe5, 0x9d, 0xdc, 0x0e, 0xde, 0x5f, 0x62, - 0x8c, 0x39, 0x38, 0x53, 0x5e, 0x5b, 0xa3, 0x0d, 0xcf, 0x8f, 0x48, 0xed, 0x8a, 0x60, 0x7d, 0x7c, - 0xe3, 0x21, 0x50, 0x22, 0xc2, 0x70, 0x24, 0xb3, 0x7e, 0xac, 0x98, 0xfa, 0x4f, 0x8b, 0xa0, 0x04, - 0x86, 0x7f, 0xf0, 0xcc, 0xeb, 0x08, 0x17, 0xd9, 0x8f, 0x45, 0xaf, 0x98, 0x30, 0x11, 0x0a, 0xa3, - 0xd6, 0x6d, 0xb7, 0x75, 0x1c, 0x7a, 0x6c, 0x63, 0x31, 0x19, 0x67, 0x16, 0x12, 0xf2, 0xbd, 0xc4, - 0x25, 0xb1, 0x97, 0x20, 0xe1, 0x33, 0xba, 0xba, 0xcb, 0x59, 0x68, 0x49, 0xae, 0xe4, 0xeb, 0x39, - 0x38, 0xe7, 0x77, 0xca, 0xd2, 0x2a, 0x33, 0xaa, 0xa7, 0xed, 0xae, 0xe5, 0xf9, 0xfb, 0x98, 0x37, - 0xb3, 0xab, 0xe3, 0x9d, 0x74, 0x23, 0xad, 0x30, 0x6f, 0x49, 0x10, 0x96, 0x22, 0x50, 0x08, 0x1b, - 0x69, 0xea, 0x0d, 0x24, 0xd2, 0x52, 0xeb, 0xbd, 0x74, 0x07, 0x9e, 0xca, 0x64, 0xb9, 0x93, 0x11, - 0xdb, 0x2f, 0x1b, 0xb1, 0xff, 0x5d, 0x2e, 0x9c, 0x88, 0x62, 0x42, 0x22, 0x37, 0x00, 0x42, 0x90, - 0xd8, 0xd6, 0x8e, 0x6d, 0x6f, 0x4d, 0x42, 0x28, 0x34, 0x4d, 0xa2, 0x20, 0x4b, 0x50, 0x12, 0x62, - 0xe1, 0xb9, 0x81, 0x3f, 0xbd, 0x43, 0x2f, 0xdc, 0x90, 0xe5, 0x80, 0x5b, 0x56, 0xf1, 0xcd, 0x82, - 0xcd, 0xa5, 0x37, 0x60, 0x78, 0xbf, 0xdf, 0xf5, 0xf5, 0x02, 0x10, 0x79, 0x0f, 0x7a, 0x84, 0x06, - 0xfa, 0x31, 0x9e, 0xc2, 0xae, 0xc1, 0x20, 0xfb, 0x04, 0xcc, 0x96, 0x21, 0x45, 0xc7, 0xed, 0x0a, - 0x98, 0x16, 0x60, 0xc3, 0xd0, 0x54, 0x03, 0xe9, 0xa1, 0xa9, 0xd4, 0x9f, 0x2e, 0xc0, 0x05, 0xb9, - 0x43, 0x2a, 0x14, 0x03, 0xee, 0x9f, 0x76, 0xca, 0x47, 0xd8, 0x29, 0x2a, 0x94, 0xf8, 0xd6, 0x43, - 0x64, 0x3e, 0xe0, 0xc7, 0x42, 0x08, 0xd1, 0x04, 0x46, 0xfd, 0x9f, 0xf3, 0x30, 0x1a, 0x98, 0x77, - 0xba, 0xe3, 0x9e, 0xe0, 0xee, 0xf8, 0x2c, 0x8c, 0x62, 0x70, 0xa1, 0x36, 0xb5, 0x78, 0x00, 0x9e, - 0x7e, 0x29, 0x55, 0x89, 0x8f, 0x10, 0x59, 0xa9, 0x22, 0x84, 0x4c, 0xfb, 0xb9, 0xe5, 0x27, 0x85, - 0x7c, 0xe2, 0x66, 0x1f, 0x87, 0xab, 0x7f, 0xb9, 0x00, 0x23, 0xbe, 0x94, 0xa7, 0xcc, 0xe3, 0x7a, - 0xcf, 0x73, 0xb4, 0x42, 0xbe, 0x09, 0xb0, 0x6c, 0x3b, 0x9e, 0xde, 0x5a, 0x0c, 0x35, 0x1f, 0x0f, - 0x48, 0x3b, 0x08, 0xe5, 0x65, 0x24, 0x12, 0x5c, 0xbf, 0x42, 0xb3, 0x9a, 0x4f, 0x4c, 0x7c, 0xfd, - 0x0a, 0xa0, 0x9a, 0x44, 0xa1, 0xfe, 0x4e, 0x1e, 0xce, 0xf8, 0x9d, 0x34, 0xf3, 0x84, 0x36, 0xba, - 0x27, 0x79, 0x6e, 0x8a, 0x4a, 0xbb, 0x7f, 0x47, 0x69, 0xab, 0xff, 0xa7, 0x34, 0x91, 0x4c, 0xb7, - 0xec, 0xd3, 0x89, 0xe4, 0x8f, 0x43, 0xc7, 0xd5, 0x1f, 0x2d, 0xc0, 0x39, 0x5f, 0xea, 0xb3, 0x5d, - 0x0b, 0x8f, 0x16, 0xa6, 0xf5, 0x56, 0xeb, 0x24, 0xef, 0xc6, 0x87, 0x7d, 0x41, 0x2c, 0x89, 0x68, - 0x7d, 0x22, 0x43, 0xe0, 0x9a, 0x00, 0xd7, 0x6d, 0xd3, 0xd0, 0x64, 0x22, 0xf2, 0x2e, 0x8c, 0xf8, - 0x3f, 0xcb, 0x4e, 0xd3, 0xdf, 0x82, 0xe3, 0x45, 0x41, 0x50, 0x48, 0x77, 0x22, 0x41, 0x09, 0x22, - 0x05, 0xd4, 0xaf, 0x0c, 0xc0, 0xa5, 0x87, 0xa6, 0x65, 0xd8, 0x1b, 0xae, 0x9f, 0x60, 0xf2, 0xd8, - 0x1f, 0x94, 0x1d, 0x75, 0x62, 0xc9, 0xf7, 0xe0, 0x7c, 0x5c, 0xa4, 0x4e, 0x10, 0xf6, 0x5b, 0xf4, - 0xce, 0x06, 0x27, 0xa8, 0xfb, 0xa9, 0x26, 0xc5, 0x6d, 0x9b, 0x96, 0x5e, 0x32, 0x9e, 0xab, 0x72, - 0x60, 0x37, 0xb9, 0x2a, 0x5f, 0x80, 0x52, 0xc5, 0x6e, 0xeb, 0xa6, 0x1f, 0x9e, 0x06, 0x47, 0x71, - 0x50, 0x2f, 0x62, 0x34, 0x41, 0xc1, 0xf8, 0x8b, 0x8a, 0xb1, 0xcb, 0x86, 0x42, 0xfe, 0x7e, 0x01, - 0x66, 0xa5, 0x69, 0x32, 0x11, 0xb1, 0x61, 0x54, 0x54, 0x27, 0xee, 0xc6, 0x00, 0x37, 0x4f, 0xaf, - 0xfa, 0x32, 0xca, 0x56, 0xab, 0x1b, 0x91, 0x72, 0x7c, 0x1b, 0xc5, 0x53, 0x68, 0x8a, 0x8f, 0xe1, - 0xb7, 0x64, 0x5a, 0x94, 0xbf, 0x24, 0x04, 0x9c, 0x64, 0x86, 0x93, 0x42, 0xc0, 0x59, 0x46, 0x26, - 0x22, 0x33, 0x30, 0x81, 0xc1, 0x99, 0x83, 0xad, 0x14, 0x53, 0x89, 0x11, 0x34, 0x2a, 0xf1, 0xca, - 0x85, 0xc7, 0x73, 0x66, 0x1f, 0x57, 0x6f, 0x08, 0xb4, 0x96, 0x2c, 0x41, 0x9e, 0x82, 0xc2, 0xe2, - 0x7c, 0x19, 0xef, 0x6a, 0x06, 0x79, 0x62, 0x24, 0xab, 0xa5, 0x6b, 0x0c, 0x76, 0xe9, 0xf3, 0x40, - 0x92, 0x9f, 0xb3, 0xa7, 0xfb, 0x98, 0xff, 0x52, 0xda, 0xf2, 0x1d, 0x77, 0x8f, 0x9a, 0xc3, 0x98, - 0x08, 0x23, 0x39, 0xc9, 0xfa, 0x3f, 0xca, 0x9c, 0x64, 0xa5, 0x43, 0xcd, 0x49, 0xa6, 0xfe, 0x4a, - 0x0e, 0x26, 0x12, 0x01, 0xcc, 0xc9, 0x2b, 0x00, 0x1c, 0x22, 0x05, 0x8a, 0xc4, 0xc8, 0x2b, 0x61, - 0x50, 0x73, 0xb1, 0x3c, 0x86, 0x64, 0xe4, 0x26, 0x0c, 0xf2, 0x5f, 0x22, 0xb8, 0x53, 0xb2, 0x48, - 0xb7, 0x6b, 0x1a, 0x5a, 0x40, 0x14, 0xd6, 0x82, 0x37, 0x92, 0x85, 0xd4, 0x22, 0xde, 0x66, 0x27, - 0xa8, 0x85, 0x91, 0xa9, 0x5f, 0xcb, 0xc3, 0x48, 0xd0, 0xe0, 0xb2, 0x71, 0x54, 0x3a, 0x57, 0x12, - 0xb1, 0xe0, 0x0b, 0x3b, 0xc5, 0x82, 0x8f, 0xcd, 0xb7, 0x22, 0xf8, 0xfb, 0xe1, 0x3d, 0xa8, 0xfa, - 0x46, 0x1e, 0xce, 0x04, 0xb5, 0x1e, 0xe1, 0xe5, 0xd7, 0xc7, 0x48, 0x24, 0x5f, 0xcf, 0x81, 0x32, - 0x65, 0xb6, 0x5a, 0xa6, 0xd5, 0xac, 0x5a, 0x6b, 0xb6, 0xd3, 0xc6, 0x09, 0xf1, 0xe8, 0x8e, 0x70, - 0xd5, 0x3f, 0x95, 0x83, 0x09, 0xd1, 0xa0, 0x69, 0xdd, 0x31, 0x8e, 0xee, 0x7c, 0x2c, 0xde, 0x92, - 0xa3, 0xd3, 0x17, 0xf5, 0x5b, 0x79, 0x80, 0x79, 0xbb, 0xf1, 0xe8, 0x98, 0xbf, 0xc7, 0x7a, 0x0b, - 0x4a, 0x3c, 0xc2, 0x96, 0xd0, 0xd8, 0x09, 0xf1, 0xee, 0x88, 0x7d, 0x1a, 0x47, 0x4c, 0x8d, 0x8b, - 0xf9, 0xb8, 0xc4, 0x23, 0x74, 0x29, 0x39, 0x4d, 0x14, 0x61, 0x95, 0x32, 0x3a, 0xb1, 0x60, 0x04, - 0x95, 0x32, 0x58, 0xb4, 0xd2, 0xed, 0xad, 0xc9, 0x62, 0xcb, 0x6e, 0x3c, 0xd2, 0x90, 0x5e, 0xfd, - 0xd7, 0x39, 0x2e, 0xbb, 0x63, 0xfe, 0xaa, 0xd4, 0xff, 0xfc, 0xe2, 0x1e, 0x3f, 0xff, 0x4f, 0xe7, - 0xe0, 0x9c, 0x46, 0x1b, 0xf6, 0x63, 0xea, 0x6c, 0x4e, 0xdb, 0x06, 0xbd, 0x43, 0x2d, 0xea, 0x1c, - 0xd5, 0x88, 0xfa, 0x4f, 0x31, 0x79, 0x46, 0xd8, 0x98, 0xfb, 0x2e, 0x35, 0x8e, 0x4f, 0x62, 0x13, - 0xf5, 0xd7, 0x07, 0x40, 0x49, 0xb5, 0x7a, 0x8f, 0xad, 0x39, 0x97, 0xb9, 0x95, 0x29, 0x1e, 0xd6, - 0x56, 0xa6, 0x7f, 0x6f, 0x5b, 0x99, 0xd2, 0x5e, 0xb7, 0x32, 0x03, 0xbb, 0xd9, 0xca, 0xb4, 0xe3, - 0x5b, 0x99, 0x41, 0xdc, 0xca, 0xbc, 0xd2, 0x73, 0x2b, 0x33, 0x63, 0x19, 0xfb, 0xdc, 0xc8, 0x1c, - 0xdb, 0xa4, 0xbb, 0xfb, 0xd9, 0x81, 0x5d, 0x63, 0x93, 0x62, 0xc3, 0x76, 0x0c, 0x6a, 0x88, 0x8d, - 0x17, 0x9e, 0xfa, 0x3b, 0x02, 0xa6, 0x05, 0xd8, 0x44, 0x06, 0xe3, 0xd1, 0xdd, 0x64, 0x30, 0x3e, - 0x84, 0xfd, 0xd7, 0x57, 0xf3, 0x30, 0x31, 0x4d, 0x1d, 0x8f, 0x87, 0xf0, 0x3c, 0x0c, 0x97, 0xb8, - 0x32, 0x9c, 0x91, 0x18, 0xa2, 0x45, 0x9e, 0x0f, 0xdd, 0xfc, 0x1a, 0xd4, 0xf1, 0xe2, 0x5e, 0x82, - 0x71, 0x7a, 0x56, 0xbd, 0x9f, 0x45, 0x4c, 0x8c, 0xdd, 0xa0, 0x7a, 0x1f, 0xce, 0x05, 0x69, 0x8a, - 0x5f, 0x5a, 0x40, 0x2f, 0x25, 0x06, 0x2b, 0xee, 0x3d, 0x31, 0x98, 0xfa, 0xcb, 0x39, 0xb8, 0xaa, - 0x51, 0x8b, 0x6e, 0xe8, 0xab, 0x2d, 0x2a, 0x35, 0x4b, 0xac, 0x0c, 0x6c, 0xd6, 0x30, 0xdd, 0xb6, - 0xee, 0x35, 0xd6, 0x0f, 0x24, 0xa3, 0x59, 0x18, 0x91, 0xe7, 0xaf, 0x3d, 0xcc, 0x6d, 0x91, 0x72, - 0xea, 0xaf, 0x17, 0x61, 0x60, 0xca, 0xf6, 0xee, 0xda, 0x07, 0xcc, 0x54, 0x17, 0x4e, 0xf9, 0xf9, - 0x3d, 0x9c, 0xf5, 0x7c, 0x06, 0x2b, 0x97, 0x82, 0xf7, 0xa3, 0x0b, 0xe9, 0xaa, 0x9d, 0x48, 0x72, - 0xe0, 0x93, 0xed, 0x31, 0x47, 0xdd, 0x6b, 0x30, 0x84, 0xd1, 0x5f, 0xa4, 0xd3, 0x58, 0x74, 0xd0, - 0xf6, 0x18, 0x30, 0x5e, 0x47, 0x48, 0x4a, 0x7e, 0x20, 0x12, 0x73, 0xb4, 0x74, 0xf0, 0x9c, 0x76, - 0x72, 0xf8, 0xd1, 0x57, 0xf8, 0x45, 0x1e, 0xb6, 0x49, 0xca, 0xff, 0x81, 0xa7, 0x28, 0xb1, 0x26, - 0x05, 0x84, 0x87, 0x98, 0x6f, 0x6e, 0x1a, 0x46, 0xa7, 0x6c, 0x4f, 0x72, 0x06, 0x1e, 0x0a, 0x9f, - 0x81, 0x32, 0xc9, 0xa7, 0x7b, 0x02, 0x47, 0xcb, 0xa8, 0x7f, 0x54, 0x84, 0x11, 0xff, 0xe7, 0x11, - 0xe9, 0xce, 0x4b, 0x50, 0x9a, 0xb3, 0xa5, 0x14, 0x08, 0xe8, 0x40, 0xbc, 0x6e, 0xbb, 0x31, 0xcf, - 0x68, 0x41, 0xc4, 0xa4, 0xbe, 0x68, 0x1b, 0xb2, 0xfb, 0x3b, 0x4a, 0xdd, 0xb2, 0x8d, 0xc4, 0xf3, - 0xe1, 0x80, 0x90, 0x5c, 0x85, 0x22, 0xbe, 0x1c, 0x90, 0x0e, 0xf2, 0x63, 0xaf, 0x05, 0x10, 0x2f, - 0x69, 0x65, 0x69, 0xaf, 0x5a, 0x39, 0xb0, 0x5f, 0xad, 0x1c, 0x3c, 0x5c, 0xad, 0x7c, 0x1f, 0x46, - 0xb0, 0x26, 0x3f, 0x83, 0xda, 0xce, 0x0b, 0xeb, 0x53, 0x62, 0xed, 0x1b, 0xe5, 0xed, 0x16, 0x79, - 0xd4, 0x70, 0xc9, 0x8b, 0xb0, 0x8a, 0xe9, 0x2e, 0x1c, 0x60, 0x3b, 0xfd, 0x4f, 0x72, 0x30, 0x70, - 0xdf, 0x7a, 0x64, 0xd9, 0x1b, 0x07, 0xd3, 0xb8, 0x57, 0x60, 0x58, 0xb0, 0x91, 0x56, 0x17, 0x7c, - 0x11, 0xde, 0xe5, 0xe0, 0x3a, 0x72, 0xd2, 0x64, 0x2a, 0xf2, 0x76, 0x50, 0x08, 0x1f, 0x07, 0x15, - 0xc2, 0x24, 0x22, 0x7e, 0xa1, 0x46, 0x34, 0xef, 0x81, 0x4c, 0x4e, 0x2e, 0x43, 0xb1, 0xc2, 0x9a, - 0x2a, 0x45, 0xd1, 0x65, 0x4d, 0xd1, 0x10, 0xaa, 0x7e, 0xb5, 0x08, 0x63, 0xb1, 0x83, 0xaf, 0x17, - 0x60, 0x48, 0x1c, 0x3c, 0x99, 0x7e, 0x22, 0x06, 0x7c, 0x3c, 0x14, 0x00, 0xb5, 0x41, 0xfe, 0x67, - 0xd5, 0x20, 0x9f, 0x83, 0x01, 0xdb, 0xc5, 0x45, 0x11, 0xbf, 0x65, 0x2c, 0x1c, 0x42, 0x4b, 0x35, - 0xd6, 0x76, 0x3e, 0x38, 0x04, 0x89, 0xac, 0x91, 0xb6, 0x8b, 0x9f, 0x76, 0x1b, 0x86, 0x74, 0xd7, - 0xa5, 0x5e, 0xdd, 0xd3, 0x9b, 0x72, 0x6e, 0x86, 0x00, 0x28, 0x8f, 0x0e, 0x04, 0xae, 0xe8, 0x4d, - 0xf2, 0x79, 0x18, 0x6d, 0x38, 0x14, 0x97, 0x4d, 0xbd, 0xc5, 0x5a, 0x29, 0x99, 0xb5, 0x11, 0x84, - 0x7c, 0x7f, 0x12, 0x22, 0xaa, 0x06, 0x79, 0x00, 0xa3, 0xe2, 0x73, 0xb8, 0xe7, 0x3e, 0x0e, 0xb4, - 0xb1, 0x70, 0x19, 0xe3, 0x22, 0xe1, 0xbe, 0xfb, 0xe2, 0x01, 0x87, 0x4c, 0x2e, 0xf3, 0x35, 0x24, - 0x52, 0xb2, 0x04, 0x64, 0x83, 0xae, 0xd6, 0xf5, 0xae, 0xb7, 0xce, 0xea, 0xe2, 0xa1, 0xc5, 0x45, - 0x4a, 0x42, 0x7c, 0xf5, 0x90, 0xc4, 0xca, 0x8f, 0x41, 0x36, 0xe8, 0x6a, 0x39, 0x82, 0x24, 0x0f, - 0xe1, 0x7c, 0xb2, 0x08, 0xfb, 0x64, 0x7e, 0x39, 0xf0, 0xfc, 0xf6, 0xd6, 0xe4, 0x64, 0x2a, 0x81, - 0xc4, 0xf6, 0x6c, 0x82, 0x6d, 0xd5, 0xb8, 0x5b, 0x1c, 0x1c, 0x18, 0x1f, 0xd4, 0xc6, 0x58, 0x59, - 0xdf, 0x84, 0x34, 0x0d, 0xf5, 0xf7, 0x72, 0xcc, 0x54, 0x64, 0x1f, 0x84, 0x39, 0x99, 0x99, 0xae, - 0xb7, 0xf7, 0xa8, 0xeb, 0xed, 0x30, 0x7b, 0x62, 0xc9, 0xed, 0x31, 0xbb, 0x6a, 0x02, 0x4b, 0x6e, - 0x40, 0xc9, 0x90, 0x4f, 0xcd, 0x2e, 0x44, 0x3b, 0xc1, 0xaf, 0x47, 0x13, 0x54, 0xe4, 0x1a, 0x14, - 0xd9, 0x92, 0x15, 0xdf, 0x32, 0xcb, 0xd6, 0x85, 0x86, 0x14, 0xea, 0x8f, 0xe4, 0x61, 0x44, 0xfa, - 0x9a, 0x5b, 0x07, 0xfa, 0x9c, 0x37, 0x77, 0xd7, 0x4c, 0xdf, 0xe9, 0x05, 0xf7, 0x52, 0x7e, 0x93, - 0x6f, 0x07, 0xa2, 0xd8, 0xd5, 0x85, 0x94, 0x10, 0xcc, 0x6b, 0xe2, 0x43, 0x4b, 0xbb, 0xdf, 0x3e, - 0x32, 0xfa, 0xbb, 0xc5, 0xc1, 0xfc, 0x78, 0xe1, 0x6e, 0x71, 0xb0, 0x38, 0xde, 0x8f, 0x71, 0xb8, - 0x30, 0xf4, 0x35, 0xdf, 0x9b, 0x5b, 0x6b, 0x66, 0xf3, 0x98, 0xbf, 0x1d, 0x39, 0xdc, 0x18, 0x65, - 0x31, 0xd9, 0x1c, 0xf3, 0x87, 0x24, 0x1f, 0xa9, 0x6c, 0x4e, 0xb3, 0x2d, 0x0a, 0xd9, 0xfc, 0xd3, - 0x1c, 0x28, 0xa9, 0xb2, 0x29, 0x1f, 0x91, 0x1f, 0xc4, 0xe1, 0xe5, 0x5c, 0xfc, 0x83, 0x3c, 0x4c, - 0x54, 0x2d, 0x8f, 0x36, 0xf9, 0x8e, 0xf1, 0x98, 0x4f, 0x15, 0xf7, 0x60, 0x58, 0xfa, 0x18, 0xd1, - 0xe7, 0x4f, 0x07, 0xfb, 0xf1, 0x10, 0x95, 0xc1, 0x49, 0x2e, 0x7d, 0x88, 0x69, 0xda, 0x63, 0x42, - 0x3e, 0xe6, 0x73, 0xce, 0xf1, 0x10, 0xf2, 0x31, 0x9f, 0xbc, 0x3e, 0xa6, 0x42, 0xfe, 0xdf, 0x73, - 0x70, 0x36, 0xa5, 0x72, 0x72, 0x15, 0x06, 0x6a, 0xdd, 0x55, 0x0c, 0xbb, 0x95, 0x0b, 0x3d, 0x86, - 0xdd, 0xee, 0x2a, 0x46, 0xdc, 0xd2, 0x7c, 0x24, 0x59, 0xc1, 0xc7, 0xf5, 0x4b, 0xd5, 0xca, 0xb4, - 0x90, 0xaa, 0x2a, 0x85, 0x09, 0x60, 0xe0, 0xb4, 0x2f, 0x0b, 0x1e, 0xe0, 0xdb, 0xa6, 0xd1, 0x88, - 0x3d, 0xc0, 0x67, 0x65, 0xc8, 0x0f, 0xc2, 0x50, 0xf9, 0xc3, 0xae, 0x43, 0x91, 0x2f, 0x97, 0xf8, - 0x27, 0x02, 0xbe, 0x3e, 0x22, 0x8d, 0x33, 0x8f, 0x25, 0xc0, 0x28, 0xe2, 0xbc, 0x43, 0x86, 0xea, - 0xd7, 0x72, 0x70, 0x29, 0xbb, 0x75, 0xe4, 0x33, 0x30, 0xc0, 0x76, 0xe6, 0x65, 0x6d, 0x51, 0x7c, - 0x3a, 0xcf, 0x4f, 0x6a, 0xb7, 0x68, 0x5d, 0x77, 0x64, 0x63, 0xdf, 0x27, 0x23, 0xef, 0xc0, 0x70, - 0xd5, 0x75, 0xbb, 0xd4, 0xa9, 0xbd, 0x72, 0x5f, 0xab, 0x8a, 0x3d, 0x21, 0xee, 0x39, 0x4c, 0x04, - 0xd7, 0xdd, 0x57, 0x62, 0x81, 0xb5, 0x64, 0x7a, 0xf5, 0xc7, 0x73, 0x70, 0xb9, 0xd7, 0x57, 0x91, - 0x57, 0x60, 0x70, 0x85, 0x5a, 0xba, 0xe5, 0x55, 0x2b, 0xa2, 0x49, 0xb8, 0xc5, 0xf2, 0x10, 0x16, - 0xdd, 0x29, 0x04, 0x84, 0xac, 0x10, 0x3f, 0x57, 0x0c, 0x1c, 0x19, 0xf8, 0x19, 0x28, 0xc2, 0x62, - 0x85, 0x7c, 0x42, 0xf5, 0xf7, 0xf3, 0x30, 0xb2, 0xdc, 0xea, 0x36, 0x4d, 0x69, 0xe1, 0xd8, 0xb7, - 0xbd, 0xed, 0x5b, 0xbf, 0xf9, 0xbd, 0x59, 0xbf, 0x6c, 0xb8, 0x39, 0xfb, 0x1c, 0x6e, 0x7e, 0x39, - 0xf2, 0x36, 0x94, 0x3a, 0xf8, 0x1d, 0xf1, 0x93, 0x58, 0xfe, 0x75, 0x59, 0x27, 0xb1, 0xbc, 0x0c, - 0x1b, 0x5f, 0x8d, 0x03, 0x8c, 0xaf, 0xb0, 0xac, 0x24, 0xd0, 0x70, 0x91, 0x38, 0x15, 0xe8, 0xa1, - 0x08, 0x34, 0x5c, 0x10, 0x4e, 0x05, 0x7a, 0x00, 0x81, 0xfe, 0x7a, 0x1e, 0xc6, 0xa2, 0x55, 0x92, - 0xcf, 0xc0, 0x30, 0xaf, 0x86, 0x9f, 0x0b, 0xe5, 0x24, 0xa7, 0xe2, 0x10, 0xac, 0x01, 0xff, 0x21, - 0x0e, 0xb8, 0xce, 0xac, 0xeb, 0x6e, 0x3d, 0x3c, 0xa1, 0xe1, 0xf7, 0xb7, 0x83, 0xdc, 0x13, 0x2a, - 0x86, 0xd2, 0xc6, 0xd6, 0x75, 0x77, 0x3a, 0xfc, 0x4d, 0x66, 0x80, 0x38, 0xb4, 0xeb, 0xd2, 0x28, - 0x83, 0x22, 0x32, 0x10, 0xc9, 0xa1, 0xe3, 0x58, 0x6d, 0x82, 0xc3, 0x64, 0x36, 0x5f, 0x0a, 0x9a, - 0x8d, 0xca, 0xd0, 0xbf, 0x8b, 0xcc, 0xd5, 0x12, 0x7d, 0xfa, 0x31, 0x27, 0x27, 0xa8, 0xe8, 0x9e, - 0xce, 0x37, 0xe5, 0x7e, 0x07, 0xa8, 0x7f, 0xcf, 0x86, 0xfe, 0x25, 0x8b, 0x2e, 0xad, 0x91, 0x97, - 0x61, 0x88, 0x29, 0xcc, 0xbc, 0xcd, 0xfa, 0x32, 0x27, 0xfc, 0x27, 0x24, 0x4d, 0x42, 0xc4, 0x5c, - 0x9f, 0x16, 0x52, 0x91, 0xdb, 0x3c, 0xfb, 0x3d, 0x9f, 0x63, 0x85, 0xf6, 0x11, 0xb9, 0x0c, 0xc7, - 0xcc, 0xf5, 0x69, 0x12, 0x9d, 0x5f, 0x4a, 0x3c, 0xd0, 0x29, 0x24, 0x4b, 0x71, 0x8c, 0x5f, 0x4a, - 0x8c, 0x8f, 0xf9, 0xb4, 0xc4, 0xf2, 0xf1, 0xdd, 0x53, 0x92, 0x62, 0xae, 0x4f, 0x4b, 0x4f, 0x48, - 0x3f, 0x22, 0x3b, 0x94, 0xc6, 0x9d, 0x3e, 0x64, 0xdc, 0x5c, 0x9f, 0x16, 0xa1, 0x25, 0xaf, 0xc3, - 0xb0, 0xf8, 0x7d, 0xd7, 0x16, 0x37, 0xca, 0x52, 0x2c, 0x22, 0x09, 0x35, 0xd7, 0xa7, 0xc9, 0x94, - 0x52, 0xa5, 0xcb, 0x8e, 0x69, 0x79, 0xe2, 0x8d, 0x72, 0xbc, 0x52, 0xc4, 0x49, 0x95, 0xe2, 0x6f, - 0xf2, 0x0e, 0x8c, 0x06, 0x41, 0x9e, 0x3e, 0xa0, 0x0d, 0x4f, 0x1c, 0x7e, 0x9f, 0x8f, 0x15, 0xe6, - 0xc8, 0xb9, 0x3e, 0x2d, 0x4a, 0x4d, 0xae, 0x41, 0x49, 0xa3, 0xae, 0xf9, 0xa1, 0x7f, 0x5d, 0x3c, - 0x26, 0x8d, 0x73, 0xf3, 0x43, 0x26, 0x25, 0x81, 0x67, 0xbd, 0x13, 0xde, 0x4f, 0x8b, 0xa3, 0x6a, - 0x12, 0xab, 0x65, 0xc6, 0x32, 0x58, 0xef, 0x48, 0xce, 0x09, 0x9f, 0x0f, 0x43, 0x5f, 0x89, 0x84, - 0x99, 0xc3, 0xf1, 0x18, 0x03, 0x32, 0x76, 0xae, 0x4f, 0x8b, 0xd1, 0x4b, 0x52, 0xad, 0x98, 0xee, - 0x23, 0x11, 0x6d, 0x34, 0x2e, 0x55, 0x86, 0x92, 0xa4, 0xca, 0x7e, 0x4a, 0x55, 0x2f, 0x52, 0x6f, - 0xc3, 0x76, 0x1e, 0x89, 0xd8, 0xa2, 0xf1, 0xaa, 0x05, 0x56, 0xaa, 0x5a, 0x40, 0xe4, 0xaa, 0xd9, - 0x80, 0x1b, 0x4b, 0xaf, 0x5a, 0xf7, 0x74, 0xb9, 0x6a, 0x7e, 0x12, 0xe7, 0x77, 0xd2, 0x3c, 0xd5, - 0x1f, 0xf3, 0xbc, 0xe5, 0xc9, 0x0e, 0x45, 0x9c, 0xd4, 0xa1, 0xf8, 0x9b, 0x55, 0x2a, 0xe5, 0xa6, - 0x16, 0x89, 0xc9, 0x83, 0x4a, 0x25, 0x14, 0xab, 0x54, 0xce, 0x62, 0x7d, 0x5b, 0x4e, 0xd9, 0xac, - 0x4c, 0x44, 0x3b, 0x28, 0xc4, 0xb0, 0x0e, 0x92, 0x52, 0x3b, 0x4f, 0x62, 0x3a, 0x58, 0x85, 0x20, - 0xf9, 0x70, 0xd0, 0xc2, 0xe9, 0xe5, 0xb9, 0x3e, 0x0d, 0x13, 0xc5, 0xaa, 0x3c, 0xd1, 0xb0, 0x72, - 0x16, 0x29, 0x46, 0x7c, 0x0a, 0x06, 0x9b, 0xeb, 0xd3, 0x78, 0x12, 0xe2, 0x97, 0xa5, 0x94, 0x7e, - 0xca, 0xb9, 0xe8, 0x14, 0x11, 0x20, 0xd8, 0x14, 0x11, 0x26, 0xfe, 0x9b, 0x4d, 0xa6, 0xbd, 0x53, - 0xce, 0x47, 0x97, 0x9a, 0x38, 0x7e, 0xae, 0x4f, 0x4b, 0xa6, 0xca, 0x7b, 0x3d, 0x92, 0x09, 0x4e, - 0xb9, 0x10, 0x0b, 0x00, 0x16, 0xa2, 0x98, 0xb8, 0xe4, 0x9c, 0x71, 0x4b, 0xb1, 0xac, 0xe5, 0x62, - 0xb2, 0xba, 0x18, 0xdd, 0xb8, 0xa4, 0x90, 0xcc, 0xf5, 0x69, 0x69, 0x25, 0xc9, 0x74, 0x22, 0x1f, - 0x9b, 0xa2, 0x44, 0x7d, 0x63, 0x62, 0xe8, 0xb9, 0x3e, 0x2d, 0x91, 0xc1, 0xed, 0xb6, 0x9c, 0x08, - 0x4d, 0x79, 0x2a, 0xda, 0x89, 0x21, 0x86, 0x75, 0xa2, 0x94, 0x30, 0xed, 0xb6, 0x9c, 0x1c, 0x4b, - 0xb9, 0x94, 0x2c, 0x15, 0xce, 0x9c, 0x52, 0x12, 0x2d, 0x2d, 0x3d, 0xdf, 0x8f, 0xf2, 0xb4, 0xc8, - 0xb8, 0x2a, 0xca, 0xa7, 0xd1, 0xcc, 0xf5, 0x69, 0xe9, 0xb9, 0x82, 0xb4, 0xf4, 0x44, 0x39, 0xca, - 0xe5, 0x5e, 0x3c, 0x83, 0xd6, 0xa5, 0x27, 0xd9, 0xd1, 0x7b, 0xa4, 0x2d, 0x51, 0x9e, 0x89, 0x46, - 0x1f, 0xce, 0x24, 0x9c, 0xeb, 0xd3, 0x7a, 0x24, 0x3f, 0xb9, 0x9f, 0x91, 0x43, 0x44, 0xb9, 0x12, - 0x4d, 0xb8, 0x9c, 0x4a, 0x34, 0xd7, 0xa7, 0x65, 0x64, 0x20, 0xb9, 0x9f, 0x91, 0x62, 0x42, 0x99, - 0xec, 0xc9, 0x36, 0x90, 0x47, 0x46, 0x82, 0x8a, 0xa5, 0xd4, 0xec, 0x0c, 0xca, 0xb3, 0x51, 0xd5, - 0x4d, 0x21, 0x61, 0xaa, 0x9b, 0x96, 0xd7, 0x61, 0x29, 0x35, 0x9d, 0x80, 0xf2, 0x5c, 0x0f, 0x86, - 0x41, 0x1b, 0x53, 0x13, 0x11, 0x2c, 0xa5, 0xc6, 0xf3, 0x57, 0xd4, 0x28, 0xc3, 0x14, 0x12, 0xc6, - 0x30, 0x2d, 0x13, 0xc0, 0x52, 0x6a, 0xd8, 0x77, 0xe5, 0xf9, 0x1e, 0x0c, 0xc3, 0x16, 0xa6, 0x05, - 0x8c, 0x7f, 0x3d, 0x12, 0x77, 0x5d, 0xf9, 0x44, 0x74, 0xde, 0x90, 0x50, 0x6c, 0xde, 0x90, 0x23, - 0xb4, 0x4f, 0x27, 0x22, 0xcb, 0x2a, 0x9f, 0x8c, 0x0e, 0xf3, 0x18, 0x9a, 0x0d, 0xf3, 0x78, 0x2c, - 0xda, 0xe9, 0x44, 0x84, 0x4d, 0xe5, 0x6a, 0x16, 0x13, 0x44, 0x47, 0x99, 0xf0, 0x98, 0x9c, 0xd5, - 0x94, 0x10, 0x8f, 0xca, 0xa7, 0xa2, 0x7e, 0xdd, 0x09, 0x82, 0xb9, 0x3e, 0x2d, 0x25, 0x30, 0xa4, - 0x96, 0x1e, 0xcf, 0x48, 0xb9, 0x16, 0x1d, 0xb6, 0x69, 0x34, 0x6c, 0xd8, 0xa6, 0xc6, 0x42, 0x9a, - 0x4f, 0x7b, 0x7c, 0xa2, 0x5c, 0x8f, 0x1a, 0x66, 0x49, 0x0a, 0x66, 0x98, 0xa5, 0x3c, 0x5a, 0xd1, - 0xd2, 0x63, 0xec, 0x28, 0x2f, 0xf4, 0x6c, 0x21, 0xd2, 0xa4, 0xb4, 0x90, 0x87, 0x9c, 0x09, 0x6d, - 0xa7, 0xfb, 0x9d, 0x96, 0xad, 0x1b, 0xca, 0xa7, 0x53, 0x6d, 0x27, 0x8e, 0x94, 0x6c, 0x27, 0x0e, - 0x60, 0xab, 0xbc, 0xfc, 0xc6, 0x41, 0x79, 0x31, 0xba, 0xca, 0xcb, 0x38, 0xb6, 0xca, 0x47, 0xde, - 0x43, 0x4c, 0x27, 0xde, 0x03, 0x28, 0x2f, 0x45, 0x15, 0x20, 0x86, 0x66, 0x0a, 0x10, 0x7f, 0x41, - 0xf0, 0xe5, 0x6c, 0x0f, 0x7a, 0xe5, 0x06, 0x72, 0x7b, 0xd6, 0xe7, 0x96, 0x45, 0x37, 0xd7, 0xa7, - 0x65, 0x7b, 0xe1, 0x57, 0x53, 0x1c, 0xe2, 0x95, 0x9b, 0x51, 0x05, 0x4b, 0x10, 0x30, 0x05, 0x4b, - 0xba, 0xd1, 0x57, 0x53, 0x3c, 0xda, 0x95, 0xcf, 0x64, 0xb2, 0x0a, 0xbe, 0x39, 0xc5, 0x0f, 0xfe, - 0xb6, 0xec, 0x92, 0xae, 0xbc, 0x1c, 0x5d, 0xec, 0x42, 0x0c, 0x5b, 0xec, 0x24, 0xd7, 0xf5, 0xdb, - 0xb2, 0x33, 0xb6, 0x72, 0x2b, 0x59, 0x2a, 0x5c, 0x22, 0x25, 0xa7, 0x6d, 0x2d, 0xdd, 0x87, 0x59, - 0x79, 0x25, 0xaa, 0x75, 0x69, 0x34, 0x4c, 0xeb, 0x52, 0xfd, 0x9f, 0x67, 0x93, 0xae, 0xc8, 0xca, - 0xed, 0xf8, 0x26, 0x3b, 0x8a, 0x67, 0x96, 0x4f, 0xc2, 0x7d, 0xf9, 0xf3, 0xf1, 0x60, 0x7b, 0xca, - 0xab, 0xb1, 0x6b, 0xdf, 0x08, 0x96, 0xd9, 0xb7, 0xb1, 0xe0, 0x7c, 0x9f, 0x8f, 0xc7, 0xa7, 0x53, - 0x5e, 0x4b, 0xe7, 0x10, 0xe8, 0x4a, 0x3c, 0x9e, 0xdd, 0xe7, 0xe3, 0x21, 0xdd, 0x94, 0xd7, 0xd3, - 0x39, 0x04, 0xd2, 0x8d, 0x87, 0x80, 0x7b, 0x59, 0x0a, 0x32, 0xaf, 0x7c, 0x36, 0x6a, 0x3a, 0x06, - 0x08, 0x66, 0x3a, 0x86, 0xa1, 0xe8, 0x5f, 0x96, 0x82, 0xb3, 0x2b, 0x6f, 0x24, 0x8a, 0x04, 0x8d, - 0x95, 0x42, 0xb8, 0xbf, 0x2c, 0x05, 0x35, 0x57, 0xde, 0x4c, 0x14, 0x09, 0x5a, 0x27, 0x85, 0x3e, - 0x37, 0x7a, 0xbd, 0x5f, 0x55, 0xde, 0x8a, 0x1e, 0x06, 0x67, 0x53, 0xce, 0xf5, 0x69, 0xbd, 0xde, - 0xc1, 0x7e, 0x39, 0xdb, 0xb1, 0x5b, 0x79, 0x3b, 0x3a, 0x84, 0xb3, 0xe8, 0xd8, 0x10, 0xce, 0x74, - 0x0e, 0x7f, 0x27, 0x16, 0xcb, 0x42, 0x79, 0x27, 0x3a, 0xc5, 0x45, 0x90, 0x6c, 0x8a, 0x8b, 0x47, - 0xbe, 0x88, 0x04, 0x69, 0x50, 0x3e, 0x17, 0x9d, 0xe2, 0x64, 0x1c, 0x9b, 0xe2, 0x22, 0x01, 0x1d, - 0xa6, 0x13, 0xb1, 0x03, 0x94, 0x77, 0xa3, 0x53, 0x5c, 0x0c, 0xcd, 0xa6, 0xb8, 0x78, 0xb4, 0x81, - 0x77, 0x62, 0x4f, 0xe8, 0x95, 0xcf, 0xa7, 0xb7, 0x1f, 0x91, 0x72, 0xfb, 0xf9, 0x83, 0x7b, 0x2d, - 0xfd, 0x2d, 0xb8, 0x52, 0x8e, 0x8e, 0xdf, 0x34, 0x1a, 0x36, 0x7e, 0x53, 0xdf, 0x91, 0xc7, 0x37, - 0x0e, 0x42, 0xab, 0xa6, 0x7a, 0x6c, 0x1c, 0x42, 0x53, 0x24, 0x05, 0x1c, 0xd9, 0x23, 0xf3, 0x8d, - 0xd0, 0x74, 0xc6, 0x1e, 0xd9, 0xdf, 0x06, 0xc5, 0xe8, 0xd9, 0xec, 0x9a, 0xf0, 0x33, 0x56, 0x2a, - 0xd1, 0xd9, 0x35, 0x41, 0xc0, 0x66, 0xd7, 0xa4, 0x77, 0xf2, 0x2c, 0x8c, 0x0b, 0x2d, 0xe2, 0xee, - 0xd3, 0xa6, 0xd5, 0x54, 0x66, 0x62, 0xef, 0x2d, 0x63, 0x78, 0x36, 0x3b, 0xc5, 0x61, 0xb8, 0x5e, - 0x73, 0xd8, 0x74, 0xcb, 0xec, 0xac, 0xda, 0xba, 0x63, 0xd4, 0xa8, 0x65, 0x28, 0xb3, 0xb1, 0xf5, - 0x3a, 0x85, 0x06, 0xd7, 0xeb, 0x14, 0x38, 0x86, 0x88, 0x8b, 0xc1, 0x35, 0xda, 0xa0, 0xe6, 0x63, - 0xaa, 0xdc, 0x41, 0xb6, 0x93, 0x59, 0x6c, 0x05, 0xd9, 0x5c, 0x9f, 0x96, 0xc5, 0x81, 0xd9, 0xea, - 0x0b, 0x9b, 0xb5, 0xf7, 0xe6, 0x83, 0xf0, 0x03, 0xcb, 0x0e, 0xed, 0xe8, 0x0e, 0x55, 0xe6, 0xa2, - 0xb6, 0x7a, 0x2a, 0x11, 0xb3, 0xd5, 0x53, 0x11, 0x49, 0xb6, 0xfe, 0x58, 0xa8, 0xf6, 0x62, 0x1b, - 0x8e, 0x88, 0xf4, 0xd2, 0x6c, 0x76, 0x8a, 0x22, 0x98, 0x80, 0xe6, 0x6d, 0xab, 0x89, 0x27, 0x15, - 0x77, 0xa3, 0xb3, 0x53, 0x36, 0x25, 0x9b, 0x9d, 0xb2, 0xb1, 0x4c, 0xd5, 0xa3, 0x58, 0x3e, 0x06, - 0xef, 0x45, 0x55, 0x3d, 0x85, 0x84, 0xa9, 0x7a, 0x0a, 0x38, 0xc9, 0x50, 0xa3, 0x2e, 0xf5, 0x94, - 0xf9, 0x5e, 0x0c, 0x91, 0x24, 0xc9, 0x10, 0xc1, 0x49, 0x86, 0xb3, 0xd4, 0x6b, 0xac, 0x2b, 0x0b, - 0xbd, 0x18, 0x22, 0x49, 0x92, 0x21, 0x82, 0xd9, 0x66, 0x33, 0x0a, 0x9e, 0xea, 0xb6, 0x1e, 0xf9, - 0x7d, 0xb6, 0x18, 0xdd, 0x6c, 0x66, 0x12, 0xb2, 0xcd, 0x66, 0x26, 0x92, 0xfc, 0xf8, 0xae, 0xfd, - 0xe0, 0x95, 0x25, 0xac, 0xf0, 0x46, 0x68, 0x17, 0xec, 0xa6, 0xd4, 0x5c, 0x9f, 0xb6, 0x5b, 0x3f, - 0xfb, 0x4f, 0x07, 0x4e, 0xa3, 0xca, 0x32, 0x56, 0x75, 0x26, 0x38, 0xab, 0xe0, 0xe0, 0xb9, 0x3e, - 0x2d, 0x70, 0x2b, 0x7d, 0x1d, 0x86, 0xf1, 0xa3, 0xaa, 0x96, 0xe9, 0x55, 0xa6, 0x94, 0xf7, 0xa2, - 0x5b, 0x26, 0x09, 0xc5, 0xb6, 0x4c, 0xd2, 0x4f, 0x36, 0x89, 0xe3, 0x4f, 0x3e, 0xc5, 0x54, 0xa6, - 0x14, 0x2d, 0x3a, 0x89, 0x47, 0x90, 0x6c, 0x12, 0x8f, 0x00, 0x82, 0x7a, 0x2b, 0x8e, 0xdd, 0xa9, - 0x4c, 0x29, 0xb5, 0x94, 0x7a, 0x39, 0x2a, 0xa8, 0x97, 0xff, 0x0c, 0xea, 0xad, 0xad, 0x77, 0xbd, - 0x0a, 0xfb, 0xc6, 0x95, 0x94, 0x7a, 0x7d, 0x64, 0x50, 0xaf, 0x0f, 0x60, 0x53, 0x21, 0x02, 0x96, - 0x1d, 0x9b, 0x4d, 0xda, 0xf7, 0xcc, 0x56, 0x4b, 0xb9, 0x1f, 0x9d, 0x0a, 0xe3, 0x78, 0x36, 0x15, - 0xc6, 0x61, 0xcc, 0xf4, 0xe4, 0xad, 0xa2, 0xab, 0xdd, 0xa6, 0xf2, 0x20, 0x6a, 0x7a, 0x86, 0x18, - 0x66, 0x7a, 0x86, 0xbf, 0x70, 0x77, 0xc1, 0x7e, 0x69, 0x74, 0xcd, 0xa1, 0xee, 0xba, 0xf2, 0x30, - 0xb6, 0xbb, 0x90, 0x70, 0xb8, 0xbb, 0x90, 0x7e, 0x93, 0x26, 0x3c, 0x1d, 0x59, 0x68, 0xfc, 0x4b, - 0x9b, 0x1a, 0xd5, 0x9d, 0xc6, 0xba, 0xf2, 0x05, 0x64, 0xf5, 0x7c, 0xea, 0x52, 0x15, 0x25, 0x9d, - 0xeb, 0xd3, 0x7a, 0x71, 0xc2, 0x6d, 0xf9, 0x7b, 0xf3, 0x3c, 0x12, 0xac, 0xb6, 0x3c, 0xed, 0x6f, - 0x42, 0xdf, 0x8f, 0x6d, 0xcb, 0x93, 0x24, 0xb8, 0x2d, 0x4f, 0x82, 0x49, 0x07, 0xae, 0xc4, 0xb6, - 0x6a, 0x0b, 0x7a, 0x8b, 0xed, 0x4b, 0xa8, 0xb1, 0xac, 0x37, 0x1e, 0x51, 0x4f, 0xf9, 0x22, 0xf2, - 0xbe, 0x9a, 0xb1, 0xe1, 0x8b, 0x51, 0xcf, 0xf5, 0x69, 0x3b, 0xf0, 0x23, 0x2a, 0x14, 0x6b, 0xb3, - 0x2b, 0xcb, 0xca, 0x0f, 0x44, 0xcf, 0x37, 0x19, 0x6c, 0xae, 0x4f, 0x43, 0x1c, 0xb3, 0xd2, 0xee, - 0x77, 0x9a, 0x8e, 0x6e, 0x50, 0x6e, 0x68, 0xa1, 0xed, 0x26, 0x0c, 0xd0, 0x1f, 0x8c, 0x5a, 0x69, - 0x59, 0x74, 0xcc, 0x4a, 0xcb, 0xc2, 0x31, 0x45, 0x8d, 0x24, 0x3d, 0x51, 0xbe, 0x14, 0x55, 0xd4, - 0x08, 0x92, 0x29, 0x6a, 0x34, 0x45, 0xca, 0x17, 0xe0, 0x42, 0xb0, 0x9f, 0x17, 0xeb, 0x2f, 0xef, - 0x34, 0xe5, 0xcb, 0xc8, 0xe7, 0x4a, 0xe2, 0x32, 0x20, 0x42, 0x35, 0xd7, 0xa7, 0x65, 0x94, 0x67, - 0x2b, 0x6e, 0x22, 0x9f, 0x97, 0x30, 0x2f, 0x7e, 0x28, 0xba, 0xe2, 0x66, 0x90, 0xb1, 0x15, 0x37, - 0x03, 0x95, 0xca, 0x5c, 0x08, 0x55, 0xdf, 0x81, 0x79, 0x20, 0xd3, 0x2c, 0x0e, 0xa9, 0xcc, 0x85, - 0xa5, 0xb6, 0xba, 0x03, 0xf3, 0xc0, 0x5a, 0xcb, 0xe2, 0x40, 0xae, 0x41, 0xa9, 0x56, 0x5b, 0xd0, - 0xba, 0x96, 0xd2, 0x88, 0x79, 0xcb, 0x22, 0x74, 0xae, 0x4f, 0x13, 0x78, 0x66, 0x06, 0xcd, 0xb4, - 0x74, 0xd7, 0x33, 0x1b, 0x2e, 0x8e, 0x18, 0x7f, 0x84, 0x18, 0x51, 0x33, 0x28, 0x8d, 0x86, 0x99, - 0x41, 0x69, 0x70, 0x66, 0x2f, 0x4e, 0xeb, 0xae, 0xab, 0x5b, 0x86, 0xa3, 0x4f, 0xe1, 0x32, 0x41, - 0x63, 0xaf, 0xb1, 0x22, 0x58, 0x66, 0x2f, 0x46, 0x21, 0x78, 0xf8, 0xee, 0x43, 0x7c, 0x33, 0x67, - 0x2d, 0x76, 0xf8, 0x1e, 0xc3, 0xe3, 0xe1, 0x7b, 0x0c, 0x86, 0x76, 0xa7, 0x0f, 0xd3, 0x68, 0xd3, - 0x64, 0x22, 0x52, 0x9a, 0x31, 0xbb, 0x33, 0x4e, 0x80, 0x76, 0x67, 0x1c, 0x18, 0x69, 0x92, 0xbf, - 0xdc, 0xae, 0x67, 0x34, 0x29, 0x5c, 0x65, 0x13, 0x65, 0xd8, 0xfa, 0x1d, 0x0e, 0x8e, 0xca, 0xa6, - 0xa5, 0xb7, 0xed, 0xca, 0x94, 0x2f, 0x75, 0x33, 0xba, 0x7e, 0x67, 0x12, 0xb2, 0xf5, 0x3b, 0x13, - 0xc9, 0x66, 0x57, 0x7f, 0xa3, 0xb5, 0xae, 0x3b, 0xd4, 0xa8, 0x98, 0x0e, 0x9e, 0x2c, 0x6e, 0xf2, - 0xad, 0xe1, 0x07, 0xd1, 0xd9, 0xb5, 0x07, 0x29, 0x9b, 0x5d, 0x7b, 0xa0, 0x99, 0x91, 0x97, 0x8e, - 0xd6, 0xa8, 0x6e, 0x28, 0x8f, 0xa2, 0x46, 0x5e, 0x36, 0x25, 0x33, 0xf2, 0xb2, 0xb1, 0xd9, 0x9f, - 0xf3, 0xd0, 0x31, 0x3d, 0xaa, 0xb4, 0x76, 0xf3, 0x39, 0x48, 0x9a, 0xfd, 0x39, 0x88, 0x66, 0x1b, - 0xc2, 0x78, 0x87, 0xb4, 0xa3, 0x1b, 0xc2, 0x64, 0x37, 0xc4, 0x4b, 0x30, 0x8b, 0x45, 0x3c, 0xca, - 0x53, 0xac, 0xa8, 0xc5, 0x22, 0xc0, 0xcc, 0x62, 0x09, 0x9f, 0xed, 0x45, 0x9e, 0x62, 0x29, 0x76, - 0x74, 0x0d, 0x95, 0x71, 0x6c, 0x0d, 0x8d, 0x3c, 0xdb, 0x7a, 0x3d, 0xf2, 0xce, 0x40, 0xe9, 0x44, - 0xad, 0x0e, 0x09, 0xc5, 0xac, 0x0e, 0xf9, 0x45, 0xc2, 0x34, 0x9c, 0xc1, 0x5b, 0x70, 0xad, 0x1b, - 0xdc, 0xe3, 0xfc, 0x70, 0xf4, 0x33, 0x63, 0x68, 0xf6, 0x99, 0x31, 0x50, 0x84, 0x89, 0x98, 0xb6, - 0x9c, 0x0c, 0x26, 0xe1, 0xf9, 0x60, 0x0c, 0x44, 0xe6, 0x81, 0xd4, 0xca, 0x0b, 0xf3, 0x55, 0x63, - 0x59, 0xbe, 0x22, 0x73, 0xa3, 0x27, 0xb0, 0x49, 0x8a, 0xb9, 0x3e, 0x2d, 0xa5, 0x1c, 0xf9, 0x00, - 0x2e, 0x0b, 0xa8, 0x78, 0x71, 0x8d, 0x69, 0xff, 0x8d, 0x60, 0x41, 0xf0, 0xa2, 0x7e, 0x6c, 0xbd, - 0x68, 0xe7, 0xfa, 0xb4, 0x9e, 0xbc, 0xb2, 0xeb, 0x12, 0xeb, 0x43, 0x77, 0x37, 0x75, 0x05, 0x8b, - 0x44, 0x4f, 0x5e, 0xd9, 0x75, 0x09, 0xb9, 0x3f, 0xde, 0x4d, 0x5d, 0x41, 0x27, 0xf4, 0xe4, 0x45, - 0x5c, 0x98, 0xec, 0x85, 0x2f, 0xb7, 0x5a, 0xca, 0x06, 0x56, 0xf7, 0xa9, 0xdd, 0x54, 0x57, 0x46, - 0x83, 0x73, 0x27, 0x8e, 0x6c, 0x96, 0x5e, 0xea, 0x50, 0xab, 0x16, 0x59, 0x80, 0x9e, 0x44, 0x67, - 0xe9, 0x04, 0x01, 0x9b, 0xa5, 0x13, 0x40, 0x36, 0xa0, 0xe4, 0xe7, 0x2a, 0xca, 0x66, 0x74, 0x40, - 0xc9, 0x38, 0x36, 0xa0, 0x22, 0x4f, 0x5b, 0x96, 0xe0, 0xec, 0xd2, 0x23, 0x4f, 0xf7, 0x2d, 0x48, - 0x57, 0x74, 0xe5, 0x87, 0xb1, 0x4b, 0xa6, 0x24, 0x09, 0x5e, 0x32, 0x25, 0xc1, 0x6c, 0x8c, 0x30, - 0x70, 0x6d, 0xd3, 0x6a, 0xcc, 0xea, 0x66, 0xab, 0xeb, 0x50, 0xe5, 0xdf, 0x88, 0x8e, 0x91, 0x18, - 0x9a, 0x8d, 0x91, 0x18, 0x88, 0x2d, 0xd0, 0x0c, 0x54, 0x76, 0x5d, 0xb3, 0x69, 0x89, 0x7d, 0x65, - 0xb7, 0xe5, 0x29, 0xff, 0x66, 0x74, 0x81, 0x4e, 0xa3, 0x61, 0x0b, 0x74, 0x1a, 0x1c, 0x4f, 0x9d, - 0x58, 0x2f, 0xb0, 0xc5, 0x43, 0xbe, 0xab, 0xfc, 0xb7, 0x62, 0xa7, 0x4e, 0x29, 0x34, 0x78, 0xea, - 0x94, 0x02, 0x67, 0xeb, 0x23, 0xb7, 0xc9, 0xe6, 0xcd, 0xe0, 0xae, 0xfa, 0xdf, 0x8e, 0xae, 0x8f, - 0x71, 0x3c, 0x5b, 0x1f, 0xe3, 0xb0, 0x28, 0x1f, 0xd1, 0x05, 0xff, 0x4e, 0x16, 0x9f, 0x40, 0xfe, - 0x89, 0x32, 0xe4, 0x8e, 0xcc, 0x47, 0x8c, 0x94, 0x1f, 0xc9, 0x65, 0x31, 0x0a, 0x86, 0x47, 0xa2, - 0x50, 0x94, 0x91, 0x46, 0x1f, 0x9b, 0x74, 0x43, 0xf9, 0x4a, 0x26, 0x23, 0x4e, 0x10, 0x65, 0xc4, - 0x61, 0xe4, 0x7d, 0xb8, 0x10, 0xc2, 0x16, 0x68, 0x7b, 0x35, 0x98, 0x99, 0xfe, 0x44, 0x2e, 0x6a, - 0x06, 0xa7, 0x93, 0x31, 0x33, 0x38, 0x1d, 0x93, 0xc6, 0x5a, 0x88, 0xee, 0xdf, 0xdd, 0x81, 0x75, - 0x20, 0xc1, 0x0c, 0x06, 0x69, 0xac, 0x85, 0x34, 0x7f, 0x74, 0x07, 0xd6, 0x81, 0x4c, 0x33, 0x18, - 0x90, 0x9f, 0xc8, 0xc1, 0xd5, 0x74, 0x54, 0xb9, 0xd5, 0x9a, 0xb5, 0x9d, 0x10, 0xa7, 0xfc, 0xc9, - 0x5c, 0xf4, 0xa0, 0x61, 0x77, 0xc5, 0xe6, 0xfa, 0xb4, 0x5d, 0x56, 0x40, 0x3e, 0x07, 0xa3, 0xe5, - 0xae, 0x61, 0x7a, 0x78, 0xf1, 0xc6, 0x0c, 0xe7, 0x1f, 0xcb, 0xc5, 0xb6, 0x38, 0x32, 0x16, 0xb7, - 0x38, 0x32, 0x80, 0xdc, 0x85, 0x89, 0x1a, 0x6d, 0x74, 0x1d, 0xd3, 0xdb, 0xd4, 0x68, 0xc7, 0x76, - 0x3c, 0xc6, 0xe3, 0x4f, 0xe5, 0xa2, 0x93, 0x58, 0x82, 0x82, 0x4d, 0x62, 0x09, 0x20, 0x79, 0x90, - 0xb8, 0x95, 0x17, 0x9d, 0xf9, 0xe3, 0xb9, 0x9e, 0xd7, 0xf2, 0x41, 0x5f, 0xa6, 0x17, 0x27, 0xcb, - 0xb1, 0x5b, 0x74, 0xc1, 0xf5, 0x27, 0x72, 0x3d, 0xae, 0xd1, 0xa5, 0x19, 0x2e, 0x09, 0x66, 0x1c, - 0x53, 0x32, 0xc0, 0x2b, 0x7f, 0x3a, 0xd7, 0xe3, 0xda, 0x3b, 0xe4, 0x98, 0x96, 0x3c, 0xfe, 0x55, - 0xee, 0x29, 0x22, 0x18, 0xfd, 0x64, 0x2e, 0xe9, 0x2a, 0x12, 0x94, 0x97, 0x08, 0x59, 0xb1, 0xfb, - 0x6e, 0xa0, 0xf4, 0x5f, 0xcd, 0x25, 0x7d, 0xf3, 0xc2, 0x62, 0xe1, 0x2f, 0x42, 0xe1, 0xd2, 0xcc, - 0x13, 0x8f, 0x3a, 0x96, 0xde, 0xc2, 0xee, 0xac, 0x79, 0xb6, 0xa3, 0x37, 0xe9, 0x8c, 0xa5, 0xaf, - 0xb6, 0xa8, 0xf2, 0xb5, 0x5c, 0xd4, 0x82, 0xcd, 0x26, 0x65, 0x16, 0x6c, 0x36, 0x96, 0xac, 0xc3, - 0xd3, 0x69, 0xd8, 0x8a, 0xe9, 0x62, 0x3d, 0x5f, 0xcf, 0x45, 0x4d, 0xd8, 0x1e, 0xb4, 0xcc, 0x84, - 0xed, 0x81, 0x26, 0xb7, 0x60, 0x68, 0xca, 0xf6, 0xa7, 0xdf, 0x3f, 0x13, 0x73, 0x86, 0x0c, 0x30, - 0x73, 0x7d, 0x5a, 0x48, 0x26, 0xca, 0x88, 0x41, 0xfd, 0x8d, 0x64, 0x99, 0xf0, 0xf2, 0x29, 0xf8, - 0x21, 0xca, 0x08, 0x71, 0xff, 0x7b, 0xc9, 0x32, 0xe1, 0x1d, 0x57, 0xf0, 0x83, 0xcd, 0x24, 0xbc, - 0xc6, 0x85, 0xd9, 0x32, 0xb3, 0xdb, 0xa6, 0xd7, 0xf5, 0x56, 0x8b, 0x5a, 0x4d, 0xaa, 0x7c, 0x33, - 0x36, 0x93, 0xa4, 0x93, 0xb1, 0x99, 0x24, 0x1d, 0x43, 0x7e, 0x10, 0x2e, 0x3e, 0xd0, 0x5b, 0xa6, - 0x11, 0xe2, 0xfc, 0x7c, 0xe0, 0xca, 0x4f, 0xe5, 0xa2, 0xbb, 0xe9, 0x0c, 0x3a, 0xb6, 0x9b, 0xce, - 0x40, 0x91, 0x05, 0x20, 0xb8, 0x8c, 0x06, 0xb3, 0x05, 0x5b, 0x9f, 0x95, 0x7f, 0x3f, 0x17, 0xb5, - 0x53, 0x93, 0x24, 0xcc, 0x4e, 0x4d, 0x42, 0x49, 0x3d, 0x3b, 0x35, 0x88, 0xf2, 0xd3, 0xb9, 0xe8, - 0x69, 0x4d, 0x16, 0xe1, 0x5c, 0x9f, 0x96, 0x9d, 0x5f, 0xe4, 0x0e, 0x8c, 0xd7, 0x96, 0xab, 0xb3, - 0xb3, 0x33, 0xb5, 0x07, 0xd5, 0x0a, 0x3e, 0x74, 0x30, 0x94, 0x3f, 0x1b, 0x5b, 0xb1, 0xe2, 0x04, - 0x6c, 0xc5, 0x8a, 0xc3, 0xc8, 0x5b, 0x30, 0xc2, 0xda, 0xcf, 0x06, 0x0c, 0x7e, 0xf2, 0xcf, 0xe4, - 0xa2, 0xe6, 0x94, 0x8c, 0x64, 0xe6, 0x94, 0xfc, 0x9b, 0xd4, 0xe0, 0x1c, 0x93, 0xe2, 0xb2, 0x43, - 0xd7, 0xa8, 0x43, 0xad, 0x86, 0x3f, 0xa6, 0x7f, 0x36, 0x17, 0xb5, 0x32, 0xd2, 0x88, 0x98, 0x95, - 0x91, 0x06, 0x27, 0x8f, 0xe0, 0x72, 0xfc, 0x24, 0x48, 0x7e, 0x76, 0xaa, 0xfc, 0xb9, 0x5c, 0xcc, - 0x18, 0xee, 0x41, 0x8c, 0xc6, 0x70, 0x0f, 0x3c, 0xb1, 0xe0, 0x19, 0x71, 0xac, 0x22, 0x1c, 0x2e, - 0xe3, 0xb5, 0xfd, 0x79, 0x5e, 0xdb, 0x27, 0x43, 0x87, 0xc0, 0x1e, 0xd4, 0x73, 0x7d, 0x5a, 0x6f, - 0x76, 0x4c, 0xcf, 0x92, 0x09, 0x30, 0x94, 0x9f, 0xcb, 0xa5, 0x7b, 0xa4, 0x44, 0xdc, 0x94, 0xd3, - 0x32, 0x67, 0xbc, 0x9f, 0x95, 0xbe, 0x41, 0xf9, 0x0b, 0xb1, 0xf1, 0x96, 0x4e, 0xc6, 0xc6, 0x5b, - 0x46, 0xfe, 0x87, 0xbb, 0x30, 0xc1, 0x95, 0x7a, 0x59, 0xc7, 0x61, 0x68, 0x35, 0xa9, 0xa1, 0xfc, - 0xc5, 0xd8, 0x6a, 0x97, 0xa0, 0x40, 0xd7, 0x9e, 0x38, 0x90, 0x4d, 0xdd, 0xb5, 0x8e, 0x6e, 0x59, - 0x78, 0xcc, 0xaa, 0xfc, 0x07, 0xb1, 0xa9, 0x3b, 0x44, 0xa1, 0xe3, 0x6e, 0xf0, 0x8b, 0x69, 0x42, - 0xaf, 0xd4, 0x47, 0xca, 0x5f, 0x8a, 0x69, 0x42, 0x2f, 0x62, 0xa6, 0x09, 0x3d, 0xf3, 0x28, 0x3d, - 0xc8, 0x78, 0x02, 0xae, 0xfc, 0x7c, 0x6c, 0x45, 0x4e, 0xa5, 0x62, 0x2b, 0x72, 0xfa, 0x0b, 0xf2, - 0x07, 0x19, 0xcf, 0xa7, 0x95, 0x5f, 0xe8, 0xcd, 0x37, 0x5c, 0xe9, 0xd3, 0x5f, 0x5f, 0x3f, 0xc8, - 0x78, 0x7a, 0xac, 0xfc, 0xe5, 0xde, 0x7c, 0x43, 0xc7, 0xbe, 0xf4, 0x97, 0xcb, 0xf5, 0xec, 0x67, - 0xbb, 0xca, 0x5f, 0x89, 0x4f, 0x5d, 0x19, 0x84, 0x38, 0x75, 0x65, 0xbd, 0xfd, 0x5d, 0x85, 0xa7, - 0xb8, 0x86, 0xdc, 0x71, 0xf4, 0xce, 0x7a, 0x8d, 0x7a, 0x9e, 0x69, 0x35, 0xfd, 0x9d, 0xd8, 0x5f, - 0xcd, 0xc5, 0x8e, 0xc7, 0xb2, 0x28, 0xf1, 0x78, 0x2c, 0x0b, 0xc9, 0x94, 0x37, 0xf1, 0x40, 0x57, - 0xf9, 0x6b, 0x31, 0xe5, 0x4d, 0x50, 0x30, 0xe5, 0x4d, 0xbe, 0xeb, 0xbd, 0x9b, 0xf2, 0x0e, 0x55, - 0xf9, 0x0f, 0xb3, 0x79, 0x05, 0xed, 0x4b, 0x79, 0xbe, 0x7a, 0x37, 0xe5, 0xb9, 0xa5, 0xf2, 0x1f, - 0x65, 0xf3, 0x0a, 0x7d, 0x90, 0x92, 0xaf, 0x34, 0xdf, 0x87, 0x0b, 0x7c, 0x36, 0x9f, 0xa5, 0x06, - 0x8d, 0x7c, 0xe8, 0x2f, 0xc6, 0xc6, 0x7e, 0x3a, 0x19, 0x1e, 0xb9, 0xa7, 0x62, 0xd2, 0x58, 0x8b, - 0xb6, 0xfe, 0xf5, 0x1d, 0x58, 0x87, 0x1b, 0x82, 0x74, 0x0c, 0x5b, 0x6f, 0xe4, 0xc7, 0x6f, 0xca, - 0x2f, 0xc5, 0xd6, 0x1b, 0x19, 0x89, 0xee, 0x1c, 0xf2, 0x4b, 0xb9, 0xb7, 0xa2, 0x0f, 0xbd, 0x94, - 0xff, 0x38, 0xb5, 0x70, 0xd0, 0x01, 0xd1, 0x57, 0x61, 0x6f, 0x45, 0x1f, 0x35, 0x29, 0xbf, 0x9c, - 0x5a, 0x38, 0xf8, 0x80, 0xe8, 0x0b, 0x28, 0xb6, 0x45, 0xea, 0x7a, 0x36, 0x67, 0x15, 0x99, 0x1e, - 0xfe, 0x46, 0x7c, 0x8b, 0x94, 0x4a, 0x86, 0x5b, 0xa4, 0x54, 0x4c, 0x1a, 0x6b, 0xf1, 0x79, 0xbf, - 0xb2, 0x03, 0x6b, 0x69, 0x63, 0x97, 0x8a, 0x49, 0x63, 0x2d, 0x3e, 0xfe, 0x57, 0x77, 0x60, 0x2d, - 0x6d, 0xec, 0x52, 0x31, 0xcc, 0x1c, 0x0b, 0x31, 0x0f, 0xa8, 0xe3, 0x86, 0xea, 0xf7, 0x37, 0x63, - 0xe6, 0x58, 0x06, 0x1d, 0x33, 0xc7, 0x32, 0x50, 0xa9, 0xdc, 0x85, 0x50, 0x7e, 0x6d, 0x27, 0xee, - 0xe1, 0xbd, 0x4c, 0x06, 0x2a, 0x95, 0xbb, 0x90, 0xcb, 0xdf, 0xda, 0x89, 0x7b, 0x78, 0x31, 0x93, - 0x81, 0x62, 0x46, 0x51, 0xcd, 0xd3, 0x3d, 0xb3, 0x31, 0x67, 0xbb, 0x9e, 0xb4, 0xc8, 0xff, 0xed, - 0x98, 0x51, 0x94, 0x46, 0xc4, 0x8c, 0xa2, 0x34, 0x78, 0x92, 0xa9, 0x90, 0xc6, 0xaf, 0xf7, 0x64, - 0x1a, 0x5a, 0x5a, 0x69, 0xf0, 0x24, 0x53, 0x21, 0x84, 0xff, 0xa4, 0x27, 0xd3, 0xd0, 0x53, 0x3e, - 0x0d, 0xce, 0x2c, 0xd3, 0x69, 0xc7, 0xde, 0xb0, 0xee, 0xd2, 0x0d, 0xda, 0x12, 0x9f, 0xfe, 0x1b, - 0x31, 0xcb, 0x34, 0x4e, 0x80, 0xb7, 0x28, 0x31, 0x58, 0x94, 0x91, 0xf8, 0xdc, 0xdf, 0xcc, 0x64, - 0x14, 0x1e, 0x13, 0xc5, 0x61, 0x51, 0x46, 0xe2, 0x13, 0x7f, 0x2b, 0x93, 0x51, 0x78, 0x4c, 0x14, - 0x87, 0xe1, 0xca, 0x15, 0x74, 0x7a, 0xb9, 0x49, 0x2d, 0x6f, 0xb9, 0xa5, 0xfb, 0x5a, 0xff, 0xad, - 0xf8, 0xca, 0x95, 0x45, 0x89, 0x2b, 0x57, 0x16, 0x32, 0xa3, 0x0e, 0xf1, 0xf9, 0xbf, 0xbd, 0x73, - 0x1d, 0xd2, 0xea, 0x98, 0x85, 0xcc, 0xa8, 0x43, 0x48, 0xe6, 0x77, 0x76, 0xae, 0x23, 0x10, 0x51, - 0x36, 0x9b, 0xa9, 0x01, 0xe8, 0xc7, 0x33, 0x57, 0xf5, 0xe7, 0x73, 0x30, 0x52, 0xf3, 0x1c, 0xaa, - 0xb7, 0x45, 0x64, 0xb8, 0x4b, 0x30, 0xc8, 0x9d, 0x97, 0xfd, 0x97, 0xd6, 0x5a, 0xf0, 0x9b, 0x5c, - 0x85, 0xb1, 0x79, 0xdd, 0xf5, 0xb0, 0x64, 0xd5, 0x32, 0xe8, 0x13, 0x7c, 0xb8, 0x57, 0xd0, 0x62, - 0x50, 0x32, 0xcf, 0xe9, 0x78, 0x39, 0x0c, 0x06, 0x5a, 0xd8, 0x31, 0x20, 0xda, 0xe0, 0x77, 0xb6, - 0x26, 0xfb, 0x30, 0xfe, 0x59, 0xac, 0xac, 0xfa, 0x7b, 0x39, 0x48, 0xb8, 0x55, 0xef, 0x3f, 0x02, - 0xc2, 0x12, 0x9c, 0x89, 0x05, 0xa0, 0x15, 0xaf, 0x0f, 0x77, 0x19, 0x9f, 0x36, 0x5e, 0x9a, 0x7c, - 0x2a, 0x78, 0xf5, 0x76, 0x5f, 0x9b, 0x17, 0xc1, 0xee, 0x30, 0x4d, 0x43, 0xd7, 0x69, 0x69, 0x12, - 0x4a, 0x04, 0x33, 0xfa, 0xde, 0x78, 0x18, 0x5d, 0x93, 0x5c, 0x15, 0xe1, 0x18, 0x72, 0x61, 0x88, - 0xbc, 0x58, 0x52, 0x78, 0x1e, 0x7e, 0xe1, 0x73, 0x30, 0x52, 0x6d, 0x77, 0xa8, 0xe3, 0xda, 0x96, - 0xee, 0xd9, 0x8e, 0x78, 0xcd, 0x8e, 0xe1, 0xd3, 0x4c, 0x09, 0x2e, 0x87, 0xf4, 0x92, 0xe9, 0xc9, - 0x75, 0x3f, 0xd3, 0x5c, 0x01, 0xe3, 0x9a, 0xe2, 0x93, 0xd4, 0x78, 0xa2, 0x71, 0x4e, 0xc1, 0x48, - 0xef, 0xbb, 0x3a, 0xbe, 0x8f, 0x0c, 0x48, 0xbb, 0x0c, 0x20, 0x93, 0x22, 0x05, 0x79, 0x11, 0x4a, - 0x78, 0x9f, 0xe4, 0x62, 0x06, 0x49, 0x11, 0xb8, 0xaf, 0x85, 0x10, 0x39, 0x4c, 0x1a, 0xa7, 0x21, - 0xf7, 0x60, 0x3c, 0xbc, 0x2c, 0xbf, 0xe3, 0xd8, 0xdd, 0x8e, 0x9f, 0x33, 0x06, 0x13, 0xb4, 0x3f, - 0x0a, 0x70, 0xf5, 0x26, 0x22, 0x25, 0x16, 0x89, 0x82, 0x64, 0x0e, 0xce, 0x84, 0x30, 0x26, 0x22, - 0x3f, 0x57, 0x15, 0xe6, 0x09, 0x95, 0x78, 0x31, 0x71, 0x46, 0xf2, 0x84, 0xc6, 0x8a, 0x91, 0x2a, - 0x0c, 0xf8, 0x51, 0xfb, 0x06, 0x77, 0x54, 0xd2, 0xb3, 0x22, 0x6a, 0xdf, 0x80, 0x1c, 0xaf, 0xcf, - 0x2f, 0x4f, 0x66, 0x61, 0x4c, 0xb3, 0xbb, 0x1e, 0x5d, 0xb1, 0xc5, 0x2e, 0x53, 0x44, 0x87, 0xc4, - 0x36, 0x39, 0x0c, 0x53, 0xf7, 0x6c, 0x3f, 0xbf, 0xbd, 0x9c, 0x67, 0x3d, 0x5a, 0x8a, 0x2c, 0xc2, - 0x44, 0xc2, 0xad, 0x40, 0xce, 0x3a, 0x2f, 0x7d, 0x5e, 0x92, 0x59, 0xb2, 0x28, 0xf9, 0xb1, 0x1c, - 0x94, 0x56, 0x1c, 0xdd, 0xf4, 0x5c, 0xf1, 0xb4, 0xf2, 0xfc, 0x8d, 0x0d, 0x47, 0xef, 0x30, 0xfd, - 0xb8, 0x81, 0x81, 0x6b, 0x1f, 0xe8, 0xad, 0x2e, 0x75, 0xa7, 0x1e, 0xb2, 0xaf, 0xfb, 0xef, 0xb7, - 0x26, 0xdf, 0x6a, 0xe2, 0xe1, 0xe5, 0x8d, 0x86, 0xdd, 0xbe, 0xd9, 0x74, 0xf4, 0xc7, 0xa6, 0x87, - 0x26, 0xa2, 0xde, 0xba, 0xe9, 0xd1, 0x16, 0x9e, 0x91, 0xde, 0xd4, 0x3b, 0xe6, 0x4d, 0x0c, 0x90, - 0x7e, 0x33, 0xe0, 0xc4, 0x6b, 0x60, 0x2a, 0xe0, 0xe1, 0x5f, 0xb2, 0x0a, 0x70, 0x1c, 0x59, 0x04, - 0x10, 0x9f, 0x5a, 0xee, 0x74, 0xc4, 0x3b, 0x4d, 0xe9, 0x64, 0xd1, 0xc7, 0x70, 0xc5, 0x0e, 0x04, - 0xa6, 0x77, 0xa4, 0xa0, 0xc0, 0x9a, 0xc4, 0x81, 0x69, 0xc1, 0x8a, 0x68, 0x91, 0x2f, 0xa6, 0xd1, - 0x50, 0xe2, 0x7e, 0x63, 0x53, 0x84, 0x14, 0x2f, 0x46, 0x56, 0xe1, 0x8c, 0xe0, 0x1b, 0xa4, 0x10, - 0x19, 0x8b, 0xce, 0x0a, 0x31, 0x34, 0x57, 0xda, 0xa0, 0x8d, 0x86, 0x00, 0xcb, 0x75, 0xc4, 0x4a, - 0x90, 0xa9, 0x30, 0xe5, 0xf1, 0xa2, 0xde, 0xa6, 0xae, 0x72, 0x06, 0x35, 0xf6, 0xf2, 0xf6, 0xd6, - 0xa4, 0xe2, 0x97, 0xc7, 0x00, 0x96, 0xa9, 0xe9, 0xff, 0xb1, 0x88, 0xcc, 0x83, 0x6b, 0xfd, 0x78, - 0x0a, 0x8f, 0xb8, 0xce, 0x47, 0x8b, 0x90, 0x69, 0x18, 0x0d, 0x9e, 0x89, 0xdc, 0xbf, 0x5f, 0xad, - 0xe0, 0x43, 0x50, 0x11, 0xc3, 0x34, 0x96, 0xe4, 0x43, 0x66, 0x12, 0x29, 0x23, 0xc5, 0xd6, 0xe0, - 0x2f, 0x43, 0x63, 0xb1, 0x35, 0x3a, 0x29, 0xb1, 0x35, 0x96, 0xc9, 0x3b, 0x30, 0x5c, 0x7e, 0x58, - 0x13, 0x31, 0x43, 0x5c, 0xe5, 0x6c, 0x98, 0x31, 0x4a, 0xdf, 0x70, 0xeb, 0x7e, 0x7c, 0x11, 0xb9, - 0xe9, 0x32, 0x3d, 0x99, 0x81, 0xb1, 0x88, 0xa7, 0x99, 0xab, 0x9c, 0x43, 0x0e, 0xd8, 0x72, 0x1d, - 0x31, 0x75, 0x47, 0xa0, 0xe4, 0xe1, 0x15, 0x2d, 0xc4, 0xb4, 0xa6, 0x62, 0xba, 0x98, 0x7d, 0x47, - 0xa3, 0x18, 0x9e, 0x04, 0x9f, 0x95, 0x0e, 0x72, 0xad, 0x31, 0x04, 0xaa, 0xee, 0x70, 0x9c, 0xdc, - 0xa3, 0xb1, 0x62, 0xe4, 0x03, 0x20, 0x98, 0xaf, 0x87, 0x1a, 0xfe, 0xc5, 0x63, 0xb5, 0xe2, 0x2a, - 0x17, 0x30, 0x80, 0x37, 0x89, 0x87, 0x43, 0xa8, 0x56, 0xa6, 0xae, 0x8a, 0xe9, 0xe3, 0x8a, 0xce, - 0x4b, 0xd5, 0xfd, 0x50, 0x08, 0x75, 0x33, 0x92, 0xcc, 0x38, 0x85, 0x2b, 0xd9, 0x80, 0x8b, 0xcb, - 0x0e, 0x7d, 0x6c, 0xda, 0x5d, 0xd7, 0x5f, 0x3e, 0xfc, 0x79, 0xeb, 0xe2, 0x8e, 0xf3, 0xd6, 0x73, - 0xa2, 0xe2, 0xf3, 0x1d, 0x87, 0x3e, 0xae, 0xfb, 0x61, 0x9b, 0x23, 0x51, 0x47, 0xb3, 0xb8, 0x63, - 0x4a, 0xe6, 0x0f, 0xbb, 0x0e, 0x15, 0x70, 0x93, 0xba, 0x8a, 0x12, 0x4e, 0xb5, 0x3c, 0xd2, 0x8c, - 0x19, 0xe0, 0x22, 0x29, 0x99, 0xa3, 0xc5, 0x88, 0x06, 0xe4, 0xce, 0xb4, 0x7f, 0x09, 0x5d, 0x6e, - 0xf0, 0xc4, 0xb5, 0xca, 0x53, 0xc8, 0x4c, 0x65, 0x62, 0x69, 0x36, 0x82, 0x10, 0xee, 0x75, 0x5d, - 0xe0, 0x65, 0xb1, 0x24, 0x4b, 0x93, 0x79, 0x18, 0x5f, 0x76, 0xf0, 0x48, 0xec, 0x1e, 0xdd, 0x5c, - 0xb6, 0x5b, 0x66, 0x63, 0x13, 0x5f, 0xb7, 0x8a, 0xa9, 0xb2, 0xc3, 0x71, 0xf5, 0x47, 0x74, 0xb3, - 0xde, 0x41, 0xac, 0xbc, 0xac, 0xc4, 0x4b, 0xca, 0x21, 0x95, 0x9f, 0xde, 0x5d, 0x48, 0x65, 0x0a, - 0xe3, 0xe2, 0x0a, 0xfb, 0x89, 0x47, 0x2d, 0xb6, 0xd4, 0xbb, 0xe2, 0x25, 0xab, 0x12, 0xbb, 0xf2, - 0x0e, 0xf0, 0x7c, 0xea, 0x10, 0xa3, 0x8c, 0x06, 0x60, 0xb9, 0x61, 0xf1, 0x22, 0xc9, 0xb8, 0xc3, - 0xcf, 0xec, 0x23, 0xee, 0xf0, 0xdf, 0x2e, 0xc8, 0xf3, 0x2f, 0xb9, 0x0c, 0x45, 0x29, 0x2d, 0x10, - 0x06, 0x55, 0xc5, 0x10, 0xea, 0x45, 0x11, 0x2b, 0x7a, 0x48, 0xd8, 0x2e, 0x41, 0xf4, 0x1c, 0xcc, - 0x03, 0x19, 0x06, 0xda, 0xd4, 0x42, 0x02, 0xcc, 0xc1, 0xd7, 0x5d, 0x6d, 0x99, 0x0d, 0x0c, 0xac, - 0x5f, 0x90, 0xc2, 0x65, 0x20, 0x94, 0xc7, 0xd5, 0x97, 0x48, 0xc8, 0x2d, 0x18, 0xf6, 0x8f, 0x62, - 0xc3, 0xa0, 0xc2, 0x18, 0x6f, 0x5d, 0xcc, 0xd6, 0x22, 0x9c, 0xbb, 0x44, 0x44, 0xde, 0x04, 0x08, - 0xa7, 0x03, 0x61, 0x69, 0xe1, 0x52, 0x21, 0xcf, 0x1e, 0xf2, 0x52, 0x11, 0x52, 0xb3, 0x89, 0x53, - 0x56, 0x47, 0x3f, 0xeb, 0x28, 0x4e, 0x9c, 0x11, 0x1d, 0x96, 0x15, 0x24, 0x5a, 0x84, 0x2c, 0xc1, - 0x44, 0x42, 0x03, 0x45, 0x08, 0x62, 0xcc, 0x3c, 0x9f, 0xa2, 0xbe, 0xf2, 0xc2, 0x9c, 0x28, 0x4b, - 0x9e, 0x87, 0xc2, 0x7d, 0xad, 0x2a, 0xc2, 0xa0, 0xf2, 0x08, 0xba, 0x91, 0x18, 0x49, 0x0c, 0xab, - 0xfe, 0x89, 0x7c, 0x62, 0x6d, 0x62, 0xd2, 0x13, 0xac, 0xa4, 0x1e, 0x44, 0xe9, 0xf9, 0xf5, 0x73, - 0xe9, 0x49, 0x44, 0xe4, 0x1a, 0x0c, 0x2e, 0xb3, 0x99, 0xa1, 0x61, 0xb7, 0x44, 0x7f, 0x62, 0x40, - 0xab, 0x8e, 0x80, 0x69, 0x01, 0x96, 0xdc, 0x92, 0x92, 0xe5, 0x4a, 0x91, 0xc5, 0xfd, 0x64, 0xb9, - 0xf1, 0x10, 0xdb, 0x98, 0x36, 0xf7, 0x56, 0x2c, 0xf9, 0x96, 0x28, 0x93, 0xb2, 0x2e, 0x86, 0xc9, - 0xb6, 0x02, 0xab, 0xb4, 0x7f, 0x27, 0xab, 0x54, 0xfd, 0x3b, 0xb9, 0xe4, 0x38, 0x23, 0xb7, 0x93, - 0x41, 0x7e, 0x71, 0x11, 0x0a, 0x80, 0x72, 0xad, 0x41, 0xb8, 0xdf, 0x48, 0xb8, 0xde, 0xfc, 0xbe, - 0xc3, 0xf5, 0x16, 0xf6, 0x18, 0xae, 0x57, 0xfd, 0x7f, 0x8a, 0x3d, 0x5d, 0xae, 0x8f, 0x24, 0xac, - 0xdb, 0x1b, 0x6c, 0x67, 0xc5, 0x6a, 0x2f, 0xbb, 0x89, 0xfd, 0x01, 0xf7, 0x28, 0xad, 0xeb, 0x7c, - 0x68, 0xb9, 0x5a, 0x94, 0x92, 0xbc, 0x0b, 0x23, 0xfe, 0x07, 0x60, 0x18, 0x68, 0x29, 0x7c, 0x71, - 0xb0, 0xaa, 0xc5, 0x02, 0x26, 0x47, 0x0a, 0x90, 0x57, 0x61, 0x08, 0x6d, 0x9a, 0x8e, 0xde, 0xf0, - 0x63, 0x84, 0xf3, 0xa0, 0xe2, 0x3e, 0x50, 0x0e, 0x5d, 0x16, 0x50, 0x92, 0x2f, 0x41, 0x49, 0x24, - 0xca, 0xe0, 0x79, 0xe4, 0x6f, 0xee, 0xc2, 0x47, 0xfd, 0x86, 0x9c, 0x24, 0x83, 0xef, 0x52, 0x10, - 0x10, 0xd9, 0xa5, 0xf0, 0xfc, 0x18, 0x2b, 0x70, 0x76, 0xd9, 0xa1, 0x06, 0xbe, 0x86, 0x98, 0x79, - 0xd2, 0x71, 0x44, 0x0a, 0x13, 0x3e, 0xca, 0x71, 0x91, 0xea, 0xf8, 0x68, 0xb6, 0x7c, 0x0a, 0xbc, - 0x1c, 0xa8, 0x38, 0xa5, 0x38, 0xb3, 0x5c, 0x78, 0x4b, 0xee, 0xd1, 0xcd, 0x0d, 0xdb, 0x31, 0x78, - 0x96, 0x0f, 0x31, 0x7f, 0x0b, 0x41, 0x3f, 0x12, 0x28, 0xd9, 0x72, 0x89, 0x16, 0xba, 0xf4, 0x06, - 0x0c, 0xef, 0x37, 0xd1, 0xc4, 0xaf, 0xe5, 0x33, 0x1e, 0x2f, 0x9d, 0xdc, 0x5c, 0x7f, 0x41, 0x02, - 0xea, 0xfe, 0x8c, 0x04, 0xd4, 0x7f, 0x94, 0xcf, 0x78, 0x99, 0x75, 0xa2, 0x13, 0xc5, 0x06, 0xc2, - 0x88, 0x26, 0x8a, 0x0d, 0x73, 0xf4, 0x9a, 0x86, 0x26, 0x13, 0xc5, 0x52, 0x4a, 0x97, 0x76, 0x4c, - 0x29, 0xfd, 0x8b, 0x85, 0x5e, 0x2f, 0xd7, 0x4e, 0x65, 0xbf, 0x17, 0xd9, 0xdf, 0x82, 0xe1, 0x40, - 0xb2, 0xd5, 0x0a, 0x1a, 0x3d, 0xa3, 0x41, 0x5a, 0x1b, 0x0e, 0xc6, 0x32, 0x12, 0x11, 0xb9, 0xce, - 0xdb, 0x5a, 0x33, 0x3f, 0xe4, 0x09, 0x16, 0x46, 0x45, 0xe8, 0x7c, 0xdd, 0xd3, 0xeb, 0xae, 0xf9, - 0x21, 0xd5, 0x02, 0xb4, 0xfa, 0xf7, 0xf2, 0xa9, 0xcf, 0xff, 0x4e, 0xfb, 0x68, 0x0f, 0x7d, 0x94, - 0x22, 0x44, 0xfe, 0x70, 0xf1, 0x54, 0x88, 0x7b, 0x10, 0xe2, 0x1f, 0xe6, 0x53, 0x9f, 0x79, 0x9e, - 0x0a, 0x71, 0x2f, 0xb3, 0xc5, 0x8b, 0x30, 0xa4, 0xd9, 0x1b, 0xee, 0x34, 0x6e, 0x6c, 0xf8, 0x5c, - 0x81, 0x13, 0xb5, 0x63, 0x6f, 0xb8, 0x75, 0xdc, 0xb2, 0x68, 0x21, 0x81, 0xfa, 0xbd, 0x7c, 0x8f, - 0x87, 0xb0, 0xa7, 0x82, 0xff, 0x28, 0x97, 0xc8, 0xdf, 0xcc, 0x47, 0x1e, 0xda, 0x9e, 0x5c, 0x61, - 0xdf, 0x04, 0xa8, 0x35, 0xd6, 0x69, 0x5b, 0x97, 0x92, 0x54, 0xe1, 0xb9, 0x83, 0x8b, 0x50, 0x91, - 0xdc, 0x38, 0x24, 0x51, 0xbf, 0x95, 0x8f, 0xbd, 0x34, 0x3e, 0x95, 0xdd, 0xae, 0x65, 0x17, 0x68, - 0x9d, 0x78, 0x3c, 0x7d, 0x2a, 0xb9, 0xdd, 0x4a, 0xee, 0xc7, 0xf3, 0xb1, 0x77, 0xe6, 0x27, 0x56, - 0x76, 0x6c, 0x00, 0x26, 0xdf, 0xbf, 0x9f, 0x58, 0x4d, 0x7a, 0x11, 0x86, 0x84, 0x1c, 0x82, 0xa5, - 0x82, 0xcf, 0xfb, 0x1c, 0x88, 0xa7, 0xac, 0x01, 0x81, 0xfa, 0x27, 0xf3, 0x10, 0x7d, 0xff, 0x7f, - 0x42, 0x75, 0xe8, 0x37, 0xf3, 0xd1, 0xc8, 0x07, 0x27, 0x57, 0x7f, 0x6e, 0x00, 0xd4, 0xba, 0xab, - 0x0d, 0x11, 0x38, 0xb7, 0x5f, 0x3a, 0xa6, 0x0f, 0xa0, 0x9a, 0x44, 0xa1, 0xfe, 0xbf, 0xf9, 0xd4, - 0x70, 0x0c, 0x27, 0x57, 0x80, 0xaf, 0xe0, 0xa9, 0x78, 0xc3, 0x0a, 0x27, 0x72, 0x3c, 0x84, 0x64, - 0xe3, 0x2f, 0x91, 0xd9, 0xd0, 0x27, 0x24, 0x9f, 0x4d, 0x31, 0xd7, 0x30, 0xef, 0x42, 0x68, 0xae, - 0xc9, 0xd7, 0x10, 0x92, 0xe1, 0xf6, 0x0f, 0xf2, 0x3b, 0x45, 0xaf, 0x38, 0xc9, 0xab, 0xea, 0xc0, - 0xb2, 0xbe, 0x89, 0x51, 0x16, 0x59, 0x4f, 0x8c, 0xf0, 0xbc, 0x7b, 0x1d, 0x0e, 0x92, 0xef, 0xde, - 0x04, 0x95, 0xfa, 0x2f, 0xfa, 0xd3, 0x43, 0x27, 0x9c, 0x5c, 0x11, 0x5e, 0x86, 0xe2, 0xb2, 0xee, - 0xad, 0x0b, 0x4d, 0xc6, 0x2b, 0xbd, 0x8e, 0xee, 0xad, 0x6b, 0x08, 0x25, 0xd7, 0x61, 0x50, 0xd3, - 0x37, 0xf8, 0x99, 0x67, 0x29, 0xcc, 0x89, 0xe8, 0xe8, 0x1b, 0x75, 0x7e, 0xee, 0x19, 0xa0, 0x89, - 0x1a, 0xe4, 0xe4, 0xe4, 0x27, 0xdf, 0x98, 0x10, 0x8e, 0xe7, 0xe4, 0x0c, 0x32, 0x71, 0x5e, 0x86, - 0xe2, 0x94, 0x6d, 0x6c, 0xe2, 0xf5, 0xd5, 0x08, 0xaf, 0x6c, 0xd5, 0x36, 0x36, 0x35, 0x84, 0x92, - 0x9f, 0xc8, 0xc1, 0xc0, 0x1c, 0xd5, 0x0d, 0x36, 0x42, 0x86, 0x7a, 0x79, 0x9d, 0x7c, 0xe1, 0x70, - 0xbc, 0x4e, 0x26, 0xd6, 0x79, 0x65, 0xb2, 0xa2, 0x88, 0xfa, 0xc9, 0x1d, 0x18, 0x9c, 0xd6, 0x3d, - 0xda, 0xb4, 0x9d, 0x4d, 0xf4, 0xa3, 0x19, 0x0b, 0xdd, 0xef, 0x23, 0xfa, 0xe3, 0x13, 0xf1, 0x9b, - 0xb1, 0x86, 0xf8, 0xa5, 0x05, 0x85, 0x99, 0x58, 0x78, 0xca, 0x7f, 0x91, 0x7f, 0x1a, 0xc5, 0xe2, - 0x21, 0x44, 0x13, 0x98, 0xf0, 0x58, 0x79, 0x24, 0xfd, 0x58, 0x19, 0xad, 0x47, 0xf4, 0xb5, 0xc3, - 0x4c, 0x98, 0xa3, 0xb8, 0xe8, 0x73, 0xeb, 0x11, 0xa1, 0x98, 0x08, 0x53, 0x93, 0x48, 0xd4, 0xef, - 0xf6, 0x43, 0xea, 0x43, 0xeb, 0x53, 0x25, 0x3f, 0x55, 0xf2, 0x50, 0xc9, 0x2b, 0x09, 0x25, 0xbf, - 0x94, 0x7c, 0xba, 0xff, 0x31, 0xd5, 0xf0, 0x9f, 0x29, 0x26, 0x02, 0x7f, 0x9c, 0xec, 0xdd, 0x65, - 0x28, 0xbd, 0xfe, 0x1d, 0xa5, 0x17, 0x0c, 0x88, 0xd2, 0x8e, 0x03, 0x62, 0x60, 0xb7, 0x03, 0x62, - 0x30, 0x73, 0x40, 0x84, 0x0a, 0x32, 0x94, 0xa9, 0x20, 0x55, 0x31, 0x68, 0xa0, 0x77, 0xfe, 0x91, - 0xcb, 0xdb, 0x5b, 0x93, 0x63, 0x6c, 0x34, 0xa5, 0x26, 0x1e, 0x41, 0x16, 0xea, 0xef, 0x15, 0x7b, - 0x44, 0xeb, 0x39, 0x12, 0x1d, 0x79, 0x05, 0x0a, 0xe5, 0x4e, 0x47, 0xe8, 0xc7, 0x59, 0x29, 0x50, - 0x50, 0x46, 0x29, 0x46, 0x4d, 0xde, 0x84, 0x42, 0xf9, 0x61, 0x2d, 0x9e, 0x73, 0xa4, 0xfc, 0xb0, - 0x26, 0xbe, 0x24, 0xb3, 0xec, 0xc3, 0x1a, 0x79, 0x3b, 0x0c, 0xfe, 0xb9, 0xde, 0xb5, 0x1e, 0x89, - 0x8d, 0xa2, 0x70, 0xb7, 0xf5, 0xdd, 0x71, 0x1a, 0x0c, 0xc5, 0xb6, 0x8b, 0x31, 0xda, 0x98, 0x36, - 0x95, 0x76, 0xaf, 0x4d, 0x03, 0x3b, 0x6a, 0xd3, 0xe0, 0x6e, 0xb5, 0x69, 0x68, 0x17, 0xda, 0x04, - 0x3b, 0x6a, 0xd3, 0xf0, 0xc1, 0xb5, 0xa9, 0x03, 0x97, 0x92, 0x11, 0xd6, 0x02, 0x8d, 0xd0, 0x80, - 0x24, 0xb1, 0xc2, 0xb1, 0x04, 0xaf, 0xfe, 0xbb, 0x1c, 0x5b, 0xdf, 0x40, 0x74, 0xdd, 0x65, 0x78, - 0xd9, 0x3f, 0x2d, 0x59, 0x5a, 0xfd, 0xb5, 0x7c, 0x76, 0x60, 0xb8, 0xe3, 0x39, 0xc5, 0xfd, 0x50, - 0xaa, 0x94, 0x8a, 0xd1, 0x87, 0xfa, 0xd9, 0x52, 0x8e, 0xb1, 0x4d, 0x93, 0xd9, 0xb7, 0x73, 0x59, - 0xd1, 0xea, 0x0e, 0x24, 0xb1, 0x4f, 0x26, 0x3d, 0xda, 0xd0, 0x4f, 0xdf, 0x8d, 0xba, 0xb2, 0xcd, - 0xc2, 0x88, 0x2c, 0x44, 0x21, 0xa5, 0xdd, 0x08, 0x38, 0x52, 0x4e, 0xfd, 0x3b, 0x39, 0x38, 0x7b, - 0xaf, 0xbb, 0x4a, 0x85, 0x07, 0x5b, 0xd0, 0x8c, 0x0f, 0x00, 0x18, 0x58, 0x38, 0xb1, 0xe4, 0xd0, - 0x89, 0xe5, 0xd3, 0x72, 0xa4, 0xb9, 0x58, 0x81, 0x1b, 0x21, 0x35, 0x77, 0x60, 0x79, 0xc6, 0x77, - 0xe6, 0x7c, 0xd4, 0x5d, 0xa5, 0xf5, 0x84, 0x27, 0x8b, 0xc4, 0xfd, 0xd2, 0x3b, 0xdc, 0x4d, 0x7e, - 0xbf, 0x4e, 0x23, 0xbf, 0x92, 0xcf, 0x0c, 0xee, 0x77, 0x6c, 0xb3, 0x50, 0xfe, 0x40, 0x6a, 0xaf, - 0xc4, 0xb3, 0x51, 0xa6, 0x90, 0xc4, 0x38, 0xa6, 0x71, 0x49, 0x17, 0xd8, 0x31, 0xcf, 0x8d, 0xfa, - 0x91, 0x0a, 0xec, 0x1f, 0xe5, 0x32, 0x83, 0x30, 0x1e, 0x57, 0x81, 0xa9, 0xff, 0x4b, 0xc1, 0x8f, - 0xfd, 0x78, 0xa0, 0x4f, 0x78, 0x11, 0x86, 0xc4, 0x13, 0xf8, 0xa8, 0x03, 0xae, 0x38, 0xca, 0xc3, - 0xa3, 0xe1, 0x80, 0x80, 0x2d, 0xf3, 0x92, 0x77, 0xb0, 0xe4, 0x80, 0x2b, 0x79, 0x06, 0x6b, 0x12, - 0x09, 0x5b, 0xc8, 0x67, 0x9e, 0x98, 0x1e, 0x5a, 0x05, 0xac, 0x2f, 0x0b, 0x7c, 0x21, 0xa7, 0x4f, - 0x4c, 0x8f, 0xdb, 0x04, 0x01, 0x9a, 0x2d, 0xd2, 0xb5, 0x30, 0xf3, 0xbb, 0x58, 0xa4, 0x5d, 0x91, - 0x00, 0x5f, 0x3c, 0x1b, 0x7b, 0x11, 0x86, 0x84, 0x57, 0xab, 0x70, 0x33, 0x11, 0xad, 0x15, 0x7e, - 0xb0, 0xd8, 0xda, 0x80, 0x80, 0x71, 0xd4, 0x68, 0x33, 0x74, 0xac, 0x43, 0x8e, 0x0e, 0x42, 0x34, - 0x81, 0x21, 0xb7, 0x60, 0xac, 0xe6, 0xe9, 0x96, 0xa1, 0x3b, 0xc6, 0x52, 0xd7, 0xeb, 0x74, 0x3d, - 0xd9, 0x28, 0x75, 0x3d, 0xc3, 0xee, 0x7a, 0x5a, 0x8c, 0x82, 0x7c, 0x06, 0x46, 0x7d, 0xc8, 0x8c, - 0xe3, 0xd8, 0x8e, 0x6c, 0x79, 0xb8, 0x9e, 0x41, 0x1d, 0x47, 0x8b, 0x12, 0x90, 0xcf, 0xc2, 0x68, - 0xd5, 0x7a, 0x6c, 0x37, 0xf8, 0x33, 0x70, 0x6d, 0x5e, 0xd8, 0x21, 0xf8, 0x14, 0xcb, 0x0c, 0x10, - 0xf5, 0xae, 0xd3, 0xd2, 0xa2, 0x84, 0xea, 0x76, 0x3e, 0x19, 0x22, 0xf3, 0xe4, 0x6e, 0x5a, 0xae, - 0x47, 0x9d, 0xe9, 0xd0, 0x83, 0x14, 0x0d, 0x42, 0xd9, 0x97, 0x97, 0xdb, 0x85, 0xb7, 0x60, 0xf0, - 0x1e, 0xdd, 0xe4, 0x7e, 0x9f, 0xa5, 0xd0, 0x55, 0xf8, 0x91, 0x80, 0xc9, 0x27, 0xae, 0x3e, 0x9d, - 0xfa, 0xbb, 0xf9, 0x64, 0xf0, 0xcf, 0x93, 0x2b, 0xec, 0xcf, 0xc0, 0x00, 0x8a, 0xb2, 0xea, 0x1f, - 0xf9, 0xa3, 0x00, 0x51, 0xdc, 0x51, 0x0f, 0x64, 0x9f, 0x4c, 0xfd, 0x85, 0x52, 0x3c, 0x22, 0xec, - 0xc9, 0x95, 0xde, 0x5b, 0x30, 0x3c, 0x6d, 0x5b, 0xae, 0xe9, 0x7a, 0xd4, 0x6a, 0xf8, 0x0a, 0xfb, - 0x14, 0x33, 0xa8, 0x1a, 0x21, 0x58, 0x7e, 0x83, 0x24, 0x51, 0xef, 0x47, 0x79, 0xc9, 0x6b, 0x30, - 0x84, 0x22, 0x47, 0x3f, 0x69, 0x3e, 0xe1, 0xe1, 0x6d, 0xc1, 0x2a, 0x03, 0xc6, 0x9d, 0xa4, 0x43, - 0x52, 0x72, 0x1f, 0x06, 0xa7, 0xd7, 0xcd, 0x96, 0xe1, 0x50, 0x0b, 0xfd, 0x85, 0xa5, 0x67, 0xbf, - 0xd1, 0xbe, 0xbc, 0x81, 0xff, 0x22, 0x2d, 0x6f, 0x4e, 0x43, 0x14, 0x8b, 0xbc, 0xc2, 0x12, 0xb0, - 0x4b, 0x3f, 0x9d, 0x07, 0x08, 0x0b, 0x90, 0x67, 0x21, 0x1f, 0x24, 0x55, 0x46, 0x37, 0x95, 0x88, - 0x06, 0xe5, 0x71, 0xa9, 0x10, 0x63, 0x3b, 0xbf, 0xe3, 0xd8, 0xbe, 0x0f, 0x25, 0x7e, 0xe2, 0x85, - 0x9e, 0xe4, 0x52, 0x90, 0xca, 0xcc, 0x06, 0xdf, 0x40, 0x7a, 0xbe, 0x99, 0x45, 0xcb, 0x33, 0xe2, - 0x95, 0xcd, 0x99, 0x5d, 0x6a, 0x40, 0x3f, 0xfe, 0x45, 0xae, 0x42, 0x71, 0xc5, 0x4f, 0xc8, 0x3a, - 0xca, 0x67, 0xe9, 0x98, 0xfc, 0x10, 0xcf, 0xba, 0x69, 0xda, 0xb6, 0x3c, 0x56, 0x35, 0xb6, 0x7a, - 0x44, 0xc8, 0x45, 0xc0, 0x22, 0x72, 0x11, 0x30, 0xf5, 0xbf, 0xca, 0xa7, 0xc4, 0x2a, 0x3e, 0xb9, - 0xc3, 0xe4, 0x0d, 0x00, 0x7c, 0xd2, 0xcd, 0xe4, 0xe9, 0x3f, 0xd1, 0xc0, 0x51, 0x82, 0x8c, 0x50, - 0x6d, 0x23, 0xdb, 0x8e, 0x90, 0x58, 0xfd, 0xfb, 0xb9, 0x44, 0x80, 0xdb, 0x03, 0xc9, 0x51, 0xb6, - 0xca, 0xf2, 0xfb, 0x34, 0x63, 0xfd, 0xbe, 0x28, 0xec, 0xad, 0x2f, 0xa2, 0xdf, 0x72, 0x08, 0x96, - 0xe9, 0x51, 0x7e, 0xcb, 0x77, 0xf3, 0x69, 0xe1, 0x7e, 0x8f, 0xa7, 0x8a, 0xdf, 0x0e, 0x8c, 0xd2, - 0x62, 0x2c, 0xc0, 0x3a, 0x42, 0xe3, 0x49, 0xa3, 0x85, 0x99, 0xfa, 0x65, 0x38, 0x13, 0x0b, 0x82, - 0x2b, 0xf2, 0xf7, 0x5e, 0xed, 0x1d, 0x4d, 0x37, 0x3b, 0x18, 0x40, 0x84, 0x4c, 0xfd, 0xff, 0x72, - 0xbd, 0x43, 0x20, 0x1f, 0xb9, 0xea, 0xa4, 0x08, 0xa0, 0xf0, 0xc7, 0x23, 0x80, 0x43, 0xd8, 0x06, - 0x1f, 0x6f, 0x01, 0x7c, 0x4c, 0x26, 0x8f, 0x8f, 0x5a, 0x00, 0xbf, 0x90, 0xdb, 0x31, 0x82, 0xf5, - 0x51, 0xcb, 0x40, 0xfd, 0x1f, 0x73, 0xa9, 0x91, 0xa6, 0x0f, 0xd4, 0xae, 0xb7, 0xa1, 0xc4, 0xdd, - 0x6a, 0x44, 0xab, 0xa4, 0xdc, 0x5c, 0x0c, 0x9a, 0x95, 0xcd, 0x9e, 0x63, 0xc9, 0x3c, 0x0c, 0xf0, - 0x36, 0x18, 0xa2, 0x37, 0x3e, 0xd1, 0x23, 0xdc, 0xb5, 0x91, 0x35, 0x39, 0x0a, 0xb4, 0xfa, 0x77, - 0x73, 0x89, 0xc0, 0xd7, 0x47, 0xf8, 0x6d, 0xe1, 0x54, 0x5d, 0xd8, 0xfd, 0x54, 0xad, 0xfe, 0xf3, - 0x7c, 0x7a, 0xdc, 0xed, 0x23, 0xfc, 0x90, 0xc3, 0x38, 0x4e, 0xdb, 0xdf, 0xba, 0xb5, 0x02, 0x63, - 0x51, 0x59, 0x88, 0x65, 0xeb, 0x4a, 0x7a, 0xf4, 0xf1, 0x8c, 0x56, 0xc4, 0x78, 0xa8, 0xdf, 0xc9, - 0x25, 0x43, 0x86, 0x1f, 0xf9, 0xfc, 0xb4, 0x3f, 0x6d, 0x89, 0x7e, 0xca, 0xc7, 0x64, 0xad, 0x39, - 0x8c, 0x4f, 0xf9, 0x98, 0xac, 0x1a, 0xfb, 0xfb, 0x94, 0x5f, 0xca, 0x67, 0x45, 0x5c, 0x3f, 0xf2, - 0x0f, 0xfa, 0xa2, 0x2c, 0x64, 0xde, 0x32, 0xf1, 0x69, 0xcf, 0x66, 0x85, 0x38, 0xcf, 0xe0, 0x99, - 0xe0, 0xb3, 0xbf, 0x31, 0x9e, 0x2a, 0xac, 0x8f, 0x89, 0x22, 0x1f, 0x0f, 0x61, 0x7d, 0x4c, 0x86, - 0xca, 0xc7, 0x4f, 0x58, 0xbf, 0x9d, 0xdf, 0x6d, 0x98, 0xff, 0x53, 0xe1, 0x25, 0x84, 0xf7, 0x8d, - 0x7c, 0x32, 0xfd, 0xc4, 0x91, 0x8b, 0x69, 0x16, 0x4a, 0x22, 0x11, 0x46, 0xa6, 0x70, 0x38, 0x3e, - 0xcb, 0xa2, 0x11, 0xdf, 0x71, 0x1b, 0xc4, 0x45, 0xce, 0xee, 0x44, 0xc2, 0x69, 0xd5, 0xef, 0xe5, - 0x62, 0xb9, 0x1a, 0x8e, 0xe4, 0x08, 0x61, 0x5f, 0x4b, 0x12, 0x79, 0xc7, 0x3f, 0xcc, 0x2c, 0xc6, - 0x62, 0x65, 0x07, 0xdf, 0x53, 0xa1, 0x9e, 0x6e, 0xb6, 0xe2, 0xe5, 0x45, 0x4c, 0x80, 0xdf, 0xcd, - 0xc3, 0x44, 0x82, 0x94, 0x5c, 0x8d, 0x84, 0xd2, 0xc1, 0x63, 0xc9, 0x98, 0xf3, 0x38, 0x0f, 0xaa, - 0xb3, 0x87, 0x93, 0xd4, 0xab, 0x50, 0xac, 0xe8, 0x9b, 0xfc, 0xdb, 0xfa, 0x39, 0x4b, 0x43, 0xdf, - 0x94, 0x4f, 0xdc, 0x10, 0x4f, 0x56, 0xe1, 0x3c, 0xbf, 0x0f, 0x31, 0x6d, 0x6b, 0xc5, 0x6c, 0xd3, - 0xaa, 0xb5, 0x60, 0xb6, 0x5a, 0xa6, 0x2b, 0x2e, 0xf5, 0x5e, 0xdc, 0xde, 0x9a, 0xbc, 0xe6, 0xd9, - 0x9e, 0xde, 0xaa, 0x53, 0x9f, 0xac, 0xee, 0x99, 0x6d, 0x5a, 0x37, 0xad, 0x7a, 0x1b, 0x29, 0x25, - 0x96, 0xe9, 0xac, 0x48, 0x95, 0x87, 0x45, 0xaf, 0x35, 0x74, 0xcb, 0xa2, 0x46, 0xd5, 0x9a, 0xda, - 0xf4, 0x28, 0xbf, 0x0c, 0x2c, 0xf0, 0x23, 0x41, 0xfe, 0x36, 0x9c, 0xa3, 0x19, 0xe3, 0x55, 0x46, - 0xa0, 0xa5, 0x14, 0x52, 0x7f, 0xa7, 0x98, 0x92, 0xa6, 0xe3, 0x18, 0xa9, 0x8f, 0xdf, 0xd3, 0xc5, - 0x1d, 0x7a, 0xfa, 0x26, 0x0c, 0x88, 0xb8, 0xb3, 0xe2, 0x82, 0x01, 0x9d, 0xd9, 0x1f, 0x73, 0x90, - 0x7c, 0x43, 0x23, 0xa8, 0x48, 0x0b, 0x2e, 0xad, 0xb0, 0x6e, 0x4a, 0xef, 0xcc, 0xd2, 0x3e, 0x3a, - 0xb3, 0x07, 0x3f, 0xf2, 0x3e, 0x5c, 0x44, 0x6c, 0x4a, 0xb7, 0x0e, 0x60, 0x55, 0x18, 0xa3, 0x8a, - 0x57, 0x95, 0xde, 0xb9, 0x59, 0xe5, 0xc9, 0x17, 0x61, 0x24, 0x18, 0x20, 0x26, 0x75, 0xc5, 0xcd, - 0x45, 0x8f, 0x71, 0xc6, 0x03, 0xc0, 0x31, 0x30, 0xba, 0x90, 0x45, 0x83, 0x88, 0x45, 0x78, 0xa9, - 0xff, 0x43, 0xae, 0x57, 0xba, 0x90, 0x23, 0x9f, 0x95, 0xdf, 0x81, 0x01, 0x83, 0x7f, 0x94, 0xd0, - 0xa9, 0xde, 0x09, 0x45, 0x38, 0xa9, 0xe6, 0x97, 0x51, 0xff, 0x59, 0xae, 0x67, 0x96, 0x92, 0xe3, - 0xfe, 0x79, 0xdf, 0x28, 0x64, 0x7c, 0x9e, 0x98, 0x44, 0xaf, 0xc3, 0xb8, 0x19, 0x86, 0x51, 0xaf, - 0x87, 0xe1, 0xa7, 0xb4, 0x33, 0x12, 0x1c, 0x47, 0xd7, 0x6d, 0xb8, 0xe0, 0x3b, 0x3e, 0x3a, 0xbe, - 0x87, 0x98, 0x5b, 0xef, 0x3a, 0x26, 0x1f, 0x97, 0xda, 0x39, 0x37, 0xe6, 0x3e, 0xe6, 0xde, 0x77, - 0x4c, 0x56, 0x81, 0xee, 0xad, 0x53, 0x4b, 0xaf, 0x6f, 0xd8, 0xce, 0x23, 0x8c, 0x32, 0xca, 0x07, - 0xa7, 0x76, 0x86, 0xc3, 0x1f, 0xfa, 0x60, 0xf2, 0x3c, 0x8c, 0x36, 0x5b, 0x5d, 0x1a, 0xc4, 0x75, - 0xe4, 0x77, 0x7d, 0xda, 0x08, 0x03, 0x06, 0x37, 0x24, 0xcf, 0x00, 0x20, 0x91, 0x87, 0x39, 0x64, - 0xf0, 0x62, 0x4f, 0x1b, 0x62, 0x90, 0x15, 0xd1, 0x5d, 0x97, 0xb8, 0x56, 0x73, 0x21, 0xd5, 0x5b, - 0xb6, 0xd5, 0xac, 0x7b, 0xd4, 0x69, 0x63, 0x43, 0xd1, 0x99, 0x41, 0xbb, 0x80, 0x14, 0x78, 0x75, - 0xe2, 0xce, 0xdb, 0x56, 0x73, 0x85, 0x3a, 0x6d, 0xd6, 0xd4, 0x17, 0x81, 0x88, 0xa6, 0x3a, 0x78, - 0xe8, 0xc1, 0x3f, 0x0e, 0xbd, 0x19, 0x34, 0xf1, 0x11, 0xfc, 0x34, 0x04, 0x3f, 0x6c, 0x12, 0x86, - 0x79, 0x70, 0x3b, 0x2e, 0x34, 0x74, 0x61, 0xd0, 0x80, 0x83, 0x50, 0x5e, 0x17, 0x40, 0x78, 0x57, - 0x70, 0xaf, 0x6e, 0x4d, 0xfc, 0x52, 0xbf, 0x5a, 0x48, 0x4b, 0xac, 0x72, 0x20, 0x45, 0x0b, 0xa7, - 0xd5, 0xfc, 0x9e, 0xa6, 0xd5, 0x33, 0x56, 0xb7, 0x5d, 0xd7, 0x3b, 0x9d, 0xfa, 0x9a, 0xd9, 0xc2, - 0x67, 0x55, 0xb8, 0xf0, 0x69, 0xa3, 0x56, 0xb7, 0x5d, 0xee, 0x74, 0x66, 0x39, 0x90, 0xbc, 0x00, - 0x13, 0x8c, 0x0e, 0x3b, 0x29, 0xa0, 0x2c, 0x22, 0x25, 0x63, 0x80, 0xd1, 0x61, 0x7d, 0xda, 0xa7, - 0x60, 0x50, 0xf0, 0xe4, 0x6b, 0x55, 0xbf, 0x36, 0xc0, 0x99, 0xb9, 0xac, 0xe7, 0x02, 0x36, 0x7c, - 0x72, 0xed, 0xd7, 0x86, 0xfc, 0xf2, 0x18, 0x03, 0xd9, 0xea, 0xb6, 0x79, 0x44, 0xac, 0x01, 0x44, - 0x06, 0xbf, 0xc9, 0x55, 0x18, 0x63, 0x5c, 0x02, 0x81, 0xf1, 0xb0, 0xb1, 0xfd, 0x5a, 0x0c, 0x4a, - 0x6e, 0xc1, 0xb9, 0x08, 0x84, 0xdb, 0xa0, 0xfc, 0x99, 0x40, 0xbf, 0x96, 0x8a, 0x53, 0xbf, 0x55, - 0x88, 0xa6, 0x7b, 0x39, 0x82, 0x8e, 0xb8, 0x08, 0x03, 0xb6, 0xd3, 0xac, 0x77, 0x9d, 0x96, 0x18, - 0x7b, 0x25, 0xdb, 0x69, 0xde, 0x77, 0x5a, 0xe4, 0x3c, 0x94, 0x58, 0xef, 0x98, 0x86, 0x18, 0x62, - 0xfd, 0x7a, 0xa7, 0x53, 0x35, 0x48, 0x99, 0x77, 0x08, 0x86, 0x1c, 0xad, 0x37, 0x70, 0x6b, 0xcf, - 0x9d, 0x12, 0xfa, 0xf9, 0x8a, 0x97, 0x40, 0x62, 0x3f, 0x61, 0x20, 0x52, 0x7e, 0x10, 0x10, 0x63, - 0x61, 0xe0, 0xb6, 0xc4, 0xe0, 0x7d, 0x12, 0x67, 0x21, 0x90, 0x21, 0x0b, 0xbe, 0x89, 0x31, 0x48, - 0x05, 0x48, 0x48, 0xd5, 0xb6, 0x0d, 0x73, 0xcd, 0xa4, 0xfc, 0x55, 0x47, 0x3f, 0xbf, 0xf8, 0x4d, - 0x62, 0xb5, 0x71, 0x9f, 0xc9, 0x82, 0x80, 0x90, 0xb7, 0xb8, 0x12, 0x72, 0x3a, 0x5c, 0xfb, 0x78, - 0xdf, 0x72, 0x3b, 0x2d, 0x86, 0x42, 0xcd, 0xc4, 0xf2, 0xb8, 0x10, 0xaa, 0x7f, 0xb5, 0x98, 0xcc, - 0xf9, 0x73, 0x24, 0x76, 0xcd, 0x1c, 0x80, 0x48, 0xe9, 0x15, 0x5e, 0xae, 0x05, 0x1e, 0xe7, 0x21, - 0x26, 0x83, 0x87, 0x54, 0x96, 0x5c, 0x87, 0x41, 0xfe, 0x45, 0xd5, 0x8a, 0xb0, 0x77, 0xd0, 0x45, - 0xcc, 0xed, 0x98, 0x6b, 0x6b, 0xe8, 0x4f, 0x16, 0xa0, 0xc9, 0x55, 0x18, 0xa8, 0x2c, 0xd6, 0x6a, - 0xe5, 0x45, 0xff, 0xa6, 0x18, 0xdf, 0x97, 0x18, 0x96, 0x5b, 0x77, 0x75, 0xcb, 0xd5, 0x7c, 0x24, - 0x79, 0x1e, 0x4a, 0xd5, 0x65, 0x24, 0xe3, 0xaf, 0x26, 0x87, 0xb7, 0xb7, 0x26, 0x07, 0xcc, 0x0e, - 0xa7, 0x12, 0x28, 0xac, 0xf7, 0x41, 0xb5, 0x22, 0xb9, 0x4b, 0xf0, 0x7a, 0x1f, 0x9b, 0x06, 0x5e, - 0x3b, 0x6b, 0x01, 0x9a, 0xbc, 0x0a, 0x23, 0x35, 0xea, 0x98, 0x7a, 0x6b, 0xb1, 0x8b, 0x5b, 0x45, - 0x29, 0x94, 0xa2, 0x8b, 0xf0, 0xba, 0x85, 0x08, 0x2d, 0x42, 0x46, 0x2e, 0x43, 0x71, 0xce, 0xb4, - 0xfc, 0x27, 0x0c, 0xe8, 0xe3, 0xbe, 0x6e, 0x5a, 0x9e, 0x86, 0x50, 0xf2, 0x3c, 0x14, 0xee, 0xae, - 0x54, 0x85, 0x27, 0x18, 0xf2, 0xfa, 0xc0, 0x8b, 0x84, 0x65, 0xbc, 0xbb, 0x52, 0x25, 0xaf, 0xc2, - 0x10, 0x5b, 0xc4, 0xa8, 0xd5, 0xa0, 0xae, 0x32, 0x8c, 0x1f, 0xc3, 0xc3, 0x08, 0xfa, 0x40, 0xd9, - 0xa7, 0x23, 0xa0, 0x54, 0xff, 0x8f, 0x7c, 0x7a, 0x52, 0xa6, 0x23, 0x18, 0xea, 0xfb, 0xbc, 0x45, - 0x8e, 0x29, 0x58, 0xf1, 0x00, 0x0a, 0xb6, 0x06, 0x67, 0xca, 0x46, 0xdb, 0xb4, 0xca, 0xf8, 0xd3, - 0x5d, 0x98, 0x2d, 0xe3, 0xd4, 0x21, 0x3d, 0xcf, 0x8b, 0xa1, 0xc5, 0xf7, 0xf0, 0x80, 0xbf, 0x0c, - 0x55, 0xd7, 0x39, 0xae, 0xde, 0x5e, 0xd3, 0xeb, 0x0d, 0x9e, 0xcf, 0x48, 0x8b, 0x33, 0x55, 0x7f, - 0x2a, 0xbf, 0x43, 0x1e, 0xa9, 0x93, 0x28, 0x7d, 0xf5, 0x9b, 0xf9, 0xde, 0xa9, 0xbc, 0x4e, 0xa4, - 0x50, 0xfe, 0x30, 0x9f, 0x92, 0x58, 0xeb, 0x40, 0x92, 0xb8, 0x0e, 0x83, 0x9c, 0x4d, 0xe0, 0xc6, - 0x8b, 0xb3, 0x19, 0x57, 0x56, 0x9c, 0x45, 0x7d, 0x34, 0x59, 0x84, 0x73, 0xe5, 0xb5, 0x35, 0xda, - 0xf0, 0xc2, 0xd0, 0xcf, 0x8b, 0x61, 0x10, 0x56, 0x1e, 0xea, 0x56, 0xe0, 0xc3, 0xd0, 0xd1, 0x18, - 0x6c, 0x24, 0xb5, 0x1c, 0x59, 0x81, 0x0b, 0x71, 0x78, 0x8d, 0x6f, 0x01, 0x8a, 0x52, 0xf4, 0xdb, - 0x04, 0x47, 0xfe, 0x9f, 0x96, 0x51, 0x36, 0xad, 0x95, 0x38, 0x55, 0xf7, 0xf7, 0x6a, 0x25, 0xce, - 0xdb, 0xa9, 0xe5, 0xd4, 0xdf, 0x2d, 0xc8, 0xf9, 0xc7, 0x4e, 0xae, 0xc3, 0xd5, 0xed, 0x88, 0x9b, - 0xf5, 0x6e, 0x87, 0xcc, 0xab, 0x22, 0x82, 0x88, 0xd1, 0x75, 0x7c, 0x8f, 0xc4, 0x20, 0x82, 0x01, - 0x02, 0xe5, 0x75, 0x28, 0xa0, 0x24, 0x55, 0x28, 0x96, 0x9d, 0x26, 0x37, 0x6f, 0x77, 0x7a, 0x54, - 0xa5, 0x3b, 0x4d, 0x37, 0xfd, 0x51, 0x15, 0x63, 0xa1, 0xfe, 0x99, 0x7c, 0x8f, 0x94, 0x61, 0x27, - 0x72, 0x12, 0xf9, 0xf3, 0xf9, 0xac, 0xe4, 0x5f, 0xc7, 0xd5, 0x75, 0xec, 0x23, 0x16, 0xce, 0xf1, - 0xf6, 0xab, 0x3b, 0x64, 0xe1, 0x64, 0x24, 0x22, 0x3b, 0x15, 0xce, 0x57, 0xf3, 0x59, 0xb9, 0xd8, - 0x4e, 0xec, 0x2c, 0x93, 0x91, 0xfe, 0xed, 0x54, 0x57, 0x7e, 0x2e, 0x9f, 0x99, 0x01, 0xef, 0x54, - 0x3a, 0xea, 0xd7, 0xf2, 0x99, 0x19, 0xfc, 0x4e, 0xe4, 0x50, 0x4a, 0xd5, 0x96, 0xd3, 0xb1, 0x24, - 0xa4, 0xf3, 0xfb, 0xf9, 0xf4, 0x9c, 0x89, 0x47, 0xa0, 0x2a, 0x87, 0xe1, 0x81, 0xe7, 0x0b, 0xb4, - 0x78, 0x20, 0x81, 0xf6, 0x1f, 0xaa, 0x40, 0x8f, 0x6c, 0xec, 0x7d, 0xbf, 0x0a, 0xf4, 0x10, 0x06, - 0xef, 0x49, 0x16, 0xe8, 0x4f, 0x16, 0x92, 0x79, 0x42, 0x4f, 0xe4, 0x11, 0xe5, 0x14, 0x0c, 0xfa, - 0x67, 0x18, 0x42, 0xa0, 0xbb, 0xee, 0x4e, 0xbf, 0x1c, 0x79, 0x17, 0xce, 0x84, 0xb2, 0x94, 0x23, - 0x53, 0xe1, 0xf5, 0x46, 0x83, 0xa1, 0xea, 0x1f, 0x30, 0x9c, 0x08, 0xa1, 0x12, 0xa7, 0x56, 0xbf, - 0x57, 0x48, 0x26, 0x5b, 0x3d, 0xed, 0x8d, 0x7d, 0xf6, 0xc6, 0x7d, 0xb8, 0x30, 0xdd, 0x75, 0x1c, - 0x6a, 0x79, 0xe9, 0x9d, 0x82, 0x87, 0xcb, 0x0d, 0x4e, 0x51, 0x4f, 0x76, 0x4e, 0x46, 0x61, 0xc6, - 0x56, 0x78, 0xdf, 0xc7, 0xd9, 0x0e, 0x84, 0x6c, 0xbb, 0x9c, 0x22, 0x8d, 0x6d, 0x7a, 0x61, 0xf5, - 0x1f, 0xe4, 0x93, 0xe9, 0x71, 0x4f, 0xbb, 0x7e, 0x7f, 0x5d, 0xaf, 0xfe, 0xc5, 0x7c, 0x8f, 0x14, - 0xc1, 0xa7, 0x86, 0x1e, 0x3f, 0xc9, 0xcb, 0xcc, 0x4b, 0x7c, 0x12, 0x37, 0x06, 0x19, 0x1a, 0x73, - 0xba, 0x35, 0xe0, 0x14, 0x2f, 0x2c, 0xf0, 0x54, 0x71, 0xf7, 0x4c, 0xcb, 0x20, 0x4f, 0xc1, 0xf9, - 0xfb, 0xb5, 0x19, 0xad, 0x7e, 0xaf, 0xba, 0x58, 0xa9, 0xdf, 0x5f, 0xac, 0x2d, 0xcf, 0x4c, 0x57, - 0x67, 0xab, 0x33, 0x95, 0xf1, 0x3e, 0x72, 0x16, 0xce, 0x84, 0xa8, 0xb9, 0xfb, 0x0b, 0xe5, 0xc5, - 0xf1, 0x1c, 0x99, 0x80, 0xd1, 0x10, 0x38, 0xb5, 0xb4, 0x32, 0x9e, 0x7f, 0xe1, 0x53, 0x30, 0x8c, - 0xbe, 0x30, 0xfc, 0xee, 0x8e, 0x8c, 0xc0, 0xe0, 0xd2, 0x54, 0x6d, 0x46, 0x7b, 0x80, 0x4c, 0x00, - 0x4a, 0x95, 0x99, 0x45, 0xc6, 0x30, 0xf7, 0xc2, 0xff, 0x9d, 0x03, 0xa8, 0xcd, 0xae, 0x2c, 0x0b, - 0xc2, 0x61, 0x18, 0xa8, 0x2e, 0x3e, 0x28, 0xcf, 0x57, 0x19, 0xdd, 0x20, 0x14, 0x97, 0x96, 0x67, - 0x58, 0x0d, 0x43, 0xd0, 0x3f, 0x3d, 0xbf, 0x54, 0x9b, 0x19, 0xcf, 0x33, 0xa0, 0x36, 0x53, 0xae, - 0x8c, 0x17, 0x18, 0xf0, 0xa1, 0x56, 0x5d, 0x99, 0x19, 0x2f, 0xb2, 0x3f, 0xe7, 0x6b, 0x2b, 0xe5, - 0x95, 0xf1, 0x7e, 0xf6, 0xe7, 0x2c, 0xfe, 0x59, 0x62, 0xcc, 0x6a, 0x33, 0x2b, 0xf8, 0x63, 0x80, - 0x35, 0x61, 0xd6, 0xff, 0x35, 0xc8, 0x50, 0x8c, 0x75, 0xa5, 0xaa, 0x8d, 0x0f, 0xb1, 0x1f, 0x8c, - 0x25, 0xfb, 0x01, 0xac, 0x71, 0xda, 0xcc, 0xc2, 0xd2, 0x83, 0x99, 0xf1, 0x61, 0xc6, 0x6b, 0xe1, - 0x1e, 0x03, 0x8f, 0xb0, 0x3f, 0xb5, 0x05, 0xf6, 0xe7, 0x28, 0xe3, 0xa4, 0xcd, 0x94, 0xe7, 0x97, - 0xcb, 0x2b, 0x73, 0xe3, 0x63, 0xac, 0x3d, 0xc8, 0xf3, 0x0c, 0x2f, 0xb9, 0x58, 0x5e, 0x98, 0x19, - 0x1f, 0x17, 0x34, 0x95, 0xf9, 0xea, 0xe2, 0xbd, 0xf1, 0x09, 0x6c, 0xc8, 0xfb, 0x0b, 0xf8, 0x83, - 0xb0, 0x02, 0xf8, 0xd7, 0xd9, 0x17, 0x7e, 0x10, 0x4a, 0x4b, 0x35, 0xbc, 0xfd, 0xbe, 0x08, 0x67, - 0x97, 0x6a, 0xf5, 0x95, 0xf7, 0x97, 0x67, 0x62, 0xf2, 0x9e, 0x80, 0x51, 0x1f, 0x31, 0x5f, 0x5d, - 0xbc, 0xff, 0x05, 0x2e, 0x6d, 0x1f, 0xb4, 0x50, 0x9e, 0x5e, 0xaa, 0x8d, 0xe7, 0x59, 0xaf, 0xf8, - 0xa0, 0x87, 0xd5, 0xc5, 0xca, 0xd2, 0xc3, 0xda, 0x78, 0xe1, 0x85, 0xc7, 0x30, 0xc2, 0x13, 0xed, - 0x2d, 0x39, 0x66, 0xd3, 0xb4, 0xc8, 0x33, 0xf0, 0x54, 0x65, 0xe6, 0x41, 0x75, 0x7a, 0xa6, 0xbe, - 0xa4, 0x55, 0xef, 0x54, 0x17, 0x63, 0x35, 0x9d, 0x87, 0x89, 0x28, 0xba, 0xbc, 0x5c, 0x1d, 0xcf, - 0x91, 0x0b, 0x40, 0xa2, 0xe0, 0xbb, 0xe5, 0x85, 0xd9, 0xf1, 0x3c, 0x51, 0xe0, 0x5c, 0x14, 0x5e, - 0x5d, 0x5c, 0xb9, 0xbf, 0x38, 0x33, 0x5e, 0x78, 0xe1, 0xaf, 0xe4, 0xe0, 0x7c, 0x6a, 0x30, 0x56, - 0xa2, 0xc2, 0x95, 0x99, 0xf9, 0x72, 0x6d, 0xa5, 0x3a, 0x5d, 0x9b, 0x29, 0x6b, 0xd3, 0x73, 0xf5, - 0xe9, 0xf2, 0xca, 0xcc, 0x9d, 0x25, 0xed, 0xfd, 0xfa, 0x9d, 0x99, 0xc5, 0x19, 0xad, 0x3c, 0x3f, - 0xde, 0x47, 0x9e, 0x87, 0xc9, 0x0c, 0x9a, 0xda, 0xcc, 0xf4, 0x7d, 0xad, 0xba, 0xf2, 0xfe, 0x78, - 0x8e, 0x3c, 0x07, 0xcf, 0x64, 0x12, 0xb1, 0xdf, 0xe3, 0x79, 0x72, 0x05, 0x2e, 0x65, 0x91, 0xbc, - 0x37, 0x3f, 0x5e, 0x78, 0xe1, 0x67, 0x73, 0x40, 0x92, 0xd1, 0x34, 0xc9, 0xb3, 0x70, 0x99, 0xe9, - 0x45, 0x3d, 0xbb, 0x81, 0xcf, 0xc1, 0x33, 0xa9, 0x14, 0x52, 0xf3, 0x26, 0xe1, 0xe9, 0x0c, 0x12, - 0xd1, 0xb8, 0xcb, 0xa0, 0xa4, 0x13, 0x60, 0xd3, 0x7e, 0x23, 0x07, 0xe7, 0x53, 0xaf, 0xcb, 0xc9, - 0x35, 0xf8, 0x44, 0xb9, 0xb2, 0xc0, 0xfa, 0x66, 0x7a, 0xa5, 0xba, 0xb4, 0x58, 0xab, 0x2f, 0xcc, - 0x96, 0xeb, 0x4c, 0xfb, 0xee, 0xd7, 0x62, 0xbd, 0x79, 0x15, 0xd4, 0x1e, 0x94, 0xd3, 0x73, 0xe5, - 0xc5, 0x3b, 0x6c, 0xf8, 0x91, 0x4f, 0xc0, 0xb3, 0x99, 0x74, 0x33, 0x8b, 0xe5, 0xa9, 0xf9, 0x99, - 0xca, 0x78, 0x9e, 0x7c, 0x12, 0x9e, 0xcb, 0xa4, 0xaa, 0x54, 0x6b, 0x9c, 0xac, 0x30, 0x55, 0xf9, - 0xce, 0xff, 0x74, 0xa5, 0xef, 0x3b, 0x7f, 0x70, 0x25, 0xf7, 0x0f, 0xff, 0xe0, 0x4a, 0xee, 0x9f, - 0xff, 0xc1, 0x95, 0xdc, 0x17, 0x6f, 0xed, 0x25, 0x4a, 0x2a, 0x9f, 0xb6, 0x56, 0x4b, 0x78, 0x75, - 0xf5, 0xca, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x64, 0x71, 0xa6, 0xd5, 0x90, 0x79, 0x01, 0x00, + 0xc4, 0x82, 0x51, 0x21, 0xd0, 0x0d, 0xb3, 0x8d, 0x56, 0x3f, 0xae, 0x6b, 0x23, 0x37, 0xaf, 0x4e, + 0xfa, 0x87, 0x62, 0x93, 0xd2, 0x91, 0xda, 0xa3, 0x97, 0x26, 0x17, 0x02, 0x72, 0xdc, 0x99, 0xa2, + 0x4e, 0xc6, 0x58, 0xc8, 0xbd, 0xdd, 0x8a, 0x90, 0xab, 0x3f, 0x91, 0x87, 0x17, 0xc3, 0x2e, 0xd2, + 0xe8, 0x23, 0x93, 0x6e, 0x86, 0x1c, 0xc5, 0x1e, 0x99, 0x0d, 0x31, 0x77, 0x7a, 0x43, 0xb7, 0xd6, + 0xa9, 0x41, 0xae, 0x43, 0xaf, 0x66, 0x37, 0xa9, 0xab, 0xe4, 0xd0, 0x3c, 0xc4, 0xe9, 0xcb, 0x61, + 0x00, 0xf9, 0x90, 0x05, 0x29, 0x88, 0x0d, 0xa5, 0x15, 0x47, 0x37, 0x3d, 0x5f, 0x93, 0xca, 0x49, + 0x4d, 0xda, 0x43, 0x8d, 0x93, 0x9c, 0x07, 0x5f, 0x63, 0x50, 0xf0, 0x1e, 0x02, 0x64, 0xc1, 0x73, + 0x92, 0xcb, 0xaf, 0xc3, 0xa0, 0x44, 0xbc, 0xaf, 0x45, 0xe4, 0xdb, 0x45, 0x79, 0x6c, 0xf9, 0xcd, + 0x12, 0x63, 0xeb, 0x06, 0x1b, 0x13, 0xae, 0xcb, 0xac, 0x18, 0x3e, 0xa8, 0x84, 0xe6, 0x23, 0x28, + 0xaa, 0xf9, 0x08, 0x22, 0x2f, 0x43, 0x3f, 0x67, 0x11, 0xec, 0x97, 0x71, 0xaf, 0xed, 0x20, 0x2c, + 0x6a, 0x0a, 0x04, 0x84, 0xe4, 0x97, 0x73, 0xf0, 0x54, 0x57, 0x49, 0xa0, 0xf2, 0x0d, 0xde, 0x7c, + 0xe5, 0x40, 0x62, 0x9c, 0x7a, 0x71, 0x67, 0x7b, 0xe2, 0xba, 0xa4, 0x19, 0x8e, 0x44, 0x53, 0x6f, + 0x70, 0x22, 0xa9, 0x5d, 0xdd, 0x9b, 0xc2, 0x8c, 0x55, 0x5e, 0xe9, 0x2c, 0x1e, 0x55, 0x59, 0x8d, + 0x2d, 0xbf, 0x91, 0xc5, 0xd0, 0x58, 0x15, 0xdf, 0xbb, 0xe6, 0x93, 0xa4, 0x54, 0x93, 0xc1, 0x85, + 0x34, 0xe0, 0x12, 0xc7, 0x54, 0xf4, 0xad, 0xa5, 0xb5, 0x05, 0xdb, 0xf2, 0x36, 0xfc, 0x0a, 0x7a, + 0xe5, 0xb3, 0x1e, 0xac, 0xc0, 0xd0, 0xb7, 0xea, 0xf6, 0x5a, 0xbd, 0xc5, 0xa8, 0x52, 0xea, 0xc8, + 0xe2, 0xc4, 0x26, 0x76, 0x31, 0xc6, 0xfd, 0x29, 0xaf, 0x14, 0x9e, 0xc4, 0xf9, 0xf3, 0x42, 0x72, + 0x82, 0x8b, 0x15, 0x52, 0xab, 0x30, 0x34, 0x6f, 0x37, 0x1e, 0x06, 0xea, 0xf2, 0x3a, 0x94, 0x56, + 0x74, 0x67, 0x9d, 0x7a, 0x28, 0x8b, 0xc1, 0x9b, 0xe3, 0x93, 0xfc, 0x74, 0x9b, 0x11, 0x71, 0xc4, + 0xd4, 0x88, 0x98, 0x7d, 0x4a, 0x1e, 0xfe, 0xd6, 0x44, 0x01, 0xf5, 0x7b, 0xbd, 0x30, 0x24, 0x4e, + 0x62, 0x71, 0xf5, 0x20, 0x6f, 0x84, 0x67, 0xdb, 0x62, 0xba, 0x0c, 0x4e, 0xa3, 0x82, 0x53, 0xb4, + 0x21, 0xc6, 0xec, 0x1f, 0x6c, 0x4f, 0xe4, 0x76, 0xb6, 0x27, 0x7a, 0xb4, 0x7e, 0x69, 0x13, 0x1b, + 0xae, 0x6f, 0xd2, 0x82, 0x2e, 0x9f, 0xad, 0xc6, 0xca, 0xf2, 0xf5, 0xee, 0x1d, 0xe8, 0x13, 0x6d, + 0x10, 0x1a, 0x77, 0x29, 0x3c, 0x3b, 0x89, 0x9c, 0x28, 0xc7, 0x4a, 0xfb, 0xa5, 0xc8, 0x5b, 0x50, + 0xe2, 0x67, 0x09, 0x42, 0x00, 0x17, 0xd3, 0xcf, 0x5e, 0x62, 0xc5, 0x45, 0x19, 0x32, 0x07, 0x10, + 0x9e, 0x23, 0x04, 0x07, 0xe8, 0x82, 0x43, 0xf2, 0x84, 0x21, 0xc6, 0x45, 0x2a, 0x4b, 0x5e, 0x85, + 0xa1, 0x15, 0xea, 0xb4, 0x4c, 0x4b, 0x6f, 0xd6, 0xcc, 0x0f, 0xfc, 0x33, 0x74, 0x5c, 0xe8, 0x5d, + 0xf3, 0x03, 0x79, 0xe4, 0x46, 0xe8, 0xc8, 0x97, 0xd2, 0xf6, 0xe9, 0x7d, 0xd8, 0x90, 0x67, 0x77, + 0xdd, 0xc0, 0xc6, 0xda, 0x93, 0xb2, 0x6d, 0x7f, 0x17, 0x86, 0x23, 0x5b, 0x34, 0x71, 0x48, 0xfa, + 0x54, 0x92, 0xb5, 0xb4, 0xdf, 0x8c, 0xb1, 0x8d, 0x72, 0x60, 0x9a, 0x5c, 0xb5, 0x4c, 0xcf, 0xd4, + 0x9b, 0xd3, 0x76, 0xab, 0xa5, 0x5b, 0x86, 0x32, 0x10, 0x6a, 0xb2, 0xc9, 0x31, 0xf5, 0x06, 0x47, + 0xc9, 0x9a, 0x1c, 0x2d, 0x44, 0xee, 0xc2, 0x98, 0xe8, 0x43, 0x8d, 0x36, 0x6c, 0x87, 0xd9, 0x1e, + 0x78, 0x06, 0x2a, 0x8e, 0x01, 0x5c, 0x8e, 0xab, 0x3b, 0x3e, 0x52, 0x36, 0xee, 0xe3, 0x05, 0xef, + 0x14, 0xfb, 0x07, 0xc7, 0x86, 0xe2, 0xc7, 0xd6, 0xea, 0x5f, 0x2f, 0xc0, 0xa0, 0x20, 0x65, 0x4b, + 0xf7, 0x99, 0x82, 0x1f, 0x46, 0xc1, 0x53, 0x15, 0xb5, 0x74, 0x54, 0x8a, 0xaa, 0x7e, 0x35, 0x1f, + 0xcc, 0x46, 0xcb, 0x8e, 0x69, 0x1d, 0x6e, 0x36, 0xba, 0x0a, 0x30, 0xbd, 0xd1, 0xb1, 0x1e, 0xf2, + 0xeb, 0xb9, 0x7c, 0x78, 0x3d, 0xd7, 0x30, 0x35, 0x09, 0x43, 0x9e, 0x82, 0x62, 0x85, 0xf1, 0x67, + 0x3d, 0x33, 0x34, 0x35, 0xf0, 0x5d, 0xce, 0x29, 0xf7, 0xa2, 0x86, 0x60, 0xb6, 0x99, 0x9b, 0xda, + 0xf2, 0x28, 0x37, 0x9f, 0x0b, 0x7c, 0x33, 0xb7, 0xca, 0x00, 0x1a, 0x87, 0x93, 0x5b, 0x30, 0x5e, + 0xa1, 0x4d, 0x7d, 0x6b, 0xc1, 0x6c, 0x36, 0x4d, 0x97, 0x36, 0x6c, 0xcb, 0x70, 0x51, 0xc8, 0xa2, + 0xba, 0x96, 0xab, 0x25, 0x09, 0x88, 0x0a, 0xa5, 0xa5, 0xb5, 0x35, 0x97, 0x7a, 0x28, 0xbe, 0xc2, + 0x14, 0xb0, 0xc9, 0xd9, 0x46, 0x88, 0x26, 0x30, 0xea, 0xaf, 0xe5, 0xd8, 0x6e, 0xc9, 0x7d, 0xe8, + 0xd9, 0xed, 0x40, 0xcb, 0x0f, 0x25, 0x92, 0xeb, 0xa1, 0x5d, 0x91, 0xc7, 0xaf, 0x1d, 0x15, 0x5f, + 0xdb, 0x27, 0x6c, 0x8b, 0xd0, 0xa2, 0x48, 0xfd, 0xaa, 0xc2, 0x2e, 0x5f, 0xa5, 0xfe, 0x51, 0x1e, + 0x2e, 0x89, 0x16, 0x4f, 0x37, 0xcd, 0xf6, 0xaa, 0xad, 0x3b, 0x86, 0x46, 0x1b, 0xd4, 0x7c, 0x44, + 0x4f, 0xe6, 0xc0, 0x8b, 0x0e, 0x9d, 0xe2, 0x21, 0x86, 0xce, 0x4d, 0xdc, 0x78, 0x32, 0xc9, 0xe0, + 0x01, 0x33, 0x37, 0x2a, 0xc6, 0x76, 0xb6, 0x27, 0x86, 0x0c, 0x0e, 0xc6, 0x2b, 0x06, 0x4d, 0x26, + 0x62, 0x4a, 0x32, 0x4f, 0xad, 0x75, 0x6f, 0x03, 0x95, 0xa4, 0x97, 0x2b, 0x49, 0x13, 0x21, 0x9a, + 0xc0, 0xa8, 0xff, 0x7b, 0x1e, 0xce, 0xc7, 0x45, 0x5e, 0xa3, 0x96, 0x71, 0x26, 0xef, 0x0f, 0x47, + 0xde, 0xdf, 0x2f, 0xc0, 0x93, 0xa2, 0x4c, 0x6d, 0x43, 0x77, 0xa8, 0x51, 0x31, 0x1d, 0xda, 0xf0, + 0x6c, 0x67, 0xeb, 0x04, 0x1b, 0x50, 0x47, 0x27, 0xf6, 0x5b, 0x50, 0x12, 0xc7, 0x0d, 0x7c, 0x9d, + 0x19, 0x09, 0x5a, 0x82, 0xd0, 0xc4, 0x0a, 0xc5, 0x8f, 0x2a, 0x62, 0x9d, 0x55, 0xda, 0x4b, 0x67, + 0x7d, 0x16, 0x86, 0x03, 0xd1, 0xe3, 0xc6, 0xb7, 0x2f, 0xb4, 0xb6, 0x0c, 0x1f, 0x81, 0x7b, 0x5f, + 0x2d, 0x4a, 0x88, 0xb5, 0xf9, 0x80, 0x6a, 0x05, 0xad, 0xa1, 0x61, 0x51, 0x5b, 0x50, 0xce, 0x34, + 0x34, 0x99, 0x48, 0xdd, 0x2e, 0xc2, 0xe5, 0xf4, 0x6e, 0xd7, 0xa8, 0x6e, 0x9c, 0xf5, 0xfa, 0xc7, + 0xb2, 0xd7, 0xc9, 0xb3, 0x50, 0x5c, 0xd6, 0xbd, 0x0d, 0x71, 0xdd, 0x8f, 0x77, 0xd0, 0x6b, 0x66, + 0x93, 0xd6, 0xdb, 0xba, 0xb7, 0xa1, 0x21, 0x4a, 0x9a, 0x33, 0x00, 0x39, 0xa6, 0xcc, 0x19, 0xd2, + 0x62, 0x3f, 0xf8, 0x4c, 0xee, 0x5a, 0x31, 0x75, 0xb1, 0xff, 0x5e, 0x31, 0x6b, 0x5e, 0x79, 0xe0, + 0x98, 0x1e, 0x3d, 0xd3, 0xb0, 0x33, 0x0d, 0x3b, 0xa4, 0x86, 0xfd, 0xa3, 0x3c, 0x0c, 0x07, 0x9b, + 0xa6, 0xf7, 0x69, 0xe3, 0x78, 0xd6, 0xaa, 0x70, 0x2b, 0x53, 0x38, 0xf4, 0x56, 0xe6, 0x30, 0x0a, + 0xa5, 0x06, 0x47, 0xac, 0xdc, 0x34, 0x40, 0x89, 0xf1, 0x23, 0xd6, 0xe0, 0x60, 0xf5, 0x59, 0xe8, + 0x5b, 0xd0, 0x1f, 0x9b, 0xad, 0x4e, 0x4b, 0x58, 0xe9, 0xe8, 0xbe, 0xd6, 0xd2, 0x1f, 0x6b, 0x3e, + 0x5c, 0xfd, 0xef, 0x72, 0x30, 0x22, 0x84, 0x2a, 0x98, 0x1f, 0x4a, 0xaa, 0xa1, 0x74, 0xf2, 0x87, + 0x96, 0x4e, 0xe1, 0xe0, 0xd2, 0x51, 0xff, 0x42, 0x01, 0x94, 0x59, 0xb3, 0x49, 0x57, 0x1c, 0xdd, + 0x72, 0xd7, 0xa8, 0x23, 0xb6, 0xd3, 0x33, 0x8c, 0xd5, 0xa1, 0x3e, 0x50, 0x9a, 0x52, 0xf2, 0x07, + 0x9a, 0x52, 0x3e, 0x0d, 0x03, 0xa2, 0x31, 0x81, 0xeb, 0x24, 0x8e, 0x1a, 0xc7, 0x07, 0x6a, 0x21, + 0x9e, 0x11, 0x97, 0xdb, 0x6d, 0xc7, 0x7e, 0x44, 0x1d, 0x7e, 0x2b, 0x26, 0x88, 0x75, 0x1f, 0xa8, + 0x85, 0x78, 0x89, 0x33, 0xf5, 0xed, 0x45, 0x99, 0x33, 0x75, 0xb4, 0x10, 0x4f, 0xae, 0x41, 0xff, + 0xbc, 0xdd, 0xd0, 0x51, 0xd0, 0x7c, 0x5a, 0x19, 0xda, 0xd9, 0x9e, 0xe8, 0x6f, 0x0a, 0x98, 0x16, + 0x60, 0x19, 0x65, 0xc5, 0xde, 0xb4, 0x9a, 0xb6, 0xce, 0x9d, 0x6d, 0xfa, 0x39, 0xa5, 0x21, 0x60, + 0x5a, 0x80, 0x65, 0x94, 0x4c, 0xe6, 0xe8, 0xc4, 0xd4, 0x1f, 0xf2, 0x5c, 0x13, 0x30, 0x2d, 0xc0, + 0xaa, 0xbf, 0x56, 0x64, 0xda, 0xeb, 0x9a, 0x1f, 0x9c, 0xfa, 0x75, 0x21, 0x1c, 0x30, 0xbd, 0x07, + 0x18, 0x30, 0xa7, 0xe6, 0xc0, 0x4e, 0xfd, 0x17, 0x7d, 0x00, 0x42, 0xfa, 0x33, 0x67, 0x9b, 0xc3, + 0xc3, 0x69, 0x4d, 0x05, 0xc6, 0x67, 0xac, 0x0d, 0xdd, 0x6a, 0x50, 0x23, 0x3c, 0xb6, 0x2c, 0xe1, + 0xd0, 0x46, 0xa7, 0x4b, 0x2a, 0x90, 0xe1, 0xb9, 0xa5, 0x96, 0x2c, 0x40, 0x5e, 0x82, 0xc1, 0xaa, + 0xe5, 0x51, 0x47, 0x6f, 0x78, 0xe6, 0x23, 0x2a, 0xa6, 0x06, 0xbc, 0x89, 0x36, 0x43, 0xb0, 0x26, + 0xd3, 0x90, 0x5b, 0x30, 0xb4, 0xac, 0x3b, 0x9e, 0xd9, 0x30, 0xdb, 0xba, 0xe5, 0xb9, 0x4a, 0x3f, + 0xce, 0x68, 0x68, 0x61, 0xb4, 0x25, 0xb8, 0x16, 0xa1, 0x22, 0x5f, 0x82, 0x01, 0xdc, 0x9a, 0xa2, + 0x7f, 0xf8, 0xc0, 0xae, 0x17, 0x95, 0xcf, 0x85, 0xee, 0x88, 0xfc, 0xf4, 0x15, 0x6f, 0x9c, 0xe3, + 0x77, 0x95, 0x01, 0x47, 0xf2, 0x05, 0xe8, 0x9b, 0xb1, 0x0c, 0x64, 0x0e, 0xbb, 0x32, 0x57, 0x05, + 0xf3, 0x8b, 0x21, 0x73, 0xbb, 0x1d, 0xe3, 0xed, 0xb3, 0x4b, 0x1f, 0x65, 0x83, 0x1f, 0xde, 0x28, + 0x1b, 0xfa, 0x10, 0x8e, 0xc5, 0x87, 0x8f, 0xea, 0x58, 0x7c, 0xe4, 0x80, 0xc7, 0xe2, 0xea, 0x07, + 0x30, 0x38, 0xb5, 0x3c, 0x1b, 0x8c, 0xde, 0x27, 0xa0, 0xb0, 0x2c, 0x3c, 0x23, 0x8a, 0xdc, 0x9e, + 0x69, 0x9b, 0x86, 0xc6, 0x60, 0xe4, 0x3a, 0xf4, 0x4f, 0xa3, 0xbb, 0x9d, 0xb8, 0x45, 0x2c, 0xf2, + 0xf5, 0xaf, 0x81, 0x30, 0xf4, 0xba, 0xf5, 0xd1, 0xe4, 0x93, 0xd0, 0xb7, 0xec, 0xd8, 0xeb, 0x8e, + 0xde, 0x12, 0x6b, 0x30, 0xba, 0xa6, 0xb4, 0x39, 0x48, 0xf3, 0x71, 0xea, 0xcf, 0xe4, 0x7c, 0xb3, + 0x9d, 0x95, 0xa8, 0x75, 0xf0, 0x68, 0x1e, 0xeb, 0xee, 0xe7, 0x25, 0x5c, 0x0e, 0xd2, 0x7c, 0x1c, + 0xb9, 0x0e, 0xbd, 0x33, 0x8e, 0x63, 0x3b, 0xb2, 0x4f, 0x3d, 0x65, 0x00, 0xf9, 0xba, 0x17, 0x29, + 0xc8, 0x6b, 0x30, 0xc8, 0xe7, 0x1c, 0x7e, 0xa2, 0x59, 0xe8, 0x76, 0x53, 0x2a, 0x53, 0xaa, 0xdf, + 0x29, 0x48, 0x36, 0x1b, 0x97, 0xf8, 0x29, 0xbc, 0x15, 0x78, 0x19, 0x0a, 0x53, 0xcb, 0xb3, 0x62, + 0x02, 0x3c, 0xe7, 0x17, 0x95, 0x54, 0x25, 0x56, 0x8e, 0x51, 0x93, 0x2b, 0x50, 0x5c, 0x66, 0xea, + 0x53, 0x42, 0xf5, 0xe8, 0xdf, 0xd9, 0x9e, 0x28, 0xb6, 0x99, 0xfe, 0x20, 0x14, 0xb1, 0x6c, 0x33, + 0xc3, 0x77, 0x4c, 0x1c, 0x1b, 0xee, 0x63, 0xae, 0x40, 0xb1, 0xec, 0xac, 0x3f, 0x12, 0xb3, 0x16, + 0x62, 0x75, 0x67, 0xfd, 0x91, 0x86, 0x50, 0x72, 0x03, 0x40, 0xa3, 0x5e, 0xc7, 0xb1, 0xf0, 0xb9, + 0xcb, 0x00, 0x9e, 0xbf, 0xe1, 0x6c, 0xe8, 0x20, 0xb4, 0xde, 0xb0, 0x0d, 0xaa, 0x49, 0x24, 0xea, + 0x5f, 0x0b, 0x2f, 0x76, 0x2a, 0xa6, 0xfb, 0xf0, 0xac, 0x0b, 0xf7, 0xd1, 0x85, 0xba, 0x38, 0xe2, + 0x4c, 0x76, 0xd2, 0x04, 0xf4, 0xce, 0x36, 0xf5, 0x75, 0x17, 0xfb, 0x50, 0xf8, 0xae, 0xad, 0x31, + 0x80, 0xc6, 0xe1, 0xb1, 0x7e, 0xea, 0xdf, 0xbd, 0x9f, 0x7e, 0xae, 0x37, 0x18, 0x6d, 0x8b, 0xd4, + 0xdb, 0xb4, 0x9d, 0xb3, 0xae, 0xda, 0x6b, 0x57, 0x5d, 0x85, 0xbe, 0x9a, 0xd3, 0x90, 0x8e, 0x2e, + 0x70, 0x3f, 0xe0, 0x3a, 0x0d, 0x7e, 0x6c, 0xe1, 0x23, 0x19, 0x5d, 0xc5, 0xf5, 0x90, 0xae, 0x2f, + 0xa4, 0x33, 0x5c, 0x4f, 0xd0, 0x09, 0xa4, 0xa0, 0x5b, 0xb6, 0x1d, 0x4f, 0x74, 0x5c, 0x40, 0xd7, + 0xb6, 0x1d, 0x4f, 0xf3, 0x91, 0xe4, 0xd3, 0x00, 0x2b, 0xd3, 0xcb, 0xbe, 0x73, 0xff, 0x40, 0xe8, + 0x7b, 0x28, 0xbc, 0xfa, 0x35, 0x09, 0x4d, 0x56, 0x60, 0x60, 0xa9, 0x4d, 0x1d, 0xbe, 0x15, 0xe2, + 0x0f, 0x58, 0x3e, 0x15, 0x13, 0xad, 0xe8, 0xf7, 0x49, 0xf1, 0x7f, 0x40, 0xce, 0xd7, 0x17, 0xdb, + 0xff, 0xa9, 0x85, 0x8c, 0xc8, 0x6b, 0x50, 0x2a, 0x73, 0x3b, 0x6f, 0x10, 0x59, 0x06, 0x22, 0xc3, + 0x2d, 0x28, 0x47, 0xf1, 0x3d, 0xbb, 0x8e, 0x7f, 0x6b, 0x82, 0x5c, 0xbd, 0x0e, 0x63, 0xf1, 0x6a, + 0xc8, 0x20, 0xf4, 0x4d, 0x2f, 0x2d, 0x2e, 0xce, 0x4c, 0xaf, 0x8c, 0xf5, 0x90, 0x7e, 0x28, 0xd6, + 0x66, 0x16, 0x2b, 0x63, 0x39, 0xf5, 0x57, 0xa4, 0x19, 0x84, 0xa9, 0xd6, 0xd9, 0xd5, 0xf0, 0xa1, + 0xee, 0x5b, 0xc6, 0xf0, 0x3e, 0x14, 0x4f, 0x0c, 0x5a, 0xa6, 0xe7, 0x51, 0x43, 0xac, 0x12, 0x78, + 0x5f, 0xe8, 0x3d, 0xd6, 0x12, 0x78, 0xf2, 0x02, 0x0c, 0x23, 0x4c, 0x5c, 0x11, 0xf2, 0xfd, 0xb1, + 0x28, 0xe0, 0x3c, 0xd6, 0xa2, 0x48, 0xf5, 0xf7, 0xc3, 0xdb, 0xe1, 0x79, 0xaa, 0x9f, 0xd4, 0x1b, + 0xc5, 0x8f, 0x48, 0x7f, 0xa9, 0xff, 0xaa, 0xc8, 0x9f, 0x9c, 0xf0, 0xf7, 0x89, 0xc7, 0x21, 0xca, + 0xf0, 0x48, 0xb7, 0xb0, 0x8f, 0x23, 0xdd, 0x17, 0xa0, 0xb4, 0x40, 0xbd, 0x0d, 0xdb, 0x77, 0xfc, + 0x42, 0x0f, 0xbd, 0x16, 0x42, 0x64, 0x0f, 0x3d, 0x4e, 0x43, 0x1e, 0x02, 0xf1, 0x1f, 0x1f, 0x06, + 0x8e, 0xdf, 0xfe, 0x11, 0xf2, 0xa5, 0xc4, 0x3e, 0xa5, 0x86, 0x4f, 0x94, 0xd1, 0xa7, 0xff, 0x7c, + 0xe0, 0x58, 0x2e, 0x79, 0x62, 0xfd, 0xcb, 0xed, 0x89, 0x12, 0xa7, 0xd1, 0x52, 0xd8, 0x92, 0x77, + 0x61, 0x60, 0x61, 0xb6, 0x2c, 0x1e, 0x22, 0x72, 0xaf, 0x88, 0x27, 0x02, 0x29, 0xfa, 0x88, 0x40, + 0x24, 0xf8, 0xbe, 0xa7, 0xb5, 0xa6, 0x27, 0xdf, 0x21, 0x86, 0x5c, 0x98, 0xb6, 0xf0, 0x97, 0x42, + 0xe2, 0x74, 0x21, 0xd0, 0x96, 0xe8, 0xfb, 0xa1, 0xb8, 0xac, 0x38, 0x36, 0xa6, 0x2d, 0xfd, 0x87, + 0x18, 0xdd, 0x4b, 0x30, 0x5e, 0x6e, 0xb7, 0x9b, 0x26, 0x35, 0x50, 0x5f, 0xb4, 0x4e, 0x93, 0xba, + 0xc2, 0xe5, 0x07, 0x1f, 0x9f, 0xe8, 0x1c, 0x59, 0xc7, 0xe7, 0xaf, 0x75, 0xa7, 0x13, 0xf5, 0xcf, + 0x4c, 0x96, 0x55, 0xff, 0x6c, 0x1e, 0x2e, 0x4e, 0x3b, 0x54, 0xf7, 0xe8, 0xc2, 0x6c, 0xb9, 0xdc, + 0x41, 0x1f, 0xb9, 0x66, 0x93, 0x5a, 0xeb, 0xc7, 0x33, 0xac, 0xdf, 0x84, 0x91, 0xa0, 0x01, 0xb5, + 0x86, 0xdd, 0xa6, 0xf2, 0x43, 0xae, 0x86, 0x8f, 0xa9, 0xbb, 0x0c, 0xa5, 0xc5, 0x48, 0xc9, 0x5d, + 0x38, 0x17, 0x40, 0xca, 0xcd, 0xa6, 0xbd, 0xa9, 0xd1, 0x8e, 0xcb, 0x1d, 0x71, 0xfb, 0xb9, 0x23, + 0x6e, 0xc8, 0x41, 0x67, 0xf8, 0xba, 0xc3, 0x08, 0xb4, 0xb4, 0x52, 0xea, 0xb7, 0x0a, 0x70, 0xe9, + 0xbe, 0xde, 0x34, 0x8d, 0x50, 0x34, 0x1a, 0x75, 0xdb, 0xb6, 0xe5, 0xd2, 0x13, 0x34, 0x4a, 0x23, + 0x43, 0xa1, 0x78, 0x24, 0x43, 0x21, 0xd9, 0x45, 0xbd, 0x87, 0xee, 0xa2, 0xd2, 0x81, 0xba, 0xe8, + 0x7f, 0xcb, 0xc1, 0x98, 0xff, 0xd0, 0x40, 0x7e, 0x34, 0x2e, 0x79, 0xc1, 0xe3, 0x11, 0x62, 0xcc, + 0xef, 0x1a, 0xf1, 0xa4, 0x06, 0x7d, 0x33, 0x8f, 0xdb, 0xa6, 0x43, 0xdd, 0x3d, 0x38, 0x8d, 0x3f, + 0x25, 0x8e, 0x4b, 0xc6, 0x29, 0x2f, 0x92, 0x38, 0x29, 0xe1, 0x60, 0x7c, 0x3e, 0xc8, 0x9f, 0x5a, + 0x4c, 0xf9, 0x2f, 0xe1, 0xf9, 0xf3, 0x41, 0xf1, 0x24, 0x23, 0xf2, 0x1e, 0x34, 0x24, 0x25, 0xcf, + 0x41, 0x61, 0x65, 0x65, 0x5e, 0xcc, 0xa4, 0x18, 0x81, 0xc0, 0xf3, 0xe4, 0xf7, 0x91, 0x0c, 0xab, + 0xfe, 0xd3, 0x3c, 0x00, 0x53, 0x05, 0x3e, 0x5c, 0x8f, 0x45, 0x09, 0xa7, 0xa0, 0xdf, 0x17, 0xb8, + 0x50, 0xc3, 0xe0, 0x95, 0x40, 0xbc, 0x23, 0xe2, 0x75, 0x07, 0x2f, 0x42, 0x26, 0x7c, 0x47, 0x72, + 0x7e, 0x0f, 0x80, 0x3b, 0x1b, 0x74, 0x24, 0xf7, 0xdd, 0xc7, 0x3f, 0x0d, 0x03, 0x62, 0xc6, 0xb3, + 0x23, 0xe7, 0xff, 0x0d, 0x1f, 0xa8, 0x85, 0xf8, 0xd8, 0xd4, 0x5a, 0x3a, 0xc4, 0x42, 0xec, 0x8b, + 0x97, 0xf7, 0xca, 0x99, 0x78, 0x8f, 0x58, 0xbc, 0x5f, 0x17, 0xe2, 0xe5, 0x2f, 0x86, 0x4e, 0xac, + 0x78, 0x8f, 0xec, 0xec, 0x5b, 0xfd, 0x47, 0x39, 0x20, 0xac, 0x59, 0xcb, 0xba, 0xeb, 0x6e, 0xda, + 0x8e, 0xc1, 0x9d, 0xd3, 0x8f, 0x45, 0x30, 0x47, 0x77, 0x5f, 0xf9, 0x9d, 0x7e, 0x38, 0x17, 0x71, + 0xfc, 0x3d, 0xe1, 0x93, 0xd5, 0xf5, 0xe8, 0x68, 0xea, 0xf6, 0xea, 0xe5, 0x13, 0xf2, 0x85, 0x68, + 0x6f, 0xe4, 0xc1, 0x9b, 0x74, 0x13, 0xfa, 0x22, 0x0c, 0x89, 0x1f, 0x6c, 0x85, 0xf6, 0x6f, 0xba, + 0x70, 0x94, 0xba, 0x0c, 0xa0, 0x45, 0xd0, 0xe4, 0x15, 0x18, 0x60, 0x03, 0x66, 0x1d, 0x83, 0x95, + 0xf4, 0x85, 0x2f, 0x4a, 0x0c, 0x1f, 0x28, 0xaf, 0x27, 0x01, 0xa5, 0xf4, 0x6e, 0xa9, 0x7f, 0x0f, + 0xef, 0x96, 0xbe, 0x0c, 0x83, 0x65, 0xcb, 0xb2, 0x3d, 0xdc, 0xa4, 0xbb, 0xe2, 0x6a, 0x22, 0xd3, + 0x2a, 0x7f, 0x0e, 0x1f, 0xe3, 0x87, 0xf4, 0xa9, 0x66, 0xb9, 0xcc, 0x90, 0xdc, 0xf4, 0x5f, 0xc5, + 0x50, 0x47, 0x78, 0x95, 0xe3, 0xf5, 0x8c, 0x23, 0x60, 0xc9, 0x47, 0x31, 0xd8, 0x79, 0xc3, 0xcb, + 0x8e, 0xdd, 0xb6, 0x5d, 0x6a, 0x70, 0x41, 0x0d, 0x86, 0xa1, 0x0d, 0xda, 0x02, 0x81, 0xef, 0xe6, + 0x22, 0x81, 0x43, 0x22, 0x45, 0xc8, 0x1a, 0x9c, 0xf7, 0x2f, 0x8a, 0x83, 0x17, 0x8a, 0xd5, 0x8a, + 0xab, 0x0c, 0xe1, 0xab, 0x24, 0x12, 0x57, 0x86, 0x6a, 0x65, 0xea, 0x69, 0xff, 0x5a, 0xc4, 0x7f, + 0xe2, 0x58, 0x37, 0x0d, 0xb9, 0xab, 0x53, 0xf9, 0x91, 0x1f, 0x81, 0xc1, 0x05, 0xfd, 0x71, 0xa5, + 0x23, 0xce, 0x5e, 0x86, 0xf7, 0x7e, 0xfb, 0xd2, 0xd2, 0x1f, 0xd7, 0x0d, 0x51, 0x2e, 0x66, 0x53, + 0xc8, 0x2c, 0x49, 0x1d, 0x2e, 0x2e, 0x3b, 0x76, 0xcb, 0xf6, 0xa8, 0x11, 0x7b, 0xec, 0x37, 0x1a, + 0xbe, 0x0e, 0x6e, 0x0b, 0x8a, 0x7a, 0x97, 0x57, 0x7f, 0x19, 0x6c, 0x48, 0x0b, 0x46, 0xcb, 0xae, + 0xdb, 0x69, 0xd1, 0xf0, 0x86, 0x6a, 0x6c, 0xd7, 0xcf, 0xf8, 0x94, 0xf0, 0x5a, 0x7e, 0x52, 0xc7, + 0xa2, 0xfc, 0x82, 0xaa, 0xee, 0x99, 0x72, 0x8d, 0xf8, 0x2d, 0x71, 0xde, 0x77, 0x8a, 0xfd, 0x23, + 0x63, 0xa3, 0xda, 0xa5, 0x64, 0x63, 0x56, 0x4c, 0xaf, 0x49, 0xd5, 0xdf, 0xcb, 0x01, 0x84, 0x02, + 0x26, 0x2f, 0x46, 0x23, 0x22, 0xe5, 0xc2, 0x8b, 0x0e, 0x11, 0x2d, 0x21, 0x12, 0x02, 0x89, 0x5c, + 0x81, 0x22, 0x46, 0xd4, 0xc8, 0x87, 0x07, 0xab, 0x0f, 0x4d, 0xcb, 0xd0, 0x10, 0xca, 0xb0, 0xd2, + 0xd3, 0x77, 0xc4, 0xe2, 0xa5, 0x3e, 0xb7, 0x0a, 0x2b, 0x30, 0x5a, 0xeb, 0xac, 0xfa, 0x75, 0x4b, + 0xef, 0xf8, 0x30, 0xb0, 0x87, 0xdb, 0x59, 0x0d, 0x1e, 0xbf, 0x46, 0xc2, 0xa6, 0x44, 0x8b, 0xa8, + 0xbf, 0x96, 0x8b, 0xcd, 0x82, 0xc7, 0xb8, 0xe8, 0x7d, 0x22, 0xe9, 0xa7, 0x91, 0x9c, 0x96, 0xd4, + 0xbf, 0x94, 0x87, 0xc1, 0x65, 0xdb, 0xf1, 0x44, 0x88, 0x92, 0x93, 0xbd, 0x0a, 0x49, 0x7b, 0xa5, + 0xe2, 0x3e, 0xf6, 0x4a, 0x57, 0xa0, 0x28, 0xb9, 0x28, 0xf3, 0x7b, 0x11, 0xc3, 0x70, 0x34, 0x84, + 0xaa, 0x3f, 0x96, 0x07, 0xf8, 0xc2, 0x4b, 0x2f, 0x9d, 0x62, 0x01, 0xa9, 0xbf, 0x90, 0x83, 0x51, + 0x71, 0x51, 0x27, 0xc5, 0x16, 0xeb, 0xf3, 0xaf, 0x58, 0xe5, 0x71, 0xc9, 0x41, 0x9a, 0x8f, 0x63, + 0x4b, 0xc0, 0xcc, 0x63, 0xd3, 0xc3, 0xbb, 0x0a, 0x29, 0xb8, 0x18, 0x15, 0x30, 0x79, 0x09, 0xf0, + 0xe9, 0xc8, 0x8b, 0xfe, 0x15, 0x64, 0x21, 0x5c, 0xf7, 0x58, 0x81, 0x99, 0xd4, 0x6b, 0x48, 0xf5, + 0x37, 0x8b, 0x50, 0x9c, 0x79, 0x4c, 0x1b, 0x27, 0xbc, 0x6b, 0xa4, 0x83, 0xcd, 0xe2, 0x21, 0x0f, + 0x36, 0x0f, 0xe2, 0x53, 0xf1, 0x4e, 0xd8, 0x9f, 0xa5, 0x68, 0xf5, 0xb1, 0x9e, 0x8f, 0x57, 0xef, + 0xf7, 0xf4, 0xc9, 0x73, 0xc9, 0xf9, 0x2f, 0x0b, 0x50, 0xa8, 0x4d, 0x2f, 0x9f, 0xe9, 0xcd, 0xb1, + 0xea, 0x4d, 0xf7, 0x3b, 0x6b, 0x35, 0xb8, 0x86, 0xea, 0x0f, 0xbd, 0x44, 0x63, 0x37, 0x4e, 0xdf, + 0x2f, 0xc0, 0x48, 0x6d, 0x76, 0x65, 0x59, 0x3a, 0x09, 0xbe, 0xcb, 0x3d, 0xf9, 0xd0, 0xa7, 0x8c, + 0x77, 0xe9, 0x95, 0x84, 0x3d, 0x73, 0xaf, 0x6a, 0x79, 0xaf, 0xde, 0xba, 0xaf, 0x37, 0x3b, 0x14, + 0x8f, 0x5e, 0xb8, 0xdf, 0xaf, 0x6b, 0x7e, 0x40, 0xbf, 0x85, 0x81, 0x06, 0x7c, 0x06, 0xe4, 0x4d, + 0x28, 0xdc, 0x13, 0x1e, 0x19, 0x59, 0x7c, 0x5e, 0xbe, 0xc9, 0xf9, 0xb0, 0x49, 0xb0, 0xd0, 0x31, + 0x0d, 0xe4, 0xc0, 0x4a, 0xb1, 0xc2, 0xb7, 0xc5, 0x02, 0xbc, 0xa7, 0xc2, 0xeb, 0x7e, 0xe1, 0xdb, + 0xd5, 0x0a, 0xa9, 0xc1, 0xe0, 0x32, 0x75, 0x5a, 0x26, 0x76, 0x94, 0x3f, 0x67, 0x77, 0x67, 0xc2, + 0x76, 0x2a, 0x83, 0xed, 0xb0, 0x10, 0x32, 0x93, 0xb9, 0x90, 0xf7, 0x00, 0xb8, 0x8d, 0xb2, 0xc7, + 0x78, 0x95, 0x4f, 0xa1, 0xdd, 0xcf, 0x4d, 0xcb, 0x14, 0x1b, 0x4f, 0x62, 0x46, 0x1e, 0xc2, 0xd8, + 0x82, 0x6d, 0x98, 0x6b, 0x26, 0x77, 0xbd, 0xc4, 0x0a, 0x4a, 0xbb, 0x3b, 0x3c, 0x31, 0x53, 0xb2, + 0x25, 0x95, 0x4b, 0xab, 0x26, 0xc1, 0x58, 0xfd, 0xcf, 0x7b, 0xa1, 0xc8, 0xba, 0xfd, 0x6c, 0xfc, + 0x1e, 0x66, 0xfc, 0x96, 0x61, 0xec, 0x81, 0xed, 0x3c, 0x34, 0xad, 0xf5, 0xc0, 0x2b, 0x5e, 0xec, + 0x4d, 0xd1, 0x93, 0x67, 0x93, 0xe3, 0xea, 0x81, 0x03, 0xbd, 0x96, 0x20, 0xdf, 0x65, 0x04, 0xbf, + 0x0e, 0xc0, 0xdf, 0xba, 0x23, 0x4d, 0x7f, 0x18, 0x1c, 0x83, 0xbf, 0x84, 0x47, 0x47, 0x7b, 0x39, + 0x38, 0x46, 0x48, 0xcc, 0x36, 0xe1, 0xdc, 0x17, 0x62, 0x00, 0xfd, 0xee, 0x71, 0x13, 0x8e, 0xbe, + 0x10, 0xb2, 0x11, 0xc0, 0xbd, 0x22, 0x96, 0x01, 0xa4, 0xfb, 0x25, 0x88, 0x09, 0x22, 0x32, 0x39, + 0x88, 0x70, 0x74, 0x29, 0xd7, 0x4b, 0x9a, 0xc4, 0x83, 0xbc, 0x1a, 0xbb, 0x00, 0x27, 0x11, 0x6e, + 0x99, 0xf7, 0xdf, 0xa1, 0x03, 0xd5, 0xd0, 0x6e, 0x0e, 0x54, 0xea, 0x57, 0xf3, 0x30, 0x50, 0xeb, + 0xac, 0xba, 0x5b, 0xae, 0x47, 0x5b, 0x27, 0x5c, 0x8d, 0xfd, 0xed, 0x55, 0x31, 0x75, 0x7b, 0xf5, + 0x9c, 0x2f, 0x14, 0xe9, 0xdc, 0x31, 0x30, 0xe9, 0x7c, 0x71, 0xfc, 0xcd, 0x3c, 0x8c, 0xf1, 0x8b, + 0xb3, 0x8a, 0xe9, 0x36, 0x8e, 0xc0, 0x99, 0xff, 0xf8, 0xa5, 0x72, 0xb8, 0xcb, 0xe6, 0x3d, 0x3c, + 0x91, 0x50, 0xbf, 0x92, 0x87, 0xc1, 0x72, 0xc7, 0xdb, 0x28, 0x7b, 0xa8, 0x5b, 0xa7, 0x72, 0x7f, + 0xf2, 0xf7, 0x72, 0x30, 0xca, 0x1a, 0xb2, 0x62, 0x3f, 0xa4, 0xd6, 0x11, 0x1c, 0x3c, 0xca, 0x07, + 0x88, 0xf9, 0x03, 0x1e, 0x20, 0xfa, 0xb2, 0x2c, 0xec, 0x4f, 0x96, 0x78, 0x5c, 0xae, 0xd9, 0x4d, + 0x7a, 0xb2, 0x3f, 0xe3, 0x08, 0x8f, 0xcb, 0x7d, 0x81, 0x1c, 0xc1, 0xf5, 0xcc, 0xc7, 0x4b, 0x20, + 0x47, 0x70, 0xb6, 0xf4, 0xf1, 0x10, 0xc8, 0x77, 0x72, 0x30, 0x30, 0x65, 0x7b, 0x27, 0x7c, 0xe0, + 0x8b, 0xaf, 0x38, 0xd9, 0x6a, 0xee, 0x7f, 0xc5, 0xc9, 0xd6, 0x4d, 0xf5, 0xe7, 0xf3, 0x70, 0x5e, + 0xc4, 0x22, 0x17, 0xe7, 0x0f, 0x67, 0xd3, 0xb1, 0x18, 0x6c, 0x49, 0xd1, 0x9c, 0xcd, 0x43, 0x42, + 0x34, 0xbf, 0x54, 0x80, 0xf3, 0x18, 0x3a, 0x95, 0x6d, 0xcb, 0x3e, 0x06, 0xb6, 0x08, 0x69, 0x44, + 0x2f, 0x41, 0x17, 0x52, 0x2e, 0x41, 0xff, 0xe5, 0xf6, 0xc4, 0xab, 0xeb, 0xa6, 0xb7, 0xd1, 0x59, + 0x9d, 0x6c, 0xd8, 0xad, 0x1b, 0xeb, 0x8e, 0xfe, 0xc8, 0xe4, 0xd7, 0x7f, 0x7a, 0xf3, 0x46, 0x98, + 0x22, 0xa4, 0x6d, 0x8a, 0x84, 0x1f, 0x35, 0xdc, 0xeb, 0x30, 0xae, 0xfe, 0xf5, 0xa9, 0x0b, 0x70, + 0xc7, 0x36, 0x2d, 0xe1, 0x53, 0xc8, 0x0d, 0xdd, 0x1a, 0xdb, 0x1f, 0xbe, 0x6f, 0x9b, 0x56, 0x3d, + 0xee, 0x58, 0xb8, 0xdf, 0xfa, 0x42, 0xd6, 0x9a, 0x54, 0x8d, 0xfa, 0xdf, 0xe6, 0xe0, 0x89, 0xa8, + 0x16, 0x7f, 0x1c, 0x6c, 0xc7, 0x3f, 0x97, 0x87, 0x0b, 0xb7, 0x51, 0x38, 0x81, 0x23, 0xc7, 0xd9, + 0xbc, 0x25, 0x06, 0x67, 0x8a, 0x6c, 0xce, 0x2c, 0xca, 0x6c, 0xd9, 0x9c, 0x4d, 0xea, 0x42, 0x36, + 0xff, 0x4d, 0x0e, 0xce, 0x2d, 0x55, 0x2b, 0xd3, 0x1f, 0x93, 0x11, 0x95, 0xfc, 0x9e, 0x13, 0x6e, + 0x70, 0x26, 0xbe, 0xe7, 0x84, 0x9b, 0x9e, 0xdf, 0xcc, 0xc3, 0xb9, 0x5a, 0x79, 0x61, 0xfe, 0xe3, + 0x32, 0x83, 0x4f, 0xcb, 0x5e, 0x87, 0xfe, 0x21, 0x98, 0xb0, 0x05, 0xe4, 0xcf, 0xbc, 0x7f, 0x33, + 0xdb, 0x1b, 0x31, 0x29, 0x94, 0x13, 0x3e, 0x75, 0x1f, 0x89, 0x50, 0x98, 0xe6, 0x47, 0xa8, 0x4f, + 0xb8, 0xe6, 0xff, 0x17, 0x25, 0x18, 0xbc, 0xdb, 0x59, 0xa5, 0xc2, 0x39, 0xe5, 0x54, 0x9f, 0xfc, + 0xde, 0x84, 0x41, 0x21, 0x06, 0xbc, 0x35, 0x91, 0x82, 0xe7, 0x89, 0x60, 0x28, 0x3c, 0x3e, 0x91, + 0x4c, 0x44, 0xae, 0x40, 0xf1, 0x3e, 0x75, 0x56, 0xe5, 0x77, 0xa5, 0x8f, 0xa8, 0xb3, 0xaa, 0x21, + 0x94, 0xcc, 0x87, 0x2e, 0xf3, 0xe5, 0xe5, 0x2a, 0x26, 0x6e, 0x11, 0x17, 0x36, 0x98, 0x89, 0x26, + 0xf0, 0x7b, 0xd3, 0xdb, 0x26, 0x4f, 0xf9, 0x22, 0xbf, 0x69, 0x8f, 0x97, 0x24, 0x8b, 0x30, 0x2e, + 0x3b, 0x3e, 0xf1, 0xac, 0x25, 0xfd, 0x29, 0xec, 0xd2, 0xf2, 0x95, 0x24, 0x8b, 0x92, 0x77, 0x60, + 0xc8, 0x07, 0xa2, 0x0b, 0xd7, 0x40, 0x18, 0x2a, 0x3f, 0x60, 0x15, 0x8b, 0x6c, 0x1e, 0x29, 0x20, + 0x33, 0xc0, 0x6b, 0x08, 0x48, 0x61, 0x10, 0x73, 0x89, 0x8b, 0x14, 0x20, 0xaf, 0x20, 0x03, 0x7c, + 0xe6, 0x81, 0xce, 0x2a, 0x83, 0xf8, 0xe8, 0x12, 0x5d, 0xf2, 0x1d, 0x01, 0xe7, 0x4f, 0x6b, 0x23, + 0x64, 0x64, 0x09, 0x20, 0x74, 0x2a, 0x10, 0x01, 0x0c, 0xf6, 0xed, 0xee, 0x20, 0xb1, 0x90, 0xaf, + 0x03, 0x87, 0x0f, 0x72, 0x1d, 0xa8, 0xfe, 0xc3, 0x3c, 0x0c, 0x96, 0xdb, 0xed, 0x60, 0x28, 0xbc, + 0x08, 0xa5, 0x72, 0xbb, 0x7d, 0x4f, 0xab, 0xca, 0xa1, 0xcc, 0xf5, 0x76, 0xbb, 0xde, 0x71, 0x4c, + 0xd9, 0x27, 0x94, 0x13, 0x91, 0x69, 0x18, 0x2e, 0xb7, 0xdb, 0xcb, 0x9d, 0xd5, 0xa6, 0xd9, 0x90, + 0x32, 0x31, 0xf1, 0x5c, 0x75, 0xed, 0x76, 0xbd, 0x8d, 0x98, 0x78, 0x3a, 0xae, 0x68, 0x19, 0xf2, + 0x65, 0x0c, 0xfb, 0x23, 0x12, 0x01, 0xf1, 0x54, 0x23, 0x6a, 0x10, 0xc4, 0x3c, 0x6c, 0xdb, 0x64, + 0x40, 0xc4, 0x83, 0xbd, 0x5f, 0xf1, 0x43, 0xf4, 0xb3, 0x8a, 0x12, 0x09, 0x7f, 0x42, 0x96, 0xe4, + 0x33, 0xd0, 0x57, 0x6e, 0xb7, 0xa5, 0xfb, 0x26, 0x74, 0x2a, 0x62, 0xa5, 0xe2, 0xb9, 0xd6, 0x04, + 0xd9, 0xe5, 0xb7, 0x60, 0x24, 0x5a, 0xd9, 0xbe, 0x82, 0xc5, 0xff, 0x20, 0x87, 0x1f, 0x74, 0xc2, + 0x7d, 0x9a, 0x5f, 0x86, 0x42, 0xb9, 0xdd, 0x16, 0xf3, 0xd1, 0xb9, 0x94, 0xfe, 0x88, 0x3f, 0x81, + 0x2e, 0xb7, 0xdb, 0xfe, 0xa7, 0x9f, 0xf0, 0xc7, 0x11, 0x07, 0xfa, 0xf4, 0xef, 0xf0, 0x4f, 0x3f, + 0xd9, 0x0f, 0x17, 0xd4, 0xdf, 0x2c, 0xc0, 0x68, 0xb9, 0xdd, 0x3e, 0x0b, 0x32, 0x7f, 0x54, 0x0f, + 0xad, 0x5f, 0x02, 0x90, 0xa6, 0xc7, 0xbe, 0xe0, 0xe9, 0xd6, 0xa0, 0x34, 0x35, 0x2a, 0x39, 0x4d, + 0x22, 0xf2, 0xd5, 0xaf, 0x7f, 0x5f, 0xea, 0xf7, 0x95, 0x02, 0x4e, 0xc5, 0x27, 0x3d, 0x68, 0xd4, + 0x47, 0xa5, 0xdb, 0x44, 0x1f, 0x94, 0xf6, 0xd5, 0x07, 0x7f, 0x27, 0x32, 0x78, 0x30, 0x68, 0xf9, + 0x59, 0x2f, 0xf4, 0x1e, 0xca, 0x2c, 0x1e, 0x91, 0x85, 0x29, 0x22, 0xd9, 0xf8, 0x89, 0x9b, 0x44, + 0x5c, 0xa5, 0x06, 0x43, 0xd5, 0x4d, 0x43, 0x8b, 0xd1, 0xfa, 0x7d, 0xd8, 0xb7, 0xaf, 0x3e, 0xdc, + 0xce, 0xe3, 0xdb, 0xe9, 0x20, 0x2e, 0xd3, 0xe1, 0x77, 0x17, 0x37, 0x00, 0xb8, 0xe7, 0x41, 0xe0, + 0xd6, 0x3c, 0xcc, 0x43, 0xb0, 0xf0, 0x7c, 0x4e, 0x22, 0x04, 0x4b, 0x48, 0x12, 0x78, 0x48, 0x15, + 0x52, 0x3d, 0xa4, 0xae, 0x43, 0xbf, 0xa6, 0x6f, 0xbe, 0xdb, 0xa1, 0xce, 0x96, 0x30, 0x67, 0x78, + 0xd8, 0x43, 0x7d, 0xb3, 0xfe, 0xa3, 0x0c, 0xa8, 0x05, 0x68, 0xa2, 0x06, 0x8f, 0xef, 0x25, 0x8f, + 0x10, 0x7e, 0x46, 0x1e, 0x3c, 0xb9, 0x3f, 0x88, 0xa2, 0x93, 0x37, 0xa0, 0x50, 0x7e, 0x50, 0x13, + 0x92, 0x0d, 0xba, 0xb6, 0xfc, 0xa0, 0x26, 0xe4, 0x95, 0x59, 0xf6, 0x41, 0x4d, 0xfd, 0x4a, 0x1e, + 0x48, 0x92, 0x92, 0xbc, 0x0a, 0x03, 0x08, 0x5d, 0x67, 0x3a, 0x23, 0x27, 0x02, 0xdd, 0x74, 0xeb, + 0x0e, 0x42, 0x23, 0xc6, 0x9d, 0x4f, 0x4a, 0x5e, 0xc7, 0x54, 0xcb, 0x22, 0x15, 0x5d, 0x24, 0x11, + 0xe8, 0xa6, 0xeb, 0x27, 0x27, 0x8e, 0x65, 0x5a, 0x16, 0xc4, 0x68, 0x17, 0x3e, 0xa8, 0xcd, 0xd9, + 0xae, 0x27, 0x44, 0xcd, 0xed, 0xc2, 0x4d, 0x17, 0x33, 0xd0, 0x46, 0xec, 0x42, 0x4e, 0x86, 0x59, + 0xb4, 0x1e, 0xd4, 0xf8, 0x33, 0x15, 0x43, 0xb3, 0x9b, 0xbe, 0x41, 0xc9, 0xb3, 0x68, 0x6d, 0xba, + 0x75, 0xfe, 0xc4, 0xc5, 0xc0, 0x1c, 0xcf, 0x91, 0x2c, 0x5a, 0x91, 0x52, 0xea, 0xd7, 0xfa, 0x61, + 0xac, 0xa2, 0x7b, 0xfa, 0xaa, 0xee, 0x52, 0x69, 0x37, 0x3d, 0xea, 0xc3, 0xfc, 0xcf, 0x91, 0xe4, + 0x60, 0xac, 0xa6, 0x7c, 0x4d, 0xbc, 0x00, 0x79, 0x33, 0xe4, 0x1b, 0xe4, 0x38, 0x95, 0x93, 0xa6, + 0xad, 0xd6, 0xdb, 0x02, 0xac, 0x25, 0x08, 0xc9, 0x0b, 0x30, 0xe8, 0xc3, 0xd8, 0x06, 0xa0, 0x10, + 0xea, 0x8c, 0xb1, 0xca, 0xec, 0x7f, 0x4d, 0x46, 0x93, 0xd7, 0x61, 0xc8, 0xff, 0x29, 0x99, 0xd6, + 0x3c, 0x03, 0xdc, 0x6a, 0x62, 0xf7, 0x24, 0x93, 0xca, 0x45, 0x71, 0x7e, 0xeb, 0x8d, 0x14, 0x8d, + 0x25, 0x59, 0x8b, 0x90, 0x92, 0x1f, 0x85, 0x11, 0xff, 0xb7, 0xd8, 0x30, 0xf0, 0x7c, 0x74, 0x2f, + 0x04, 0x29, 0xa4, 0x63, 0x62, 0x9d, 0x8c, 0x92, 0xf3, 0xad, 0xc3, 0x93, 0x7e, 0xde, 0x30, 0x63, + 0x35, 0xb9, 0x73, 0x88, 0x55, 0x40, 0xaa, 0x30, 0xee, 0x43, 0x42, 0x0d, 0xed, 0x0b, 0x77, 0x8c, + 0xc6, 0x6a, 0x3d, 0x55, 0x49, 0x93, 0xa5, 0x48, 0x13, 0xae, 0x44, 0x80, 0x86, 0xbb, 0x61, 0xae, + 0x79, 0x62, 0xbb, 0x27, 0x62, 0x10, 0x8b, 0x44, 0x91, 0x01, 0x57, 0x4e, 0xe3, 0x67, 0x7c, 0x8d, + 0x66, 0x87, 0xea, 0xca, 0x8d, 0xd4, 0xe0, 0xbc, 0x8f, 0xbf, 0x3d, 0xbd, 0xbc, 0xec, 0xd8, 0xef, + 0xd3, 0x86, 0x57, 0xad, 0x88, 0xed, 0x32, 0xc6, 0xa6, 0x33, 0x56, 0xeb, 0xeb, 0x8d, 0x36, 0x53, + 0x0a, 0x86, 0x8b, 0x32, 0x4f, 0x2d, 0x4c, 0xee, 0xc3, 0x05, 0x09, 0x2e, 0xa5, 0xa3, 0x86, 0x70, + 0x3f, 0x2f, 0xb8, 0xa6, 0x67, 0xa4, 0x4e, 0x2f, 0x4e, 0xde, 0x82, 0x61, 0x1f, 0xc1, 0x6f, 0x11, + 0x07, 0xf1, 0x16, 0x11, 0x87, 0xa4, 0xb1, 0x5a, 0x8f, 0xbf, 0xa6, 0x8c, 0x12, 0xcb, 0x1a, 0x85, + 0x19, 0xfc, 0x87, 0x22, 0x1a, 0xe5, 0x6d, 0xb5, 0x53, 0x95, 0x11, 0xb3, 0xfa, 0xbf, 0x13, 0x6a, + 0xd4, 0x92, 0x63, 0xae, 0x9b, 0x7c, 0x27, 0xed, 0x3f, 0xa0, 0x5c, 0xad, 0xdb, 0x08, 0x4c, 0xd3, + 0x0f, 0x4e, 0x7e, 0xb9, 0x0c, 0xe7, 0x52, 0x74, 0x6c, 0x5f, 0x3b, 0xc6, 0xaf, 0xe6, 0xc3, 0x46, + 0x9c, 0xf0, 0x6d, 0xe3, 0x14, 0xf4, 0xfb, 0x5f, 0x22, 0x8c, 0x07, 0x25, 0x6b, 0x68, 0xc6, 0x79, + 0xf8, 0xf8, 0x88, 0x38, 0x4e, 0xf8, 0x56, 0xf2, 0x28, 0xc4, 0xf1, 0xdd, 0x5c, 0x28, 0x8e, 0x13, + 0xbe, 0xbd, 0xfc, 0xe9, 0x62, 0x38, 0x27, 0x9d, 0xed, 0x31, 0x8f, 0xca, 0x4c, 0x0e, 0xfd, 0x60, + 0x4b, 0xfb, 0x78, 0xc8, 0x28, 0xab, 0x66, 0xdf, 0xc1, 0x54, 0x93, 0xbc, 0x05, 0x83, 0xcb, 0xb6, + 0xeb, 0xad, 0x3b, 0xd4, 0x5d, 0x0e, 0x62, 0xe8, 0xe3, 0x23, 0xd8, 0xb6, 0x00, 0xd7, 0xdb, 0x91, + 0xd9, 0x5f, 0x26, 0x57, 0xff, 0x71, 0x21, 0xa1, 0x0d, 0xdc, 0x70, 0x3d, 0x91, 0xda, 0x70, 0x04, + 0x43, 0x9d, 0xdc, 0x0c, 0x57, 0x41, 0x6e, 0xe1, 0xf7, 0x4a, 0x01, 0x02, 0x57, 0x85, 0x81, 0x1f, + 0x25, 0x21, 0x3f, 0x04, 0x97, 0x22, 0x80, 0x65, 0xdd, 0xd1, 0x5b, 0xd4, 0x0b, 0xf3, 0x15, 0x62, + 0xc8, 0x27, 0xbf, 0x74, 0xbd, 0x1d, 0xa0, 0xe5, 0x1c, 0x88, 0x19, 0x1c, 0x24, 0xd5, 0xea, 0xdb, + 0x87, 0x8b, 0xf5, 0xcf, 0x15, 0x42, 0x43, 0x27, 0x1a, 0xba, 0x55, 0xa3, 0x6e, 0xa7, 0xe9, 0x9d, + 0xde, 0x0e, 0x3e, 0x58, 0x62, 0x8c, 0x39, 0x18, 0x2d, 0xaf, 0xad, 0xd1, 0x86, 0xe7, 0x47, 0xa4, + 0x76, 0x45, 0xb0, 0x3e, 0xbe, 0xf1, 0x10, 0x28, 0x11, 0x61, 0x38, 0x92, 0xc9, 0x3f, 0x56, 0x4c, + 0xfd, 0x27, 0x45, 0x50, 0x02, 0xc3, 0x3f, 0x78, 0xe6, 0x75, 0x8c, 0x8b, 0xec, 0x47, 0xa2, 0x57, + 0x4c, 0x18, 0x0f, 0x85, 0x51, 0xeb, 0xb4, 0x5a, 0x3a, 0x0e, 0x3d, 0xb6, 0xb1, 0x98, 0x88, 0x33, + 0x0b, 0x09, 0xf9, 0x5e, 0xe2, 0xb2, 0xd8, 0x4b, 0x90, 0xf0, 0x19, 0x5d, 0xdd, 0xe5, 0x2c, 0xb4, + 0x24, 0x57, 0xf2, 0xf5, 0x1c, 0x9c, 0xf7, 0x3b, 0x65, 0x69, 0x95, 0x19, 0xd5, 0xd3, 0x76, 0xc7, + 0xf2, 0xfc, 0x7d, 0xcc, 0x1b, 0xd9, 0xd5, 0xf1, 0x4e, 0x9a, 0x4c, 0x2b, 0xcc, 0x5b, 0x12, 0x84, + 0xa5, 0x08, 0x14, 0xc2, 0x46, 0x9a, 0x7a, 0x03, 0x89, 0xb4, 0xd4, 0x7a, 0x2f, 0xdf, 0x86, 0x27, + 0x32, 0x59, 0xee, 0x66, 0xc4, 0xf6, 0xca, 0x46, 0xec, 0x7f, 0x9f, 0x0b, 0x27, 0xa2, 0x98, 0x90, + 0xc8, 0x24, 0x40, 0x08, 0x12, 0xdb, 0xda, 0x91, 0x9d, 0xed, 0x09, 0x08, 0x85, 0xa6, 0x49, 0x14, + 0x64, 0x09, 0x4a, 0x42, 0x2c, 0x3c, 0x37, 0xf0, 0xa7, 0x77, 0xe9, 0x85, 0x49, 0x59, 0x0e, 0xb8, + 0x65, 0x15, 0xdf, 0x2c, 0xd8, 0x5c, 0x7e, 0x1d, 0x06, 0x0f, 0xfa, 0x5d, 0x5f, 0x2f, 0x00, 0x91, + 0xf7, 0xa0, 0xc7, 0x68, 0xa0, 0x9f, 0xe0, 0x29, 0xec, 0x1a, 0xf4, 0xb3, 0x4f, 0xc0, 0x6c, 0x19, + 0x52, 0x74, 0xdc, 0x8e, 0x80, 0x69, 0x01, 0x36, 0x0c, 0x4d, 0xd5, 0x97, 0x1e, 0x9a, 0x4a, 0xfd, + 0xd9, 0x02, 0x5c, 0x94, 0x3b, 0xa4, 0x42, 0x31, 0xe0, 0xfe, 0x59, 0xa7, 0x7c, 0x88, 0x9d, 0xa2, + 0x42, 0x89, 0x6f, 0x3d, 0x44, 0xe6, 0x03, 0x7e, 0x2c, 0x84, 0x10, 0x4d, 0x60, 0xd4, 0xff, 0x25, + 0x0f, 0xc3, 0x81, 0x79, 0xa7, 0x3b, 0xee, 0x29, 0xee, 0x8e, 0xcf, 0xc2, 0x30, 0x06, 0x17, 0x6a, + 0x51, 0x8b, 0x07, 0xe0, 0xe9, 0x95, 0x52, 0x95, 0xf8, 0x08, 0x91, 0x95, 0x2a, 0x42, 0xc8, 0xb4, + 0x9f, 0x5b, 0x7e, 0x52, 0xc8, 0x27, 0x6e, 0xf6, 0x71, 0xb8, 0xfa, 0x97, 0x0b, 0x30, 0xe4, 0x4b, + 0x79, 0xca, 0x3c, 0xa9, 0xf7, 0x3c, 0xc7, 0x2b, 0xe4, 0x1b, 0x00, 0xcb, 0xb6, 0xe3, 0xe9, 0xcd, + 0xc5, 0x50, 0xf3, 0xf1, 0x80, 0xb4, 0x8d, 0x50, 0x5e, 0x46, 0x22, 0xc1, 0xf5, 0x2b, 0x34, 0xab, + 0xf9, 0xc4, 0xc4, 0xd7, 0xaf, 0x00, 0xaa, 0x49, 0x14, 0xea, 0xef, 0xe6, 0x61, 0xd4, 0xef, 0xa4, + 0x99, 0xc7, 0xb4, 0xd1, 0x39, 0xcd, 0x73, 0x53, 0x54, 0xda, 0xbd, 0xbb, 0x4a, 0x5b, 0xfd, 0xbf, + 0xa4, 0x89, 0x64, 0xba, 0x69, 0x9f, 0x4d, 0x24, 0x7f, 0x1c, 0x3a, 0xae, 0xfe, 0x78, 0x01, 0xce, + 0xfb, 0x52, 0x9f, 0xed, 0x58, 0x78, 0xb4, 0x30, 0xad, 0x37, 0x9b, 0xa7, 0x79, 0x37, 0x3e, 0xe8, + 0x0b, 0x62, 0x49, 0x44, 0xeb, 0x13, 0x19, 0x02, 0xd7, 0x04, 0xb8, 0x6e, 0x9b, 0x86, 0x26, 0x13, + 0x91, 0x77, 0x60, 0xc8, 0xff, 0x59, 0x76, 0xd6, 0xfd, 0x2d, 0x38, 0x5e, 0x14, 0x04, 0x85, 0x74, + 0x27, 0x12, 0x94, 0x20, 0x52, 0x40, 0xfd, 0x4a, 0x1f, 0x5c, 0x7e, 0x60, 0x5a, 0x86, 0xbd, 0xe9, + 0xfa, 0x09, 0x26, 0x4f, 0xfc, 0x41, 0xd9, 0x71, 0x27, 0x96, 0x7c, 0x17, 0x2e, 0xc4, 0x45, 0xea, + 0x04, 0x61, 0xbf, 0x45, 0xef, 0x6c, 0x72, 0x82, 0xba, 0x9f, 0x6a, 0x52, 0xdc, 0xb6, 0x69, 0xe9, + 0x25, 0xe3, 0xb9, 0x2a, 0xfb, 0xf6, 0x92, 0xab, 0xf2, 0x79, 0x28, 0x55, 0xec, 0x96, 0x6e, 0xfa, + 0xe1, 0x69, 0x70, 0x14, 0x07, 0xf5, 0x22, 0x46, 0x13, 0x14, 0x8c, 0xbf, 0xa8, 0x18, 0xbb, 0x6c, + 0x20, 0xe4, 0xef, 0x17, 0x60, 0x56, 0x9a, 0x26, 0x13, 0x11, 0x1b, 0x86, 0x45, 0x75, 0xe2, 0x6e, + 0x0c, 0x70, 0xf3, 0xf4, 0x8a, 0x2f, 0xa3, 0x6c, 0xb5, 0x9a, 0x8c, 0x94, 0xe3, 0xdb, 0x28, 0x9e, + 0x42, 0x53, 0x7c, 0x0c, 0xbf, 0x25, 0xd3, 0xa2, 0xfc, 0x25, 0x21, 0xe0, 0x24, 0x33, 0x98, 0x14, + 0x02, 0xce, 0x32, 0x32, 0x11, 0x99, 0x81, 0x71, 0x0c, 0xce, 0x1c, 0x6c, 0xa5, 0x98, 0x4a, 0x0c, + 0xa1, 0x51, 0x89, 0x57, 0x2e, 0x3c, 0x9e, 0x33, 0xfb, 0xb8, 0x7a, 0x43, 0xa0, 0xb5, 0x64, 0x09, + 0xf2, 0x04, 0x14, 0x16, 0xe7, 0xcb, 0x78, 0x57, 0xd3, 0xcf, 0x13, 0x23, 0x59, 0x4d, 0x5d, 0x63, + 0xb0, 0xcb, 0x9f, 0x07, 0x92, 0xfc, 0x9c, 0x7d, 0xdd, 0xc7, 0xfc, 0x57, 0xd2, 0x96, 0xef, 0xa4, + 0x7b, 0xd4, 0x1c, 0xc5, 0x44, 0x18, 0xc9, 0x49, 0xd6, 0xfb, 0x61, 0xe6, 0x24, 0x2b, 0x1d, 0x69, + 0x4e, 0x32, 0xf5, 0x57, 0x73, 0x30, 0x9e, 0x08, 0x60, 0x4e, 0x5e, 0x06, 0xe0, 0x10, 0x29, 0x50, + 0x24, 0x46, 0x5e, 0x09, 0x83, 0x9a, 0x8b, 0xe5, 0x31, 0x24, 0x23, 0x37, 0xa0, 0x9f, 0xff, 0x12, + 0xc1, 0x9d, 0x92, 0x45, 0x3a, 0x1d, 0xd3, 0xd0, 0x02, 0xa2, 0xb0, 0x16, 0xbc, 0x91, 0x2c, 0xa4, + 0x16, 0xf1, 0xb6, 0xda, 0x41, 0x2d, 0x8c, 0x4c, 0xfd, 0x5a, 0x1e, 0x86, 0x82, 0x06, 0x97, 0x8d, + 0xe3, 0xd2, 0xb9, 0x92, 0x88, 0x05, 0x5f, 0xd8, 0x2d, 0x16, 0x7c, 0x6c, 0xbe, 0x15, 0xc1, 0xdf, + 0x8f, 0xee, 0x41, 0xd5, 0x37, 0xf2, 0x30, 0x1a, 0xd4, 0x7a, 0x8c, 0x97, 0x5f, 0x1f, 0x21, 0x91, + 0x7c, 0x3d, 0x07, 0xca, 0x94, 0xd9, 0x6c, 0x9a, 0xd6, 0x7a, 0xd5, 0x5a, 0xb3, 0x9d, 0x16, 0x4e, + 0x88, 0xc7, 0x77, 0x84, 0xab, 0xfe, 0xa9, 0x1c, 0x8c, 0x8b, 0x06, 0x4d, 0xeb, 0x8e, 0x71, 0x7c, + 0xe7, 0x63, 0xf1, 0x96, 0x1c, 0x9f, 0xbe, 0xa8, 0xdf, 0xce, 0x03, 0xcc, 0xdb, 0x8d, 0x87, 0x27, + 0xfc, 0x3d, 0xd6, 0x9b, 0x50, 0xe2, 0x11, 0xb6, 0x84, 0xc6, 0x8e, 0x8b, 0x77, 0x47, 0xec, 0xd3, + 0x38, 0x62, 0x6a, 0x4c, 0xcc, 0xc7, 0x25, 0x1e, 0xa1, 0x4b, 0xc9, 0x69, 0xa2, 0x08, 0xab, 0x94, + 0xd1, 0x89, 0x05, 0x23, 0xa8, 0x94, 0xc1, 0xa2, 0x95, 0xee, 0x6c, 0x4f, 0x14, 0x9b, 0x76, 0xe3, + 0xa1, 0x86, 0xf4, 0xea, 0xbf, 0xca, 0x71, 0xd9, 0x9d, 0xf0, 0x57, 0xa5, 0xfe, 0xe7, 0x17, 0xf7, + 0xf9, 0xf9, 0x7f, 0x3a, 0x07, 0xe7, 0x35, 0xda, 0xb0, 0x1f, 0x51, 0x67, 0x6b, 0xda, 0x36, 0xe8, + 0x6d, 0x6a, 0x51, 0xe7, 0xb8, 0x46, 0xd4, 0x7f, 0x86, 0xc9, 0x33, 0xc2, 0xc6, 0xdc, 0x73, 0xa9, + 0x71, 0x72, 0x12, 0x9b, 0xa8, 0xbf, 0xd1, 0x07, 0x4a, 0xaa, 0xd5, 0x7b, 0x62, 0xcd, 0xb9, 0xcc, + 0xad, 0x4c, 0xf1, 0xa8, 0xb6, 0x32, 0xbd, 0xfb, 0xdb, 0xca, 0x94, 0xf6, 0xbb, 0x95, 0xe9, 0xdb, + 0xcb, 0x56, 0xa6, 0x15, 0xdf, 0xca, 0xf4, 0xe3, 0x56, 0xe6, 0xe5, 0xae, 0x5b, 0x99, 0x19, 0xcb, + 0x38, 0xe0, 0x46, 0xe6, 0xc4, 0x26, 0xdd, 0x3d, 0xc8, 0x0e, 0xec, 0x1a, 0x9b, 0x14, 0x1b, 0xb6, + 0x63, 0x50, 0x43, 0x6c, 0xbc, 0xf0, 0xd4, 0xdf, 0x11, 0x30, 0x2d, 0xc0, 0x26, 0x32, 0x18, 0x0f, + 0xef, 0x25, 0x83, 0xf1, 0x11, 0xec, 0xbf, 0xbe, 0x9a, 0x87, 0xf1, 0x69, 0xea, 0x78, 0x3c, 0x84, + 0xe7, 0x51, 0xb8, 0xc4, 0x95, 0x61, 0x54, 0x62, 0x88, 0x16, 0x79, 0x3e, 0x74, 0xf3, 0x6b, 0x50, + 0xc7, 0x8b, 0x7b, 0x09, 0xc6, 0xe9, 0x59, 0xf5, 0x7e, 0x16, 0x31, 0x31, 0x76, 0x83, 0xea, 0x7d, + 0x38, 0x17, 0xa4, 0x29, 0x7e, 0x69, 0x01, 0xbd, 0x94, 0x18, 0xac, 0xb8, 0xff, 0xc4, 0x60, 0xea, + 0xaf, 0xe4, 0xe0, 0xaa, 0x46, 0x2d, 0xba, 0xa9, 0xaf, 0x36, 0xa9, 0xd4, 0x2c, 0xb1, 0x32, 0xb0, + 0x59, 0xc3, 0x74, 0x5b, 0xba, 0xd7, 0xd8, 0x38, 0x94, 0x8c, 0x66, 0x61, 0x48, 0x9e, 0xbf, 0xf6, + 0x31, 0xb7, 0x45, 0xca, 0xa9, 0xbf, 0x51, 0x84, 0xbe, 0x29, 0xdb, 0xbb, 0x63, 0x1f, 0x32, 0x53, + 0x5d, 0x38, 0xe5, 0xe7, 0xf7, 0x71, 0xd6, 0xf3, 0x19, 0xac, 0x5c, 0x0a, 0xde, 0x8f, 0x2e, 0xa4, + 0xab, 0x76, 0x22, 0xc9, 0x81, 0x4f, 0xb6, 0xcf, 0x1c, 0x75, 0xaf, 0xc2, 0x00, 0x46, 0x7f, 0x91, + 0x4e, 0x63, 0xd1, 0x41, 0xdb, 0x63, 0xc0, 0x78, 0x1d, 0x21, 0x29, 0xf9, 0xa1, 0x48, 0xcc, 0xd1, + 0xd2, 0xe1, 0x73, 0xda, 0xc9, 0xe1, 0x47, 0x5f, 0xe6, 0x17, 0x79, 0xd8, 0x26, 0x29, 0xff, 0x07, + 0x9e, 0xa2, 0xc4, 0x9a, 0x14, 0x10, 0x1e, 0x61, 0xbe, 0xb9, 0x69, 0x18, 0x9e, 0xb2, 0x3d, 0xc9, + 0x19, 0x78, 0x20, 0x7c, 0x06, 0xca, 0x24, 0x9f, 0xee, 0x09, 0x1c, 0x2d, 0xa3, 0x7e, 0xbf, 0x08, + 0x43, 0xfe, 0xcf, 0x63, 0xd2, 0x9d, 0x17, 0xa1, 0x34, 0x67, 0x4b, 0x29, 0x10, 0xd0, 0x81, 0x78, + 0xc3, 0x76, 0x63, 0x9e, 0xd1, 0x82, 0x88, 0x49, 0x7d, 0xd1, 0x36, 0x64, 0xf7, 0x77, 0x94, 0xba, + 0x65, 0x1b, 0x89, 0xe7, 0xc3, 0x01, 0x21, 0xb9, 0x0a, 0x45, 0x7c, 0x39, 0x20, 0x1d, 0xe4, 0xc7, + 0x5e, 0x0b, 0x20, 0x5e, 0xd2, 0xca, 0xd2, 0x7e, 0xb5, 0xb2, 0xef, 0xa0, 0x5a, 0xd9, 0x7f, 0xb4, + 0x5a, 0xf9, 0x1e, 0x0c, 0x61, 0x4d, 0x7e, 0x06, 0xb5, 0xdd, 0x17, 0xd6, 0x27, 0xc4, 0xda, 0x37, + 0xcc, 0xdb, 0x2d, 0xf2, 0xa8, 0xe1, 0x92, 0x17, 0x61, 0x15, 0xd3, 0x5d, 0x38, 0xc4, 0x76, 0xfa, + 0x1f, 0xe7, 0xa0, 0xef, 0x9e, 0xf5, 0xd0, 0xb2, 0x37, 0x0f, 0xa7, 0x71, 0x2f, 0xc3, 0xa0, 0x60, + 0x23, 0xad, 0x2e, 0xf8, 0x22, 0xbc, 0xc3, 0xc1, 0x75, 0xe4, 0xa4, 0xc9, 0x54, 0xe4, 0xad, 0xa0, + 0x10, 0x3e, 0x0e, 0x2a, 0x84, 0x49, 0x44, 0xfc, 0x42, 0x8d, 0x68, 0xde, 0x03, 0x99, 0x9c, 0x5c, + 0x81, 0x62, 0x85, 0x35, 0x55, 0x8a, 0xa2, 0xcb, 0x9a, 0xa2, 0x21, 0x54, 0xfd, 0x6a, 0x11, 0x46, + 0x62, 0x07, 0x5f, 0xcf, 0xc3, 0x80, 0x38, 0x78, 0x32, 0xfd, 0x44, 0x0c, 0xf8, 0x78, 0x28, 0x00, + 0x6a, 0xfd, 0xfc, 0xcf, 0xaa, 0x41, 0x3e, 0x07, 0x7d, 0xb6, 0x8b, 0x8b, 0x22, 0x7e, 0xcb, 0x48, + 0x38, 0x84, 0x96, 0x6a, 0xac, 0xed, 0x7c, 0x70, 0x08, 0x12, 0x59, 0x23, 0x6d, 0x17, 0x3f, 0xed, + 0x16, 0x0c, 0xe8, 0xae, 0x4b, 0xbd, 0xba, 0xa7, 0xaf, 0xcb, 0xb9, 0x19, 0x02, 0xa0, 0x3c, 0x3a, + 0x10, 0xb8, 0xa2, 0xaf, 0x93, 0xcf, 0xc3, 0x70, 0xc3, 0xa1, 0xb8, 0x6c, 0xea, 0x4d, 0xd6, 0x4a, + 0xc9, 0xac, 0x8d, 0x20, 0xe4, 0xfb, 0x93, 0x10, 0x51, 0x35, 0xc8, 0x7d, 0x18, 0x16, 0x9f, 0xc3, + 0x3d, 0xf7, 0x71, 0xa0, 0x8d, 0x84, 0xcb, 0x18, 0x17, 0x09, 0xf7, 0xdd, 0x17, 0x0f, 0x38, 0x64, + 0x72, 0x99, 0xaf, 0x21, 0x91, 0x92, 0x25, 0x20, 0x9b, 0x74, 0xb5, 0xae, 0x77, 0xbc, 0x0d, 0x56, + 0x17, 0x0f, 0x2d, 0x2e, 0x52, 0x12, 0xe2, 0xab, 0x87, 0x24, 0x56, 0x7e, 0x0c, 0xb2, 0x49, 0x57, + 0xcb, 0x11, 0x24, 0x79, 0x00, 0x17, 0x92, 0x45, 0xd8, 0x27, 0xf3, 0xcb, 0x81, 0xe7, 0x76, 0xb6, + 0x27, 0x26, 0x52, 0x09, 0x24, 0xb6, 0xe7, 0x12, 0x6c, 0xab, 0xc6, 0x9d, 0x62, 0x7f, 0xdf, 0x58, + 0xbf, 0x36, 0xc2, 0xca, 0xfa, 0x26, 0xa4, 0x69, 0xa8, 0xbf, 0x9f, 0x63, 0xa6, 0x22, 0xfb, 0x20, + 0xcc, 0xc9, 0xcc, 0x74, 0xbd, 0xb5, 0x4f, 0x5d, 0x6f, 0x85, 0xd9, 0x13, 0x4b, 0x6e, 0x97, 0xd9, + 0x55, 0x13, 0x58, 0x32, 0x09, 0x25, 0x43, 0x3e, 0x35, 0xbb, 0x18, 0xed, 0x04, 0xbf, 0x1e, 0x4d, + 0x50, 0x91, 0x6b, 0x50, 0x64, 0x4b, 0x56, 0x7c, 0xcb, 0x2c, 0x5b, 0x17, 0x1a, 0x52, 0xa8, 0x3f, + 0x96, 0x87, 0x21, 0xe9, 0x6b, 0x6e, 0x1e, 0xea, 0x73, 0xde, 0xd8, 0x5b, 0x33, 0x7d, 0xa7, 0x17, + 0xdc, 0x4b, 0xf9, 0x4d, 0xbe, 0x15, 0x88, 0x62, 0x4f, 0x17, 0x52, 0x42, 0x30, 0xaf, 0x8a, 0x0f, + 0x2d, 0xed, 0x7d, 0xfb, 0xc8, 0xe8, 0xef, 0x14, 0xfb, 0xf3, 0x63, 0x85, 0x3b, 0xc5, 0xfe, 0xe2, + 0x58, 0x2f, 0xc6, 0xe1, 0xc2, 0xd0, 0xd7, 0x7c, 0x6f, 0x6e, 0xad, 0x99, 0xeb, 0x27, 0xfc, 0xed, + 0xc8, 0xd1, 0xc6, 0x28, 0x8b, 0xc9, 0xe6, 0x84, 0x3f, 0x24, 0xf9, 0x50, 0x65, 0x73, 0x96, 0x6d, + 0x51, 0xc8, 0xe6, 0x9f, 0xe4, 0x40, 0x49, 0x95, 0x4d, 0xf9, 0x98, 0xfc, 0x20, 0x8e, 0x2e, 0xe7, + 0xe2, 0x1f, 0xe6, 0x61, 0xbc, 0x6a, 0x79, 0x74, 0x9d, 0xef, 0x18, 0x4f, 0xf8, 0x54, 0x71, 0x17, + 0x06, 0xa5, 0x8f, 0x11, 0x7d, 0xfe, 0x64, 0xb0, 0x1f, 0x0f, 0x51, 0x19, 0x9c, 0xe4, 0xd2, 0x47, + 0x98, 0xa6, 0x3d, 0x26, 0xe4, 0x13, 0x3e, 0xe7, 0x9c, 0x0c, 0x21, 0x9f, 0xf0, 0xc9, 0xeb, 0x23, + 0x2a, 0xe4, 0xff, 0x23, 0x07, 0xe7, 0x52, 0x2a, 0x27, 0x57, 0xa1, 0xaf, 0xd6, 0x59, 0xc5, 0xb0, + 0x5b, 0xb9, 0xd0, 0x63, 0xd8, 0xed, 0xac, 0x62, 0xc4, 0x2d, 0xcd, 0x47, 0x92, 0x15, 0x7c, 0x5c, + 0xbf, 0x54, 0xad, 0x4c, 0x0b, 0xa9, 0xaa, 0x52, 0x98, 0x00, 0x06, 0x4e, 0xfb, 0xb2, 0xe0, 0x01, + 0xbe, 0x6d, 0x1a, 0x8d, 0xd8, 0x03, 0x7c, 0x56, 0x86, 0xfc, 0x30, 0x0c, 0x94, 0x3f, 0xe8, 0x38, + 0x14, 0xf9, 0x72, 0x89, 0x7f, 0x22, 0xe0, 0xeb, 0x23, 0xd2, 0x38, 0xf3, 0x58, 0x02, 0x8c, 0x22, + 0xce, 0x3b, 0x64, 0xa8, 0x7e, 0x2d, 0x07, 0x97, 0xb3, 0x5b, 0x47, 0x3e, 0x03, 0x7d, 0x6c, 0x67, + 0x5e, 0xd6, 0x16, 0xc5, 0xa7, 0xf3, 0xfc, 0xa4, 0x76, 0x93, 0xd6, 0x75, 0x47, 0x36, 0xf6, 0x7d, + 0x32, 0xf2, 0x36, 0x0c, 0x56, 0x5d, 0xb7, 0x43, 0x9d, 0xda, 0xcb, 0xf7, 0xb4, 0xaa, 0xd8, 0x13, + 0xe2, 0x9e, 0xc3, 0x44, 0x70, 0xdd, 0x7d, 0x39, 0x16, 0x58, 0x4b, 0xa6, 0x57, 0x7f, 0x32, 0x07, + 0x57, 0xba, 0x7d, 0x15, 0x79, 0x19, 0xfa, 0x57, 0xa8, 0xa5, 0x5b, 0x5e, 0xb5, 0x22, 0x9a, 0x84, + 0x5b, 0x2c, 0x0f, 0x61, 0xd1, 0x9d, 0x42, 0x40, 0xc8, 0x0a, 0xf1, 0x73, 0xc5, 0xc0, 0x91, 0x81, + 0x9f, 0x81, 0x22, 0x2c, 0x56, 0xc8, 0x27, 0x54, 0xff, 0x20, 0x0f, 0x43, 0xcb, 0xcd, 0xce, 0xba, + 0x29, 0x2d, 0x1c, 0x07, 0xb6, 0xb7, 0x7d, 0xeb, 0x37, 0xbf, 0x3f, 0xeb, 0x97, 0x0d, 0x37, 0xe7, + 0x80, 0xc3, 0xcd, 0x2f, 0x47, 0xde, 0x82, 0x52, 0x1b, 0xbf, 0x23, 0x7e, 0x12, 0xcb, 0xbf, 0x2e, + 0xeb, 0x24, 0x96, 0x97, 0x61, 0xe3, 0xab, 0x71, 0x88, 0xf1, 0x15, 0x96, 0x95, 0x04, 0x1a, 0x2e, + 0x12, 0x67, 0x02, 0x3d, 0x12, 0x81, 0x86, 0x0b, 0xc2, 0x99, 0x40, 0x0f, 0x21, 0xd0, 0xdf, 0xc8, + 0xc3, 0x48, 0xb4, 0x4a, 0xf2, 0x19, 0x18, 0xe4, 0xd5, 0xf0, 0x73, 0xa1, 0x9c, 0xe4, 0x54, 0x1c, + 0x82, 0x35, 0xe0, 0x3f, 0xc4, 0x01, 0xd7, 0xe8, 0x86, 0xee, 0xd6, 0xc3, 0x13, 0x1a, 0x7e, 0x7f, + 0xdb, 0xcf, 0x3d, 0xa1, 0x62, 0x28, 0x6d, 0x64, 0x43, 0x77, 0xa7, 0xc3, 0xdf, 0x64, 0x06, 0x88, + 0x43, 0x3b, 0x2e, 0x8d, 0x32, 0x28, 0x22, 0x03, 0x91, 0x1c, 0x3a, 0x8e, 0xd5, 0xc6, 0x39, 0x4c, + 0x66, 0xf3, 0xa5, 0xa0, 0xd9, 0xa8, 0x0c, 0xbd, 0x7b, 0xc8, 0x5c, 0x2d, 0xd1, 0xa7, 0x1f, 0x73, + 0x72, 0x82, 0x8a, 0xee, 0xe9, 0x7c, 0x53, 0xee, 0x77, 0x80, 0xfa, 0x77, 0x6d, 0xe8, 0x5d, 0xb2, + 0xe8, 0xd2, 0x1a, 0x79, 0x09, 0x06, 0x98, 0xc2, 0xcc, 0xdb, 0xac, 0x2f, 0x73, 0xc2, 0x7f, 0x42, + 0xd2, 0x24, 0x44, 0xcc, 0xf5, 0x68, 0x21, 0x15, 0xb9, 0xc5, 0xb3, 0xdf, 0xf3, 0x39, 0x56, 0x68, + 0x1f, 0x91, 0xcb, 0x70, 0xcc, 0x5c, 0x8f, 0x26, 0xd1, 0xf9, 0xa5, 0xc4, 0x03, 0x9d, 0x42, 0xb2, + 0x14, 0xc7, 0xf8, 0xa5, 0xc4, 0xf8, 0x98, 0x4f, 0x4b, 0x2c, 0x1f, 0xdf, 0x3d, 0x25, 0x29, 0xe6, + 0x7a, 0xb4, 0xf4, 0x84, 0xf4, 0x43, 0xb2, 0x43, 0x69, 0xdc, 0xe9, 0x43, 0xc6, 0xcd, 0xf5, 0x68, + 0x11, 0x5a, 0xf2, 0x1a, 0x0c, 0x8a, 0xdf, 0x77, 0x6c, 0x71, 0xa3, 0x2c, 0xc5, 0x22, 0x92, 0x50, + 0x73, 0x3d, 0x9a, 0x4c, 0x29, 0x55, 0xba, 0xec, 0x98, 0x96, 0x27, 0xde, 0x28, 0xc7, 0x2b, 0x45, + 0x9c, 0x54, 0x29, 0xfe, 0x26, 0x6f, 0xc3, 0x70, 0x10, 0xe4, 0xe9, 0x7d, 0xda, 0xf0, 0xc4, 0xe1, + 0xf7, 0x85, 0x58, 0x61, 0x8e, 0x9c, 0xeb, 0xd1, 0xa2, 0xd4, 0xe4, 0x1a, 0x94, 0x34, 0xea, 0x9a, + 0x1f, 0xf8, 0xd7, 0xc5, 0x23, 0xd2, 0x38, 0x37, 0x3f, 0x60, 0x52, 0x12, 0x78, 0xd6, 0x3b, 0xe1, + 0xfd, 0xb4, 0x38, 0xaa, 0x26, 0xb1, 0x5a, 0x66, 0x2c, 0x83, 0xf5, 0x8e, 0xe4, 0x9c, 0xf0, 0xf9, + 0x30, 0xf4, 0x95, 0x48, 0x98, 0x39, 0x18, 0x8f, 0x31, 0x20, 0x63, 0xe7, 0x7a, 0xb4, 0x18, 0xbd, + 0x24, 0xd5, 0x8a, 0xe9, 0x3e, 0x14, 0xd1, 0x46, 0xe3, 0x52, 0x65, 0x28, 0x49, 0xaa, 0xec, 0xa7, + 0x54, 0xf5, 0x22, 0xf5, 0x36, 0x6d, 0xe7, 0xa1, 0x88, 0x2d, 0x1a, 0xaf, 0x5a, 0x60, 0xa5, 0xaa, + 0x05, 0x44, 0xae, 0x9a, 0x0d, 0xb8, 0x91, 0xf4, 0xaa, 0x75, 0x4f, 0x97, 0xab, 0xe6, 0x27, 0x71, + 0x7e, 0x27, 0xcd, 0x53, 0xfd, 0x11, 0xcf, 0x5b, 0x9e, 0xec, 0x50, 0xc4, 0x49, 0x1d, 0x8a, 0xbf, + 0x59, 0xa5, 0x52, 0x6e, 0x6a, 0x91, 0x98, 0x3c, 0xa8, 0x54, 0x42, 0xb1, 0x4a, 0xe5, 0x2c, 0xd6, + 0xb7, 0xe4, 0x94, 0xcd, 0xca, 0x78, 0xb4, 0x83, 0x42, 0x0c, 0xeb, 0x20, 0x29, 0xb5, 0xf3, 0x04, + 0xa6, 0x83, 0x55, 0x08, 0x92, 0x0f, 0x06, 0x2d, 0x9c, 0x5e, 0x9e, 0xeb, 0xd1, 0x30, 0x51, 0xac, + 0xca, 0x13, 0x0d, 0x2b, 0xe7, 0x90, 0x62, 0xc8, 0xa7, 0x60, 0xb0, 0xb9, 0x1e, 0x8d, 0x27, 0x21, + 0x7e, 0x49, 0x4a, 0xe9, 0xa7, 0x9c, 0x8f, 0x4e, 0x11, 0x01, 0x82, 0x4d, 0x11, 0x61, 0xe2, 0xbf, + 0xd9, 0x64, 0xda, 0x3b, 0xe5, 0x42, 0x74, 0xa9, 0x89, 0xe3, 0xe7, 0x7a, 0xb4, 0x64, 0xaa, 0xbc, + 0xd7, 0x22, 0x99, 0xe0, 0x94, 0x8b, 0xb1, 0x00, 0x60, 0x21, 0x8a, 0x89, 0x4b, 0xce, 0x19, 0xb7, + 0x14, 0xcb, 0x5a, 0x2e, 0x26, 0xab, 0x4b, 0xd1, 0x8d, 0x4b, 0x0a, 0xc9, 0x5c, 0x8f, 0x96, 0x56, + 0x92, 0x4c, 0x27, 0xf2, 0xb1, 0x29, 0x4a, 0xd4, 0x37, 0x26, 0x86, 0x9e, 0xeb, 0xd1, 0x12, 0x19, + 0xdc, 0x6e, 0xc9, 0x89, 0xd0, 0x94, 0x27, 0xa2, 0x9d, 0x18, 0x62, 0x58, 0x27, 0x4a, 0x09, 0xd3, + 0x6e, 0xc9, 0xc9, 0xb1, 0x94, 0xcb, 0xc9, 0x52, 0xe1, 0xcc, 0x29, 0x25, 0xd1, 0xd2, 0xd2, 0xf3, + 0xfd, 0x28, 0x4f, 0x8a, 0x8c, 0xab, 0xa2, 0x7c, 0x1a, 0xcd, 0x5c, 0x8f, 0x96, 0x9e, 0x2b, 0x48, + 0x4b, 0x4f, 0x94, 0xa3, 0x5c, 0xe9, 0xc6, 0x33, 0x68, 0x5d, 0x7a, 0x92, 0x1d, 0xbd, 0x4b, 0xda, + 0x12, 0xe5, 0xa9, 0x68, 0xf4, 0xe1, 0x4c, 0xc2, 0xb9, 0x1e, 0xad, 0x4b, 0xf2, 0x93, 0x7b, 0x19, + 0x39, 0x44, 0x94, 0xa7, 0xa3, 0x09, 0x97, 0x53, 0x89, 0xe6, 0x7a, 0xb4, 0x8c, 0x0c, 0x24, 0xf7, + 0x32, 0x52, 0x4c, 0x28, 0x13, 0x5d, 0xd9, 0x06, 0xf2, 0xc8, 0x48, 0x50, 0xb1, 0x94, 0x9a, 0x9d, + 0x41, 0x79, 0x26, 0xaa, 0xba, 0x29, 0x24, 0x4c, 0x75, 0xd3, 0xf2, 0x3a, 0x2c, 0xa5, 0xa6, 0x13, + 0x50, 0x9e, 0xed, 0xc2, 0x30, 0x68, 0x63, 0x6a, 0x22, 0x82, 0xa5, 0xd4, 0x78, 0xfe, 0x8a, 0x1a, + 0x65, 0x98, 0x42, 0xc2, 0x18, 0xa6, 0x65, 0x02, 0x58, 0x4a, 0x0d, 0xfb, 0xae, 0x3c, 0xd7, 0x85, + 0x61, 0xd8, 0xc2, 0xb4, 0x80, 0xf1, 0xaf, 0x45, 0xe2, 0xae, 0x2b, 0x9f, 0x88, 0xce, 0x1b, 0x12, + 0x8a, 0xcd, 0x1b, 0x72, 0x84, 0xf6, 0xe9, 0x44, 0x64, 0x59, 0xe5, 0x93, 0xd1, 0x61, 0x1e, 0x43, + 0xb3, 0x61, 0x1e, 0x8f, 0x45, 0x3b, 0x9d, 0x88, 0xb0, 0xa9, 0x5c, 0xcd, 0x62, 0x82, 0xe8, 0x28, + 0x13, 0x1e, 0x93, 0xb3, 0x9a, 0x12, 0xe2, 0x51, 0xf9, 0x54, 0xd4, 0xaf, 0x3b, 0x41, 0x30, 0xd7, + 0xa3, 0xa5, 0x04, 0x86, 0xd4, 0xd2, 0xe3, 0x19, 0x29, 0xd7, 0xa2, 0xc3, 0x36, 0x8d, 0x86, 0x0d, + 0xdb, 0xd4, 0x58, 0x48, 0xf3, 0x69, 0x8f, 0x4f, 0x94, 0xeb, 0x51, 0xc3, 0x2c, 0x49, 0xc1, 0x0c, + 0xb3, 0x94, 0x47, 0x2b, 0x5a, 0x7a, 0x8c, 0x1d, 0xe5, 0xf9, 0xae, 0x2d, 0x44, 0x9a, 0x94, 0x16, + 0xf2, 0x90, 0x33, 0xa1, 0xed, 0x74, 0xaf, 0xdd, 0xb4, 0x75, 0x43, 0xf9, 0x74, 0xaa, 0xed, 0xc4, + 0x91, 0x92, 0xed, 0xc4, 0x01, 0x6c, 0x95, 0x97, 0xdf, 0x38, 0x28, 0x2f, 0x44, 0x57, 0x79, 0x19, + 0xc7, 0x56, 0xf9, 0xc8, 0x7b, 0x88, 0xe9, 0xc4, 0x7b, 0x00, 0xe5, 0xc5, 0xa8, 0x02, 0xc4, 0xd0, + 0x4c, 0x01, 0xe2, 0x2f, 0x08, 0xbe, 0x9c, 0xed, 0x41, 0xaf, 0x4c, 0x22, 0xb7, 0x67, 0x7c, 0x6e, + 0x59, 0x74, 0x73, 0x3d, 0x5a, 0xb6, 0x17, 0x7e, 0x35, 0xc5, 0x21, 0x5e, 0xb9, 0x11, 0x55, 0xb0, + 0x04, 0x01, 0x53, 0xb0, 0xa4, 0x1b, 0x7d, 0x35, 0xc5, 0xa3, 0x5d, 0xf9, 0x4c, 0x26, 0xab, 0xe0, + 0x9b, 0x53, 0xfc, 0xe0, 0x6f, 0xc9, 0x2e, 0xe9, 0xca, 0x4b, 0xd1, 0xc5, 0x2e, 0xc4, 0xb0, 0xc5, + 0x4e, 0x72, 0x5d, 0xbf, 0x25, 0x3b, 0x63, 0x2b, 0x37, 0x93, 0xa5, 0xc2, 0x25, 0x52, 0x72, 0xda, + 0xd6, 0xd2, 0x7d, 0x98, 0x95, 0x97, 0xa3, 0x5a, 0x97, 0x46, 0xc3, 0xb4, 0x2e, 0xd5, 0xff, 0x79, + 0x36, 0xe9, 0x8a, 0xac, 0xdc, 0x8a, 0x6f, 0xb2, 0xa3, 0x78, 0x66, 0xf9, 0x24, 0xdc, 0x97, 0x3f, + 0x1f, 0x0f, 0xb6, 0xa7, 0xbc, 0x12, 0xbb, 0xf6, 0x8d, 0x60, 0x99, 0x7d, 0x1b, 0x0b, 0xce, 0xf7, + 0xf9, 0x78, 0x7c, 0x3a, 0xe5, 0xd5, 0x74, 0x0e, 0x81, 0xae, 0xc4, 0xe3, 0xd9, 0x7d, 0x3e, 0x1e, + 0xd2, 0x4d, 0x79, 0x2d, 0x9d, 0x43, 0x20, 0xdd, 0x78, 0x08, 0xb8, 0x97, 0xa4, 0x20, 0xf3, 0xca, + 0x67, 0xa3, 0xa6, 0x63, 0x80, 0x60, 0xa6, 0x63, 0x18, 0x8a, 0xfe, 0x25, 0x29, 0x38, 0xbb, 0xf2, + 0x7a, 0xa2, 0x48, 0xd0, 0x58, 0x29, 0x84, 0xfb, 0x4b, 0x52, 0x50, 0x73, 0xe5, 0x8d, 0x44, 0x91, + 0xa0, 0x75, 0x52, 0xe8, 0x73, 0xa3, 0xdb, 0xfb, 0x55, 0xe5, 0xcd, 0xe8, 0x61, 0x70, 0x36, 0xe5, + 0x5c, 0x8f, 0xd6, 0xed, 0x1d, 0xec, 0x97, 0xb3, 0x1d, 0xbb, 0x95, 0xb7, 0xa2, 0x43, 0x38, 0x8b, + 0x8e, 0x0d, 0xe1, 0x4c, 0xe7, 0xf0, 0xb7, 0x63, 0xb1, 0x2c, 0x94, 0xb7, 0xa3, 0x53, 0x5c, 0x04, + 0xc9, 0xa6, 0xb8, 0x78, 0xe4, 0x8b, 0x48, 0x90, 0x06, 0xe5, 0x73, 0xd1, 0x29, 0x4e, 0xc6, 0xb1, + 0x29, 0x2e, 0x12, 0xd0, 0x61, 0x3a, 0x11, 0x3b, 0x40, 0x79, 0x27, 0x3a, 0xc5, 0xc5, 0xd0, 0x6c, + 0x8a, 0x8b, 0x47, 0x1b, 0x78, 0x3b, 0xf6, 0x84, 0x5e, 0xf9, 0x7c, 0x7a, 0xfb, 0x11, 0x29, 0xb7, + 0x9f, 0x3f, 0xb8, 0xd7, 0xd2, 0xdf, 0x82, 0x2b, 0xe5, 0xe8, 0xf8, 0x4d, 0xa3, 0x61, 0xe3, 0x37, + 0xf5, 0x1d, 0x79, 0x7c, 0xe3, 0x20, 0xb4, 0x6a, 0xaa, 0xcb, 0xc6, 0x21, 0x34, 0x45, 0x52, 0xc0, + 0x91, 0x3d, 0x32, 0xdf, 0x08, 0x4d, 0x67, 0xec, 0x91, 0xfd, 0x6d, 0x50, 0x8c, 0x9e, 0xcd, 0xae, + 0x09, 0x3f, 0x63, 0xa5, 0x12, 0x9d, 0x5d, 0x13, 0x04, 0x6c, 0x76, 0x4d, 0x7a, 0x27, 0xcf, 0xc2, + 0x98, 0xd0, 0x22, 0xee, 0x3e, 0x6d, 0x5a, 0xeb, 0xca, 0x4c, 0xec, 0xbd, 0x65, 0x0c, 0xcf, 0x66, + 0xa7, 0x38, 0x0c, 0xd7, 0x6b, 0x0e, 0x9b, 0x6e, 0x9a, 0xed, 0x55, 0x5b, 0x77, 0x8c, 0x1a, 0xb5, + 0x0c, 0x65, 0x36, 0xb6, 0x5e, 0xa7, 0xd0, 0xe0, 0x7a, 0x9d, 0x02, 0xc7, 0x10, 0x71, 0x31, 0xb8, + 0x46, 0x1b, 0xd4, 0x7c, 0x44, 0x95, 0xdb, 0xc8, 0x76, 0x22, 0x8b, 0xad, 0x20, 0x9b, 0xeb, 0xd1, + 0xb2, 0x38, 0x30, 0x5b, 0x7d, 0x61, 0xab, 0xf6, 0xee, 0x7c, 0x10, 0x7e, 0x60, 0xd9, 0xa1, 0x6d, + 0xdd, 0xa1, 0xca, 0x5c, 0xd4, 0x56, 0x4f, 0x25, 0x62, 0xb6, 0x7a, 0x2a, 0x22, 0xc9, 0xd6, 0x1f, + 0x0b, 0xd5, 0x6e, 0x6c, 0xc3, 0x11, 0x91, 0x5e, 0x9a, 0xcd, 0x4e, 0x51, 0x04, 0x13, 0xd0, 0xbc, + 0x6d, 0xad, 0xe3, 0x49, 0xc5, 0x9d, 0xe8, 0xec, 0x94, 0x4d, 0xc9, 0x66, 0xa7, 0x6c, 0x2c, 0x53, + 0xf5, 0x28, 0x96, 0x8f, 0xc1, 0xbb, 0x51, 0x55, 0x4f, 0x21, 0x61, 0xaa, 0x9e, 0x02, 0x4e, 0x32, + 0xd4, 0xa8, 0x4b, 0x3d, 0x65, 0xbe, 0x1b, 0x43, 0x24, 0x49, 0x32, 0x44, 0x70, 0x92, 0xe1, 0x2c, + 0xf5, 0x1a, 0x1b, 0xca, 0x42, 0x37, 0x86, 0x48, 0x92, 0x64, 0x88, 0x60, 0xb6, 0xd9, 0x8c, 0x82, + 0xa7, 0x3a, 0xcd, 0x87, 0x7e, 0x9f, 0x2d, 0x46, 0x37, 0x9b, 0x99, 0x84, 0x6c, 0xb3, 0x99, 0x89, + 0x24, 0x3f, 0xb9, 0x67, 0x3f, 0x78, 0x65, 0x09, 0x2b, 0x9c, 0x0c, 0xed, 0x82, 0xbd, 0x94, 0x9a, + 0xeb, 0xd1, 0xf6, 0xea, 0x67, 0xff, 0xe9, 0xc0, 0x69, 0x54, 0x59, 0xc6, 0xaa, 0x46, 0x83, 0xb3, + 0x0a, 0x0e, 0x9e, 0xeb, 0xd1, 0x02, 0xb7, 0xd2, 0xd7, 0x60, 0x10, 0x3f, 0xaa, 0x6a, 0x99, 0x5e, + 0x65, 0x4a, 0x79, 0x37, 0xba, 0x65, 0x92, 0x50, 0x6c, 0xcb, 0x24, 0xfd, 0x64, 0x93, 0x38, 0xfe, + 0xe4, 0x53, 0x4c, 0x65, 0x4a, 0xd1, 0xa2, 0x93, 0x78, 0x04, 0xc9, 0x26, 0xf1, 0x08, 0x20, 0xa8, + 0xb7, 0xe2, 0xd8, 0xed, 0xca, 0x94, 0x52, 0x4b, 0xa9, 0x97, 0xa3, 0x82, 0x7a, 0xf9, 0xcf, 0xa0, + 0xde, 0xda, 0x46, 0xc7, 0xab, 0xb0, 0x6f, 0x5c, 0x49, 0xa9, 0xd7, 0x47, 0x06, 0xf5, 0xfa, 0x00, + 0x36, 0x15, 0x22, 0x60, 0xd9, 0xb1, 0xd9, 0xa4, 0x7d, 0xd7, 0x6c, 0x36, 0x95, 0x7b, 0xd1, 0xa9, + 0x30, 0x8e, 0x67, 0x53, 0x61, 0x1c, 0xc6, 0x4c, 0x4f, 0xde, 0x2a, 0xba, 0xda, 0x59, 0x57, 0xee, + 0x47, 0x4d, 0xcf, 0x10, 0xc3, 0x4c, 0xcf, 0xf0, 0x17, 0xee, 0x2e, 0xd8, 0x2f, 0x8d, 0xae, 0x39, + 0xd4, 0xdd, 0x50, 0x1e, 0xc4, 0x76, 0x17, 0x12, 0x0e, 0x77, 0x17, 0xd2, 0x6f, 0xb2, 0x0e, 0x4f, + 0x46, 0x16, 0x1a, 0xff, 0xd2, 0xa6, 0x46, 0x75, 0xa7, 0xb1, 0xa1, 0x7c, 0x01, 0x59, 0x3d, 0x97, + 0xba, 0x54, 0x45, 0x49, 0xe7, 0x7a, 0xb4, 0x6e, 0x9c, 0x70, 0x5b, 0xfe, 0xee, 0x3c, 0x8f, 0x04, + 0xab, 0x2d, 0x4f, 0xfb, 0x9b, 0xd0, 0xf7, 0x62, 0xdb, 0xf2, 0x24, 0x09, 0x6e, 0xcb, 0x93, 0x60, + 0xd2, 0x86, 0xa7, 0x63, 0x5b, 0xb5, 0x05, 0xbd, 0xc9, 0xf6, 0x25, 0xd4, 0x58, 0xd6, 0x1b, 0x0f, + 0xa9, 0xa7, 0x7c, 0x11, 0x79, 0x5f, 0xcd, 0xd8, 0xf0, 0xc5, 0xa8, 0xe7, 0x7a, 0xb4, 0x5d, 0xf8, + 0x11, 0x15, 0x8a, 0xb5, 0xd9, 0x95, 0x65, 0xe5, 0x87, 0xa2, 0xe7, 0x9b, 0x0c, 0x36, 0xd7, 0xa3, + 0x21, 0x8e, 0x59, 0x69, 0xf7, 0xda, 0xeb, 0x8e, 0x6e, 0x50, 0x6e, 0x68, 0xa1, 0xed, 0x26, 0x0c, + 0xd0, 0x1f, 0x8e, 0x5a, 0x69, 0x59, 0x74, 0xcc, 0x4a, 0xcb, 0xc2, 0x31, 0x45, 0x8d, 0x24, 0x3d, + 0x51, 0xbe, 0x14, 0x55, 0xd4, 0x08, 0x92, 0x29, 0x6a, 0x34, 0x45, 0xca, 0x17, 0xe0, 0x62, 0xb0, + 0x9f, 0x17, 0xeb, 0x2f, 0xef, 0x34, 0xe5, 0xcb, 0xc8, 0xe7, 0xe9, 0xc4, 0x65, 0x40, 0x84, 0x6a, + 0xae, 0x47, 0xcb, 0x28, 0xcf, 0x56, 0xdc, 0x44, 0x3e, 0x2f, 0x61, 0x5e, 0xfc, 0x48, 0x74, 0xc5, + 0xcd, 0x20, 0x63, 0x2b, 0x6e, 0x06, 0x2a, 0x95, 0xb9, 0x10, 0xaa, 0xbe, 0x0b, 0xf3, 0x40, 0xa6, + 0x59, 0x1c, 0x52, 0x99, 0x0b, 0x4b, 0x6d, 0x75, 0x17, 0xe6, 0x81, 0xb5, 0x96, 0xc5, 0x81, 0x5c, + 0x83, 0x52, 0xad, 0xb6, 0xa0, 0x75, 0x2c, 0xa5, 0x11, 0xf3, 0x96, 0x45, 0xe8, 0x5c, 0x8f, 0x26, + 0xf0, 0xcc, 0x0c, 0x9a, 0x69, 0xea, 0xae, 0x67, 0x36, 0x5c, 0x1c, 0x31, 0xfe, 0x08, 0x31, 0xa2, + 0x66, 0x50, 0x1a, 0x0d, 0x33, 0x83, 0xd2, 0xe0, 0xcc, 0x5e, 0x9c, 0xd6, 0x5d, 0x57, 0xb7, 0x0c, + 0x47, 0x9f, 0xc2, 0x65, 0x82, 0xc6, 0x5e, 0x63, 0x45, 0xb0, 0xcc, 0x5e, 0x8c, 0x42, 0xf0, 0xf0, + 0xdd, 0x87, 0xf8, 0x66, 0xce, 0x5a, 0xec, 0xf0, 0x3d, 0x86, 0xc7, 0xc3, 0xf7, 0x18, 0x0c, 0xed, + 0x4e, 0x1f, 0xa6, 0xd1, 0x75, 0x93, 0x89, 0x48, 0x59, 0x8f, 0xd9, 0x9d, 0x71, 0x02, 0xb4, 0x3b, + 0xe3, 0xc0, 0x48, 0x93, 0xfc, 0xe5, 0x76, 0x23, 0xa3, 0x49, 0xe1, 0x2a, 0x9b, 0x28, 0xc3, 0xd6, + 0xef, 0x70, 0x70, 0x54, 0xb6, 0x2c, 0xbd, 0x65, 0x57, 0xa6, 0x7c, 0xa9, 0x9b, 0xd1, 0xf5, 0x3b, + 0x93, 0x90, 0xad, 0xdf, 0x99, 0x48, 0x36, 0xbb, 0xfa, 0x1b, 0xad, 0x0d, 0xdd, 0xa1, 0x46, 0xc5, + 0x74, 0xf0, 0x64, 0x71, 0x8b, 0x6f, 0x0d, 0xdf, 0x8f, 0xce, 0xae, 0x5d, 0x48, 0xd9, 0xec, 0xda, + 0x05, 0xcd, 0x8c, 0xbc, 0x74, 0xb4, 0x46, 0x75, 0x43, 0x79, 0x18, 0x35, 0xf2, 0xb2, 0x29, 0x99, + 0x91, 0x97, 0x8d, 0xcd, 0xfe, 0x9c, 0x07, 0x8e, 0xe9, 0x51, 0xa5, 0xb9, 0x97, 0xcf, 0x41, 0xd2, + 0xec, 0xcf, 0x41, 0x34, 0xdb, 0x10, 0xc6, 0x3b, 0xa4, 0x15, 0xdd, 0x10, 0x26, 0xbb, 0x21, 0x5e, + 0x82, 0x59, 0x2c, 0xe2, 0x51, 0x9e, 0x62, 0x45, 0x2d, 0x16, 0x01, 0x66, 0x16, 0x4b, 0xf8, 0x6c, + 0x2f, 0xf2, 0x14, 0x4b, 0xb1, 0xa3, 0x6b, 0xa8, 0x8c, 0x63, 0x6b, 0x68, 0xe4, 0xd9, 0xd6, 0x6b, + 0x91, 0x77, 0x06, 0x4a, 0x3b, 0x6a, 0x75, 0x48, 0x28, 0x66, 0x75, 0xc8, 0x2f, 0x12, 0xa6, 0x61, + 0x14, 0x6f, 0xc1, 0xb5, 0x4e, 0x70, 0x8f, 0xf3, 0xa3, 0xd1, 0xcf, 0x8c, 0xa1, 0xd9, 0x67, 0xc6, + 0x40, 0x11, 0x26, 0x62, 0xda, 0x72, 0x32, 0x98, 0x84, 0xe7, 0x83, 0x31, 0x10, 0x99, 0x07, 0x52, + 0x2b, 0x2f, 0xcc, 0x57, 0x8d, 0x65, 0xf9, 0x8a, 0xcc, 0x8d, 0x9e, 0xc0, 0x26, 0x29, 0xe6, 0x7a, + 0xb4, 0x94, 0x72, 0xe4, 0x7d, 0xb8, 0x22, 0xa0, 0xe2, 0xc5, 0x35, 0xa6, 0xfd, 0x37, 0x82, 0x05, + 0xc1, 0x8b, 0xfa, 0xb1, 0x75, 0xa3, 0x9d, 0xeb, 0xd1, 0xba, 0xf2, 0xca, 0xae, 0x4b, 0xac, 0x0f, + 0x9d, 0xbd, 0xd4, 0x15, 0x2c, 0x12, 0x5d, 0x79, 0x65, 0xd7, 0x25, 0xe4, 0xfe, 0x68, 0x2f, 0x75, + 0x05, 0x9d, 0xd0, 0x95, 0x17, 0x71, 0x61, 0xa2, 0x1b, 0xbe, 0xdc, 0x6c, 0x2a, 0x9b, 0x58, 0xdd, + 0xa7, 0xf6, 0x52, 0x5d, 0x19, 0x0d, 0xce, 0xdd, 0x38, 0xb2, 0x59, 0x7a, 0xa9, 0x4d, 0xad, 0x5a, + 0x64, 0x01, 0x7a, 0x1c, 0x9d, 0xa5, 0x13, 0x04, 0x6c, 0x96, 0x4e, 0x00, 0xd9, 0x80, 0x92, 0x9f, + 0xab, 0x28, 0x5b, 0xd1, 0x01, 0x25, 0xe3, 0xd8, 0x80, 0x8a, 0x3c, 0x6d, 0x59, 0x82, 0x73, 0x4b, + 0x0f, 0x3d, 0xdd, 0xb7, 0x20, 0x5d, 0xd1, 0x95, 0x1f, 0xc4, 0x2e, 0x99, 0x92, 0x24, 0x78, 0xc9, + 0x94, 0x04, 0xb3, 0x31, 0xc2, 0xc0, 0xb5, 0x2d, 0xab, 0x31, 0xab, 0x9b, 0xcd, 0x8e, 0x43, 0x95, + 0x7f, 0x23, 0x3a, 0x46, 0x62, 0x68, 0x36, 0x46, 0x62, 0x20, 0xb6, 0x40, 0x33, 0x50, 0xd9, 0x75, + 0xcd, 0x75, 0x4b, 0xec, 0x2b, 0x3b, 0x4d, 0x4f, 0xf9, 0x37, 0xa3, 0x0b, 0x74, 0x1a, 0x0d, 0x5b, + 0xa0, 0xd3, 0xe0, 0x78, 0xea, 0xc4, 0x7a, 0x81, 0x2d, 0x1e, 0xf2, 0x5d, 0xe5, 0xbf, 0x15, 0x3b, + 0x75, 0x4a, 0xa1, 0xc1, 0x53, 0xa7, 0x14, 0x38, 0x5b, 0x1f, 0xb9, 0x4d, 0x36, 0x6f, 0x06, 0x77, + 0xd5, 0xff, 0x76, 0x74, 0x7d, 0x8c, 0xe3, 0xd9, 0xfa, 0x18, 0x87, 0x45, 0xf9, 0x88, 0x2e, 0xf8, + 0x77, 0xb2, 0xf8, 0x04, 0xf2, 0x4f, 0x94, 0x21, 0xb7, 0x65, 0x3e, 0x62, 0xa4, 0xfc, 0x58, 0x2e, + 0x8b, 0x51, 0x30, 0x3c, 0x12, 0x85, 0xa2, 0x8c, 0x34, 0xfa, 0xc8, 0xa4, 0x9b, 0xca, 0x57, 0x32, + 0x19, 0x71, 0x82, 0x28, 0x23, 0x0e, 0x23, 0xef, 0xc1, 0xc5, 0x10, 0xb6, 0x40, 0x5b, 0xab, 0xc1, + 0xcc, 0xf4, 0x27, 0x72, 0x51, 0x33, 0x38, 0x9d, 0x8c, 0x99, 0xc1, 0xe9, 0x98, 0x34, 0xd6, 0x42, + 0x74, 0xff, 0xee, 0x2e, 0xac, 0x03, 0x09, 0x66, 0x30, 0x48, 0x63, 0x2d, 0xa4, 0xf9, 0xe3, 0xbb, + 0xb0, 0x0e, 0x64, 0x9a, 0xc1, 0x80, 0xfc, 0x54, 0x0e, 0xae, 0xa6, 0xa3, 0xca, 0xcd, 0xe6, 0xac, + 0xed, 0x84, 0x38, 0xe5, 0x4f, 0xe6, 0xa2, 0x07, 0x0d, 0x7b, 0x2b, 0x36, 0xd7, 0xa3, 0xed, 0xb1, + 0x02, 0xf2, 0x39, 0x18, 0x2e, 0x77, 0x0c, 0xd3, 0xc3, 0x8b, 0x37, 0x66, 0x38, 0xff, 0x44, 0x2e, + 0xb6, 0xc5, 0x91, 0xb1, 0xb8, 0xc5, 0x91, 0x01, 0xe4, 0x0e, 0x8c, 0xd7, 0x68, 0xa3, 0xe3, 0x98, + 0xde, 0x96, 0x46, 0xdb, 0xb6, 0xe3, 0x31, 0x1e, 0x7f, 0x2a, 0x17, 0x9d, 0xc4, 0x12, 0x14, 0x6c, + 0x12, 0x4b, 0x00, 0xc9, 0xfd, 0xc4, 0xad, 0xbc, 0xe8, 0xcc, 0x9f, 0xcc, 0x75, 0xbd, 0x96, 0x0f, + 0xfa, 0x32, 0xbd, 0x38, 0x59, 0x8e, 0xdd, 0xa2, 0x0b, 0xae, 0x3f, 0x95, 0xeb, 0x72, 0x8d, 0x2e, + 0xcd, 0x70, 0x49, 0x30, 0xe3, 0x98, 0x92, 0x01, 0x5e, 0xf9, 0xd3, 0xb9, 0x2e, 0xd7, 0xde, 0x21, + 0xc7, 0xb4, 0xe4, 0xf1, 0xaf, 0x70, 0x4f, 0x11, 0xc1, 0xe8, 0xa7, 0x73, 0x49, 0x57, 0x91, 0xa0, + 0xbc, 0x44, 0xc8, 0x8a, 0xdd, 0x73, 0x03, 0xa5, 0xff, 0x6a, 0x2e, 0xe9, 0x9b, 0x17, 0x16, 0x0b, + 0x7f, 0x11, 0x0a, 0x97, 0x67, 0x1e, 0x7b, 0xd4, 0xb1, 0xf4, 0x26, 0x76, 0x67, 0xcd, 0xb3, 0x1d, + 0x7d, 0x9d, 0xce, 0x58, 0xfa, 0x6a, 0x93, 0x2a, 0x5f, 0xcb, 0x45, 0x2d, 0xd8, 0x6c, 0x52, 0x66, + 0xc1, 0x66, 0x63, 0xc9, 0x06, 0x3c, 0x99, 0x86, 0xad, 0x98, 0x2e, 0xd6, 0xf3, 0xf5, 0x5c, 0xd4, + 0x84, 0xed, 0x42, 0xcb, 0x4c, 0xd8, 0x2e, 0x68, 0x72, 0x13, 0x06, 0xa6, 0x6c, 0x7f, 0xfa, 0xfd, + 0x33, 0x31, 0x67, 0xc8, 0x00, 0x33, 0xd7, 0xa3, 0x85, 0x64, 0xa2, 0x8c, 0x18, 0xd4, 0xdf, 0x48, + 0x96, 0x09, 0x2f, 0x9f, 0x82, 0x1f, 0xa2, 0x8c, 0x10, 0xf7, 0xbf, 0x97, 0x2c, 0x13, 0xde, 0x71, + 0x05, 0x3f, 0xd8, 0x4c, 0xc2, 0x6b, 0x5c, 0x98, 0x2d, 0x33, 0xbb, 0x6d, 0x7a, 0x43, 0x6f, 0x36, + 0xa9, 0xb5, 0x4e, 0x95, 0x6f, 0xc6, 0x66, 0x92, 0x74, 0x32, 0x36, 0x93, 0xa4, 0x63, 0xc8, 0x0f, + 0xc3, 0xa5, 0xfb, 0x7a, 0xd3, 0x34, 0x42, 0x9c, 0x9f, 0x0f, 0x5c, 0xf9, 0x99, 0x5c, 0x74, 0x37, + 0x9d, 0x41, 0xc7, 0x76, 0xd3, 0x19, 0x28, 0xb2, 0x00, 0x04, 0x97, 0xd1, 0x60, 0xb6, 0x60, 0xeb, + 0xb3, 0xf2, 0xef, 0xe7, 0xa2, 0x76, 0x6a, 0x92, 0x84, 0xd9, 0xa9, 0x49, 0x28, 0xa9, 0x67, 0xa7, + 0x06, 0x51, 0x7e, 0x36, 0x17, 0x3d, 0xad, 0xc9, 0x22, 0x9c, 0xeb, 0xd1, 0xb2, 0xf3, 0x8b, 0xdc, + 0x86, 0xb1, 0xda, 0x72, 0x75, 0x76, 0x76, 0xa6, 0x76, 0xbf, 0x5a, 0xc1, 0x87, 0x0e, 0x86, 0xf2, + 0x67, 0x63, 0x2b, 0x56, 0x9c, 0x80, 0xad, 0x58, 0x71, 0x18, 0x79, 0x13, 0x86, 0x58, 0xfb, 0xd9, + 0x80, 0xc1, 0x4f, 0xfe, 0xb9, 0x5c, 0xd4, 0x9c, 0x92, 0x91, 0xcc, 0x9c, 0x92, 0x7f, 0x93, 0x1a, + 0x9c, 0x67, 0x52, 0x5c, 0x76, 0xe8, 0x1a, 0x75, 0xa8, 0xd5, 0xf0, 0xc7, 0xf4, 0xcf, 0xe7, 0xa2, + 0x56, 0x46, 0x1a, 0x11, 0xb3, 0x32, 0xd2, 0xe0, 0xe4, 0x21, 0x5c, 0x89, 0x9f, 0x04, 0xc9, 0xcf, + 0x4e, 0x95, 0x3f, 0x97, 0x8b, 0x19, 0xc3, 0x5d, 0x88, 0xd1, 0x18, 0xee, 0x82, 0x27, 0x16, 0x3c, + 0x25, 0x8e, 0x55, 0x84, 0xc3, 0x65, 0xbc, 0xb6, 0x3f, 0xcf, 0x6b, 0xfb, 0x64, 0xe8, 0x10, 0xd8, + 0x85, 0x7a, 0xae, 0x47, 0xeb, 0xce, 0x8e, 0xe9, 0x59, 0x32, 0x01, 0x86, 0xf2, 0x0b, 0xb9, 0x74, + 0x8f, 0x94, 0x88, 0x9b, 0x72, 0x5a, 0xe6, 0x8c, 0xf7, 0xb2, 0xd2, 0x37, 0x28, 0x7f, 0x21, 0x36, + 0xde, 0xd2, 0xc9, 0xd8, 0x78, 0xcb, 0xc8, 0xff, 0x70, 0x07, 0xc6, 0xb9, 0x52, 0x2f, 0xeb, 0x38, + 0x0c, 0xad, 0x75, 0x6a, 0x28, 0x7f, 0x31, 0xb6, 0xda, 0x25, 0x28, 0xd0, 0xb5, 0x27, 0x0e, 0x64, + 0x53, 0x77, 0xad, 0xad, 0x5b, 0x16, 0x1e, 0xb3, 0x2a, 0xff, 0x41, 0x6c, 0xea, 0x0e, 0x51, 0xe8, + 0xb8, 0x1b, 0xfc, 0x62, 0x9a, 0xd0, 0x2d, 0xf5, 0x91, 0xf2, 0x97, 0x62, 0x9a, 0xd0, 0x8d, 0x98, + 0x69, 0x42, 0xd7, 0x3c, 0x4a, 0xf7, 0x33, 0x9e, 0x80, 0x2b, 0xdf, 0x8a, 0xad, 0xc8, 0xa9, 0x54, + 0x6c, 0x45, 0x4e, 0x7f, 0x41, 0x7e, 0x3f, 0xe3, 0xf9, 0xb4, 0xf2, 0x8b, 0xdd, 0xf9, 0x86, 0x2b, + 0x7d, 0xfa, 0xeb, 0xeb, 0xfb, 0x19, 0x4f, 0x8f, 0x95, 0xbf, 0xdc, 0x9d, 0x6f, 0xe8, 0xd8, 0x97, + 0xfe, 0x72, 0xb9, 0x9e, 0xfd, 0x6c, 0x57, 0xf9, 0x2b, 0xf1, 0xa9, 0x2b, 0x83, 0x10, 0xa7, 0xae, + 0xac, 0xb7, 0xbf, 0xab, 0xf0, 0x04, 0xd7, 0x90, 0xdb, 0x8e, 0xde, 0xde, 0xa8, 0x51, 0xcf, 0x33, + 0xad, 0x75, 0x7f, 0x27, 0xf6, 0x57, 0x73, 0xb1, 0xe3, 0xb1, 0x2c, 0x4a, 0x3c, 0x1e, 0xcb, 0x42, + 0x32, 0xe5, 0x4d, 0x3c, 0xd0, 0x55, 0xfe, 0x5a, 0x4c, 0x79, 0x13, 0x14, 0x4c, 0x79, 0x93, 0xef, + 0x7a, 0xef, 0xa4, 0xbc, 0x43, 0x55, 0xfe, 0xc3, 0x6c, 0x5e, 0x41, 0xfb, 0x52, 0x9e, 0xaf, 0xde, + 0x49, 0x79, 0x6e, 0xa9, 0xfc, 0x47, 0xd9, 0xbc, 0x42, 0x1f, 0xa4, 0xe4, 0x2b, 0xcd, 0xf7, 0xe0, + 0x22, 0x9f, 0xcd, 0x67, 0xa9, 0x41, 0x23, 0x1f, 0xfa, 0x4b, 0xb1, 0xb1, 0x9f, 0x4e, 0x86, 0x47, + 0xee, 0xa9, 0x98, 0x34, 0xd6, 0xa2, 0xad, 0x7f, 0x7d, 0x17, 0xd6, 0xe1, 0x86, 0x20, 0x1d, 0xc3, + 0xd6, 0x1b, 0xf9, 0xf1, 0x9b, 0xf2, 0xcb, 0xb1, 0xf5, 0x46, 0x46, 0xa2, 0x3b, 0x87, 0xfc, 0x52, + 0xee, 0xcd, 0xe8, 0x43, 0x2f, 0xe5, 0x3f, 0x4e, 0x2d, 0x1c, 0x74, 0x40, 0xf4, 0x55, 0xd8, 0x9b, + 0xd1, 0x47, 0x4d, 0xca, 0xaf, 0xa4, 0x16, 0x0e, 0x3e, 0x20, 0xfa, 0x02, 0x8a, 0x6d, 0x91, 0x3a, + 0x9e, 0xcd, 0x59, 0x45, 0xa6, 0x87, 0xbf, 0x11, 0xdf, 0x22, 0xa5, 0x92, 0xe1, 0x16, 0x29, 0x15, + 0x93, 0xc6, 0x5a, 0x7c, 0xde, 0xaf, 0xee, 0xc2, 0x5a, 0xda, 0xd8, 0xa5, 0x62, 0xd2, 0x58, 0x8b, + 0x8f, 0xff, 0xb5, 0x5d, 0x58, 0x4b, 0x1b, 0xbb, 0x54, 0x0c, 0x33, 0xc7, 0x42, 0xcc, 0x7d, 0xea, + 0xb8, 0xa1, 0xfa, 0xfd, 0x27, 0x31, 0x73, 0x2c, 0x83, 0x8e, 0x99, 0x63, 0x19, 0xa8, 0x54, 0xee, + 0x42, 0x28, 0xbf, 0xbe, 0x1b, 0xf7, 0xf0, 0x5e, 0x26, 0x03, 0x95, 0xca, 0x5d, 0xc8, 0xe5, 0x6f, + 0xee, 0xc6, 0x3d, 0xbc, 0x98, 0xc9, 0x40, 0x31, 0xa3, 0xa8, 0xe6, 0xe9, 0x9e, 0xd9, 0x98, 0xb3, + 0x5d, 0x4f, 0x5a, 0xe4, 0xff, 0x56, 0xcc, 0x28, 0x4a, 0x23, 0x62, 0x46, 0x51, 0x1a, 0x3c, 0xc9, + 0x54, 0x48, 0xe3, 0x37, 0xba, 0x32, 0x0d, 0x2d, 0xad, 0x34, 0x78, 0x92, 0xa9, 0x10, 0xc2, 0x7f, + 0xda, 0x95, 0x69, 0xe8, 0x29, 0x9f, 0x06, 0x67, 0x96, 0xe9, 0xb4, 0x63, 0x6f, 0x5a, 0x77, 0xe8, + 0x26, 0x6d, 0x8a, 0x4f, 0xff, 0xcd, 0x98, 0x65, 0x1a, 0x27, 0xc0, 0x5b, 0x94, 0x18, 0x2c, 0xca, + 0x48, 0x7c, 0xee, 0x6f, 0x65, 0x32, 0x0a, 0x8f, 0x89, 0xe2, 0xb0, 0x28, 0x23, 0xf1, 0x89, 0xbf, + 0x9d, 0xc9, 0x28, 0x3c, 0x26, 0x8a, 0xc3, 0x70, 0xe5, 0x0a, 0x3a, 0xbd, 0xbc, 0x4e, 0x2d, 0x6f, + 0xb9, 0xa9, 0xfb, 0x5a, 0xff, 0xed, 0xf8, 0xca, 0x95, 0x45, 0x89, 0x2b, 0x57, 0x16, 0x32, 0xa3, + 0x0e, 0xf1, 0xf9, 0xbf, 0xb3, 0x7b, 0x1d, 0xd2, 0xea, 0x98, 0x85, 0xcc, 0xa8, 0x43, 0x48, 0xe6, + 0x77, 0x77, 0xaf, 0x23, 0x10, 0x51, 0x36, 0x9b, 0xa9, 0x3e, 0xe8, 0xc5, 0x33, 0x57, 0xf5, 0x5b, + 0x39, 0x18, 0xaa, 0x79, 0x0e, 0xd5, 0x5b, 0x22, 0x32, 0xdc, 0x65, 0xe8, 0xe7, 0xce, 0xcb, 0xfe, + 0x4b, 0x6b, 0x2d, 0xf8, 0x4d, 0xae, 0xc2, 0xc8, 0xbc, 0xee, 0x7a, 0x58, 0xb2, 0x6a, 0x19, 0xf4, + 0x31, 0x3e, 0xdc, 0x2b, 0x68, 0x31, 0x28, 0x99, 0xe7, 0x74, 0xbc, 0x1c, 0x06, 0x03, 0x2d, 0xec, + 0x1a, 0x10, 0xad, 0xff, 0xbb, 0xdb, 0x13, 0x3d, 0x18, 0xff, 0x2c, 0x56, 0x56, 0xfd, 0xfd, 0x1c, + 0x24, 0xdc, 0xaa, 0x0f, 0x1e, 0x01, 0x61, 0x09, 0x46, 0x63, 0x01, 0x68, 0xc5, 0xeb, 0xc3, 0x3d, + 0xc6, 0xa7, 0x8d, 0x97, 0x26, 0x9f, 0x0a, 0x5e, 0xbd, 0xdd, 0xd3, 0xe6, 0x45, 0xb0, 0x3b, 0x4c, + 0xd3, 0xd0, 0x71, 0x9a, 0x9a, 0x84, 0x12, 0xc1, 0x8c, 0x7e, 0x30, 0x16, 0x46, 0xd7, 0x24, 0x57, + 0x45, 0x38, 0x86, 0x5c, 0x18, 0x22, 0x2f, 0x96, 0x14, 0x9e, 0x87, 0x5f, 0xf8, 0x1c, 0x0c, 0x55, + 0x5b, 0x6d, 0xea, 0xb8, 0xb6, 0xa5, 0x7b, 0xb6, 0x23, 0x5e, 0xb3, 0x63, 0xf8, 0x34, 0x53, 0x82, + 0xcb, 0x21, 0xbd, 0x64, 0x7a, 0x72, 0xdd, 0xcf, 0x34, 0x57, 0xc0, 0xb8, 0xa6, 0xf8, 0x24, 0x35, + 0x9e, 0x68, 0x9c, 0x53, 0x30, 0xd2, 0x7b, 0xae, 0x8e, 0xef, 0x23, 0x03, 0xd2, 0x0e, 0x03, 0xc8, + 0xa4, 0x48, 0x41, 0x5e, 0x80, 0x12, 0xde, 0x27, 0xb9, 0x98, 0x41, 0x52, 0x04, 0xee, 0x6b, 0x22, + 0x44, 0x0e, 0x93, 0xc6, 0x69, 0xc8, 0x5d, 0x18, 0x0b, 0x2f, 0xcb, 0x6f, 0x3b, 0x76, 0xa7, 0xed, + 0xe7, 0x8c, 0xc1, 0x04, 0xed, 0x0f, 0x03, 0x5c, 0x7d, 0x1d, 0x91, 0x12, 0x8b, 0x44, 0x41, 0x32, + 0x07, 0xa3, 0x21, 0x8c, 0x89, 0xc8, 0xcf, 0x55, 0x85, 0x79, 0x42, 0x25, 0x5e, 0x4c, 0x9c, 0x91, + 0x3c, 0xa1, 0xb1, 0x62, 0xa4, 0x0a, 0x7d, 0x7e, 0xd4, 0xbe, 0xfe, 0x5d, 0x95, 0xf4, 0x9c, 0x88, + 0xda, 0xd7, 0x27, 0xc7, 0xeb, 0xf3, 0xcb, 0x93, 0x59, 0x18, 0xd1, 0xec, 0x8e, 0x47, 0x57, 0x6c, + 0xb1, 0xcb, 0x14, 0xd1, 0x21, 0xb1, 0x4d, 0x0e, 0xc3, 0xd4, 0x3d, 0xdb, 0xcf, 0x6f, 0x2f, 0xe7, + 0x59, 0x8f, 0x96, 0x22, 0x8b, 0x30, 0x9e, 0x70, 0x2b, 0x90, 0xb3, 0xce, 0x4b, 0x9f, 0x97, 0x64, + 0x96, 0x2c, 0x4a, 0x7e, 0x22, 0x07, 0xa5, 0x15, 0x47, 0x37, 0x3d, 0x57, 0x3c, 0xad, 0xbc, 0x30, + 0xb9, 0xe9, 0xe8, 0x6d, 0xa6, 0x1f, 0x93, 0x18, 0xb8, 0xf6, 0xbe, 0xde, 0xec, 0x50, 0x77, 0xea, + 0x01, 0xfb, 0xba, 0xff, 0x61, 0x7b, 0xe2, 0xcd, 0x75, 0x3c, 0xbc, 0x9c, 0x6c, 0xd8, 0xad, 0x1b, + 0xeb, 0x8e, 0xfe, 0xc8, 0xf4, 0xd0, 0x44, 0xd4, 0x9b, 0x37, 0x3c, 0xda, 0xc4, 0x33, 0xd2, 0x1b, + 0x7a, 0xdb, 0xbc, 0x81, 0x01, 0xd2, 0x6f, 0x04, 0x9c, 0x78, 0x0d, 0x4c, 0x05, 0x3c, 0xfc, 0x4b, + 0x56, 0x01, 0x8e, 0x23, 0x8b, 0x00, 0xe2, 0x53, 0xcb, 0xed, 0xb6, 0x78, 0xa7, 0x29, 0x9d, 0x2c, + 0xfa, 0x18, 0xae, 0xd8, 0x81, 0xc0, 0xf4, 0xb6, 0x14, 0x14, 0x58, 0x93, 0x38, 0x30, 0x2d, 0x58, + 0x11, 0x2d, 0xf2, 0xc5, 0x34, 0x1c, 0x4a, 0xdc, 0x6f, 0x6c, 0x8a, 0x90, 0xe2, 0xc5, 0xc8, 0x2a, + 0x8c, 0x0a, 0xbe, 0x41, 0x0a, 0x91, 0x91, 0xe8, 0xac, 0x10, 0x43, 0x73, 0xa5, 0x0d, 0xda, 0x68, + 0x08, 0xb0, 0x5c, 0x47, 0xac, 0x04, 0x99, 0x0a, 0x53, 0x1e, 0x2f, 0xea, 0x2d, 0xea, 0x2a, 0xa3, + 0xa8, 0xb1, 0x57, 0x76, 0xb6, 0x27, 0x14, 0xbf, 0x3c, 0x06, 0xb0, 0x4c, 0x4d, 0xff, 0x8f, 0x45, + 0x64, 0x1e, 0x5c, 0xeb, 0xc7, 0x52, 0x78, 0xc4, 0x75, 0x3e, 0x5a, 0x84, 0x4c, 0xc3, 0x70, 0xf0, + 0x4c, 0xe4, 0xde, 0xbd, 0x6a, 0x05, 0x1f, 0x82, 0x8a, 0x18, 0xa6, 0xb1, 0x24, 0x1f, 0x32, 0x93, + 0x48, 0x19, 0x29, 0xb6, 0x06, 0x7f, 0x19, 0x1a, 0x8b, 0xad, 0xd1, 0x4e, 0x89, 0xad, 0xb1, 0x4c, + 0xde, 0x86, 0xc1, 0xf2, 0x83, 0x9a, 0x88, 0x19, 0xe2, 0x2a, 0xe7, 0xc2, 0x8c, 0x51, 0xfa, 0xa6, + 0x5b, 0xf7, 0xe3, 0x8b, 0xc8, 0x4d, 0x97, 0xe9, 0xc9, 0x0c, 0x8c, 0x44, 0x3c, 0xcd, 0x5c, 0xe5, + 0x3c, 0x72, 0xc0, 0x96, 0xeb, 0x88, 0xa9, 0x3b, 0x02, 0x25, 0x0f, 0xaf, 0x68, 0x21, 0xa6, 0x35, + 0x15, 0xd3, 0xc5, 0xec, 0x3b, 0x1a, 0xc5, 0xf0, 0x24, 0xf8, 0xac, 0xb4, 0x9f, 0x6b, 0x8d, 0x21, + 0x50, 0x75, 0x87, 0xe3, 0xe4, 0x1e, 0x8d, 0x15, 0x23, 0xef, 0x03, 0xc1, 0x7c, 0x3d, 0xd4, 0xf0, + 0x2f, 0x1e, 0xab, 0x15, 0x57, 0xb9, 0x88, 0x01, 0xbc, 0x49, 0x3c, 0x1c, 0x42, 0xb5, 0x32, 0x75, + 0x55, 0x4c, 0x1f, 0x4f, 0xeb, 0xbc, 0x54, 0xdd, 0x0f, 0x85, 0x50, 0x37, 0x23, 0xc9, 0x8c, 0x53, + 0xb8, 0x92, 0x4d, 0xb8, 0xb4, 0xec, 0xd0, 0x47, 0xa6, 0xdd, 0x71, 0xfd, 0xe5, 0xc3, 0x9f, 0xb7, + 0x2e, 0xed, 0x3a, 0x6f, 0x3d, 0x2b, 0x2a, 0xbe, 0xd0, 0x76, 0xe8, 0xa3, 0xba, 0x1f, 0xb6, 0x39, + 0x12, 0x75, 0x34, 0x8b, 0x3b, 0xa6, 0x64, 0xfe, 0xa0, 0xe3, 0x50, 0x01, 0x37, 0xa9, 0xab, 0x28, + 0xe1, 0x54, 0xcb, 0x23, 0xcd, 0x98, 0x01, 0x2e, 0x92, 0x92, 0x39, 0x5a, 0x8c, 0x68, 0x40, 0x6e, + 0x4f, 0xfb, 0x97, 0xd0, 0xe5, 0x06, 0x4f, 0x5c, 0xab, 0x3c, 0x81, 0xcc, 0x54, 0x26, 0x96, 0xf5, + 0x46, 0x10, 0xc2, 0xbd, 0xae, 0x0b, 0xbc, 0x2c, 0x96, 0x64, 0x69, 0x32, 0x0f, 0x63, 0xcb, 0x0e, + 0x1e, 0x89, 0xdd, 0xa5, 0x5b, 0xcb, 0x76, 0xd3, 0x6c, 0x6c, 0xe1, 0xeb, 0x56, 0x31, 0x55, 0xb6, + 0x39, 0xae, 0xfe, 0x90, 0x6e, 0xd5, 0xdb, 0x88, 0x95, 0x97, 0x95, 0x78, 0x49, 0x39, 0xa4, 0xf2, + 0x93, 0x7b, 0x0b, 0xa9, 0x4c, 0x61, 0x4c, 0x5c, 0x61, 0x3f, 0xf6, 0xa8, 0xc5, 0x96, 0x7a, 0x57, + 0xbc, 0x64, 0x55, 0x62, 0x57, 0xde, 0x01, 0x9e, 0x4f, 0x1d, 0x62, 0x94, 0xd1, 0x00, 0x2c, 0x37, + 0x2c, 0x5e, 0x24, 0x19, 0x77, 0xf8, 0xa9, 0x03, 0xc4, 0x1d, 0xfe, 0x5b, 0x05, 0x79, 0xfe, 0x25, + 0x57, 0xa0, 0x28, 0xa5, 0x05, 0xc2, 0xa0, 0xaa, 0x18, 0x42, 0xbd, 0x28, 0x62, 0x45, 0x0f, 0x08, + 0xdb, 0x25, 0x88, 0x9e, 0x83, 0x79, 0x20, 0xc3, 0x40, 0x9b, 0x5a, 0x48, 0x80, 0x39, 0xf8, 0x3a, + 0xab, 0x4d, 0xb3, 0x81, 0x81, 0xf5, 0x0b, 0x52, 0xb8, 0x0c, 0x84, 0xf2, 0xb8, 0xfa, 0x12, 0x09, + 0xb9, 0x09, 0x83, 0xfe, 0x51, 0x6c, 0x18, 0x54, 0x18, 0xe3, 0xad, 0x8b, 0xd9, 0x5a, 0x84, 0x73, + 0x97, 0x88, 0xc8, 0x1b, 0x00, 0xe1, 0x74, 0x20, 0x2c, 0x2d, 0x5c, 0x2a, 0xe4, 0xd9, 0x43, 0x5e, + 0x2a, 0x42, 0x6a, 0x36, 0x71, 0xca, 0xea, 0xe8, 0x67, 0x1d, 0xc5, 0x89, 0x33, 0xa2, 0xc3, 0xb2, + 0x82, 0x44, 0x8b, 0x90, 0x25, 0x18, 0x4f, 0x68, 0xa0, 0x08, 0x41, 0x8c, 0x99, 0xe7, 0x53, 0xd4, + 0x57, 0x5e, 0x98, 0x13, 0x65, 0xc9, 0x73, 0x50, 0xb8, 0xa7, 0x55, 0x45, 0x18, 0x54, 0x1e, 0x41, + 0x37, 0x12, 0x23, 0x89, 0x61, 0xd5, 0x3f, 0x91, 0x4f, 0xac, 0x4d, 0x4c, 0x7a, 0x82, 0x95, 0xd4, + 0x83, 0x28, 0x3d, 0xbf, 0x7e, 0x2e, 0x3d, 0x89, 0x88, 0x5c, 0x83, 0xfe, 0x65, 0x36, 0x33, 0x34, + 0xec, 0xa6, 0xe8, 0x4f, 0x0c, 0x68, 0xd5, 0x16, 0x30, 0x2d, 0xc0, 0x92, 0x9b, 0x52, 0xb2, 0x5c, + 0x29, 0xb2, 0xb8, 0x9f, 0x2c, 0x37, 0x1e, 0x62, 0x1b, 0xd3, 0xe6, 0xde, 0x8c, 0x25, 0xdf, 0x12, + 0x65, 0x52, 0xd6, 0xc5, 0x30, 0xd9, 0x56, 0x60, 0x95, 0xf6, 0xee, 0x66, 0x95, 0xaa, 0x7f, 0x3b, + 0x97, 0x1c, 0x67, 0xe4, 0x56, 0x32, 0xc8, 0x2f, 0x2e, 0x42, 0x01, 0x50, 0xae, 0x35, 0x08, 0xf7, + 0x1b, 0x09, 0xd7, 0x9b, 0x3f, 0x70, 0xb8, 0xde, 0xc2, 0x3e, 0xc3, 0xf5, 0xaa, 0xff, 0x6f, 0xb1, + 0xab, 0xcb, 0xf5, 0xb1, 0x84, 0x75, 0x7b, 0x9d, 0xed, 0xac, 0x58, 0xed, 0x65, 0x37, 0xb1, 0x3f, + 0xe0, 0x1e, 0xa5, 0x75, 0x9d, 0x0f, 0x2d, 0x57, 0x8b, 0x52, 0x92, 0x77, 0x60, 0xc8, 0xff, 0x00, + 0x0c, 0x03, 0x2d, 0x85, 0x2f, 0x0e, 0x56, 0xb5, 0x58, 0xc0, 0xe4, 0x48, 0x01, 0xf2, 0x0a, 0x0c, + 0xa0, 0x4d, 0xd3, 0xd6, 0x1b, 0x7e, 0x8c, 0x70, 0x1e, 0x54, 0xdc, 0x07, 0xca, 0xa1, 0xcb, 0x02, + 0x4a, 0xf2, 0x25, 0x28, 0x89, 0x44, 0x19, 0x3c, 0x8f, 0xfc, 0x8d, 0x3d, 0xf8, 0xa8, 0x4f, 0xca, + 0x49, 0x32, 0xf8, 0x2e, 0x05, 0x01, 0x91, 0x5d, 0x0a, 0xcf, 0x8f, 0xb1, 0x02, 0xe7, 0x96, 0x1d, + 0x6a, 0xe0, 0x6b, 0x88, 0x99, 0xc7, 0x6d, 0x47, 0xa4, 0x30, 0xe1, 0xa3, 0x1c, 0x17, 0xa9, 0xb6, + 0x8f, 0x66, 0xcb, 0xa7, 0xc0, 0xcb, 0x81, 0x8a, 0x53, 0x8a, 0x33, 0xcb, 0x85, 0xb7, 0xe4, 0x2e, + 0xdd, 0xda, 0xb4, 0x1d, 0x83, 0x67, 0xf9, 0x10, 0xf3, 0xb7, 0x10, 0xf4, 0x43, 0x81, 0x92, 0x2d, + 0x97, 0x68, 0xa1, 0xcb, 0xaf, 0xc3, 0xe0, 0x41, 0x13, 0x4d, 0xfc, 0x7a, 0x3e, 0xe3, 0xf1, 0xd2, + 0xe9, 0xcd, 0xf5, 0x17, 0x24, 0xa0, 0xee, 0xcd, 0x48, 0x40, 0xfd, 0xfd, 0x7c, 0xc6, 0xcb, 0xac, + 0x53, 0x9d, 0x28, 0x36, 0x10, 0x46, 0x34, 0x51, 0x6c, 0x98, 0xa3, 0xd7, 0x34, 0x34, 0x99, 0x28, + 0x96, 0x52, 0xba, 0xb4, 0x6b, 0x4a, 0xe9, 0x5f, 0x2a, 0x74, 0x7b, 0xb9, 0x76, 0x26, 0xfb, 0xfd, + 0xc8, 0xfe, 0x26, 0x0c, 0x06, 0x92, 0xad, 0x56, 0xd0, 0xe8, 0x19, 0x0e, 0xd2, 0xda, 0x70, 0x30, + 0x96, 0x91, 0x88, 0xc8, 0x75, 0xde, 0xd6, 0x9a, 0xf9, 0x01, 0x4f, 0xb0, 0x30, 0x2c, 0x42, 0xe7, + 0xeb, 0x9e, 0x5e, 0x77, 0xcd, 0x0f, 0xa8, 0x16, 0xa0, 0xd5, 0xbf, 0x9b, 0x4f, 0x7d, 0xfe, 0x77, + 0xd6, 0x47, 0xfb, 0xe8, 0xa3, 0x14, 0x21, 0xf2, 0x87, 0x8b, 0x67, 0x42, 0xdc, 0x87, 0x10, 0xff, + 0x28, 0x9f, 0xfa, 0xcc, 0xf3, 0x4c, 0x88, 0xfb, 0x99, 0x2d, 0x5e, 0x80, 0x01, 0xcd, 0xde, 0x74, + 0xa7, 0x71, 0x63, 0xc3, 0xe7, 0x0a, 0x9c, 0xa8, 0x1d, 0x7b, 0xd3, 0xad, 0xe3, 0x96, 0x45, 0x0b, + 0x09, 0xd4, 0x1f, 0xe4, 0xbb, 0x3c, 0x84, 0x3d, 0x13, 0xfc, 0x87, 0xb9, 0x44, 0xfe, 0x56, 0x3e, + 0xf2, 0xd0, 0xf6, 0xf4, 0x0a, 0xfb, 0x06, 0x40, 0xad, 0xb1, 0x41, 0x5b, 0xba, 0x94, 0xa4, 0x0a, + 0xcf, 0x1d, 0x5c, 0x84, 0x8a, 0xe4, 0xc6, 0x21, 0x89, 0xfa, 0xed, 0x7c, 0xec, 0xa5, 0xf1, 0x99, + 0xec, 0xf6, 0x2c, 0xbb, 0x40, 0xeb, 0xc4, 0xe3, 0xe9, 0x33, 0xc9, 0xed, 0x55, 0x72, 0x3f, 0x99, + 0x8f, 0xbd, 0x33, 0x3f, 0xb5, 0xb2, 0x63, 0x03, 0x30, 0xf9, 0xfe, 0xfd, 0xd4, 0x6a, 0xd2, 0x0b, + 0x30, 0x20, 0xe4, 0x10, 0x2c, 0x15, 0x7c, 0xde, 0xe7, 0x40, 0x3c, 0x65, 0x0d, 0x08, 0xd4, 0x3f, + 0x99, 0x87, 0xe8, 0xfb, 0xff, 0x53, 0xaa, 0x43, 0xbf, 0x95, 0x8f, 0x46, 0x3e, 0x38, 0xbd, 0xfa, + 0x33, 0x09, 0x50, 0xeb, 0xac, 0x36, 0x44, 0xe0, 0xdc, 0x5e, 0xe9, 0x98, 0x3e, 0x80, 0x6a, 0x12, + 0x85, 0xfa, 0xff, 0xe5, 0x53, 0xc3, 0x31, 0x9c, 0x5e, 0x01, 0xbe, 0x8c, 0xa7, 0xe2, 0x0d, 0x2b, + 0x9c, 0xc8, 0xf1, 0x10, 0x92, 0x8d, 0xbf, 0x44, 0x66, 0x43, 0x9f, 0x90, 0x7c, 0x36, 0xc5, 0x5c, + 0xc3, 0xbc, 0x0b, 0xa1, 0xb9, 0x26, 0x5f, 0x43, 0x48, 0x86, 0xdb, 0xdf, 0xcf, 0xef, 0x16, 0xbd, + 0xe2, 0x34, 0xaf, 0xaa, 0x7d, 0xcb, 0xfa, 0x16, 0x46, 0x59, 0x64, 0x3d, 0x31, 0xc4, 0xf3, 0xee, + 0xb5, 0x39, 0x48, 0xbe, 0x7b, 0x13, 0x54, 0xea, 0x3f, 0xef, 0x4d, 0x0f, 0x9d, 0x70, 0x7a, 0x45, + 0x78, 0x05, 0x8a, 0xcb, 0xba, 0xb7, 0x21, 0x34, 0x19, 0xaf, 0xf4, 0xda, 0xba, 0xb7, 0xa1, 0x21, + 0x94, 0x5c, 0x87, 0x7e, 0x4d, 0xdf, 0xe4, 0x67, 0x9e, 0xa5, 0x30, 0x27, 0xa2, 0xa3, 0x6f, 0xd6, + 0xf9, 0xb9, 0x67, 0x80, 0x26, 0x6a, 0x90, 0x93, 0x93, 0x9f, 0x7c, 0x63, 0x42, 0x38, 0x9e, 0x93, + 0x33, 0xc8, 0xc4, 0x79, 0x05, 0x8a, 0x53, 0xb6, 0xb1, 0x85, 0xd7, 0x57, 0x43, 0xbc, 0xb2, 0x55, + 0xdb, 0xd8, 0xd2, 0x10, 0x4a, 0x7e, 0x2a, 0x07, 0x7d, 0x73, 0x54, 0x37, 0xd8, 0x08, 0x19, 0xe8, + 0xe6, 0x75, 0xf2, 0x85, 0xa3, 0xf1, 0x3a, 0x19, 0xdf, 0xe0, 0x95, 0xc9, 0x8a, 0x22, 0xea, 0x27, + 0xb7, 0xa1, 0x7f, 0x5a, 0xf7, 0xe8, 0xba, 0xed, 0x6c, 0xa1, 0x1f, 0xcd, 0x48, 0xe8, 0x7e, 0x1f, + 0xd1, 0x1f, 0x9f, 0x88, 0xdf, 0x8c, 0x35, 0xc4, 0x2f, 0x2d, 0x28, 0xcc, 0xc4, 0xc2, 0x53, 0xfe, + 0x8b, 0xfc, 0xd3, 0x28, 0x16, 0x0f, 0x21, 0x9a, 0xc0, 0x84, 0xc7, 0xca, 0x43, 0xe9, 0xc7, 0xca, + 0x68, 0x3d, 0xa2, 0xaf, 0x1d, 0x66, 0xc2, 0x1c, 0xc6, 0x45, 0x9f, 0x5b, 0x8f, 0x08, 0xc5, 0x44, + 0x98, 0x9a, 0x44, 0xa2, 0x7e, 0xaf, 0x17, 0x52, 0x1f, 0x5a, 0x9f, 0x29, 0xf9, 0x99, 0x92, 0x87, + 0x4a, 0x5e, 0x49, 0x28, 0xf9, 0xe5, 0xe4, 0xd3, 0xfd, 0x8f, 0xa8, 0x86, 0xff, 0x5c, 0x31, 0x11, + 0xf8, 0xe3, 0x74, 0xef, 0x2e, 0x43, 0xe9, 0xf5, 0xee, 0x2a, 0xbd, 0x60, 0x40, 0x94, 0x76, 0x1d, + 0x10, 0x7d, 0x7b, 0x1d, 0x10, 0xfd, 0x99, 0x03, 0x22, 0x54, 0x90, 0x81, 0x4c, 0x05, 0xa9, 0x8a, + 0x41, 0x03, 0xdd, 0xf3, 0x8f, 0x5c, 0xd9, 0xd9, 0x9e, 0x18, 0x61, 0xa3, 0x29, 0x35, 0xf1, 0x08, + 0xb2, 0x50, 0x7f, 0xbf, 0xd8, 0x25, 0x5a, 0xcf, 0xb1, 0xe8, 0xc8, 0xcb, 0x50, 0x28, 0xb7, 0xdb, + 0x42, 0x3f, 0xce, 0x49, 0x81, 0x82, 0x32, 0x4a, 0x31, 0x6a, 0xf2, 0x06, 0x14, 0xca, 0x0f, 0x6a, + 0xf1, 0x9c, 0x23, 0xe5, 0x07, 0x35, 0xf1, 0x25, 0x99, 0x65, 0x1f, 0xd4, 0xc8, 0x5b, 0x61, 0xf0, + 0xcf, 0x8d, 0x8e, 0xf5, 0x50, 0x6c, 0x14, 0x85, 0xbb, 0xad, 0xef, 0x8e, 0xd3, 0x60, 0x28, 0xb6, + 0x5d, 0x8c, 0xd1, 0xc6, 0xb4, 0xa9, 0xb4, 0x77, 0x6d, 0xea, 0xdb, 0x55, 0x9b, 0xfa, 0xf7, 0xaa, + 0x4d, 0x03, 0x7b, 0xd0, 0x26, 0xd8, 0x55, 0x9b, 0x06, 0x0f, 0xaf, 0x4d, 0x6d, 0xb8, 0x9c, 0x8c, + 0xb0, 0x16, 0x68, 0x84, 0x06, 0x24, 0x89, 0x15, 0x8e, 0x25, 0x78, 0xf5, 0xdf, 0xe1, 0xd8, 0xfa, + 0x26, 0xa2, 0xeb, 0x2e, 0xc3, 0xcb, 0xfe, 0x69, 0xc9, 0xd2, 0xea, 0xaf, 0xe7, 0xb3, 0x03, 0xc3, + 0x9d, 0xcc, 0x29, 0xee, 0x47, 0x52, 0xa5, 0x54, 0x8c, 0x3e, 0xd4, 0xcf, 0x96, 0x72, 0x8c, 0x6d, + 0x9a, 0xcc, 0xbe, 0x93, 0xcb, 0x8a, 0x56, 0x77, 0x28, 0x89, 0x7d, 0x32, 0xe9, 0xd1, 0x86, 0x7e, + 0xfa, 0x6e, 0xd4, 0x95, 0x6d, 0x16, 0x86, 0x64, 0x21, 0x0a, 0x29, 0xed, 0x45, 0xc0, 0x91, 0x72, + 0xea, 0xdf, 0xce, 0xc1, 0xb9, 0xbb, 0x9d, 0x55, 0x2a, 0x3c, 0xd8, 0x82, 0x66, 0xbc, 0x0f, 0xc0, + 0xc0, 0xc2, 0x89, 0x25, 0x87, 0x4e, 0x2c, 0x9f, 0x96, 0x23, 0xcd, 0xc5, 0x0a, 0x4c, 0x86, 0xd4, + 0xdc, 0x81, 0xe5, 0x29, 0xdf, 0x99, 0xf3, 0x61, 0x67, 0x95, 0xd6, 0x13, 0x9e, 0x2c, 0x12, 0xf7, + 0xcb, 0x6f, 0x73, 0x37, 0xf9, 0x83, 0x3a, 0x8d, 0xfc, 0x6a, 0x3e, 0x33, 0xb8, 0xdf, 0x89, 0xcd, + 0x42, 0xf9, 0x43, 0xa9, 0xbd, 0x12, 0xcf, 0x46, 0x99, 0x42, 0x12, 0xe3, 0x98, 0xc6, 0x25, 0x5d, + 0x60, 0x27, 0x3c, 0x37, 0xea, 0x87, 0x2a, 0xb0, 0x7f, 0x98, 0xcb, 0x0c, 0xc2, 0x78, 0x52, 0x05, + 0xa6, 0xfe, 0xaf, 0x05, 0x3f, 0xf6, 0xe3, 0xa1, 0x3e, 0xe1, 0x05, 0x18, 0x10, 0x4f, 0xe0, 0xa3, + 0x0e, 0xb8, 0xe2, 0x28, 0x0f, 0x8f, 0x86, 0x03, 0x02, 0xb6, 0xcc, 0x4b, 0xde, 0xc1, 0x92, 0x03, + 0xae, 0xe4, 0x19, 0xac, 0x49, 0x24, 0x6c, 0x21, 0x9f, 0x79, 0x6c, 0x7a, 0x68, 0x15, 0xb0, 0xbe, + 0x2c, 0xf0, 0x85, 0x9c, 0x3e, 0x36, 0x3d, 0x6e, 0x13, 0x04, 0x68, 0xb6, 0x48, 0xd7, 0xc2, 0xcc, + 0xef, 0x62, 0x91, 0x76, 0x45, 0x02, 0x7c, 0xf1, 0x6c, 0xec, 0x05, 0x18, 0x10, 0x5e, 0xad, 0xc2, + 0xcd, 0x44, 0xb4, 0x56, 0xf8, 0xc1, 0x62, 0x6b, 0x03, 0x02, 0xc6, 0x51, 0xa3, 0xeb, 0xa1, 0x63, + 0x1d, 0x72, 0x74, 0x10, 0xa2, 0x09, 0x0c, 0xb9, 0x09, 0x23, 0x35, 0x4f, 0xb7, 0x0c, 0xdd, 0x31, + 0x96, 0x3a, 0x5e, 0xbb, 0xe3, 0xc9, 0x46, 0xa9, 0xeb, 0x19, 0x76, 0xc7, 0xd3, 0x62, 0x14, 0xe4, + 0x33, 0x30, 0xec, 0x43, 0x66, 0x1c, 0xc7, 0x76, 0x64, 0xcb, 0xc3, 0xf5, 0x0c, 0xea, 0x38, 0x5a, + 0x94, 0x80, 0x7c, 0x16, 0x86, 0xab, 0xd6, 0x23, 0xbb, 0xc1, 0x9f, 0x81, 0x6b, 0xf3, 0xc2, 0x0e, + 0xc1, 0xa7, 0x58, 0x66, 0x80, 0xa8, 0x77, 0x9c, 0xa6, 0x16, 0x25, 0x54, 0x77, 0xf2, 0xc9, 0x10, + 0x99, 0xa7, 0x77, 0xd3, 0x72, 0x3d, 0xea, 0x4c, 0x87, 0x1e, 0xa4, 0x68, 0x10, 0xca, 0xbe, 0xbc, + 0xdc, 0x2e, 0xbc, 0x09, 0xfd, 0x77, 0xe9, 0x16, 0xf7, 0xfb, 0x2c, 0x85, 0xae, 0xc2, 0x0f, 0x05, + 0x4c, 0x3e, 0x71, 0xf5, 0xe9, 0xd4, 0xdf, 0xcb, 0x27, 0x83, 0x7f, 0x9e, 0x5e, 0x61, 0x7f, 0x06, + 0xfa, 0x50, 0x94, 0x55, 0xff, 0xc8, 0x1f, 0x05, 0x88, 0xe2, 0x8e, 0x7a, 0x20, 0xfb, 0x64, 0xea, + 0x2f, 0x96, 0xe2, 0x11, 0x61, 0x4f, 0xaf, 0xf4, 0xde, 0x84, 0xc1, 0x69, 0xdb, 0x72, 0x4d, 0xd7, + 0xa3, 0x56, 0xc3, 0x57, 0xd8, 0x27, 0x98, 0x41, 0xd5, 0x08, 0xc1, 0xf2, 0x1b, 0x24, 0x89, 0xfa, + 0x20, 0xca, 0x4b, 0x5e, 0x85, 0x01, 0x14, 0x39, 0xfa, 0x49, 0xf3, 0x09, 0x0f, 0x6f, 0x0b, 0x56, + 0x19, 0x30, 0xee, 0x24, 0x1d, 0x92, 0x92, 0x7b, 0xd0, 0x3f, 0xbd, 0x61, 0x36, 0x0d, 0x87, 0x5a, + 0xe8, 0x2f, 0x2c, 0x3d, 0xfb, 0x8d, 0xf6, 0xe5, 0x24, 0xfe, 0x8b, 0xb4, 0xbc, 0x39, 0x0d, 0x51, + 0x2c, 0xf2, 0x0a, 0x4b, 0xc0, 0x2e, 0xff, 0x6c, 0x1e, 0x20, 0x2c, 0x40, 0x9e, 0x81, 0x7c, 0x90, + 0x54, 0x19, 0xdd, 0x54, 0x22, 0x1a, 0x94, 0xc7, 0xa5, 0x42, 0x8c, 0xed, 0xfc, 0xae, 0x63, 0xfb, + 0x1e, 0x94, 0xf8, 0x89, 0x17, 0x7a, 0x92, 0x4b, 0x41, 0x2a, 0x33, 0x1b, 0x3c, 0x89, 0xf4, 0x7c, + 0x33, 0x8b, 0x96, 0x67, 0xc4, 0x2b, 0x9b, 0x33, 0xbb, 0xdc, 0x80, 0x5e, 0xfc, 0x8b, 0x5c, 0x85, + 0xe2, 0x8a, 0x9f, 0x90, 0x75, 0x98, 0xcf, 0xd2, 0x31, 0xf9, 0x21, 0x9e, 0x75, 0xd3, 0xb4, 0x6d, + 0x79, 0xac, 0x6a, 0x6c, 0xf5, 0x90, 0x90, 0x8b, 0x80, 0x45, 0xe4, 0x22, 0x60, 0xea, 0x7f, 0x9d, + 0x4f, 0x89, 0x55, 0x7c, 0x7a, 0x87, 0xc9, 0xeb, 0x00, 0xf8, 0xa4, 0x9b, 0xc9, 0xd3, 0x7f, 0xa2, + 0x81, 0xa3, 0x04, 0x19, 0xa1, 0xda, 0x46, 0xb6, 0x1d, 0x21, 0xb1, 0xfa, 0xf7, 0x72, 0x89, 0x00, + 0xb7, 0x87, 0x92, 0xa3, 0x6c, 0x95, 0xe5, 0x0f, 0x68, 0xc6, 0xfa, 0x7d, 0x51, 0xd8, 0x5f, 0x5f, + 0x44, 0xbf, 0xe5, 0x08, 0x2c, 0xd3, 0xe3, 0xfc, 0x96, 0xef, 0xe5, 0xd3, 0xc2, 0xfd, 0x9e, 0x4c, + 0x15, 0xbf, 0x15, 0x18, 0xa5, 0xc5, 0x58, 0x80, 0x75, 0x84, 0xc6, 0x93, 0x46, 0x0b, 0x33, 0xf5, + 0xcb, 0x30, 0x1a, 0x0b, 0x82, 0x2b, 0xf2, 0xf7, 0x5e, 0xed, 0x1e, 0x4d, 0x37, 0x3b, 0x18, 0x40, + 0x84, 0x4c, 0xfd, 0xff, 0x73, 0xdd, 0x43, 0x20, 0x1f, 0xbb, 0xea, 0xa4, 0x08, 0xa0, 0xf0, 0xc7, + 0x23, 0x80, 0x23, 0xd8, 0x06, 0x9f, 0x6c, 0x01, 0x7c, 0x44, 0x26, 0x8f, 0x0f, 0x5b, 0x00, 0xbf, + 0x98, 0xdb, 0x35, 0x82, 0xf5, 0x71, 0xcb, 0x40, 0xfd, 0x9f, 0x72, 0xa9, 0x91, 0xa6, 0x0f, 0xd5, + 0xae, 0xb7, 0xa0, 0xc4, 0xdd, 0x6a, 0x44, 0xab, 0xa4, 0xdc, 0x5c, 0x0c, 0x9a, 0x95, 0xcd, 0x9e, + 0x63, 0xc9, 0x3c, 0xf4, 0xf1, 0x36, 0x18, 0xa2, 0x37, 0x3e, 0xd1, 0x25, 0xdc, 0xb5, 0x91, 0x35, + 0x39, 0x0a, 0xb4, 0xfa, 0x77, 0x72, 0x89, 0xc0, 0xd7, 0xc7, 0xf8, 0x6d, 0xe1, 0x54, 0x5d, 0xd8, + 0xfb, 0x54, 0xad, 0xfe, 0xb3, 0x7c, 0x7a, 0xdc, 0xed, 0x63, 0xfc, 0x90, 0xa3, 0x38, 0x4e, 0x3b, + 0xd8, 0xba, 0xb5, 0x02, 0x23, 0x51, 0x59, 0x88, 0x65, 0xeb, 0xe9, 0xf4, 0xe8, 0xe3, 0x19, 0xad, + 0x88, 0xf1, 0x50, 0xbf, 0x9b, 0x4b, 0x86, 0x0c, 0x3f, 0xf6, 0xf9, 0xe9, 0x60, 0xda, 0x12, 0xfd, + 0x94, 0x8f, 0xc8, 0x5a, 0x73, 0x14, 0x9f, 0xf2, 0x11, 0x59, 0x35, 0x0e, 0xf6, 0x29, 0xbf, 0x9c, + 0xcf, 0x8a, 0xb8, 0x7e, 0xec, 0x1f, 0xf4, 0x45, 0x59, 0xc8, 0xbc, 0x65, 0xe2, 0xd3, 0x9e, 0xc9, + 0x0a, 0x71, 0x9e, 0xc1, 0x33, 0xc1, 0xe7, 0x60, 0x63, 0x3c, 0x55, 0x58, 0x1f, 0x11, 0x45, 0x3e, + 0x19, 0xc2, 0xfa, 0x88, 0x0c, 0x95, 0x8f, 0x9e, 0xb0, 0x7e, 0x27, 0xbf, 0xd7, 0x30, 0xff, 0x67, + 0xc2, 0x4b, 0x08, 0xef, 0x1b, 0xf9, 0x64, 0xfa, 0x89, 0x63, 0x17, 0xd3, 0x2c, 0x94, 0x44, 0x22, + 0x8c, 0x4c, 0xe1, 0x70, 0x7c, 0x96, 0x45, 0x23, 0xbe, 0xe3, 0x16, 0x88, 0x8b, 0x9c, 0xbd, 0x89, + 0x84, 0xd3, 0xaa, 0x3f, 0xc8, 0xc5, 0x72, 0x35, 0x1c, 0xcb, 0x11, 0xc2, 0x81, 0x96, 0x24, 0xf2, + 0xb6, 0x7f, 0x98, 0x59, 0x8c, 0xc5, 0xca, 0x0e, 0xbe, 0xa7, 0x42, 0x3d, 0xdd, 0x6c, 0xc6, 0xcb, + 0x8b, 0x98, 0x00, 0xbf, 0x97, 0x87, 0xf1, 0x04, 0x29, 0xb9, 0x1a, 0x09, 0xa5, 0x83, 0xc7, 0x92, + 0x31, 0xe7, 0x71, 0x1e, 0x54, 0x67, 0x1f, 0x27, 0xa9, 0x57, 0xa1, 0x58, 0xd1, 0xb7, 0xf8, 0xb7, + 0xf5, 0x72, 0x96, 0x86, 0xbe, 0x25, 0x9f, 0xb8, 0x21, 0x9e, 0xac, 0xc2, 0x05, 0x7e, 0x1f, 0x62, + 0xda, 0xd6, 0x8a, 0xd9, 0xa2, 0x55, 0x6b, 0xc1, 0x6c, 0x36, 0x4d, 0x57, 0x5c, 0xea, 0xbd, 0xb0, + 0xb3, 0x3d, 0x71, 0xcd, 0xb3, 0x3d, 0xbd, 0x59, 0xa7, 0x3e, 0x59, 0xdd, 0x33, 0x5b, 0xb4, 0x6e, + 0x5a, 0xf5, 0x16, 0x52, 0x4a, 0x2c, 0xd3, 0x59, 0x91, 0x2a, 0x0f, 0x8b, 0x5e, 0x6b, 0xe8, 0x96, + 0x45, 0x8d, 0xaa, 0x35, 0xb5, 0xe5, 0x51, 0x7e, 0x19, 0x58, 0xe0, 0x47, 0x82, 0xfc, 0x6d, 0x38, + 0x47, 0x33, 0xc6, 0xab, 0x8c, 0x40, 0x4b, 0x29, 0xa4, 0xfe, 0x6e, 0x31, 0x25, 0x4d, 0xc7, 0x09, + 0x52, 0x1f, 0xbf, 0xa7, 0x8b, 0xbb, 0xf4, 0xf4, 0x0d, 0xe8, 0x13, 0x71, 0x67, 0xc5, 0x05, 0x03, + 0x3a, 0xb3, 0x3f, 0xe2, 0x20, 0xf9, 0x86, 0x46, 0x50, 0x91, 0x26, 0x5c, 0x5e, 0x61, 0xdd, 0x94, + 0xde, 0x99, 0xa5, 0x03, 0x74, 0x66, 0x17, 0x7e, 0xe4, 0x3d, 0xb8, 0x84, 0xd8, 0x94, 0x6e, 0xed, + 0xc3, 0xaa, 0x30, 0x46, 0x15, 0xaf, 0x2a, 0xbd, 0x73, 0xb3, 0xca, 0x93, 0x2f, 0xc2, 0x50, 0x30, + 0x40, 0x4c, 0xea, 0x8a, 0x9b, 0x8b, 0x2e, 0xe3, 0x8c, 0x07, 0x80, 0x63, 0x60, 0x74, 0x21, 0x8b, + 0x06, 0x11, 0x8b, 0xf0, 0x52, 0xff, 0xc7, 0x5c, 0xb7, 0x74, 0x21, 0xc7, 0x3e, 0x2b, 0xbf, 0x0d, + 0x7d, 0x06, 0xff, 0x28, 0xa1, 0x53, 0xdd, 0x13, 0x8a, 0x70, 0x52, 0xcd, 0x2f, 0xa3, 0xfe, 0xd3, + 0x5c, 0xd7, 0x2c, 0x25, 0x27, 0xfd, 0xf3, 0xbe, 0x51, 0xc8, 0xf8, 0x3c, 0x31, 0x89, 0x5e, 0x87, + 0x31, 0x33, 0x0c, 0xa3, 0x5e, 0x0f, 0xc3, 0x4f, 0x69, 0xa3, 0x12, 0x1c, 0x47, 0xd7, 0x2d, 0xb8, + 0xe8, 0x3b, 0x3e, 0x3a, 0xbe, 0x87, 0x98, 0x5b, 0xef, 0x38, 0x26, 0x1f, 0x97, 0xda, 0x79, 0x37, + 0xe6, 0x3e, 0xe6, 0xde, 0x73, 0x4c, 0x56, 0x81, 0xee, 0x6d, 0x50, 0x4b, 0xaf, 0x6f, 0xda, 0xce, + 0x43, 0x8c, 0x32, 0xca, 0x07, 0xa7, 0x36, 0xca, 0xe1, 0x0f, 0x7c, 0x30, 0x79, 0x0e, 0x86, 0xd7, + 0x9b, 0x1d, 0x1a, 0xc4, 0x75, 0xe4, 0x77, 0x7d, 0xda, 0x10, 0x03, 0x06, 0x37, 0x24, 0x4f, 0x01, + 0x20, 0x91, 0x87, 0x39, 0x64, 0xf0, 0x62, 0x4f, 0x1b, 0x60, 0x90, 0x15, 0xd1, 0x5d, 0x97, 0xb9, + 0x56, 0x73, 0x21, 0xd5, 0x9b, 0xb6, 0xb5, 0x5e, 0xf7, 0xa8, 0xd3, 0xc2, 0x86, 0xa2, 0x33, 0x83, + 0x76, 0x11, 0x29, 0xf0, 0xea, 0xc4, 0x9d, 0xb7, 0xad, 0xf5, 0x15, 0xea, 0xb4, 0x58, 0x53, 0x5f, + 0x00, 0x22, 0x9a, 0xea, 0xe0, 0xa1, 0x07, 0xff, 0x38, 0xf4, 0x66, 0xd0, 0xc4, 0x47, 0xf0, 0xd3, + 0x10, 0xfc, 0xb0, 0x09, 0x18, 0xe4, 0xc1, 0xed, 0xb8, 0xd0, 0xd0, 0x85, 0x41, 0x03, 0x0e, 0x42, + 0x79, 0x5d, 0x04, 0xe1, 0x5d, 0xc1, 0xbd, 0xba, 0x35, 0xf1, 0x4b, 0xfd, 0x6a, 0x21, 0x2d, 0xb1, + 0xca, 0xa1, 0x14, 0x2d, 0x9c, 0x56, 0xf3, 0xfb, 0x9a, 0x56, 0x47, 0xad, 0x4e, 0xab, 0xae, 0xb7, + 0xdb, 0xf5, 0x35, 0xb3, 0x89, 0xcf, 0xaa, 0x70, 0xe1, 0xd3, 0x86, 0xad, 0x4e, 0xab, 0xdc, 0x6e, + 0xcf, 0x72, 0x20, 0x79, 0x1e, 0xc6, 0x19, 0x1d, 0x76, 0x52, 0x40, 0x59, 0x44, 0x4a, 0xc6, 0x00, + 0xa3, 0xc3, 0xfa, 0xb4, 0x4f, 0x40, 0xbf, 0xe0, 0xc9, 0xd7, 0xaa, 0x5e, 0xad, 0x8f, 0x33, 0x73, + 0x59, 0xcf, 0x05, 0x6c, 0xf8, 0xe4, 0xda, 0xab, 0x0d, 0xf8, 0xe5, 0x31, 0x06, 0xb2, 0xd5, 0x69, + 0xf1, 0x88, 0x58, 0x7d, 0x88, 0x0c, 0x7e, 0x93, 0xab, 0x30, 0xc2, 0xb8, 0x04, 0x02, 0xe3, 0x61, + 0x63, 0x7b, 0xb5, 0x18, 0x94, 0xdc, 0x84, 0xf3, 0x11, 0x08, 0xb7, 0x41, 0xf9, 0x33, 0x81, 0x5e, + 0x2d, 0x15, 0xa7, 0x7e, 0xbb, 0x10, 0x4d, 0xf7, 0x72, 0x0c, 0x1d, 0x71, 0x09, 0xfa, 0x6c, 0x67, + 0xbd, 0xde, 0x71, 0x9a, 0x62, 0xec, 0x95, 0x6c, 0x67, 0xfd, 0x9e, 0xd3, 0x24, 0x17, 0xa0, 0xc4, + 0x7a, 0xc7, 0x34, 0xc4, 0x10, 0xeb, 0xd5, 0xdb, 0xed, 0xaa, 0x41, 0xca, 0xbc, 0x43, 0x30, 0xe4, + 0x68, 0xbd, 0x81, 0x5b, 0x7b, 0xee, 0x94, 0xd0, 0xcb, 0x57, 0xbc, 0x04, 0x12, 0xfb, 0x09, 0x03, + 0x91, 0xf2, 0x83, 0x80, 0x18, 0x0b, 0x03, 0xb7, 0x25, 0x06, 0xef, 0x93, 0x38, 0x0b, 0x81, 0x0c, + 0x59, 0xf0, 0x4d, 0x8c, 0x41, 0x2a, 0x40, 0x42, 0xaa, 0x96, 0x6d, 0x98, 0x6b, 0x26, 0xe5, 0xaf, + 0x3a, 0x7a, 0xf9, 0xc5, 0x6f, 0x12, 0xab, 0x8d, 0xf9, 0x4c, 0x16, 0x04, 0x84, 0xbc, 0xc9, 0x95, + 0x90, 0xd3, 0xe1, 0xda, 0xc7, 0xfb, 0x96, 0xdb, 0x69, 0x31, 0x14, 0x6a, 0x26, 0x96, 0xc7, 0x85, + 0x50, 0xfd, 0xab, 0xc5, 0x64, 0xce, 0x9f, 0x63, 0xb1, 0x6b, 0xe6, 0x00, 0x44, 0x4a, 0xaf, 0xf0, + 0x72, 0x2d, 0xf0, 0x38, 0x0f, 0x31, 0x19, 0x3c, 0xa4, 0xb2, 0xe4, 0x3a, 0xf4, 0xf3, 0x2f, 0xaa, + 0x56, 0x84, 0xbd, 0x83, 0x2e, 0x62, 0x6e, 0xdb, 0x5c, 0x5b, 0x43, 0x7f, 0xb2, 0x00, 0x4d, 0xae, + 0x42, 0x5f, 0x65, 0xb1, 0x56, 0x2b, 0x2f, 0xfa, 0x37, 0xc5, 0xf8, 0xbe, 0xc4, 0xb0, 0xdc, 0xba, + 0xab, 0x5b, 0xae, 0xe6, 0x23, 0xc9, 0x73, 0x50, 0xaa, 0x2e, 0x23, 0x19, 0x7f, 0x35, 0x39, 0xb8, + 0xb3, 0x3d, 0xd1, 0x67, 0xb6, 0x39, 0x95, 0x40, 0x61, 0xbd, 0xf7, 0xab, 0x15, 0xc9, 0x5d, 0x82, + 0xd7, 0xfb, 0xc8, 0x34, 0xf0, 0xda, 0x59, 0x0b, 0xd0, 0xe4, 0x15, 0x18, 0xaa, 0x51, 0xc7, 0xd4, + 0x9b, 0x8b, 0x1d, 0xdc, 0x2a, 0x4a, 0xa1, 0x14, 0x5d, 0x84, 0xd7, 0x2d, 0x44, 0x68, 0x11, 0x32, + 0x72, 0x05, 0x8a, 0x73, 0xa6, 0xe5, 0x3f, 0x61, 0x40, 0x1f, 0xf7, 0x0d, 0xd3, 0xf2, 0x34, 0x84, + 0x92, 0xe7, 0xa0, 0x70, 0x67, 0xa5, 0x2a, 0x3c, 0xc1, 0x90, 0xd7, 0xfb, 0x5e, 0x24, 0x2c, 0xe3, + 0x9d, 0x95, 0x2a, 0x79, 0x05, 0x06, 0xd8, 0x22, 0x46, 0xad, 0x06, 0x75, 0x95, 0x41, 0xfc, 0x18, + 0x1e, 0x46, 0xd0, 0x07, 0xca, 0x3e, 0x1d, 0x01, 0xa5, 0xfa, 0x7f, 0xe6, 0xd3, 0x93, 0x32, 0x1d, + 0xc3, 0x50, 0x3f, 0xe0, 0x2d, 0x72, 0x4c, 0xc1, 0x8a, 0x87, 0x50, 0xb0, 0x35, 0x18, 0x2d, 0x1b, + 0x2d, 0xd3, 0x2a, 0xe3, 0x4f, 0x77, 0x61, 0xb6, 0x8c, 0x53, 0x87, 0xf4, 0x3c, 0x2f, 0x86, 0x16, + 0xdf, 0xc3, 0x03, 0xfe, 0x32, 0x54, 0x5d, 0xe7, 0xb8, 0x7a, 0x6b, 0x4d, 0xaf, 0x37, 0x78, 0x3e, + 0x23, 0x2d, 0xce, 0x54, 0xfd, 0x99, 0xfc, 0x2e, 0x79, 0xa4, 0x4e, 0xa3, 0xf4, 0xd5, 0x6f, 0xe6, + 0xbb, 0xa7, 0xf2, 0x3a, 0x95, 0x42, 0xf9, 0xa3, 0x7c, 0x4a, 0x62, 0xad, 0x43, 0x49, 0xe2, 0x3a, + 0xf4, 0x73, 0x36, 0x81, 0x1b, 0x2f, 0xce, 0x66, 0x5c, 0x59, 0x71, 0x16, 0xf5, 0xd1, 0x64, 0x11, + 0xce, 0x97, 0xd7, 0xd6, 0x68, 0xc3, 0x0b, 0x43, 0x3f, 0x2f, 0x86, 0x41, 0x58, 0x79, 0xa8, 0x5b, + 0x81, 0x0f, 0x43, 0x47, 0x63, 0xb0, 0x91, 0xd4, 0x72, 0x64, 0x05, 0x2e, 0xc6, 0xe1, 0x35, 0xbe, + 0x05, 0x28, 0x4a, 0xd1, 0x6f, 0x13, 0x1c, 0xf9, 0x7f, 0x5a, 0x46, 0xd9, 0xb4, 0x56, 0xe2, 0x54, + 0xdd, 0xdb, 0xad, 0x95, 0x38, 0x6f, 0xa7, 0x96, 0x53, 0x7f, 0xaf, 0x20, 0xe7, 0x1f, 0x3b, 0xbd, + 0x0e, 0x57, 0xb7, 0x22, 0x6e, 0xd6, 0x7b, 0x1d, 0x32, 0xaf, 0x88, 0x08, 0x22, 0x46, 0xc7, 0xf1, + 0x3d, 0x12, 0x83, 0x08, 0x06, 0x08, 0x94, 0xd7, 0xa1, 0x80, 0x92, 0x54, 0xa1, 0x58, 0x76, 0xd6, + 0xb9, 0x79, 0xbb, 0xdb, 0xa3, 0x2a, 0xdd, 0x59, 0x77, 0xd3, 0x1f, 0x55, 0x31, 0x16, 0xea, 0x9f, + 0xc9, 0x77, 0x49, 0x19, 0x76, 0x2a, 0x27, 0x91, 0x3f, 0x9f, 0xcf, 0x4a, 0xfe, 0x75, 0x52, 0x5d, + 0xc7, 0x3e, 0x64, 0xe1, 0x9c, 0x6c, 0xbf, 0xba, 0x23, 0x16, 0x4e, 0x46, 0x22, 0xb2, 0x33, 0xe1, + 0x7c, 0x35, 0x9f, 0x95, 0x8b, 0xed, 0xd4, 0xce, 0x32, 0x19, 0xe9, 0xdf, 0xce, 0x74, 0xe5, 0x17, + 0xf2, 0x99, 0x19, 0xf0, 0xce, 0xa4, 0xa3, 0x7e, 0x2d, 0x9f, 0x99, 0xc1, 0xef, 0x54, 0x0e, 0xa5, + 0x54, 0x6d, 0x39, 0x1b, 0x4b, 0x42, 0x3a, 0x7f, 0x90, 0x4f, 0xcf, 0x99, 0x78, 0x0c, 0xaa, 0x72, + 0x14, 0x1e, 0x78, 0xbe, 0x40, 0x8b, 0x87, 0x12, 0x68, 0xef, 0x91, 0x0a, 0xf4, 0xd8, 0xc6, 0xde, + 0xc7, 0x55, 0xa0, 0x47, 0x30, 0x78, 0x4f, 0xb3, 0x40, 0x7f, 0xba, 0x90, 0xcc, 0x13, 0x7a, 0x2a, + 0x8f, 0x28, 0xa7, 0xa0, 0xdf, 0x3f, 0xc3, 0x10, 0x02, 0xdd, 0x73, 0x77, 0xfa, 0xe5, 0xc8, 0x3b, + 0x30, 0x1a, 0xca, 0x52, 0x8e, 0x4c, 0x85, 0xd7, 0x1b, 0x0d, 0x86, 0xaa, 0xbf, 0xcf, 0x70, 0x22, + 0x84, 0x4a, 0x9c, 0x5a, 0xfd, 0x41, 0x21, 0x99, 0x6c, 0xf5, 0xac, 0x37, 0x0e, 0xd8, 0x1b, 0xf7, + 0xe0, 0xe2, 0x74, 0xc7, 0x71, 0xa8, 0xe5, 0xa5, 0x77, 0x0a, 0x1e, 0x2e, 0x37, 0x38, 0x45, 0x3d, + 0xd9, 0x39, 0x19, 0x85, 0x19, 0x5b, 0xe1, 0x7d, 0x1f, 0x67, 0xdb, 0x17, 0xb2, 0xed, 0x70, 0x8a, + 0x34, 0xb6, 0xe9, 0x85, 0xd5, 0xbf, 0x9f, 0x4f, 0xa6, 0xc7, 0x3d, 0xeb, 0xfa, 0x83, 0x75, 0xbd, + 0xfa, 0x17, 0xf3, 0x5d, 0x52, 0x04, 0x9f, 0x19, 0x7a, 0xfc, 0x24, 0x2f, 0x33, 0x2f, 0xf1, 0x69, + 0xdc, 0x18, 0x64, 0x68, 0xcc, 0xd9, 0xd6, 0x80, 0x53, 0x3c, 0xbf, 0xc0, 0x53, 0xc5, 0xdd, 0x35, + 0x2d, 0x83, 0x3c, 0x01, 0x17, 0xee, 0xd5, 0x66, 0xb4, 0xfa, 0xdd, 0xea, 0x62, 0xa5, 0x7e, 0x6f, + 0xb1, 0xb6, 0x3c, 0x33, 0x5d, 0x9d, 0xad, 0xce, 0x54, 0xc6, 0x7a, 0xc8, 0x39, 0x18, 0x0d, 0x51, + 0x73, 0xf7, 0x16, 0xca, 0x8b, 0x63, 0x39, 0x32, 0x0e, 0xc3, 0x21, 0x70, 0x6a, 0x69, 0x65, 0x2c, + 0xff, 0xfc, 0xa7, 0x60, 0x10, 0x7d, 0x61, 0xf8, 0xdd, 0x1d, 0x19, 0x82, 0xfe, 0xa5, 0xa9, 0xda, + 0x8c, 0x76, 0x1f, 0x99, 0x00, 0x94, 0x2a, 0x33, 0x8b, 0x8c, 0x61, 0xee, 0xf9, 0xff, 0x27, 0x07, + 0x50, 0x9b, 0x5d, 0x59, 0x16, 0x84, 0x83, 0xd0, 0x57, 0x5d, 0xbc, 0x5f, 0x9e, 0xaf, 0x32, 0xba, + 0x7e, 0x28, 0x2e, 0x2d, 0xcf, 0xb0, 0x1a, 0x06, 0xa0, 0x77, 0x7a, 0x7e, 0xa9, 0x36, 0x33, 0x96, + 0x67, 0x40, 0x6d, 0xa6, 0x5c, 0x19, 0x2b, 0x30, 0xe0, 0x03, 0xad, 0xba, 0x32, 0x33, 0x56, 0x64, + 0x7f, 0xce, 0xd7, 0x56, 0xca, 0x2b, 0x63, 0xbd, 0xec, 0xcf, 0x59, 0xfc, 0xb3, 0xc4, 0x98, 0xd5, + 0x66, 0x56, 0xf0, 0x47, 0x1f, 0x6b, 0xc2, 0xac, 0xff, 0xab, 0x9f, 0xa1, 0x18, 0xeb, 0x4a, 0x55, + 0x1b, 0x1b, 0x60, 0x3f, 0x18, 0x4b, 0xf6, 0x03, 0x58, 0xe3, 0xb4, 0x99, 0x85, 0xa5, 0xfb, 0x33, + 0x63, 0x83, 0x8c, 0xd7, 0xc2, 0x5d, 0x06, 0x1e, 0x62, 0x7f, 0x6a, 0x0b, 0xec, 0xcf, 0x61, 0xc6, + 0x49, 0x9b, 0x29, 0xcf, 0x2f, 0x97, 0x57, 0xe6, 0xc6, 0x46, 0x58, 0x7b, 0x90, 0xe7, 0x28, 0x2f, + 0xb9, 0x58, 0x5e, 0x98, 0x19, 0x1b, 0x13, 0x34, 0x95, 0xf9, 0xea, 0xe2, 0xdd, 0xb1, 0x71, 0x6c, + 0xc8, 0x7b, 0x0b, 0xf8, 0x83, 0xb0, 0x02, 0xf8, 0xd7, 0xb9, 0xe7, 0x7f, 0x18, 0x4a, 0x4b, 0x35, + 0xbc, 0xfd, 0xbe, 0x04, 0xe7, 0x96, 0x6a, 0xf5, 0x95, 0xf7, 0x96, 0x67, 0x62, 0xf2, 0x1e, 0x87, + 0x61, 0x1f, 0x31, 0x5f, 0x5d, 0xbc, 0xf7, 0x05, 0x2e, 0x6d, 0x1f, 0xb4, 0x50, 0x9e, 0x5e, 0xaa, + 0x8d, 0xe5, 0x59, 0xaf, 0xf8, 0xa0, 0x07, 0xd5, 0xc5, 0xca, 0xd2, 0x83, 0xda, 0x58, 0xe1, 0xf9, + 0x47, 0x30, 0xc4, 0x13, 0xed, 0x2d, 0x39, 0xe6, 0xba, 0x69, 0x91, 0xa7, 0xe0, 0x89, 0xca, 0xcc, + 0xfd, 0xea, 0xf4, 0x4c, 0x7d, 0x49, 0xab, 0xde, 0xae, 0x2e, 0xc6, 0x6a, 0xba, 0x00, 0xe3, 0x51, + 0x74, 0x79, 0xb9, 0x3a, 0x96, 0x23, 0x17, 0x81, 0x44, 0xc1, 0x77, 0xca, 0x0b, 0xb3, 0x63, 0x79, + 0xa2, 0xc0, 0xf9, 0x28, 0xbc, 0xba, 0xb8, 0x72, 0x6f, 0x71, 0x66, 0xac, 0xf0, 0xfc, 0x5f, 0xc9, + 0xc1, 0x85, 0xd4, 0x60, 0xac, 0x44, 0x85, 0xa7, 0x67, 0xe6, 0xcb, 0xb5, 0x95, 0xea, 0x74, 0x6d, + 0xa6, 0xac, 0x4d, 0xcf, 0xd5, 0xa7, 0xcb, 0x2b, 0x33, 0xb7, 0x97, 0xb4, 0xf7, 0xea, 0xb7, 0x67, + 0x16, 0x67, 0xb4, 0xf2, 0xfc, 0x58, 0x0f, 0x79, 0x0e, 0x26, 0x32, 0x68, 0x6a, 0x33, 0xd3, 0xf7, + 0xb4, 0xea, 0xca, 0x7b, 0x63, 0x39, 0xf2, 0x2c, 0x3c, 0x95, 0x49, 0xc4, 0x7e, 0x8f, 0xe5, 0xc9, + 0xd3, 0x70, 0x39, 0x8b, 0xe4, 0xdd, 0xf9, 0xb1, 0xc2, 0xf3, 0x3f, 0x9f, 0x03, 0x92, 0x8c, 0xa6, + 0x49, 0x9e, 0x81, 0x2b, 0x4c, 0x2f, 0xea, 0xd9, 0x0d, 0x7c, 0x16, 0x9e, 0x4a, 0xa5, 0x90, 0x9a, + 0x37, 0x01, 0x4f, 0x66, 0x90, 0x88, 0xc6, 0x5d, 0x01, 0x25, 0x9d, 0x00, 0x9b, 0xf6, 0x9b, 0x39, + 0xb8, 0x90, 0x7a, 0x5d, 0x4e, 0xae, 0xc1, 0x27, 0xca, 0x95, 0x05, 0xd6, 0x37, 0xd3, 0x2b, 0xd5, + 0xa5, 0xc5, 0x5a, 0x7d, 0x61, 0xb6, 0x5c, 0x67, 0xda, 0x77, 0xaf, 0x16, 0xeb, 0xcd, 0xab, 0xa0, + 0x76, 0xa1, 0x9c, 0x9e, 0x2b, 0x2f, 0xde, 0x66, 0xc3, 0x8f, 0x7c, 0x02, 0x9e, 0xc9, 0xa4, 0x9b, + 0x59, 0x2c, 0x4f, 0xcd, 0xcf, 0x54, 0xc6, 0xf2, 0xe4, 0x93, 0xf0, 0x6c, 0x26, 0x55, 0xa5, 0x5a, + 0xe3, 0x64, 0x85, 0xa9, 0xca, 0x77, 0xff, 0xe7, 0xa7, 0x7b, 0xbe, 0xfb, 0x87, 0x4f, 0xe7, 0xfe, + 0xc1, 0x1f, 0x3e, 0x9d, 0xfb, 0x67, 0x7f, 0xf8, 0x74, 0xee, 0x8b, 0x37, 0xf7, 0x13, 0x25, 0x95, + 0x4f, 0x5b, 0xab, 0x25, 0xbc, 0xba, 0x7a, 0xf9, 0x5f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x56, + 0xc6, 0x17, 0x29, 0x7a, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -16835,6 +16843,11 @@ func (m *AccessListMember) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.MembershipKind != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.MembershipKind)) + i-- + dAtA[i] = 0x28 + } if len(m.MemberName) > 0 { i -= len(m.MemberName) copy(dAtA[i:], m.MemberName) @@ -37997,6 +38010,9 @@ func (m *AccessListMember) Size() (n int) { if l > 0 { n += 1 + l + sovEvents(uint64(l)) } + if m.MembershipKind != 0 { + n += 1 + sovEvents(uint64(m.MembershipKind)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -48991,6 +49007,25 @@ func (m *AccessListMember) Unmarshal(dAtA []byte) error { } m.MemberName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MembershipKind", wireType) + } + m.MembershipKind = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MembershipKind |= v1.MembershipKind(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_accesslists.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_accesslists.mdx index 009cf351b298..5b9d66fc1ea3 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_accesslists.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_accesslists.mdx @@ -83,6 +83,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |description|string|description is the plaintext description of the owner and why they are an owner.| |ineligible_status|string or integer|ineligible_status describes if this owner is eligible or not and if not, describes how they're lacking eligibility. Can be either the string or the integer representation of each option.| +|membership_kind|string or integer|membership_kind describes the type of membership, either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. Can be either the string or the integer representation of each option.| |name|string|name is the username of the owner.| ### spec.ownership_requires diff --git a/docs/pages/reference/terraform-provider/data-sources/access_list.mdx b/docs/pages/reference/terraform-provider/data-sources/access_list.mdx index b5ddd133fdb0..48cd5e48c0b5 100644 --- a/docs/pages/reference/terraform-provider/data-sources/access_list.mdx +++ b/docs/pages/reference/terraform-provider/data-sources/access_list.mdx @@ -113,6 +113,7 @@ Optional: Optional: - `description` (String) description is the plaintext description of the owner and why they are an owner. +- `membership_kind` (Number) membership_kind describes the type of membership, either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. - `name` (String) name is the username of the owner. diff --git a/docs/pages/reference/terraform-provider/resources/access_list.mdx b/docs/pages/reference/terraform-provider/resources/access_list.mdx index 974584d3714e..e45b98b60306 100644 --- a/docs/pages/reference/terraform-provider/resources/access_list.mdx +++ b/docs/pages/reference/terraform-provider/resources/access_list.mdx @@ -155,6 +155,7 @@ Optional: Optional: - `description` (String) description is the plaintext description of the owner and why they are an owner. +- `membership_kind` (Number) membership_kind describes the type of membership, either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. - `name` (String) name is the username of the owner. diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_accesslists.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_accesslists.yaml index 802e2a4f13a1..2c595617b69d 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_accesslists.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_accesslists.yaml @@ -153,6 +153,10 @@ spec: description: ineligible_status describes if this owner is eligible or not and if not, describes how they're lacking eligibility. x-kubernetes-int-or-string: true + membership_kind: + description: membership_kind describes the type of membership, + either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + x-kubernetes-int-or-string: true name: description: name is the username of the owner. type: string diff --git a/gen/proto/go/prehog/v1alpha/teleport.pb.go b/gen/proto/go/prehog/v1alpha/teleport.pb.go index a9815e175374..1db1cfcd7345 100644 --- a/gen/proto/go/prehog/v1alpha/teleport.pb.go +++ b/gen/proto/go/prehog/v1alpha/teleport.pb.go @@ -5212,6 +5212,8 @@ type AccessListMemberCreateEvent struct { // user_name is the anonymized user name UserName string `protobuf:"bytes,1,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"` Metadata *AccessListMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + // member_kind is the type of membership of the created member in the parent access list. + MemberKind string `protobuf:"bytes,3,opt,name=member_kind,json=memberKind,proto3" json:"member_kind,omitempty"` } func (x *AccessListMemberCreateEvent) Reset() { @@ -5258,6 +5260,13 @@ func (x *AccessListMemberCreateEvent) GetMetadata() *AccessListMetadata { return nil } +func (x *AccessListMemberCreateEvent) GetMemberKind() string { + if x != nil { + return x.MemberKind + } + return "" +} + // AccessListMemberUpdate is an event that is emitted when a member is updated in an access list. type AccessListMemberUpdateEvent struct { state protoimpl.MessageState @@ -5267,6 +5276,8 @@ type AccessListMemberUpdateEvent struct { // user_name is the anonymized user name UserName string `protobuf:"bytes,1,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"` Metadata *AccessListMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + // membership_kind is the type of membership of the updated member in the parent access list. + MemberKind string `protobuf:"bytes,3,opt,name=member_kind,json=memberKind,proto3" json:"member_kind,omitempty"` } func (x *AccessListMemberUpdateEvent) Reset() { @@ -5313,6 +5324,13 @@ func (x *AccessListMemberUpdateEvent) GetMetadata() *AccessListMetadata { return nil } +func (x *AccessListMemberUpdateEvent) GetMemberKind() string { + if x != nil { + return x.MemberKind + } + return "" +} + // AccessListMemberDelete is an event that is emitted when a member is removed from an access list. type AccessListMemberDeleteEvent struct { state protoimpl.MessageState @@ -5322,6 +5340,8 @@ type AccessListMemberDeleteEvent struct { // user_name is anonymized user name UserName string `protobuf:"bytes,1,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"` Metadata *AccessListMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + // member_kind is the type of membership of the deleted user in the parent access list. + MemberKind string `protobuf:"bytes,3,opt,name=member_kind,json=memberKind,proto3" json:"member_kind,omitempty"` } func (x *AccessListMemberDeleteEvent) Reset() { @@ -5368,6 +5388,13 @@ func (x *AccessListMemberDeleteEvent) GetMetadata() *AccessListMetadata { return nil } +func (x *AccessListMemberDeleteEvent) GetMemberKind() string { + if x != nil { + return x.MemberKind + } + return "" +} + // AccessListGrantsToUser is an event that is emitted when access list permissions are granted to a user // on login. type AccessListGrantsToUserEvent struct { @@ -5381,6 +5408,10 @@ type AccessListGrantsToUserEvent struct { CountRolesGranted int32 `protobuf:"varint,2,opt,name=count_roles_granted,json=countRolesGranted,proto3" json:"count_roles_granted,omitempty"` // count_traits_granted is the number of traits granted to a user. CountTraitsGranted int32 `protobuf:"varint,3,opt,name=count_traits_granted,json=countTraitsGranted,proto3" json:"count_traits_granted,omitempty"` + // count_inherited_roles_granted is the number of roles granted to a user inherited from nested access lists. + CountInheritedRolesGranted int32 `protobuf:"varint,4,opt,name=count_inherited_roles_granted,json=countInheritedRolesGranted,proto3" json:"count_inherited_roles_granted,omitempty"` + // count_inherited_traits_granted is the number of traits granted to a user inherited from nested access lists. + CountInheritedTraitsGranted int32 `protobuf:"varint,5,opt,name=count_inherited_traits_granted,json=countInheritedTraitsGranted,proto3" json:"count_inherited_traits_granted,omitempty"` } func (x *AccessListGrantsToUserEvent) Reset() { @@ -5434,6 +5465,20 @@ func (x *AccessListGrantsToUserEvent) GetCountTraitsGranted() int32 { return 0 } +func (x *AccessListGrantsToUserEvent) GetCountInheritedRolesGranted() int32 { + if x != nil { + return x.CountInheritedRolesGranted + } + return 0 +} + +func (x *AccessListGrantsToUserEvent) GetCountInheritedTraitsGranted() int32 { + if x != nil { + return x.CountInheritedTraitsGranted + } + return 0 +} + // AccessListReviewCreateEvent is an event that is emitted when an access list review is created. type AccessListReviewCreateEvent struct { state protoimpl.MessageState @@ -9643,1269 +9688,1284 @@ var file_prehog_v1alpha_teleport_proto_rawDesc = []byte{ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x1b, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x9c, 0x01, 0x0a, 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x5f, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x54, 0x72, 0x61, 0x69, 0x74, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x22, 0xaf, - 0x03, 0x0a, 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9b, 0x01, 0x0a, 0x1b, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0x9b, 0x01, 0x0a, 0x1b, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0x9b, 0x01, 0x0a, 0x1b, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6b, + 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0xa4, 0x02, 0x0a, 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x11, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x69, + 0x74, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x12, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x69, 0x74, 0x73, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x1d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, + 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x5f, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1a, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x1e, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x69, 0x74, + 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x1b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x54, + 0x72, 0x61, 0x69, 0x74, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x22, 0xaf, 0x03, 0x0a, + 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x19, 0x64, 0x61, 0x79, + 0x73, 0x5f, 0x70, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, + 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x64, 0x61, + 0x79, 0x73, 0x50, 0x61, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x46, 0x0a, 0x1f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x72, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x72, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, + 0x64, 0x61, 0x79, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, + 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xad, + 0x01, 0x0a, 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x19, 0x64, - 0x61, 0x79, 0x73, 0x5f, 0x70, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x75, - 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, - 0x64, 0x61, 0x79, 0x73, 0x50, 0x61, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, - 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x46, 0x0a, 0x1f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x38, 0x0a, - 0x18, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x16, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x5f, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, - 0x6f, 0x66, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x4f, 0x66, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x22, 0xad, 0x01, 0x0a, 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, - 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, - 0x22, 0x88, 0x01, 0x0a, 0x1f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, - 0x74, 0x73, 0x5f, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x73, 0x4e, 0x65, 0x65, 0x64, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x22, 0x83, 0x01, 0x0a, 0x19, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, - 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x66, 0x0a, 0x1d, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x69, 0x0a, 0x20, 0x55, 0x49, 0x49, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x15, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x22, 0x88, + 0x01, 0x0a, 0x1f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, + 0x12, 0x37, 0x0a, 0x18, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, + 0x5f, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x4e, + 0x65, 0x65, 0x64, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x22, 0x83, 0x01, 0x0a, 0x19, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x66, 0x0a, 0x1d, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x45, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x69, 0x0a, 0x20, 0x55, 0x49, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x11, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x79, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x6f, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x98, 0x01, - 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, - 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x73, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0xdd, 0x01, 0x0a, 0x1a, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x11, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x6f, 0x0a, 0x1d, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x1b, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x56, 0x0a, 0x11, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, - 0x0d, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x52, 0x0c, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x22, 0x7a, 0x0a, 0x1a, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x79, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x15, - 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x12, - 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x94, 0x01, 0x0a, - 0x14, 0x54, 0x41, 0x47, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x6f, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x98, 0x01, 0x0a, 0x11, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0xdd, 0x01, 0x0a, 0x1a, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x64, 0x67, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x45, - 0x64, 0x67, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x22, 0x63, 0x0a, 0x29, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x29, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, - 0x63, 0x61, 0x6e, 0x53, 0x53, 0x48, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4b, 0x65, - 0x79, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x73, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x1a, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, - 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x22, 0xe8, 0x03, 0x0a, 0x17, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x41, 0x57, 0x53, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, - 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x45, 0x63, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x6b, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x45, 0x6b, 0x73, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x64, 0x73, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x5f, 0x73, 0x33, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x33, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x61, 0x6d, 0x6c, - 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x6c, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6f, 0x69, - 0x64, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x69, 0x64, 0x63, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x93, 0x01, - 0x0a, 0x21, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, - 0x16, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x24, 0x55, 0x49, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, - 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x18, - 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, - 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x22, 0x0a, 0x20, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, - 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x22, 0x27, 0x0a, 0x25, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, - 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x63, 0x0a, 0x1c, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 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, 0x64, 0x61, - 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x22, 0x64, - 0x0a, 0x12, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x64, 0x61, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x22, 0x61, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xa5, 0x02, 0x0a, 0x17, 0x4f, 0x6b, 0x74, 0x61, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6e, 0x75, - 0x6d, 0x41, 0x70, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6e, - 0x75, 0x6d, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x61, - 0x70, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x41, 0x70, - 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x28, - 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, - 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x75, 0x6d, 0x5f, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, - 0x9e, 0x01, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x08, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, + 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x6f, 0x0a, 0x1d, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x1b, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x56, 0x0a, 0x11, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x0d, 0x6c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x52, 0x0c, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x7a, + 0x0a, 0x1a, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, + 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x22, 0xe0, 0x01, 0x0a, 0x22, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, - 0x16, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6e, - 0x75, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, - 0x73, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, - 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x73, 0x75, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x9b, 0x4e, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 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, 0x3f, 0x0a, 0x0a, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x73, - 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x53, 0x53, 0x4f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x09, 0x73, 0x73, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x73, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x62, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x69, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, - 0x6f, 0x5f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, - 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, - 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x82, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, - 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, - 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, - 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, - 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, - 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, - 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, - 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, - 0x63, 0x6b, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, - 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x15, 0x44, 0x65, + 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x0a, + 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x14, 0x54, + 0x41, 0x47, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x64, 0x67, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x45, 0x64, 0x67, + 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x22, 0x63, 0x0a, 0x29, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x17, + 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x29, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, + 0x6e, 0x53, 0x53, 0x48, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, + 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x73, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x4f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x1a, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x22, 0xe8, 0x03, 0x0a, 0x17, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x41, 0x57, 0x53, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x45, 0x63, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x65, 0x6b, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x45, 0x6b, 0x73, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x72, 0x64, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x64, 0x73, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x73, 0x33, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x33, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, + 0x12, 0x30, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x61, 0x6d, 0x6c, 0x5f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x6c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6f, 0x69, 0x64, 0x63, + 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x69, 0x64, 0x63, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x21, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x16, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x61, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x66, 0x66, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x22, 0x96, 0x01, 0x0a, 0x24, 0x55, 0x49, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, 0x66, + 0x66, 0x56, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x66, + 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x61, 0x66, + 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x22, 0x0a, 0x20, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, + 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x27, + 0x0a, 0x25, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x63, 0x0a, 0x1c, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 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, 0x64, 0x61, 0x79, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x22, 0x64, 0x0a, 0x12, + 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, + 0x61, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x22, 0x61, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, + 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xa5, 0x02, 0x0a, 0x17, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x41, + 0x70, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x75, 0x6d, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x70, 0x70, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x41, 0x70, 0x70, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, + 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, + 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x9e, 0x01, + 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0xe0, + 0x01, 0x0a, 0x22, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x6e, + 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6e, 0x75, 0x6d, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, + 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x73, 0x75, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0x9b, 0x4e, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 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, 0x3f, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x73, 0x6f, 0x5f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x53, + 0x4f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, + 0x73, 0x73, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, - 0x87, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, - 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, - 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, - 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, - 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x6f, 0x0a, 0x1c, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x79, - 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, + 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x0d, 0x75, 0x69, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, + 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x6f, 0x5f, + 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x82, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x6f, 0x6e, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, + 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x4f, + 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, + 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, + 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, + 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x73, + 0x65, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x87, 0x01, + 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, + 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, - 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, - 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, - 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x72, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x72, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x69, - 0x6e, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, - 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x19, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, - 0x73, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x63, 0x0a, 0x19, 0x75, - 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x1d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x73, 0x65, 0x72, + 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, + 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, + 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x72, 0x65, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, + 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, + 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x6f, 0x0a, 0x1c, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x63, + 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x52, + 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, + 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x72, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x74, + 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, + 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, + 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x19, + 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, + 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x63, 0x0a, 0x19, 0x75, 0x69, 0x5f, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, + 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x1d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x56, 0x32, 0x12, 0x76, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7f, 0x0a, - 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, - 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x8f, - 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x65, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, - 0x54, 0x4c, 0x53, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x74, 0x6c, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0xb8, 0x01, 0x0a, 0x38, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x5f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, - 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x31, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x56, 0x32, 0x12, 0x76, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, + 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7f, 0x0a, 0x23, 0x75, + 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x8f, 0x01, 0x0a, + 0x29, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, + 0x6d, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x54, 0x4c, + 0x53, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x74, 0x6c, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xb8, + 0x01, 0x0a, 0x38, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, + 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x5f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, + 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x31, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x34, 0x75, 0x69, + 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, + 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x34, - 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, - 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, + 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x2e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x2e, 0x75, 0x69, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, - 0x2b, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, - 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, - 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x26, 0x75, 0x69, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x9f, 0x01, 0x0a, 0x2f, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x41, 0x4d, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x29, 0x75, 0x69, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x26, 0x75, 0x69, 0x5f, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, - 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x22, 0x75, - 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, - 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, + 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x2b, 0x75, + 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x26, 0x75, 0x69, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x9f, 0x01, 0x0a, 0x2f, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, - 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1b, - 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, - 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x6f, - 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x18, 0x75, - 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, - 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, - 0x12, 0x70, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, - 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x73, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, - 0x6b, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, - 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, - 0x63, 0x6b, 0x12, 0x76, 0x0a, 0x1f, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, - 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, - 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x41, 0x4d, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x29, 0x75, 0x69, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x26, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, + 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x22, 0x75, 0x69, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1b, 0x75, 0x69, + 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x6f, 0x6c, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x72, + 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x18, 0x75, 0x69, 0x5f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, + 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, - 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x75, - 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, - 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, - 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x25, - 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, + 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x70, + 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, + 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x73, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, + 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, + 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x12, 0x76, 0x0a, 0x1f, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, + 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x63, 0x6c, + 0x69, 0x63, 0x6b, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x69, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, + 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, + 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x45, 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4b, 0x75, 0x62, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, - 0x73, 0x66, 0x74, 0x70, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x46, 0x54, 0x50, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x66, 0x74, 0x70, 0x12, 0x56, 0x0a, - 0x14, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x12, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x27, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, - 0x62, 0x65, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x9c, - 0x01, 0x0a, 0x2e, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x6f, - 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x57, - 0x53, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x28, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x73, 0x4f, 0x69, 0x64, - 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x83, 0x01, - 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, - 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x52, 0x44, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x64, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, - 0x6f, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x61, - 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x54, 0x0a, 0x11, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, + 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x25, 0x75, 0x69, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, + 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x12, 0x45, 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6b, + 0x75, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x66, + 0x74, 0x70, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x46, 0x54, 0x50, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x66, 0x74, 0x70, 0x12, 0x56, 0x0a, 0x14, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x12, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, + 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x9c, 0x01, 0x0a, + 0x2e, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x6f, 0x69, 0x64, + 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, + 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x57, 0x53, 0x4f, + 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x28, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x73, 0x4f, 0x69, 0x64, 0x63, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x25, + 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x44, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x52, 0x64, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x6b, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x61, 0x6c, 0x6c, + 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x54, + 0x0a, 0x11, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, + 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1d, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, + 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, + 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x6f, 0x74, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, + 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x09, 0x62, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x7a, 0x0a, 0x1f, 0x75, 0x69, + 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, + 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x30, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, + 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x6f, 0x74, 0x5f, 0x6a, 0x6f, + 0x69, 0x6e, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x4a, 0x6f, 0x69, + 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6f, 0x74, 0x4a, 0x6f, 0x69, + 0x6e, 0x12, 0x51, 0x0a, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, - 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x62, - 0x6f, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x42, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x09, 0x62, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x7a, 0x0a, 0x1f, - 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, - 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, - 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x6f, 0x74, 0x5f, - 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x4a, - 0x6f, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6f, 0x74, 0x4a, - 0x6f, 0x69, 0x6e, 0x12, 0x51, 0x0a, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, - 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x17, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, - 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, - 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x19, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x1c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x17, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x6e, + 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x19, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x6e, 0x0a, 0x1c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x5e, 0x0a, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x36, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, - 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, - 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x0c, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, - 0x13, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x55, - 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x5e, 0x0a, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x73, + 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, + 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x13, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x53, 0x0a, 0x13, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x11, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x1a, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, - 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x22, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x43, - 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x63, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, - 0x65, 0x69, 0x63, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x49, 0x43, 0x45, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, - 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, - 0x65, 0x12, 0x64, 0x0a, 0x17, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x15, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x65, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x6b, 0x74, - 0x6f, 0x70, 0x5f, 0x63, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, - 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, - 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x52, - 0x0a, 0x11, 0x74, 0x61, 0x67, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x54, 0x41, 0x47, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x0f, 0x74, 0x61, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x86, 0x01, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, - 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x6b, 0x0a, 0x1a, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, - 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x17, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x61, 0x75, 0x64, 0x69, - 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x49, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x59, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x4a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x4b, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, + 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x68, + 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x74, + 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, + 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x22, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x5f, 0x65, 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x43, 0x32, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x45, 0x63, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x65, 0x69, + 0x63, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x49, 0x43, 0x45, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x17, 0x75, + 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, + 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x64, 0x0a, 0x17, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, + 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x65, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, + 0x5f, 0x63, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, + 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x11, + 0x74, 0x61, 0x67, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x54, 0x41, 0x47, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x0f, 0x74, 0x61, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x86, 0x01, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, + 0x64, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x1d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, + 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x6b, 0x0a, 0x1a, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, 0x65, 0x74, + 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x73, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x75, 0x6e, 0x12, 0x59, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x4b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x18, 0x6d, - 0x66, 0x61, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, - 0x46, 0x41, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x66, 0x61, 0x41, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x55, 0x0a, 0x12, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x64, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x50, 0x49, - 0x46, 0x46, 0x45, 0x53, 0x56, 0x49, 0x44, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x53, 0x76, 0x69, 0x64, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x15, 0x6f, 0x6b, 0x74, 0x61, 0x5f, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, - 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x12, 0x6f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x79, 0x6e, 0x63, 0x12, 0x5e, 0x0a, 0x15, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x51, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x13, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x7f, 0x0a, 0x21, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x52, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x53, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x77, 0x0a, 0x21, - 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x75, 0x62, 0x65, - 0x5f, 0x65, 0x6b, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, 0x45, 0x4b, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, 0x45, 0x6b, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7d, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x55, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x1d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, + 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, + 0x61, 0x6e, 0x63, 0x65, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x18, 0x6d, 0x66, 0x61, + 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x46, 0x41, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x66, 0x61, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, + 0x12, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x64, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, + 0x45, 0x53, 0x56, 0x49, 0x44, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x10, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x53, 0x76, 0x69, 0x64, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x15, 0x6f, 0x6b, 0x74, 0x61, 0x5f, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x50, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, + 0x6f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, + 0x6e, 0x63, 0x12, 0x5e, 0x0a, 0x15, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x51, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x7f, 0x0a, 0x21, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x52, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x53, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x77, 0x0a, 0x21, 0x75, 0x69, + 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x65, + 0x6b, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, + 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x4b, 0x75, 0x62, 0x65, 0x45, 0x4b, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x4b, 0x75, 0x62, 0x65, 0x45, 0x6b, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x7d, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x55, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x18, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x5f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x5f, 0x73, 0x63, 0x61, 0x6e, - 0x18, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x29, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x64, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, - 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, - 0x79, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x2a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, - 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x58, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x18, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x5f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x56, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, + 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x29, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, + 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, + 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, + 0x12, 0x95, 0x01, 0x0a, 0x2a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, + 0x73, 0x68, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, + 0x58, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x53, 0x48, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x73, 0x68, 0x50, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x63, 0x61, + 0x6e, 0x18, 0x59, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, - 0x53, 0x48, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x73, 0x68, 0x50, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, - 0x63, 0x61, 0x6e, 0x18, 0x59, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x57, 0x53, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x41, 0x77, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x7b, 0x0a, 0x20, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x5a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x78, 0x0a, 0x1f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x63, 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, - 0x6c, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, - 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x1b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, - 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x86, 0x01, 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, + 0x72, 0x61, 0x70, 0x68, 0x41, 0x57, 0x53, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, + 0x77, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x7b, 0x0a, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x12, 0x78, 0x0a, 0x1f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x63, 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, - 0x64, 0x69, 0x66, 0x66, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x55, 0x49, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, - 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, - 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x5e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4a, - 0x04, 0x08, 0x08, 0x10, 0x09, 0x52, 0x1c, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, - 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, - 0x15, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x1c, - 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, - 0x41, 0x50, 0x50, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x55, - 0x42, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x42, 0x5f, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, - 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, - 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, - 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x5f, 0x45, 0x49, 0x43, 0x45, 0x10, 0x07, - 0x2a, 0x4d, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x48, 0x55, 0x4d, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x02, 0x2a, - 0xc0, 0x0f, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x45, 0x52, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, - 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, - 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x02, 0x12, 0x33, 0x0a, 0x2f, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x53, - 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, - 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, - 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x32, - 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, - 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, - 0x10, 0x05, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x06, 0x12, - 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, - 0x53, 0x51, 0x4c, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, - 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, - 0x08, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x54, 0x43, 0x50, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x57, 0x49, - 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x0a, 0x12, - 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, - 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x0b, 0x12, 0x30, 0x0a, - 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, - 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x10, 0x0c, 0x12, - 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, - 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, - 0x54, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, + 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, + 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x86, 0x01, + 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x5f, 0x63, 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, 0x64, 0x69, + 0x66, 0x66, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x49, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, + 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, + 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, + 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, + 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x5e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, + 0x08, 0x10, 0x09, 0x52, 0x1c, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, + 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3a, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x48, + 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x50, + 0x50, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x55, 0x42, 0x45, + 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x42, 0x5f, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, + 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, + 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, + 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x5f, 0x45, 0x49, 0x43, 0x45, 0x10, 0x07, 0x2a, 0x4d, + 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x53, + 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x48, 0x55, 0x4d, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x53, + 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x02, 0x2a, 0xc0, 0x0f, + 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, + 0x54, 0x45, 0x53, 0x10, 0x02, 0x12, 0x33, 0x0a, 0x2f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, - 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x47, - 0x43, 0x50, 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, - 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x10, 0x12, 0x2c, - 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x11, 0x12, 0x3b, 0x0a, 0x37, + 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x53, 0x45, 0x4c, + 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, + 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, + 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, - 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, - 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x13, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x4f, 0x44, 0x42, 0x10, - 0x14, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, - 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x50, 0x41, - 0x43, 0x45, 0x53, 0x10, 0x15, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, - 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x53, 0x45, - 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x16, 0x12, 0x38, 0x0a, 0x34, 0x44, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, + 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x05, + 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, + 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x06, 0x12, 0x28, 0x0a, + 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, + 0x4c, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, + 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, 0x08, 0x12, + 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x54, 0x43, 0x50, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x57, 0x49, 0x4e, 0x44, + 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x0a, 0x12, 0x2c, 0x0a, + 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, + 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x0b, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, - 0x43, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, - 0x54, 0x45, 0x44, 0x10, 0x17, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, + 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x10, 0x0c, 0x12, 0x34, 0x0a, + 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, + 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, + 0x44, 0x10, 0x0d, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, + 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, + 0x54, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, - 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, - 0x52, 0x59, 0x44, 0x42, 0x10, 0x19, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, - 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x1a, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x43, 0x4c, 0x55, - 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, - 0x10, 0x1b, 0x12, 0x2a, 0x0a, 0x26, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x47, 0x43, 0x50, + 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1c, 0x12, 0x2e, - 0x0a, 0x2a, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1d, 0x12, 0x32, - 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x4f, 0x46, 0x54, - 0x10, 0x1e, 0x12, 0x36, 0x0a, 0x32, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x43, 0x4f, 0x43, 0x4b, 0x52, 0x4f, 0x41, 0x43, 0x48, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, - 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, + 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x10, 0x12, 0x2c, 0x0a, 0x28, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x11, 0x12, 0x3b, 0x0a, 0x37, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, - 0x5f, 0x41, 0x54, 0x4c, 0x41, 0x53, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, + 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x41, + 0x5a, 0x55, 0x52, 0x45, 0x10, 0x13, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x4f, 0x44, 0x42, 0x10, 0x14, 0x12, + 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x41, + 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x50, 0x41, 0x43, 0x45, + 0x53, 0x10, 0x15, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, + 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x53, 0x45, 0x4c, 0x46, + 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x16, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, 0x43, 0x53, + 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, + 0x44, 0x10, 0x17, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, + 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, 0x43, 0x41, + 0x43, 0x48, 0x45, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, + 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, 0x52, 0x59, + 0x44, 0x42, 0x10, 0x19, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, + 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x43, + 0x41, 0x43, 0x48, 0x45, 0x10, 0x1a, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, + 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1b, + 0x12, 0x2a, 0x0a, 0x26, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, + 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1c, 0x12, 0x2e, 0x0a, 0x2a, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1d, 0x12, 0x32, 0x0a, 0x2e, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x4f, 0x46, 0x54, 0x10, 0x1e, + 0x12, 0x36, 0x0a, 0x32, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, + 0x4f, 0x43, 0x4b, 0x52, 0x4f, 0x41, 0x43, 0x48, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, + 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x4e, 0x4f, 0x57, 0x46, 0x4c, 0x41, 0x4b, 0x45, - 0x10, 0x21, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x44, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x10, 0x22, - 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x41, + 0x54, 0x4c, 0x41, 0x53, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x4e, 0x4f, 0x57, 0x46, 0x4c, 0x41, 0x4b, 0x45, 0x10, 0x21, + 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, - 0x53, 0x45, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x49, - 0x4c, 0x49, 0x54, 0x59, 0x10, 0x23, 0x12, 0x37, 0x0a, 0x33, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, - 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x24, 0x12, - 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x43, 0x32, - 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x26, 0x12, 0x30, 0x0a, 0x2c, 0x44, + 0x53, 0x45, 0x5f, 0x52, 0x44, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x10, 0x22, 0x12, 0x34, + 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, + 0x5f, 0x48, 0x49, 0x47, 0x48, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x49, 0x4c, 0x49, + 0x54, 0x59, 0x10, 0x23, 0x12, 0x37, 0x0a, 0x33, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x52, + 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x24, 0x12, 0x26, 0x0a, + 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x43, 0x32, 0x5f, 0x49, + 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x26, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, + 0x4f, 0x43, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, + 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x10, 0x27, 0x12, 0x24, 0x0a, 0x20, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, - 0x4b, 0x54, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x10, 0x27, 0x12, 0x24, 0x0a, - 0x20, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x45, 0x4b, - 0x53, 0x10, 0x28, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x57, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x45, - 0x10, 0x29, 0x2a, 0xa3, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, - 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, - 0x53, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, 0x02, - 0x12, 0x19, 0x0a, 0x15, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x44, - 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, - 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x04, 0x2a, 0xc1, 0x02, 0x0a, 0x03, 0x43, 0x54, 0x41, - 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x55, 0x54, - 0x48, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, - 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, - 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, - 0x43, 0x45, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, - 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, - 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, - 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, - 0x05, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, - 0x5f, 0x42, 0x41, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, - 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, - 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x54, 0x41, 0x5f, 0x41, - 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, - 0x10, 0x09, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, - 0x41, 0x4c, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, - 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x5f, 0x55, - 0x53, 0x45, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x54, - 0x41, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x2a, 0xbb, 0x08, 0x0a, - 0x15, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x23, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, - 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, - 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x43, 0x4b, - 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x57, - 0x53, 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x54, 0x45, - 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x47, 0x45, 0x52, 0x44, 0x55, 0x54, 0x59, 0x10, 0x03, 0x12, - 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, - 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, - 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x49, - 0x52, 0x41, 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, + 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x45, 0x4b, 0x53, 0x10, + 0x28, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x41, 0x57, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x45, 0x10, 0x29, + 0x2a, 0xa3, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, + 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, 0x02, 0x12, 0x19, + 0x0a, 0x15, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x42, 0x4f, + 0x52, 0x54, 0x45, 0x44, 0x10, 0x04, 0x2a, 0xc1, 0x02, 0x0a, 0x03, 0x43, 0x54, 0x41, 0x12, 0x13, + 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, + 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, + 0x54, 0x41, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, + 0x4e, 0x53, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, + 0x53, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x17, 0x0a, + 0x13, 0x43, 0x54, 0x41, 0x5f, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, 0x55, 0x50, + 0x50, 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x54, 0x52, + 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x05, 0x12, + 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x5f, 0x42, + 0x41, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x42, + 0x49, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x07, + 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4c, + 0x49, 0x53, 0x54, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, + 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, + 0x5f, 0x41, 0x55, 0x44, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x0a, + 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x5f, 0x55, 0x53, 0x45, + 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x54, 0x41, 0x5f, + 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x2a, 0xbb, 0x08, 0x0a, 0x15, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, + 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x23, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, - 0x44, 0x49, 0x53, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x06, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4d, 0x4f, 0x53, 0x54, 0x10, - 0x07, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x53, 0x5f, - 0x54, 0x45, 0x41, 0x4d, 0x53, 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, + 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, + 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x43, 0x4b, 0x10, 0x01, + 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x5f, + 0x4f, 0x49, 0x44, 0x43, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, + 0x44, 0x5f, 0x50, 0x41, 0x47, 0x45, 0x52, 0x44, 0x55, 0x54, 0x59, 0x10, 0x03, 0x12, 0x21, 0x0a, + 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, + 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x04, + 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x49, 0x52, 0x41, + 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x49, + 0x53, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x06, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x4f, 0x50, 0x53, 0x47, 0x45, 0x4e, 0x49, 0x45, 0x10, 0x09, 0x12, 0x20, 0x0a, + 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4d, 0x4f, 0x53, 0x54, 0x10, 0x07, 0x12, + 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x53, 0x5f, 0x54, 0x45, + 0x41, 0x4d, 0x53, 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x4f, 0x50, 0x53, 0x47, 0x45, 0x4e, 0x49, 0x45, 0x10, 0x09, 0x12, 0x20, 0x0a, 0x1c, 0x49, + 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, + 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, - 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x0a, 0x12, - 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, - 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, - 0x0b, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, 0x35, 0x0a, 0x31, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, - 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x0d, - 0x12, 0x2f, 0x0a, 0x2b, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x43, 0x49, 0x10, - 0x0e, 0x12, 0x2d, 0x0a, 0x29, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x0f, - 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4a, 0x45, 0x4e, 0x4b, 0x49, 0x4e, 0x53, 0x10, 0x10, - 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x4e, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x11, - 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, - 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, - 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, - 0x49, 0x44, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x13, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x54, 0x45, - 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, - 0x5a, 0x55, 0x52, 0x45, 0x10, 0x14, 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, + 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, 0x0b, 0x12, + 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, 0x35, 0x0a, 0x31, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, + 0x54, 0x48, 0x55, 0x42, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x0d, 0x12, 0x2f, + 0x0a, 0x2b, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, + 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x43, 0x49, 0x10, 0x0e, 0x12, + 0x2d, 0x0a, 0x29, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x0f, 0x12, 0x2e, + 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, + 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4a, 0x45, 0x4e, 0x4b, 0x49, 0x4e, 0x53, 0x10, 0x10, 0x12, 0x2e, + 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, + 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x4e, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x11, 0x12, 0x2a, + 0x0a, 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, + 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, + 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, + 0x5f, 0x47, 0x43, 0x50, 0x10, 0x13, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, - 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x50, 0x41, - 0x43, 0x45, 0x4c, 0x49, 0x46, 0x54, 0x10, 0x15, 0x12, 0x31, 0x0a, 0x2d, 0x49, 0x4e, 0x54, 0x45, - 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4b, - 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 0x12, 0x24, 0x0a, 0x20, 0x49, - 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, - 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, - 0x17, 0x12, 0x37, 0x0a, 0x33, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x44, 0x4f, 0x47, 0x5f, 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x5f, 0x4d, 0x41, - 0x4e, 0x41, 0x47, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x18, 0x2a, 0x88, 0x01, 0x0a, 0x12, 0x45, - 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, - 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x25, - 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, - 0x56, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x3f, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x17, 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, 0x41, - 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, - 0x49, 0x43, 0x45, 0x53, 0x10, 0x01, 0x2a, 0xa0, 0x01, 0x0a, 0x1b, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, - 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x5a, 0x55, + 0x52, 0x45, 0x10, 0x14, 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, + 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, + 0x4c, 0x49, 0x46, 0x54, 0x10, 0x15, 0x12, 0x31, 0x0a, 0x2d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, + 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4b, 0x55, 0x42, + 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, + 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x17, 0x12, + 0x37, 0x0a, 0x33, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x44, + 0x4f, 0x47, 0x5f, 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x5f, 0x4d, 0x41, 0x4e, 0x41, + 0x47, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x18, 0x2a, 0x88, 0x01, 0x0a, 0x12, 0x45, 0x64, 0x69, + 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x24, 0x0a, 0x20, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, - 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x26, 0x0a, 0x22, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, - 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x82, 0x01, 0x0a, 0x0c, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x49, - 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x28, 0x0a, 0x24, 0x4c, 0x49, 0x43, - 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x4a, 0x41, 0x4d, - 0x46, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, - 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, - 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x32, 0xb4, - 0x02, 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5b, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, + 0x4c, 0x45, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, + 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, + 0x44, 0x10, 0x02, 0x2a, 0x3f, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x17, + 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, 0x41, 0x54, 0x55, + 0x52, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, + 0x45, 0x53, 0x10, 0x01, 0x2a, 0xa0, 0x01, 0x0a, 0x1b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, + 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, + 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x26, 0x0a, 0x22, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, + 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x82, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x63, 0x65, + 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x49, 0x43, 0x45, + 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x28, 0x0a, 0x24, 0x4c, 0x49, 0x43, 0x45, 0x4e, + 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, + 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, + 0x01, 0x12, 0x29, 0x0a, 0x25, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, + 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, + 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x32, 0xb4, 0x02, 0x0a, + 0x18, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, + 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, - 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc9, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x0d, 0x54, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, - 0xaa, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0xca, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0f, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5b, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, + 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0xc9, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x0d, 0x54, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x67, + 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, + 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xca, + 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, + 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/gen/proto/ts/prehog/v1alpha/teleport_pb.ts b/gen/proto/ts/prehog/v1alpha/teleport_pb.ts index 3588ba469cef..ebca47d0db08 100644 --- a/gen/proto/ts/prehog/v1alpha/teleport_pb.ts +++ b/gen/proto/ts/prehog/v1alpha/teleport_pb.ts @@ -1710,6 +1710,12 @@ export interface AccessListMemberCreateEvent { * @generated from protobuf field: prehog.v1alpha.AccessListMetadata metadata = 2; */ metadata?: AccessListMetadata; + /** + * member_kind is the type of membership of the created member in the parent access list. + * + * @generated from protobuf field: string member_kind = 3; + */ + memberKind: string; } /** * AccessListMemberUpdate is an event that is emitted when a member is updated in an access list. @@ -1727,6 +1733,12 @@ export interface AccessListMemberUpdateEvent { * @generated from protobuf field: prehog.v1alpha.AccessListMetadata metadata = 2; */ metadata?: AccessListMetadata; + /** + * membership_kind is the type of membership of the updated member in the parent access list. + * + * @generated from protobuf field: string member_kind = 3; + */ + memberKind: string; } /** * AccessListMemberDelete is an event that is emitted when a member is removed from an access list. @@ -1744,6 +1756,12 @@ export interface AccessListMemberDeleteEvent { * @generated from protobuf field: prehog.v1alpha.AccessListMetadata metadata = 2; */ metadata?: AccessListMetadata; + /** + * member_kind is the type of membership of the deleted user in the parent access list. + * + * @generated from protobuf field: string member_kind = 3; + */ + memberKind: string; } /** * AccessListGrantsToUser is an event that is emitted when access list permissions are granted to a user @@ -1770,6 +1788,18 @@ export interface AccessListGrantsToUserEvent { * @generated from protobuf field: int32 count_traits_granted = 3; */ countTraitsGranted: number; + /** + * count_inherited_roles_granted is the number of roles granted to a user inherited from nested access lists. + * + * @generated from protobuf field: int32 count_inherited_roles_granted = 4; + */ + countInheritedRolesGranted: number; + /** + * count_inherited_traits_granted is the number of traits granted to a user inherited from nested access lists. + * + * @generated from protobuf field: int32 count_inherited_traits_granted = 5; + */ + countInheritedTraitsGranted: number; } /** * AccessListReviewCreateEvent is an event that is emitted when an access list review is created. @@ -7729,12 +7759,14 @@ class AccessListMemberCreateEvent$Type extends MessageType AccessListMetadata } + { no: 2, name: "metadata", kind: "message", T: () => AccessListMetadata }, + { no: 3, name: "member_kind", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value?: PartialMessage): AccessListMemberCreateEvent { const message = globalThis.Object.create((this.messagePrototype!)); message.userName = ""; + message.memberKind = ""; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -7750,6 +7782,9 @@ class AccessListMemberCreateEvent$Type extends MessageType AccessListMetadata } + { no: 2, name: "metadata", kind: "message", T: () => AccessListMetadata }, + { no: 3, name: "member_kind", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value?: PartialMessage): AccessListMemberUpdateEvent { const message = globalThis.Object.create((this.messagePrototype!)); message.userName = ""; + message.memberKind = ""; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -7804,6 +7844,9 @@ class AccessListMemberUpdateEvent$Type extends MessageType AccessListMetadata } + { no: 2, name: "metadata", kind: "message", T: () => AccessListMetadata }, + { no: 3, name: "member_kind", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value?: PartialMessage): AccessListMemberDeleteEvent { const message = globalThis.Object.create((this.messagePrototype!)); message.userName = ""; + message.memberKind = ""; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -7858,6 +7906,9 @@ class AccessListMemberDeleteEvent$Type extends MessageType): AccessListGrantsToUserEvent { @@ -7900,6 +7956,8 @@ class AccessListGrantsToUserEvent$Type extends MessageType(this, message, value); return message; @@ -7918,6 +7976,12 @@ class AccessListGrantsToUserEvent$Type extends MessageType { super("teleport.accesslist.v1.AccessListOwner", [ { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: "ineligible_status", kind: "enum", T: () => ["teleport.accesslist.v1.IneligibleStatus", IneligibleStatus, "INELIGIBLE_STATUS_"] } + { no: 3, name: "ineligible_status", kind: "enum", T: () => ["teleport.accesslist.v1.IneligibleStatus", IneligibleStatus, "INELIGIBLE_STATUS_"] }, + { no: 4, name: "membership_kind", kind: "enum", T: () => ["teleport.accesslist.v1.MembershipKind", MembershipKind, "MEMBERSHIP_KIND_"] } ]); } create(value?: PartialMessage): AccessListOwner { @@ -687,6 +734,7 @@ class AccessListOwner$Type extends MessageType { message.name = ""; message.description = ""; message.ineligibleStatus = 0; + message.membershipKind = 0; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -705,6 +753,9 @@ class AccessListOwner$Type extends MessageType { case /* teleport.accesslist.v1.IneligibleStatus ineligible_status */ 3: message.ineligibleStatus = reader.int32(); break; + case /* teleport.accesslist.v1.MembershipKind membership_kind */ 4: + message.membershipKind = reader.int32(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -726,6 +777,9 @@ class AccessListOwner$Type extends MessageType { /* teleport.accesslist.v1.IneligibleStatus ineligible_status = 3; */ if (message.ineligibleStatus !== 0) writer.tag(3, WireType.Varint).int32(message.ineligibleStatus); + /* teleport.accesslist.v1.MembershipKind membership_kind = 4; */ + if (message.membershipKind !== 0) + writer.tag(4, WireType.Varint).int32(message.membershipKind); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); @@ -1070,7 +1124,8 @@ class MemberSpec$Type extends MessageType { { no: 4, name: "expires", kind: "message", T: () => Timestamp }, { no: 5, name: "reason", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 6, name: "added_by", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 7, name: "ineligible_status", kind: "enum", T: () => ["teleport.accesslist.v1.IneligibleStatus", IneligibleStatus, "INELIGIBLE_STATUS_"] } + { no: 7, name: "ineligible_status", kind: "enum", T: () => ["teleport.accesslist.v1.IneligibleStatus", IneligibleStatus, "INELIGIBLE_STATUS_"] }, + { no: 9, name: "membership_kind", kind: "enum", T: () => ["teleport.accesslist.v1.MembershipKind", MembershipKind, "MEMBERSHIP_KIND_"] } ]); } create(value?: PartialMessage): MemberSpec { @@ -1080,6 +1135,7 @@ class MemberSpec$Type extends MessageType { message.reason = ""; message.addedBy = ""; message.ineligibleStatus = 0; + message.membershipKind = 0; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -1110,6 +1166,9 @@ class MemberSpec$Type extends MessageType { case /* teleport.accesslist.v1.IneligibleStatus ineligible_status */ 7: message.ineligibleStatus = reader.int32(); break; + case /* teleport.accesslist.v1.MembershipKind membership_kind */ 9: + message.membershipKind = reader.int32(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -1143,6 +1202,9 @@ class MemberSpec$Type extends MessageType { /* teleport.accesslist.v1.IneligibleStatus ineligible_status = 7; */ if (message.ineligibleStatus !== 0) writer.tag(7, WireType.Varint).int32(message.ineligibleStatus); + /* teleport.accesslist.v1.MembershipKind membership_kind = 9; */ + if (message.membershipKind !== 0) + writer.tag(9, WireType.Varint).int32(message.membershipKind); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); @@ -1357,7 +1419,8 @@ export const ReviewChanges = new ReviewChanges$Type(); class AccessListStatus$Type extends MessageType { constructor() { super("teleport.accesslist.v1.AccessListStatus", [ - { no: 1, name: "member_count", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ } + { no: 1, name: "member_count", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, + { no: 2, name: "member_list_count", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ } ]); } create(value?: PartialMessage): AccessListStatus { @@ -1374,6 +1437,9 @@ class AccessListStatus$Type extends MessageType { case /* optional uint32 member_count */ 1: message.memberCount = reader.uint32(); break; + case /* optional uint32 member_list_count */ 2: + message.memberListCount = reader.uint32(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -1389,6 +1455,9 @@ class AccessListStatus$Type extends MessageType { /* optional uint32 member_count = 1; */ if (message.memberCount !== undefined) writer.tag(1, WireType.Varint).uint32(message.memberCount); + /* optional uint32 member_list_count = 2; */ + if (message.memberListCount !== undefined) + writer.tag(2, WireType.Varint).uint32(message.memberListCount); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); diff --git a/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.client.ts b/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.client.ts index 5097ca3e53c5..47b6a4ed5197 100644 --- a/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.client.ts +++ b/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.client.ts @@ -21,6 +21,8 @@ import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; import { AccessListService } from "./accesslist_service_pb"; +import type { GetInheritedGrantsResponse } from "./accesslist_service_pb"; +import type { GetInheritedGrantsRequest } from "./accesslist_service_pb"; import type { GetSuggestedAccessListsResponse } from "./accesslist_service_pb"; import type { GetSuggestedAccessListsRequest } from "./accesslist_service_pb"; import type { AccessRequestPromoteResponse } from "./accesslist_service_pb"; @@ -39,6 +41,8 @@ import type { DeleteAllAccessListMembersForAccessListRequest } from "./accesslis import type { DeleteAccessListMemberRequest } from "./accesslist_service_pb"; import type { UpdateAccessListMemberRequest } from "./accesslist_service_pb"; import type { UpsertAccessListMemberRequest } from "./accesslist_service_pb"; +import type { GetAccessListOwnersResponse } from "./accesslist_service_pb"; +import type { GetAccessListOwnersRequest } from "./accesslist_service_pb"; import type { Member } from "./accesslist_pb"; import type { GetAccessListMemberRequest } from "./accesslist_service_pb"; import type { ListAllAccessListMembersResponse } from "./accesslist_service_pb"; @@ -144,6 +148,13 @@ export interface IAccessListServiceClient { * @generated from protobuf rpc: GetAccessListMember(teleport.accesslist.v1.GetAccessListMemberRequest) returns (teleport.accesslist.v1.Member); */ getAccessListMember(input: GetAccessListMemberRequest, options?: RpcOptions): UnaryCall; + /** + * GetAccessListOwners returns a list of all owners in an Access List, + * including those inherited from nested Access Lists. + * + * @generated from protobuf rpc: GetAccessListOwners(teleport.accesslist.v1.GetAccessListOwnersRequest) returns (teleport.accesslist.v1.GetAccessListOwnersResponse); + */ + getAccessListOwners(input: GetAccessListOwnersRequest, options?: RpcOptions): UnaryCall; /** * UpsertAccessListMember creates or updates an access list member resource. * @@ -224,6 +235,12 @@ export interface IAccessListServiceClient { * @generated from protobuf rpc: GetSuggestedAccessLists(teleport.accesslist.v1.GetSuggestedAccessListsRequest) returns (teleport.accesslist.v1.GetSuggestedAccessListsResponse); */ getSuggestedAccessLists(input: GetSuggestedAccessListsRequest, options?: RpcOptions): UnaryCall; + /** + * GetInheritedGrants returns the inherited grants for an access list. + * + * @generated from protobuf rpc: GetInheritedGrants(teleport.accesslist.v1.GetInheritedGrantsRequest) returns (teleport.accesslist.v1.GetInheritedGrantsResponse); + */ + getInheritedGrants(input: GetInheritedGrantsRequest, options?: RpcOptions): UnaryCall; } /** * AccessListService provides CRUD methods for Access List resources. @@ -347,13 +364,23 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic const method = this.methods[11], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } + /** + * GetAccessListOwners returns a list of all owners in an Access List, + * including those inherited from nested Access Lists. + * + * @generated from protobuf rpc: GetAccessListOwners(teleport.accesslist.v1.GetAccessListOwnersRequest) returns (teleport.accesslist.v1.GetAccessListOwnersResponse); + */ + getAccessListOwners(input: GetAccessListOwnersRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[12], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } /** * UpsertAccessListMember creates or updates an access list member resource. * * @generated from protobuf rpc: UpsertAccessListMember(teleport.accesslist.v1.UpsertAccessListMemberRequest) returns (teleport.accesslist.v1.Member); */ upsertAccessListMember(input: UpsertAccessListMemberRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[12], opt = this._transport.mergeOptions(options); + const method = this.methods[13], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -362,7 +389,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: UpdateAccessListMember(teleport.accesslist.v1.UpdateAccessListMemberRequest) returns (teleport.accesslist.v1.Member); */ updateAccessListMember(input: UpdateAccessListMemberRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[13], opt = this._transport.mergeOptions(options); + const method = this.methods[14], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -372,7 +399,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: DeleteAccessListMember(teleport.accesslist.v1.DeleteAccessListMemberRequest) returns (google.protobuf.Empty); */ deleteAccessListMember(input: DeleteAccessListMemberRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[14], opt = this._transport.mergeOptions(options); + const method = this.methods[15], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -382,7 +409,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: DeleteAllAccessListMembersForAccessList(teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest) returns (google.protobuf.Empty); */ deleteAllAccessListMembersForAccessList(input: DeleteAllAccessListMembersForAccessListRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[15], opt = this._transport.mergeOptions(options); + const method = this.methods[16], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -392,7 +419,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: DeleteAllAccessListMembers(teleport.accesslist.v1.DeleteAllAccessListMembersRequest) returns (google.protobuf.Empty); */ deleteAllAccessListMembers(input: DeleteAllAccessListMembersRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[16], opt = this._transport.mergeOptions(options); + const method = this.methods[17], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -401,7 +428,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: UpsertAccessListWithMembers(teleport.accesslist.v1.UpsertAccessListWithMembersRequest) returns (teleport.accesslist.v1.UpsertAccessListWithMembersResponse); */ upsertAccessListWithMembers(input: UpsertAccessListWithMembersRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[17], opt = this._transport.mergeOptions(options); + const method = this.methods[18], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -411,7 +438,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: ListAccessListReviews(teleport.accesslist.v1.ListAccessListReviewsRequest) returns (teleport.accesslist.v1.ListAccessListReviewsResponse); */ listAccessListReviews(input: ListAccessListReviewsRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[18], opt = this._transport.mergeOptions(options); + const method = this.methods[19], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -421,7 +448,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: ListAllAccessListReviews(teleport.accesslist.v1.ListAllAccessListReviewsRequest) returns (teleport.accesslist.v1.ListAllAccessListReviewsResponse); */ listAllAccessListReviews(input: ListAllAccessListReviewsRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[19], opt = this._transport.mergeOptions(options); + const method = this.methods[20], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -432,7 +459,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: CreateAccessListReview(teleport.accesslist.v1.CreateAccessListReviewRequest) returns (teleport.accesslist.v1.CreateAccessListReviewResponse); */ createAccessListReview(input: CreateAccessListReviewRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[20], opt = this._transport.mergeOptions(options); + const method = this.methods[21], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -441,7 +468,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: DeleteAccessListReview(teleport.accesslist.v1.DeleteAccessListReviewRequest) returns (google.protobuf.Empty); */ deleteAccessListReview(input: DeleteAccessListReviewRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[21], opt = this._transport.mergeOptions(options); + const method = this.methods[22], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -450,7 +477,7 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: AccessRequestPromote(teleport.accesslist.v1.AccessRequestPromoteRequest) returns (teleport.accesslist.v1.AccessRequestPromoteResponse); */ accessRequestPromote(input: AccessRequestPromoteRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[22], opt = this._transport.mergeOptions(options); + const method = this.methods[23], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -460,7 +487,16 @@ export class AccessListServiceClient implements IAccessListServiceClient, Servic * @generated from protobuf rpc: GetSuggestedAccessLists(teleport.accesslist.v1.GetSuggestedAccessListsRequest) returns (teleport.accesslist.v1.GetSuggestedAccessListsResponse); */ getSuggestedAccessLists(input: GetSuggestedAccessListsRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[23], opt = this._transport.mergeOptions(options); + const method = this.methods[24], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } + /** + * GetInheritedGrants returns the inherited grants for an access list. + * + * @generated from protobuf rpc: GetInheritedGrants(teleport.accesslist.v1.GetInheritedGrantsRequest) returns (teleport.accesslist.v1.GetInheritedGrantsResponse); + */ + getInheritedGrants(input: GetInheritedGrantsRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[25], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } } diff --git a/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.grpc-server.ts b/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.grpc-server.ts index 33396a9cf266..87f2dfd96ffc 100644 --- a/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.grpc-server.ts +++ b/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.grpc-server.ts @@ -18,6 +18,8 @@ // See the License for the specific language governing permissions and // limitations under the License. // +import { GetInheritedGrantsResponse } from "./accesslist_service_pb"; +import { GetInheritedGrantsRequest } from "./accesslist_service_pb"; import { GetSuggestedAccessListsResponse } from "./accesslist_service_pb"; import { GetSuggestedAccessListsRequest } from "./accesslist_service_pb"; import { AccessRequestPromoteResponse } from "./accesslist_service_pb"; @@ -36,6 +38,8 @@ import { DeleteAllAccessListMembersForAccessListRequest } from "./accesslist_ser import { DeleteAccessListMemberRequest } from "./accesslist_service_pb"; import { UpdateAccessListMemberRequest } from "./accesslist_service_pb"; import { UpsertAccessListMemberRequest } from "./accesslist_service_pb"; +import { GetAccessListOwnersResponse } from "./accesslist_service_pb"; +import { GetAccessListOwnersRequest } from "./accesslist_service_pb"; import { Member } from "./accesslist_pb"; import { GetAccessListMemberRequest } from "./accesslist_service_pb"; import { ListAllAccessListMembersResponse } from "./accesslist_service_pb"; @@ -139,6 +143,13 @@ export interface IAccessListService extends grpc.UntypedServiceImplementation { * @generated from protobuf rpc: GetAccessListMember(teleport.accesslist.v1.GetAccessListMemberRequest) returns (teleport.accesslist.v1.Member); */ getAccessListMember: grpc.handleUnaryCall; + /** + * GetAccessListOwners returns a list of all owners in an Access List, + * including those inherited from nested Access Lists. + * + * @generated from protobuf rpc: GetAccessListOwners(teleport.accesslist.v1.GetAccessListOwnersRequest) returns (teleport.accesslist.v1.GetAccessListOwnersResponse); + */ + getAccessListOwners: grpc.handleUnaryCall; /** * UpsertAccessListMember creates or updates an access list member resource. * @@ -219,6 +230,12 @@ export interface IAccessListService extends grpc.UntypedServiceImplementation { * @generated from protobuf rpc: GetSuggestedAccessLists(teleport.accesslist.v1.GetSuggestedAccessListsRequest) returns (teleport.accesslist.v1.GetSuggestedAccessListsResponse); */ getSuggestedAccessLists: grpc.handleUnaryCall; + /** + * GetInheritedGrants returns the inherited grants for an access list. + * + * @generated from protobuf rpc: GetInheritedGrants(teleport.accesslist.v1.GetInheritedGrantsRequest) returns (teleport.accesslist.v1.GetInheritedGrantsResponse); + */ + getInheritedGrants: grpc.handleUnaryCall; } /** * @grpc/grpc-js definition for the protobuf service teleport.accesslist.v1.AccessListService. @@ -352,6 +369,16 @@ export const accessListServiceDefinition: grpc.ServiceDefinition Buffer.from(Member.toBinary(value)), requestSerialize: value => Buffer.from(GetAccessListMemberRequest.toBinary(value)) }, + getAccessListOwners: { + path: "/teleport.accesslist.v1.AccessListService/GetAccessListOwners", + originalName: "GetAccessListOwners", + requestStream: false, + responseStream: false, + responseDeserialize: bytes => GetAccessListOwnersResponse.fromBinary(bytes), + requestDeserialize: bytes => GetAccessListOwnersRequest.fromBinary(bytes), + responseSerialize: value => Buffer.from(GetAccessListOwnersResponse.toBinary(value)), + requestSerialize: value => Buffer.from(GetAccessListOwnersRequest.toBinary(value)) + }, upsertAccessListMember: { path: "/teleport.accesslist.v1.AccessListService/UpsertAccessListMember", originalName: "UpsertAccessListMember", @@ -471,5 +498,15 @@ export const accessListServiceDefinition: grpc.ServiceDefinition GetSuggestedAccessListsRequest.fromBinary(bytes), responseSerialize: value => Buffer.from(GetSuggestedAccessListsResponse.toBinary(value)), requestSerialize: value => Buffer.from(GetSuggestedAccessListsRequest.toBinary(value)) + }, + getInheritedGrants: { + path: "/teleport.accesslist.v1.AccessListService/GetInheritedGrants", + originalName: "GetInheritedGrants", + requestStream: false, + responseStream: false, + responseDeserialize: bytes => GetInheritedGrantsResponse.fromBinary(bytes), + requestDeserialize: bytes => GetInheritedGrantsRequest.fromBinary(bytes), + responseSerialize: value => Buffer.from(GetInheritedGrantsResponse.toBinary(value)), + requestSerialize: value => Buffer.from(GetInheritedGrantsRequest.toBinary(value)) } }; diff --git a/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.ts b/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.ts index 4303cedd5a2c..dd5c01b58789 100644 --- a/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.ts +++ b/gen/proto/ts/teleport/accesslist/v1/accesslist_service_pb.ts @@ -32,7 +32,9 @@ import { MessageType } from "@protobuf-ts/runtime"; import { AccessRequestV3 } from "../../legacy/types/types_pb"; import { Timestamp } from "../../../google/protobuf/timestamp_pb"; import { Review } from "./accesslist_pb"; +import { AccessListOwner } from "./accesslist_pb"; import { Member } from "./accesslist_pb"; +import { AccessListGrants } from "./accesslist_pb"; import { AccessList } from "./accesslist_pb"; /** * GetAccessListsRequest is the request for getting all access lists. @@ -92,6 +94,32 @@ export interface ListAccessListsResponse { */ nextToken: string; } +/** + * GetInheritedGrantsRequest is the request for getting inherited grants. + * + * @generated from protobuf message teleport.accesslist.v1.GetInheritedGrantsRequest + */ +export interface GetInheritedGrantsRequest { + /** + * access_list_id is the ID of the access list to retrieve. + * + * @generated from protobuf field: string access_list_id = 1; + */ + accessListId: string; +} +/** + * GetInheritedGrantsResponse is the response for getting inherited grants. + * + * @generated from protobuf message teleport.accesslist.v1.GetInheritedGrantsResponse + */ +export interface GetInheritedGrantsResponse { + /** + * grants is the list of inherited member grants. + * + * @generated from protobuf field: teleport.accesslist.v1.AccessListGrants grants = 1; + */ + grants?: AccessListGrants; +} /** * GetAccessListRequest is the request for retrieving an access list. * @@ -198,6 +226,12 @@ export interface CountAccessListMembersResponse { * @generated from protobuf field: uint32 count = 1; */ count: number; + /** + * list_count is the number of access list members of type list in the access list. + * + * @generated from protobuf field: uint32 list_count = 2; + */ + listCount: number; } /** * ListAccessListMembersRequest is the request for getting paginated access list @@ -345,6 +379,35 @@ export interface GetAccessListMemberRequest { */ memberName: string; } +/** + * GetAccessListOwnersRequest is the request for getting a list of all owners + * in an Access List, including those inherited from nested Access Lists. + * + * @generated from protobuf message teleport.accesslist.v1.GetAccessListOwnersRequest + */ +export interface GetAccessListOwnersRequest { + /** + * access_list is the name of the access list. + * + * @generated from protobuf field: string access_list = 1; + */ + accessList: string; +} +/** + * GetAccessListOwnersResponse is the response for getting a list of all + * owners in an Access List, including those inherited from nested Access Lists. + * + * @generated from protobuf message teleport.accesslist.v1.GetAccessListOwnersResponse + */ +export interface GetAccessListOwnersResponse { + /** + * owners is the list of all owners in the Access List, including those + * inherited from nested Access Lists. + * + * @generated from protobuf field: repeated teleport.accesslist.v1.AccessListOwner owners = 1; + */ + owners: AccessListOwner[]; +} /** * UpsertAccessListMemberRequest is the request for upserting an access list * member. @@ -806,6 +869,99 @@ class ListAccessListsResponse$Type extends MessageType */ export const ListAccessListsResponse = new ListAccessListsResponse$Type(); // @generated message type with reflection information, may provide speed optimized methods +class GetInheritedGrantsRequest$Type extends MessageType { + constructor() { + super("teleport.accesslist.v1.GetInheritedGrantsRequest", [ + { no: 1, name: "access_list_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): GetInheritedGrantsRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.accessListId = ""; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GetInheritedGrantsRequest): GetInheritedGrantsRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string access_list_id */ 1: + message.accessListId = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: GetInheritedGrantsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string access_list_id = 1; */ + if (message.accessListId !== "") + writer.tag(1, WireType.LengthDelimited).string(message.accessListId); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message teleport.accesslist.v1.GetInheritedGrantsRequest + */ +export const GetInheritedGrantsRequest = new GetInheritedGrantsRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class GetInheritedGrantsResponse$Type extends MessageType { + constructor() { + super("teleport.accesslist.v1.GetInheritedGrantsResponse", [ + { no: 1, name: "grants", kind: "message", T: () => AccessListGrants } + ]); + } + create(value?: PartialMessage): GetInheritedGrantsResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GetInheritedGrantsResponse): GetInheritedGrantsResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* teleport.accesslist.v1.AccessListGrants grants */ 1: + message.grants = AccessListGrants.internalBinaryRead(reader, reader.uint32(), options, message.grants); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: GetInheritedGrantsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* teleport.accesslist.v1.AccessListGrants grants = 1; */ + if (message.grants) + AccessListGrants.internalBinaryWrite(message.grants, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message teleport.accesslist.v1.GetInheritedGrantsResponse + */ +export const GetInheritedGrantsResponse = new GetInheritedGrantsResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods class GetAccessListRequest$Type extends MessageType { constructor() { super("teleport.accesslist.v1.GetAccessListRequest", [ @@ -1139,12 +1295,14 @@ export const CountAccessListMembersRequest = new CountAccessListMembersRequest$T class CountAccessListMembersResponse$Type extends MessageType { constructor() { super("teleport.accesslist.v1.CountAccessListMembersResponse", [ - { no: 1, name: "count", kind: "scalar", T: 13 /*ScalarType.UINT32*/ } + { no: 1, name: "count", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 2, name: "list_count", kind: "scalar", T: 13 /*ScalarType.UINT32*/ } ]); } create(value?: PartialMessage): CountAccessListMembersResponse { const message = globalThis.Object.create((this.messagePrototype!)); message.count = 0; + message.listCount = 0; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -1157,6 +1315,9 @@ class CountAccessListMembersResponse$Type extends MessageType { + constructor() { + super("teleport.accesslist.v1.GetAccessListOwnersRequest", [ + { no: 1, name: "access_list", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): GetAccessListOwnersRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.accessList = ""; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GetAccessListOwnersRequest): GetAccessListOwnersRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string access_list */ 1: + message.accessList = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: GetAccessListOwnersRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string access_list = 1; */ + if (message.accessList !== "") + writer.tag(1, WireType.LengthDelimited).string(message.accessList); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message teleport.accesslist.v1.GetAccessListOwnersRequest + */ +export const GetAccessListOwnersRequest = new GetAccessListOwnersRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class GetAccessListOwnersResponse$Type extends MessageType { + constructor() { + super("teleport.accesslist.v1.GetAccessListOwnersResponse", [ + { no: 1, name: "owners", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => AccessListOwner } + ]); + } + create(value?: PartialMessage): GetAccessListOwnersResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + message.owners = []; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GetAccessListOwnersResponse): GetAccessListOwnersResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated teleport.accesslist.v1.AccessListOwner owners */ 1: + message.owners.push(AccessListOwner.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: GetAccessListOwnersResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated teleport.accesslist.v1.AccessListOwner owners = 1; */ + for (let i = 0; i < message.owners.length; i++) + AccessListOwner.internalBinaryWrite(message.owners[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message teleport.accesslist.v1.GetAccessListOwnersResponse + */ +export const GetAccessListOwnersResponse = new GetAccessListOwnersResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods class UpsertAccessListMemberRequest$Type extends MessageType { constructor() { super("teleport.accesslist.v1.UpsertAccessListMemberRequest", [ @@ -2394,6 +2652,7 @@ export const AccessListService = new ServiceType("teleport.accesslist.v1.AccessL { name: "ListAccessListMembers", options: {}, I: ListAccessListMembersRequest, O: ListAccessListMembersResponse }, { name: "ListAllAccessListMembers", options: {}, I: ListAllAccessListMembersRequest, O: ListAllAccessListMembersResponse }, { name: "GetAccessListMember", options: {}, I: GetAccessListMemberRequest, O: Member }, + { name: "GetAccessListOwners", options: {}, I: GetAccessListOwnersRequest, O: GetAccessListOwnersResponse }, { name: "UpsertAccessListMember", options: {}, I: UpsertAccessListMemberRequest, O: Member }, { name: "UpdateAccessListMember", options: {}, I: UpdateAccessListMemberRequest, O: Member }, { name: "DeleteAccessListMember", options: {}, I: DeleteAccessListMemberRequest, O: Empty }, @@ -2405,5 +2664,6 @@ export const AccessListService = new ServiceType("teleport.accesslist.v1.AccessL { name: "CreateAccessListReview", options: {}, I: CreateAccessListReviewRequest, O: CreateAccessListReviewResponse }, { name: "DeleteAccessListReview", options: {}, I: DeleteAccessListReviewRequest, O: Empty }, { name: "AccessRequestPromote", options: {}, I: AccessRequestPromoteRequest, O: AccessRequestPromoteResponse }, - { name: "GetSuggestedAccessLists", options: {}, I: GetSuggestedAccessListsRequest, O: GetSuggestedAccessListsResponse } + { name: "GetSuggestedAccessLists", options: {}, I: GetSuggestedAccessListsRequest, O: GetSuggestedAccessListsResponse }, + { name: "GetInheritedGrants", options: {}, I: GetInheritedGrantsRequest, O: GetInheritedGrantsResponse } ]); diff --git a/integrations/access/accesslist/app.go b/integrations/access/accesslist/app.go index 522a9bf1ae5e..16c54d10b416 100644 --- a/integrations/access/accesslist/app.go +++ b/integrations/access/accesslist/app.go @@ -249,10 +249,25 @@ func (a *App) getRecipientsRequiringReminders(ctx context.Context, accessList *a func (a *App) fetchRecipients(ctx context.Context, accessList *accesslist.AccessList, now, notificationStart time.Time) map[string]common.Recipient { log := logger.Get(ctx) - allRecipients := make(map[string]common.Recipient, len(accessList.Spec.Owners)) + var allOwners []*accesslist.Owner + + allOwners, err := a.apiClient.GetAccessListOwners(ctx, accessList.GetName()) + if err != nil { + // TODO(kiosion): Remove in v18; protecting against server not having `GetAccessListOwners` func. + if trace.IsNotImplemented(err) { + log.WithError(err).Warnf("Error getting nested owners for access list '%v', continuing with only explicit owners", accessList.GetName()) + for _, owner := range accessList.Spec.Owners { + allOwners = append(allOwners, &owner) + } + } else { + log.WithError(err).Errorf("Error getting owners for access list '%v'", accessList.GetName()) + } + } + + allRecipients := make(map[string]common.Recipient, len(allOwners)) // Get the owners from the bot as recipients. - for _, owner := range accessList.Spec.Owners { + for _, owner := range allOwners { recipient, err := a.bot.FetchRecipient(ctx, owner.Name) if err != nil { log.Debugf("error getting recipient %s", owner.Name) diff --git a/integrations/access/common/config.go b/integrations/access/common/config.go index 8e564559f0ad..0b4f30e11001 100644 --- a/integrations/access/common/config.go +++ b/integrations/access/common/config.go @@ -64,6 +64,10 @@ func (w *wrappedClient) ListAccessLists(ctx context.Context, pageSize int, pageT return w.Client.AccessListClient().ListAccessLists(ctx, pageSize, pageToken) } +func (w *wrappedClient) GetAccessListOwners(ctx context.Context, accessListName string) ([]*accesslist.Owner, error) { + return w.Client.AccessListClient().GetAccessListOwners(ctx, accessListName) +} + // ListAccessMonitoringRulesWithFilter lists current access monitoring rules. func (w *wrappedClient) ListAccessMonitoringRulesWithFilter(ctx context.Context, pageSize int, pageToken string, subjects []string, notificationName string) ([]*accessmonitoringrulesv1.AccessMonitoringRule, string, error) { return w.Client.AccessMonitoringRulesClient().ListAccessMonitoringRulesWithFilter(ctx, pageSize, pageToken, subjects, notificationName) diff --git a/integrations/access/common/teleport/client.go b/integrations/access/common/teleport/client.go index 081c4c17b6aa..87ef80b8e8fd 100644 --- a/integrations/access/common/teleport/client.go +++ b/integrations/access/common/teleport/client.go @@ -42,4 +42,5 @@ type Client interface { ListResources(ctx context.Context, req proto.ListResourcesRequest) (*types.ListResourcesResponse, error) ListAccessLists(context.Context, int, string) ([]*accesslist.AccessList, string, error) ListAccessMonitoringRulesWithFilter(ctx context.Context, pageSize int, pageToken string, subjects []string, notificationName string) ([]*accessmonitoringrulesv1.AccessMonitoringRule, string, error) + GetAccessListOwners(ctx context.Context, accessListName string) ([]*accesslist.Owner, error) } diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_accesslists.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_accesslists.yaml index 802e2a4f13a1..2c595617b69d 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_accesslists.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_accesslists.yaml @@ -153,6 +153,10 @@ spec: description: ineligible_status describes if this owner is eligible or not and if not, describes how they're lacking eligibility. x-kubernetes-int-or-string: true + membership_kind: + description: membership_kind describes the type of membership, + either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + x-kubernetes-int-or-string: true name: description: name is the username of the owner. type: string diff --git a/integrations/terraform/tfschema/accesslist/v1/accesslist_terraform.go b/integrations/terraform/tfschema/accesslist/v1/accesslist_terraform.go index ef0bd9464ef7..33058a3bad9a 100644 --- a/integrations/terraform/tfschema/accesslist/v1/accesslist_terraform.go +++ b/integrations/terraform/tfschema/accesslist/v1/accesslist_terraform.go @@ -245,6 +245,11 @@ func GenSchemaAccessList(ctx context.Context) (github_com_hashicorp_terraform_pl Optional: true, Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, }, + "membership_kind": { + Description: "membership_kind describes the type of membership, either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.Int64Type, + }, "name": { Description: "name is the username of the owner.", Optional: true, @@ -571,6 +576,23 @@ func CopyAccessListFromTerraform(_ context.Context, tf github_com_hashicorp_terr } } } + { + a, ok := tf.Attrs["membership_kind"] + if !ok { + diags.Append(attrReadMissingDiag{"AccessList.spec.owners.membership_kind"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.Int64) + if !ok { + diags.Append(attrReadConversionFailureDiag{"AccessList.spec.owners.membership_kind", "github.com/hashicorp/terraform-plugin-framework/types.Int64"}) + } else { + var t github_com_gravitational_teleport_api_gen_proto_go_teleport_accesslist_v1.MembershipKind + if !v.Null && !v.Unknown { + t = github_com_gravitational_teleport_api_gen_proto_go_teleport_accesslist_v1.MembershipKind(v.Value) + } + obj.MembershipKind = t + } + } + } } obj.Owners[k] = t } @@ -1599,6 +1621,28 @@ func CopyAccessListToTerraform(ctx context.Context, obj *github_com_gravitationa tf.Attrs["description"] = v } } + { + t, ok := tf.AttrTypes["membership_kind"] + if !ok { + diags.Append(attrWriteMissingDiag{"AccessList.spec.owners.membership_kind"}) + } else { + v, ok := tf.Attrs["membership_kind"].(github_com_hashicorp_terraform_plugin_framework_types.Int64) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"AccessList.spec.owners.membership_kind", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.Int64) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"AccessList.spec.owners.membership_kind", "github.com/hashicorp/terraform-plugin-framework/types.Int64"}) + } + v.Null = int64(obj.MembershipKind) == 0 + } + v.Value = int64(obj.MembershipKind) + v.Unknown = false + tf.Attrs["membership_kind"] = v + } + } } v.Unknown = false c.Elems[k] = v diff --git a/lib/accesslists/hierarchy.go b/lib/accesslists/hierarchy.go new file mode 100644 index 000000000000..c9fbff8d4c5e --- /dev/null +++ b/lib/accesslists/hierarchy.go @@ -0,0 +1,816 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package accesslists + +import ( + "context" + "slices" + + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" + "github.com/gravitational/teleport/api/types/trait" + "github.com/gravitational/teleport/lib/services" +) + +// RelationshipKind represents the type of relationship: member or owner. +type RelationshipKind int + +const ( + RelationshipKindMember RelationshipKind = iota + RelationshipKindOwner +) + +// MembershipOrOwnershipType represents the type of membership or ownership a User has for an Access List. +type MembershipOrOwnershipType int + +const ( + // MembershipOrOwnershipTypeNone indicates that the User lacks valid Membership or Ownership for the Access List. + MembershipOrOwnershipTypeNone MembershipOrOwnershipType = iota + // MembershipOrOwnershipTypeExplicit indicates that the User has explicit Membership or Ownership for the Access List. + MembershipOrOwnershipTypeExplicit + // MembershipOrOwnershipTypeInherited indicates that the User has inherited Membership or Ownership for the Access List. + MembershipOrOwnershipTypeInherited +) + +type MembersAndLocksGetter interface { + ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) +} + +// HierarchyNode represents an access list and its relationships. +type HierarchyNode struct { + // AccessList is the Underlying AccessList object. + AccessList *accesslist.AccessList + // MemberUsers are users who are direct members of this list. + MemberUsers map[string]*accesslist.AccessListMember + // MemberLists are AccessLists that are direct members of this list. + MemberLists map[string]*HierarchyNode + // OwnerUsers are users who are direct Owners of this list. + OwnerUsers map[string]*accesslist.Owner + // OwnerLists are AccessLists that are direct Owners of this list. + OwnerLists map[string]*HierarchyNode + // MemberParents are AccessLists that have this list as a member. + MemberParents map[string]*HierarchyNode + // OwnerParents are AccessLists that have this list as an owner. + OwnerParents map[string]*HierarchyNode +} + +type hierarchy struct { + Nodes map[string]*HierarchyNode + Locks services.LockGetter + Clock clockwork.Clock +} + +// Hierarchy represents an interface for interacting with AccessLists and nested AccessLists through a tree-like structure. +type Hierarchy interface { + // ValidateAccessListWithMembers validates the addition of a new or existing AccessList with a list of AccessListMembers. + ValidateAccessListWithMembers(accessList *accesslist.AccessList, members []*accesslist.AccessListMember) error + // ValidateAccessListOwner validates the addition of an existing AccessList as an Owner to another existing AccessList. + ValidateAccessListOwner(parentListName string, owner *accesslist.Owner) error + // ValidateAccessListMember validates the addition of an AccessListMember to an existing AccessList. + ValidateAccessListMember(parentListName string, member *accesslist.AccessListMember) error + // GetOwners returns a flattened list of Owners for an Access List, including inherited Owners. + // + // Returned Owners are not validated for requirements – use IsAccessListOwner + // to validate an Owner's ownership status. + GetOwners(accessListName string) ([]*accesslist.Owner, error) + // GetMembers recursively fetches all non-list members for an AccessList. + // + // Returned Members are not validated for expiration or other requirements - use IsAccessListMember + // to validate a Member's membership status. + GetMembers(accessListName string) ([]*accesslist.AccessListMember, error) + // IsAccessListOwner determines if a User is a valid Owner of an existing or new AccessList, + // including via inheritance. If User has any inForce Locks, it will return an error. + IsAccessListOwner(ctx context.Context, user types.User, accessListName string) (MembershipOrOwnershipType, error) + // IsAccessListMember determines if a User is a valid Member of an existing AccessList, + // including via inheritance. If User has any inForce Locks, it will return an error. + IsAccessListMember(ctx context.Context, user types.User, accessListName string) (MembershipOrOwnershipType, error) + // GetOwnerParents returns Access Lists where the given Access List is an owner. + GetOwnerParents(accessListName string) ([]*accesslist.AccessList, error) + // GetMemberParents returns Access Lists where the given Access List is a member. + GetMemberParents(accessListName string) ([]*accesslist.AccessList, error) + // GetInheritedGrants returns the combined Grants for an Access List's members, inherited from any ancestor lists. + GetInheritedGrants(accessListName string) (*accesslist.Grants, error) +} + +type HierarchyConfig struct { + AccessLists []*accesslist.AccessList + Members MembersAndLocksGetter + Locks services.LockGetter + Clock clockwork.Clock +} + +func checkAndSetDefaults(cfg *HierarchyConfig) error { + if cfg.AccessLists == nil { + cfg.AccessLists = []*accesslist.AccessList{} + } + if cfg.Members == nil { + return trace.BadParameter("MembersGetter is required") + } + if cfg.Clock == nil { + cfg.Clock = clockwork.NewRealClock() + } + return nil +} + +// NewHierarchy creates a new tree-like structure of AccessLists and their relationships, including Members and Owners. +// It validates the relationships between AccessLists and ensures that no cyclic references are created and that the depth of a +// branch does not exceed the maximum allowed depth. +// +// It returns a Hierarchy interface, useful for querying the validity of Membership and Ownership changes, and for determining +// a User's Membership or Ownership status for an AccessList, including inherited relationships. +func NewHierarchy(ctx context.Context, cfg HierarchyConfig) (Hierarchy, error) { + err := checkAndSetDefaults(&cfg) + if err != nil { + return nil, trace.Wrap(err) + } + + h := &hierarchy{ + Nodes: make(map[string]*HierarchyNode), + Locks: cfg.Locks, + Clock: cfg.Clock, + } + + for _, al := range cfg.AccessLists { + h.Nodes[al.GetName()] = &HierarchyNode{ + AccessList: al, + MemberUsers: make(map[string]*accesslist.AccessListMember), + MemberLists: make(map[string]*HierarchyNode), + OwnerUsers: make(map[string]*accesslist.Owner), + OwnerLists: make(map[string]*HierarchyNode), + MemberParents: make(map[string]*HierarchyNode), + OwnerParents: make(map[string]*HierarchyNode), + } + } + + // Avoid non-deterministic order of processing here by iterating over the AccessLists instead of the Nodes map. + for _, al := range cfg.AccessLists { + node := h.Nodes[al.GetName()] + + for _, owner := range al.Spec.Owners { + if owner.MembershipKind != accesslist.MembershipKindList { + node.OwnerUsers[owner.Name] = &owner + continue + } + ownerNode, exists := h.Nodes[owner.Name] + // If the owner AccessList doesn't exist, and continue. + if !exists { + continue + } + if err := validateAddition(node, ownerNode, RelationshipKindOwner); err != nil { + return nil, trace.Wrap(err) + } + node.OwnerLists[owner.Name] = ownerNode + ownerNode.OwnerParents[node.AccessList.GetName()] = node + } + + members, err := fetchMembers(ctx, al.GetName(), cfg.Members) + if err != nil { + return nil, trace.Wrap(err) + } + for _, member := range members { + if member.Spec.MembershipKind != accesslist.MembershipKindList { + node.MemberUsers[member.Spec.Name] = member + continue + } + memberNode, exists := h.Nodes[member.Spec.Name] + // If the member AccessList doesn't exist, continue. + if !exists { + continue + } + if err := validateAddition(node, memberNode, RelationshipKindMember); err != nil { + return nil, trace.Wrap(err) + } + node.MemberLists[member.Spec.Name] = memberNode + memberNode.MemberParents[node.AccessList.GetName()] = node + } + } + + return h, nil +} + +func fetchMembers(ctx context.Context, accessListName string, membersGetter MembersAndLocksGetter) ([]*accesslist.AccessListMember, error) { + var allMembers []*accesslist.AccessListMember + pageToken := "" + for { + members, nextToken, err := membersGetter.ListAccessListMembers(ctx, accessListName, 0, pageToken) + if err != nil { + // If the AccessList doesn't exist yet, should return an empty list of members + if trace.IsNotFound(err) { + break + } + return nil, trace.Wrap(err) + } + allMembers = append(allMembers, members...) + if nextToken == "" { + break + } + pageToken = nextToken + } + return allMembers, nil +} + +// GetMembers recursively collects all non-list members for an AccessList. +func (h *hierarchy) GetMembers(accessListName string) ([]*accesslist.AccessListMember, error) { + node, exists := h.Nodes[accessListName] + if !exists { + return nil, trace.NotFound("Access List '%s' not found", accessListName) + } + + var allMembers []*accesslist.AccessListMember + + for _, member := range node.MemberUsers { + allMembers = append(allMembers, member) + } + + for _, memberList := range node.MemberLists { + members, err := h.GetMembers(memberList.AccessList.GetName()) + if err != nil { + return nil, trace.Wrap(err) + } + allMembers = append(allMembers, members...) + } + + return allMembers, nil +} + +func validateAddition(parentNode, childNode *HierarchyNode, kind RelationshipKind) error { + kindStr := "a Member" + if kind == RelationshipKindOwner { + kindStr = "an Owner" + } + if isReachable(childNode, parentNode.AccessList.GetName(), make(map[string]struct{})) { + return trace.BadParameter("Access List '%s' can't be added as %s of '%s' because '%s' is already included as a Member or Owner in '%s'", childNode.AccessList.Spec.Title, kindStr, parentNode.AccessList.Spec.Title, parentNode.AccessList.Spec.Title, childNode.AccessList.Spec.Title) + } + if exceedsMaxDepth(parentNode, childNode, kind) { + return trace.BadParameter("Access List '%s' can't be added as %s of '%s' because it would exceed the maximum nesting depth of %d", childNode.AccessList.Spec.Title, kindStr, parentNode.AccessList.Spec.Title, accesslist.MaxAllowedDepth) + } + return nil +} + +func isReachable(node *HierarchyNode, targetName string, visited map[string]struct{}) bool { + if node.AccessList.GetName() == targetName { + return true + } + if _, ok := visited[node.AccessList.GetName()]; ok { + return false + } + visited[node.AccessList.GetName()] = struct{}{} + + // Traverse member lists + for _, child := range node.MemberLists { + if isReachable(child, targetName, visited) { + return true + } + } + // Traverse owner lists + for _, owner := range node.OwnerLists { + if isReachable(owner, targetName, visited) { + return true + } + } + return false +} + +func exceedsMaxDepth(parentNode, childNode *HierarchyNode, kind RelationshipKind) bool { + switch kind { + case RelationshipKindOwner: + // For Owners, only consider the depth downwards from the child node, since Ownership is not inherited Owners->Owners->Owners... as Membership is. + return maxDepthDownwards(childNode, make(map[string]struct{})) > accesslist.MaxAllowedDepth + default: + // For Members, consider the depth upwards from the parent node, downwards from the child node, and the edge between them + return maxDepthUpwards(parentNode, make(map[string]struct{}))+maxDepthDownwards(childNode, make(map[string]struct{}))+1 > accesslist.MaxAllowedDepth + } +} + +func maxDepthDownwards(node *HierarchyNode, seen map[string]struct{}) int { + if _, ok := seen[node.AccessList.GetName()]; ok { + return 0 + } + seen[node.AccessList.GetName()] = struct{}{} + maxDepth := 0 + for _, childNode := range node.MemberLists { + // Depth is the max depth of all children, +1 for the edge to the child. + depth := maxDepthDownwards(childNode, seen) + 1 + if depth > maxDepth { + maxDepth = depth + } + } + delete(seen, node.AccessList.GetName()) + return maxDepth +} + +func maxDepthUpwards(node *HierarchyNode, seen map[string]struct{}) int { + if _, ok := seen[node.AccessList.GetName()]; ok { + return 0 + } + seen[node.AccessList.GetName()] = struct{}{} + maxDepth := 0 + for _, parentNode := range node.MemberParents { + // Depth upwards is the max depth of all parents, +1 for the edge to the parent. + depth := maxDepthUpwards(parentNode, seen) + 1 + if depth > maxDepth { + maxDepth = depth + } + } + delete(seen, node.AccessList.GetName()) + return maxDepth +} + +// ValidateAccessListMember validates the addition of an AccessListMember to an existing AccessList. +func (h *hierarchy) ValidateAccessListMember(parentListName string, member *accesslist.AccessListMember) error { + if member.Spec.MembershipKind != accesslist.MembershipKindList { + return nil + } + return h.validateAccessListMemberOrOwner(parentListName, member.Spec.Name, RelationshipKindMember) +} + +// ValidateAccessListOwner validates the addition of an existing AccessList as an Owner to another existing AccessList. +func (h *hierarchy) ValidateAccessListOwner(parentListName string, owner *accesslist.Owner) error { + if owner.MembershipKind != accesslist.MembershipKindList { + return nil + } + return h.validateAccessListMemberOrOwner(parentListName, owner.Name, RelationshipKindOwner) +} + +func (h *hierarchy) validateAccessListMemberOrOwner(parentListName string, memberOrOwnerName string, kind RelationshipKind) error { + parentNode, parentExists := h.Nodes[parentListName] + if !parentExists { + return trace.NotFound("Access List '%s' not found", parentListName) + } + memberOrOwnerNode, memberOrOwnerExists := h.Nodes[memberOrOwnerName] + if !memberOrOwnerExists { + return trace.NotFound("Access List '%s' not found", memberOrOwnerName) + } + if err := validateAddition(parentNode, memberOrOwnerNode, kind); err != nil { + return trace.Wrap(err) + } + return nil +} + +// ValidateAccessListWithMembers validates the addition of a new or existing AccessList with a list of AccessListMembers. +func (h *hierarchy) ValidateAccessListWithMembers(accessList *accesslist.AccessList, members []*accesslist.AccessListMember) error { + var tempNode *HierarchyNode + existingNode, exists := h.Nodes[accessList.GetName()] + if exists { + // Reuse existing node's reverse pointers to parents. + tempNode = &HierarchyNode{ + AccessList: accessList, + MemberUsers: make(map[string]*accesslist.AccessListMember), + MemberLists: make(map[string]*HierarchyNode), + OwnerUsers: make(map[string]*accesslist.Owner), + OwnerLists: make(map[string]*HierarchyNode), + MemberParents: existingNode.MemberParents, + OwnerParents: existingNode.OwnerParents, + } + } else { + tempNode = &HierarchyNode{ + AccessList: accessList, + MemberUsers: make(map[string]*accesslist.AccessListMember), + MemberLists: make(map[string]*HierarchyNode), + OwnerUsers: make(map[string]*accesslist.Owner), + OwnerLists: make(map[string]*HierarchyNode), + MemberParents: make(map[string]*HierarchyNode), + OwnerParents: make(map[string]*HierarchyNode), + } + } + + for _, owner := range accessList.Spec.Owners { + if owner.MembershipKind != accesslist.MembershipKindList { + tempNode.OwnerUsers[owner.Name] = &owner + continue + } + ownerNode, ownerExists := h.Nodes[owner.Name] + if !ownerExists { + return trace.NotFound("Owner Access List '%s' not found", owner.Name) + } + if err := validateAddition(tempNode, ownerNode, RelationshipKindOwner); err != nil { + return trace.Wrap(err) + } + tempNode.OwnerLists[owner.Name] = ownerNode + } + for _, member := range members { + if member.Spec.MembershipKind != accesslist.MembershipKindList { + tempNode.MemberUsers[member.Spec.Name] = member + continue + } + memberNode, memberExists := h.Nodes[member.Spec.Name] + if !memberExists { + return trace.NotFound("Member Access List '%s' not found", member.Spec.Name) + } + if err := validateAddition(tempNode, memberNode, RelationshipKindMember); err != nil { + return trace.Wrap(err) + } + tempNode.MemberLists[member.Spec.Name] = memberNode + } + return nil +} + +// GetOwners returns a flattened list of Owners for an Access List, including inherited Owners. +// +// Returned Owners are not validated for expiration or other requirements – use IsAccessListOwner +// to validate an Owner's ownership status. +func (h *hierarchy) GetOwners(accessListName string) ([]*accesslist.Owner, error) { + node, exists := h.Nodes[accessListName] + if !exists { + return nil, trace.NotFound("Access List '%s' not found", accessListName) + } + + visited := make(map[string]struct{}) + owners := h.collectOwners(node, visited, []*accesslist.Owner{}) + + return owners, nil +} + +// IsAccessListOwner determines if a User is a valid Owner of an existing or new AccessList, +// including via inheritance. If User has any inForce Locks, it will return an error. +func (h *hierarchy) IsAccessListOwner(ctx context.Context, user types.User, accessListName string) (MembershipOrOwnershipType, error) { + // Allow for Locks to be nil when not provided in constructor. + if h.Locks != nil { + locks, err := h.Locks.GetLocks(ctx, true, types.LockTarget{ + User: user.GetName(), + }) + if err != nil { + return MembershipOrOwnershipTypeNone, trace.Wrap(err) + } + + if len(locks) > 0 { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s' is currently locked", user.GetName()) + } + } + + node, exists := h.Nodes[accessListName] + if !exists { + return MembershipOrOwnershipTypeNone, trace.NotFound("Access List '%s' not found", accessListName) + } + + // Check explicit owners + if _, ok := node.OwnerUsers[user.GetName()]; ok { + // Verify ownership requirements using provided AccessList + if !UserMeetsRequirements(user, node.AccessList.Spec.OwnershipRequires) { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s' does not meet the ownership requirements for Access List '%s'", user.GetName(), node.AccessList.Spec.Title) + } + return MembershipOrOwnershipTypeExplicit, nil + } + + // Check inherited ownership + visited := make(map[string]struct{}) + isOwner, err := h.isInheritedOwner(ctx, user, node, visited) + if err != nil { + return MembershipOrOwnershipTypeNone, trace.Wrap(err) + } + if isOwner { + // ALso needs to meet ownership requirements of the parent. + if !UserMeetsRequirements(user, node.AccessList.Spec.OwnershipRequires) { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s' does not meet the ownership requirements for Access List '%s'", user.GetName(), node.AccessList.Spec.Title) + } + return MembershipOrOwnershipTypeInherited, nil + } + return MembershipOrOwnershipTypeNone, nil +} + +func (h *hierarchy) isInheritedOwner(ctx context.Context, user types.User, node *HierarchyNode, visited map[string]struct{}) (bool, error) { + if _, ok := visited[node.AccessList.GetName()]; ok { + return false, nil + } + visited[node.AccessList.GetName()] = struct{}{} + for _, ownerList := range node.OwnerLists { + // Check if identity is a member of ownerList + memberType, err := h.IsAccessListMember(ctx, user, ownerList.AccessList.GetName()) + if err != nil { + return false, trace.Wrap(err) + } + if memberType != MembershipOrOwnershipTypeNone { + return true, nil + } + // Recurse into ownerList's owners + isOwner, err := h.isInheritedOwner(ctx, user, ownerList, visited) + if err != nil { + return false, trace.Wrap(err) + } + if isOwner { + return true, nil + } + } + return false, nil +} + +// IsAccessListMember determines if a User is a valid Member of an existing AccessList, +// including via inheritance. If User has any inForce Locks, it will return an error. +func (h *hierarchy) IsAccessListMember(ctx context.Context, user types.User, accessListName string) (MembershipOrOwnershipType, error) { + // Allow for Locks to be nil when not provided in constructor. + if h.Locks != nil { + locks, err := h.Locks.GetLocks(ctx, true, types.LockTarget{ + User: user.GetName(), + }) + if err != nil { + return MembershipOrOwnershipTypeNone, trace.Wrap(err) + } + + if len(locks) > 0 { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s' is currently locked", user.GetName()) + } + } + + node, exists := h.Nodes[accessListName] + if !exists { + return MembershipOrOwnershipTypeNone, trace.NotFound("Access List '%s' not found", accessListName) + } + // Check explicit members + if _, ok := node.MemberUsers[user.GetName()]; ok { + // Verify membership requirements + if !UserMeetsRequirements(user, node.AccessList.Spec.MembershipRequires) { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s' does not meet the membership requirements for Access List '%s'", user.GetName(), node.AccessList.Spec.Title) + } + // Verify membership is not expired + if !node.MemberUsers[user.GetName()].Spec.Expires.IsZero() && !h.Clock.Now().Before(node.MemberUsers[user.GetName()].Spec.Expires) { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s's membership in Access List '%s' has expired", user.GetName(), node.AccessList.Spec.Title) + } + return MembershipOrOwnershipTypeExplicit, nil + } + // Check inherited membership + visited := make(map[string]struct{}) + isMember, expired := h.isInheritedMember(user, node, visited) + if expired { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s's membership in Access List '%s' has expired", user.GetName(), node.AccessList.Spec.Title) + } + if isMember { + // Also needs to meet membership requirements of the parent. + if !UserMeetsRequirements(user, node.AccessList.Spec.MembershipRequires) { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s' does not meet the membership requirements for Access List '%s'", user.GetName(), node.AccessList.Spec.Title) + } + return MembershipOrOwnershipTypeInherited, nil + } + return MembershipOrOwnershipTypeNone, nil +} + +func (h *hierarchy) isInheritedMember(user types.User, node *HierarchyNode, visited map[string]struct{}) (bool, bool) { + if _, ok := visited[node.AccessList.GetName()]; ok { + return false, false + } + visited[node.AccessList.GetName()] = struct{}{} + expired := false + for _, memberList := range node.MemberLists { + // Check if identity is a member of memberList + if member, ok := memberList.MemberUsers[user.GetName()]; ok { + // Check if membership is expired + if !member.Spec.Expires.IsZero() && !h.Clock.Now().Before(member.Spec.Expires) { + expired = true + // Avoid non-deterministic behavior here: If user's membership is expired, then + // continue checking, in case their membership in a related list is still valid. + continue + } else { + expired = false + } + // Verify membership requirements + if !UserMeetsRequirements(user, memberList.AccessList.Spec.MembershipRequires) { + continue + } + return true, false + } + // Recurse into memberList's members + isMember, expiredRecurse := h.isInheritedMember(user, memberList, visited) + if expiredRecurse && !expired { + expired = true + } + if isMember { + return true, false + } + } + return false, expired +} + +// UserMeetsRequirements is a helper which will return whether the User meets the AccessList Ownership/MembershipRequires. +func UserMeetsRequirements(identity types.User, requires accesslist.Requires) bool { + // Assemble the user's roles for easy look up. + userRolesMap := map[string]struct{}{} + for _, role := range identity.GetRoles() { + userRolesMap[role] = struct{}{} + } + + // Check that the user meets the role requirements. + for _, role := range requires.Roles { + if _, ok := userRolesMap[role]; !ok { + return false + } + } + + // Assemble traits for easy lookup. + userTraitsMap := map[string]map[string]struct{}{} + for k, values := range identity.GetTraits() { + if _, ok := userTraitsMap[k]; !ok { + userTraitsMap[k] = map[string]struct{}{} + } + + for _, v := range values { + userTraitsMap[k][v] = struct{}{} + } + } + + // Check that user meets trait requirements. + for k, values := range requires.Traits { + if _, ok := userTraitsMap[k]; !ok { + return false + } + + for _, v := range values { + if _, ok := userTraitsMap[k][v]; !ok { + return false + } + } + } + + // The user meets all requirements. + return true +} + +func (h *hierarchy) collectOwners(node *HierarchyNode, visited map[string]struct{}, owners []*accesslist.Owner) []*accesslist.Owner { + if _, ok := visited[node.AccessList.GetName()]; ok { + return owners + } + visited[node.AccessList.GetName()] = struct{}{} + + // Collect direct owner users + for _, owner := range node.OwnerUsers { + owners = append(owners, owner) + } + + // For owner lists, we need to collect their members as owners + for _, ownerList := range node.OwnerLists { + // Collect members from owner lists as potential owners + memberVisited := make(map[string]struct{}) + owners = h.collectMembersAsOwners(ownerList, memberVisited, owners) + } + + return owners +} + +func (h *hierarchy) collectMembersAsOwners(node *HierarchyNode, visited map[string]struct{}, owners []*accesslist.Owner) []*accesslist.Owner { + if _, ok := visited[node.AccessList.GetName()]; ok { + return owners + } + visited[node.AccessList.GetName()] = struct{}{} + + // Collect direct member users as owners + for _, member := range node.MemberUsers { + owners = append(owners, &accesslist.Owner{ + Name: member.Spec.Name, + Description: member.Metadata.Description, + IneligibleStatus: "", + MembershipKind: accesslist.MembershipKindUser, + }) + } + + // Recursively collect members from member lists + for _, memberList := range node.MemberLists { + owners = h.collectMembersAsOwners(memberList, visited, owners) + } + + return owners +} + +func (h *hierarchy) getAncestorsFor(accessListName string, kind RelationshipKind) ([]*accesslist.AccessList, error) { + node, exists := h.Nodes[accessListName] + if !exists { + return nil, trace.NotFound("Access List '%s' not found", accessListName) + } + visited := make(map[string]struct{}) + ancestorsMap := make(map[string]*accesslist.AccessList) + h.collectAncestors(node, kind, visited, ancestorsMap) + ancestors := make([]*accesslist.AccessList, 0, len(ancestorsMap)) + for _, al := range ancestorsMap { + ancestors = append(ancestors, al) + } + return ancestors, nil +} + +func (h *hierarchy) collectAncestors(node *HierarchyNode, kind RelationshipKind, visited map[string]struct{}, ancestors map[string]*accesslist.AccessList) { + if _, ok := visited[node.AccessList.GetName()]; ok { + return + } + visited[node.AccessList.GetName()] = struct{}{} + + switch kind { + case RelationshipKindOwner: + // Add direct owner parents to ancestors + for _, ownerParent := range node.OwnerParents { + ancestors[ownerParent.AccessList.GetName()] = ownerParent.AccessList + } + // Recursively traverse member parents + for _, memberParent := range node.MemberParents { + h.collectAncestors(memberParent, kind, visited, ancestors) + } + default: + // Only collect and add member parents + for _, memberParent := range node.MemberParents { + ancestors[memberParent.AccessList.GetName()] = memberParent.AccessList + h.collectAncestors(memberParent, kind, visited, ancestors) + } + } +} + +// GetInheritedGrants returns the combined Grants for an Access List's members, inherited from any ancestor lists. +func (h *hierarchy) GetInheritedGrants(accessListName string) (*accesslist.Grants, error) { + grants := accesslist.Grants{ + Traits: trait.Traits{}, + } + + collectedRoles := make(map[string]struct{}) + collectedTraits := make(map[string]map[string]struct{}) + + addGrants := func(grantRoles []string, grantTraits trait.Traits) { + for _, role := range grantRoles { + if _, exists := collectedRoles[role]; !exists { + grants.Roles = append(grants.Roles, role) + collectedRoles[role] = struct{}{} + } + } + for traitKey, traitValues := range grantTraits { + if _, exists := collectedTraits[traitKey]; !exists { + collectedTraits[traitKey] = make(map[string]struct{}) + } + for _, traitValue := range traitValues { + if _, exists := collectedTraits[traitKey][traitValue]; !exists { + grants.Traits[traitKey] = append(grants.Traits[traitKey], traitValue) + collectedTraits[traitKey][traitValue] = struct{}{} + } + } + } + } + + // Get ancestors via member relationship + ancestorLists, err := h.getAncestorsFor(accessListName, RelationshipKindMember) + if err != nil { + return nil, trace.Wrap(err) + } + for _, ancestor := range ancestorLists { + memberGrants := ancestor.GetGrants() + addGrants(memberGrants.Roles, memberGrants.Traits) + } + + // Get ancestors via owner relationship + ancestorOwnerLists, err := h.getAncestorsFor(accessListName, RelationshipKindOwner) + if err != nil { + return nil, trace.Wrap(err) + } + for _, ancestorOwner := range ancestorOwnerLists { + ownerGrants := ancestorOwner.GetOwnerGrants() + addGrants(ownerGrants.Roles, ownerGrants.Traits) + } + + slices.Sort(grants.Roles) + grants.Roles = slices.Compact(grants.Roles) + + for k, v := range grants.Traits { + slices.Sort(v) + grants.Traits[k] = slices.Compact(v) + } + + return &grants, nil +} + +// GetMemberParents returns Access Lists where the given Access List is a direct Member. +func (h *hierarchy) GetMemberParents(accessListName string) ([]*accesslist.AccessList, error) { + node, exists := h.Nodes[accessListName] + if !exists { + return nil, trace.NotFound("Access List '%s' not found", accessListName) + } + + var parentAccessLists []*accesslist.AccessList + for _, parentNode := range node.MemberParents { + parentAccessLists = append(parentAccessLists, parentNode.AccessList) + } + return parentAccessLists, nil +} + +// GetOwnerParents returns Access Lists where the given Access List is a direct Owner. +func (h *hierarchy) GetOwnerParents(accessListName string) ([]*accesslist.AccessList, error) { + node, exists := h.Nodes[accessListName] + if !exists { + return nil, trace.NotFound("Access List '%s' not found", accessListName) + } + + var parentAccessLists []*accesslist.AccessList + for _, parentNode := range node.OwnerParents { + parentAccessLists = append(parentAccessLists, parentNode.AccessList) + } + return parentAccessLists, nil +} diff --git a/lib/accesslists/hierarchy_test.go b/lib/accesslists/hierarchy_test.go new file mode 100644 index 000000000000..7c90384ce955 --- /dev/null +++ b/lib/accesslists/hierarchy_test.go @@ -0,0 +1,760 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package accesslists + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" + "github.com/gravitational/teleport/api/types/header" +) + +// Mock implementation of AccessListMembersGetter. +type mockMembersGetter struct { + members map[string][]*accesslist.AccessListMember +} + +func (m *mockMembersGetter) ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, pageToken string) ([]*accesslist.AccessListMember, string, error) { + members, exists := m.members[accessListName] + if !exists { + return nil, "", nil + } + return members, "", nil +} + +type mockLocksGetter struct { + targets map[string][]types.Lock +} + +func (m *mockLocksGetter) GetLock(ctx context.Context, name string) (types.Lock, error) { + panic("not implemented") +} + +func (m *mockLocksGetter) GetLocks(ctx context.Context, inForceOnly bool, targets ...types.LockTarget) ([]types.Lock, error) { + var locks []types.Lock + for _, target := range targets { + locks = append(locks, m.targets[target.User]...) + } + return locks, nil +} + +const ( + ownerUser = "ownerUser" + ownerUser2 = "ownerUser2" + member1 = "member1" + member2 = "member2" +) + +func TestNewAccessListHierarchy(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + acl3 := newAccessList(t, "3", clock) + acl4 := newAccessList(t, "4", clock) + acl5 := newAccessList(t, "5", clock) + + // acl1 -> acl2 -> acl3 + acl1m1 := newAccessListMember(t, acl1.GetName(), acl2.GetName(), accesslist.MembershipKindList, clock) + acl2m1 := newAccessListMember(t, acl2.GetName(), acl3.GetName(), accesslist.MembershipKindList, clock) + + // acl4 -> acl1,acl2 + acl4m1 := newAccessListMember(t, acl4.GetName(), acl1.GetName(), accesslist.MembershipKindList, clock) + acl4m2 := newAccessListMember(t, acl4.GetName(), acl2.GetName(), accesslist.MembershipKindList, clock) + + acl5.Spec.Owners = append(acl5.Spec.Owners, accesslist.Owner{ + Name: acl4.GetName(), + Description: "asdf", + MembershipKind: accesslist.MembershipKindList, + }) + + membersGetter := &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl1.GetName(): {acl1m1}, + acl2.GetName(): {acl2m1}, + acl3.GetName(): {}, + acl4.GetName(): {acl4m1, acl4m2}, + acl5.GetName(): {}, + }, + } + + // Hierarchy should be built successfully. + _, err := NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{acl1, acl2, acl3, acl4, acl5}, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + // When no lists are provided, should still build successfully (e.g., when no access lists yet). + _, err = NewHierarchy(ctx, HierarchyConfig{ + AccessLists: nil, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + _, err = NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{}, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + // When no Clock is provided, should create new RealClock internally. + _, err = NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{acl1, acl2, acl3, acl4, acl5}, + Members: membersGetter, + Locks: nil, + Clock: nil, + }) + require.NoError(t, err) + + // When no MembersGetter is provided, should return BadParam + _, err = NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{}, + Members: nil, + Locks: nil, + Clock: clock, + }) + require.ErrorIs(t, err, trace.BadParameter("MembersGetter is required")) +} + +func TestAccessListHierarchyDepthCheck(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + numAcls := accesslist.MaxAllowedDepth + 2 // Extra 2 to test exceeding the max depth + + acls := make([]*accesslist.AccessList, numAcls) + for i := 0; i < numAcls; i++ { + acls[i] = newAccessList(t, fmt.Sprintf("acl%d", i+1), clock) + } + + membersGetter := &mockMembersGetter{ + members: make(map[string][]*accesslist.AccessListMember), + } + + // Create members up to MaxAllowedDepth + for i := 0; i < accesslist.MaxAllowedDepth; i++ { + member := newAccessListMember(t, acls[i].GetName(), acls[i+1].GetName(), accesslist.MembershipKindList, clock) + membersGetter.members[acls[i].GetName()] = []*accesslist.AccessListMember{member} + } + // Set remaining Access Lists' members to empty slices + for i := accesslist.MaxAllowedDepth; i < numAcls; i++ { + membersGetter.members[acls[i].GetName()] = []*accesslist.AccessListMember{} + } + + // Should create hierarchy successfully with depth equal to MaxAllowedDepth + hierarchy, err := NewHierarchy(ctx, HierarchyConfig{ + AccessLists: acls[:accesslist.MaxAllowedDepth+2], + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + // Now, attempt to add a member that increases the depth beyond MaxAllowedDepth + extraMember := newAccessListMember( + t, + acls[accesslist.MaxAllowedDepth].GetName(), + acls[accesslist.MaxAllowedDepth+1].GetName(), + accesslist.MembershipKindList, + clock, + ) + + // Validate adding this member should fail due to exceeding max depth + err = hierarchy.ValidateAccessListMember(acls[accesslist.MaxAllowedDepth].GetName(), extraMember) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because it would exceed the maximum nesting depth of %d", acls[accesslist.MaxAllowedDepth+1].Spec.Title, acls[accesslist.MaxAllowedDepth].Spec.Title, accesslist.MaxAllowedDepth)) + + // Now, add this member to the membersGetter and attempt to create the hierarchy again, which should fail + membersGetter.members[acls[accesslist.MaxAllowedDepth].GetName()] = []*accesslist.AccessListMember{extraMember} + + // Attempt to create the hierarchy with the new member + _, err = NewHierarchy(ctx, HierarchyConfig{ + AccessLists: acls, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because it would exceed the maximum nesting depth of %d", acls[accesslist.MaxAllowedDepth+1].Spec.Title, acls[accesslist.MaxAllowedDepth].Spec.Title, accesslist.MaxAllowedDepth)) +} + +func TestAccessListValidateWithMembers(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + // We're creating a hierarchy with a depth of 10, and then trying to add it as a Member of a 'root' Access List. This should fail. + rootAcl := newAccessList(t, "root", clock) + nestedAcls := make([]*accesslist.AccessList, 0, accesslist.MaxAllowedDepth) + for i := 0; i < accesslist.MaxAllowedDepth+1; i++ { + acl := newAccessList(t, fmt.Sprintf("acl-%d", i), clock) + nestedAcls = append(nestedAcls, acl) + } + rootAclMember := newAccessListMember(t, rootAcl.GetName(), nestedAcls[0].GetName(), accesslist.MembershipKindList, clock) + members := make([]*accesslist.AccessListMember, 0, accesslist.MaxAllowedDepth-1) + for i := 0; i < accesslist.MaxAllowedDepth; i++ { + member := newAccessListMember(t, nestedAcls[i].GetName(), nestedAcls[i+1].GetName(), accesslist.MembershipKindList, clock) + members = append(members, member) + } + + membersGetter := &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + rootAcl.GetName(): {}, + }, + } + for i := 0; i < accesslist.MaxAllowedDepth; i++ { + membersGetter.members[nestedAcls[i].GetName()] = []*accesslist.AccessListMember{members[i]} + } + + // Should create successfully, as acl-0 -> acl-10 is a valid hierarchy of depth 10. + hierarchy, err := NewHierarchy(ctx, HierarchyConfig{ + AccessLists: append([]*accesslist.AccessList{rootAcl}, nestedAcls...), + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + // Calling `ValidateAccessListWithMembers`, with `rootAclm1`, should fail, as it would exceed the maximum nesting depth. + err = hierarchy.ValidateAccessListWithMembers(rootAcl, []*accesslist.AccessListMember{rootAclMember}) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because it would exceed the maximum nesting depth of %d", nestedAcls[0].Spec.Title, rootAcl.Spec.Title, accesslist.MaxAllowedDepth)) + + const Length = accesslist.MaxAllowedDepth/2 + 1 + + // Next, we're creating two separate hierarchies, each with a depth of `MaxAllowedDepth/2`. When testing the validation, we'll try to connect the two hierarchies, which should fail. + nestedAcls1 := make([]*accesslist.AccessList, 0, Length) + for i := 0; i <= Length; i++ { + acl := newAccessList(t, fmt.Sprintf("acl1-%d", i), clock) + nestedAcls1 = append(nestedAcls1, acl) + } + + // Create the second hierarchy. + nestedAcls2 := make([]*accesslist.AccessList, 0, Length) + for i := 0; i <= Length; i++ { + acl := newAccessList(t, fmt.Sprintf("acl2-%d", i), clock) + nestedAcls2 = append(nestedAcls2, acl) + } + + membersGetter = &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{}, + } + + // Create the members for the first hierarchy. + for i := 0; i < Length; i++ { + member := newAccessListMember(t, nestedAcls1[i].GetName(), nestedAcls1[i+1].GetName(), accesslist.MembershipKindList, clock) + membersGetter.members[nestedAcls1[i].GetName()] = []*accesslist.AccessListMember{member} + } + + // Create the members for the second hierarchy. + for i := 0; i < Length; i++ { + member := newAccessListMember(t, nestedAcls2[i].GetName(), nestedAcls2[i+1].GetName(), accesslist.MembershipKindList, clock) + membersGetter.members[nestedAcls2[i].GetName()] = []*accesslist.AccessListMember{member} + } + + // Should create successfully, as both hierarchies are valid. + hierarchy, err = NewHierarchy(ctx, HierarchyConfig{ + AccessLists: append(nestedAcls1, nestedAcls2...), + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + nestedAcls1Last := nestedAcls1[len(nestedAcls1)-1] + + // Now, we'll try to connect the two hierarchies, which should fail. + err = hierarchy.ValidateAccessListWithMembers(nestedAcls1Last, []*accesslist.AccessListMember{newAccessListMember(t, nestedAcls1Last.GetName(), nestedAcls2[0].GetName(), accesslist.MembershipKindList, clock)}) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because it would exceed the maximum nesting depth of %d", nestedAcls2[0].Spec.Title, nestedAcls1[len(nestedAcls1)-1].Spec.Title, accesslist.MaxAllowedDepth)) +} + +func TestAccessListHierarchyCircularRefsCheck(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + acl3 := newAccessList(t, "3", clock) + + // acl1 -> acl2 -> acl3 + acl1m1 := newAccessListMember(t, acl1.GetName(), acl2.GetName(), accesslist.MembershipKindList, clock) + acl2m1 := newAccessListMember(t, acl2.GetName(), acl3.GetName(), accesslist.MembershipKindList, clock) + + // acl3 -> acl1 + acl3m1 := newAccessListMember(t, acl3.GetName(), acl1.GetName(), accesslist.MembershipKindList, clock) + + membersGetter := &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl1.GetName(): {acl1m1}, + acl2.GetName(): {acl2m1}, + acl3.GetName(): {}, + }, + } + + // Hierarchy should be built successfully. + hierarchy, err := NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{acl1, acl2, acl3}, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + // Circular references should not be allowed. + err = hierarchy.ValidateAccessListMember(acl3.GetName(), acl3m1) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because '%s' is already included as a Member or Owner in '%s'", acl1.Spec.Title, acl3.Spec.Title, acl3.Spec.Title, acl1.Spec.Title)) + + membersGetter.members[acl3.GetName()] = []*accesslist.AccessListMember{acl3m1} + + // After 'creating' the member that links acl3 to acl1, validation should fail due to circular reference. + _, err = NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{acl1, acl2, acl3}, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because '%s' is already included as a Member or Owner in '%s'", acl1.Spec.Title, acl3.Spec.Title, acl3.Spec.Title, acl1.Spec.Title)) + + // Circular references with Ownership should also be disallowed. + acl4 := newAccessList(t, "4", clock) + acl5 := newAccessList(t, "5", clock) + + // acl4 includes acl5 as a Member + acl4m1 := newAccessListMember(t, acl4.GetName(), acl5.GetName(), accesslist.MembershipKindList, clock) + + // acl5 includes acl4 as an Owner. + acl5.Spec.Owners = append(acl5.Spec.Owners, accesslist.Owner{ + Name: acl4.GetName(), + Description: "asdf", + MembershipKind: accesslist.MembershipKindList, + }) + + membersGetter = &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl4.GetName(): {acl4m1}, + acl5.GetName(): {}, + }, + } + + _, err = NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{acl4, acl5}, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as an Owner of '%s' because '%s' is already included as a Member or Owner in '%s'", acl4.Spec.Title, acl5.Spec.Title, acl5.Spec.Title, acl4.Spec.Title)) +} + +func TestAccessListHierarchyIsOwner(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + acl3 := newAccessList(t, "3", clock) + acl4 := newAccessList(t, "4", clock) + + // acl1 -> acl2 -> acl3 as members + acl1m1 := newAccessListMember(t, acl1.GetName(), acl2.GetName(), accesslist.MembershipKindList, clock) + acl1m2 := newAccessListMember(t, acl1.GetName(), member1, accesslist.MembershipKindUser, clock) + acl2m1 := newAccessListMember(t, acl2.GetName(), acl3.GetName(), accesslist.MembershipKindList, clock) + acl4m1 := newAccessListMember(t, acl4.GetName(), member2, accesslist.MembershipKindUser, clock) + + // acl4 -> acl1 as owner + acl4.Spec.Owners = append(acl4.Spec.Owners, accesslist.Owner{ + Name: acl1.GetName(), + Description: "asdf", + MembershipKind: accesslist.MembershipKindList, + }) + + membersGetter := &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl1.GetName(): {acl1m1, acl1m2}, + acl2.GetName(): {acl2m1}, + acl3.GetName(): {}, + acl4.GetName(): {acl4m1}, + }, + } + + // Hierarchy should be built successfully. + hierarchy, err := NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{acl1, acl2, acl3, acl4}, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + // User which does not meet acl1's Membership requirements. + stubUserNoRequires, err := types.NewUser(member1) + require.NoError(t, err) + + ownershipType, err := hierarchy.IsAccessListOwner(context.Background(), stubUserNoRequires, acl4.GetName()) + require.Error(t, err) + require.ErrorIs(t, err, trace.AccessDenied("User '%s' does not meet the membership requirements for Access List '%s'", member1, acl1.Spec.Title)) + // Should not have inherited ownership due to missing OwnershipRequires. + require.Equal(t, MembershipOrOwnershipTypeNone, ownershipType) + + // User which only meets acl1's Membership requirements. + stubUserMeetsMemberRequires, err := types.NewUser(member1) + require.NoError(t, err) + stubUserMeetsMemberRequires.SetTraits(map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + }) + stubUserMeetsMemberRequires.SetRoles([]string{"mrole1", "mrole2"}) + + ownershipType, err = hierarchy.IsAccessListOwner(context.Background(), stubUserMeetsMemberRequires, acl4.GetName()) + require.Error(t, err) + require.ErrorIs(t, err, trace.AccessDenied("User '%s' does not meet the ownership requirements for Access List '%s'", member1, acl4.Spec.Title)) + require.Equal(t, MembershipOrOwnershipTypeNone, ownershipType) + + // User which meets acl1's Membership and acl1's Ownership requirements. + stubUserMeetsAllRequires, err := types.NewUser(member1) + require.NoError(t, err) + stubUserMeetsAllRequires.SetTraits(map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + "otrait1": {"ovalue1", "ovalue2"}, + "otrait2": {"ovalue3", "ovalue4"}, + }) + stubUserMeetsAllRequires.SetRoles([]string{"mrole1", "mrole2", "orole1", "orole2"}) + + ownershipType, err = hierarchy.IsAccessListOwner(context.Background(), stubUserMeetsAllRequires, acl4.GetName()) + require.NoError(t, err) + // Should have inherited ownership from acl1's inclusion in acl4's Owners. + require.Equal(t, MembershipOrOwnershipTypeInherited, ownershipType) + + stubUserMeetsAllRequires.SetName(member2) + ownershipType, err = hierarchy.IsAccessListOwner(context.Background(), stubUserMeetsAllRequires, acl4.GetName()) + require.NoError(t, err) + // Should not have ownership. + require.Equal(t, MembershipOrOwnershipTypeNone, ownershipType) +} + +func TestAccessListIsMember(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + acl1 := newAccessList(t, "1", clock) + acl1m1 := newAccessListMember(t, acl1.GetName(), member1, accesslist.MembershipKindUser, clock) + + locksGetter := &mockLocksGetter{ + targets: map[string][]types.Lock{}, + } + membersGetter := &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl1.GetName(): {acl1m1}, + }, + } + + hierarchy, err := NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{acl1}, + Members: membersGetter, + Locks: locksGetter, + Clock: clock, + }) + require.NoError(t, err) + + stubMember1, err := types.NewUser(member1) + require.NoError(t, err) + stubMember1.SetTraits(map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + }) + stubMember1.SetRoles([]string{"mrole1", "mrole2"}) + + membershipType, err := hierarchy.IsAccessListMember(context.Background(), stubMember1, acl1.GetName()) + require.NoError(t, err) + require.Equal(t, MembershipOrOwnershipTypeExplicit, membershipType) + + // When user is Locked, should not be considered a Member. + lock, err := types.NewLock("user-lock", types.LockSpecV2{ + Target: types.LockTarget{ + User: member1, + }, + }) + require.NoError(t, err) + locksGetter.targets[member1] = []types.Lock{lock} + + membershipType, err = hierarchy.IsAccessListMember(context.Background(), stubMember1, acl1.GetName()) + require.ErrorIs(t, err, trace.AccessDenied("User '%s' is currently locked", member1)) + require.Equal(t, MembershipOrOwnershipTypeNone, membershipType) +} + +func TestGetOwners(t *testing.T) { + ctx := context.Background() + clock := clockwork.NewFakeClock() + + // Create Access Lists + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + acl3 := newAccessList(t, "3", clock) + + // Set up owners + // acl1 is owned by user "ownerA" and access list acl2 + acl1.Spec.Owners = []accesslist.Owner{ + { + Name: "ownerA", + MembershipKind: accesslist.MembershipKindUser, + }, + { + Name: "2", + MembershipKind: accesslist.MembershipKindList, + }, + } + + // acl2 is owned by user "ownerB" and access list aclC + acl2.Spec.Owners = []accesslist.Owner{ + { + Name: "ownerB", + MembershipKind: accesslist.MembershipKindUser, + }, + { + Name: "3", + MembershipKind: accesslist.MembershipKindList, + }, + } + + // acl3 is owned by user "ownerC" + acl3.Spec.Owners = []accesslist.Owner{ + { + Name: "ownerC", + MembershipKind: accesslist.MembershipKindUser, + }, + } + + // Set up members for owner lists + // aclB has member "memberB" + acl2m1 := newAccessListMember(t, acl2.GetName(), "memberB", accesslist.MembershipKindUser, clock) + // aclC has member "memberC" + acl3m1 := newAccessListMember(t, acl3.GetName(), "memberC", accesslist.MembershipKindUser, clock) + + // Prepare access lists and members + accessLists := []*accesslist.AccessList{acl1, acl2, acl3} + membersGetter := &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl2.GetName(): {acl2m1}, + acl3.GetName(): {acl3m1}, + }, + } + + // Create Hierarchy + hierarchy, err := NewHierarchy(ctx, HierarchyConfig{ + AccessLists: accessLists, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + // Test GetOwners for acl1 + owners, err := hierarchy.GetOwners(acl1.GetName()) + require.NoError(t, err) + + // Expected owners: + // - Direct owner: "ownerA" + // - Inherited owners via acl2 (since acl2 is an owner of acl1): + // - Members of acl2: "memberB" + // Note: Owners of acl2 ("ownerB") and members/owners of acl3 are not inherited by acl1 + + expectedOwners := map[string]bool{ + "ownerA": true, // Direct owner of acl1 + "memberB": true, // Member of acl2 (owner list of acl1) + } + + actualOwners := make(map[string]bool) + for _, owner := range owners { + actualOwners[owner.Name] = true + } + + require.Equal(t, expectedOwners, actualOwners, "Owners do not match expected owners") + + // Test GetOwners for acl2 + owners, err = hierarchy.GetOwners(acl2.GetName()) + require.NoError(t, err) + + // Expected owners: + // - Direct owner: "ownerB" + // - Inherited owners via acl3 (since acl3 is an owner of acl2): + // - Members of acl3: "memberC" + + expectedOwners = map[string]bool{ + "ownerB": true, // Direct owner of acl2 + "memberC": true, // Member of acl3 (owner list of acl2) + } + + actualOwners = make(map[string]bool) + for _, owner := range owners { + actualOwners[owner.Name] = true + } + + require.Equal(t, expectedOwners, actualOwners, "Owners do not match expected owners") +} + +func TestGetInheritedGrants(t *testing.T) { + ctx := context.Background() + clock := clockwork.NewFakeClock() + + aclroot := newAccessList(t, "root", clock) + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + + // aclroot has a trait for owners - "root-owner-trait", and a role for owners - "root-owner-role" + aclroot.Spec.OwnerGrants = accesslist.Grants{ + Traits: map[string][]string{ + "root-owner-trait": {"root-owner-value"}, + }, + Roles: []string{"root-owner-role"}, + } + + // acl1 has a trait for members - "1-member-trait", and a role for members - "1-member-role" + acl1.Spec.Grants = accesslist.Grants{ + Traits: map[string][]string{ + "1-member-trait": {"1-member-value"}, + }, + Roles: []string{"1-member-role"}, + } + + // acl2 has no traits or roles + acl2.Spec.Grants = accesslist.Grants{} + + aclroot.SetOwners([]accesslist.Owner{ + { + Name: acl1.GetName(), + MembershipKind: accesslist.MembershipKindList, + }, + }) + + membersGetter := &mockMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl1.GetName(): {newAccessListMember(t, acl1.GetName(), acl2.GetName(), accesslist.MembershipKindList, clock)}, + }, + } + + hierarchy, err := NewHierarchy(ctx, HierarchyConfig{ + AccessLists: []*accesslist.AccessList{aclroot, acl1, acl2}, + Members: membersGetter, + Locks: nil, + Clock: clock, + }) + require.NoError(t, err) + + // acl1 is an Owner of aclroot, and acl2 is a Member of acl1. + // so, members of acl2 should inherit aclroot's owner grants, and acl1's member grants. + expectedGrants := &accesslist.Grants{ + Traits: map[string][]string{ + "1-member-trait": {"1-member-value"}, + "root-owner-trait": {"root-owner-value"}, + }, + Roles: []string{"1-member-role", "root-owner-role"}, + } + + grants, err := hierarchy.GetInheritedGrants(acl2.GetName()) + require.NoError(t, err) + require.Equal(t, expectedGrants, grants) +} + +func newAccessList(t *testing.T, name string, clock clockwork.Clock) *accesslist.AccessList { + t.Helper() + + accessList, err := accesslist.NewAccessList( + header.Metadata{ + Name: name, + }, + accesslist.Spec{ + Title: name, + Description: "test access list", + Owners: []accesslist.Owner{ + {Name: ownerUser, Description: "owner user", MembershipKind: accesslist.MembershipKindUser}, + {Name: ownerUser2, Description: "owner user 2", MembershipKind: accesslist.MembershipKindUser}, + }, + Audit: accesslist.Audit{ + NextAuditDate: clock.Now().Add(time.Hour * 24 * 365), + Notifications: accesslist.Notifications{ + Start: 336 * time.Hour, // Two weeks. + }, + }, + MembershipRequires: accesslist.Requires{ + Roles: []string{"mrole1", "mrole2"}, + Traits: map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + }, + }, + OwnershipRequires: accesslist.Requires{ + Roles: []string{"orole1", "orole2"}, + Traits: map[string][]string{ + "otrait1": {"ovalue1", "ovalue2"}, + "otrait2": {"ovalue3", "ovalue4"}, + }, + }, + Grants: accesslist.Grants{ + Roles: []string{"grole1", "grole2"}, + Traits: map[string][]string{ + "gtrait1": {"gvalue1", "gvalue2"}, + "gtrait2": {"gvalue3", "gvalue4"}, + }, + }, + }, + ) + require.NoError(t, err) + + return accessList +} + +func newAccessListMember(t *testing.T, accessListName, memberName string, memberKind string, clock clockwork.Clock) *accesslist.AccessListMember { + t.Helper() + + member, err := accesslist.NewAccessListMember( + header.Metadata{ + Name: memberName, + }, + accesslist.AccessListMemberSpec{ + AccessList: accessListName, + Name: memberName, + Joined: clock.Now().UTC(), + Expires: clock.Now().UTC().Add(24 * time.Hour), + Reason: "because", + AddedBy: "maxim.dietz@goteleport.com", + MembershipKind: memberKind, + }, + ) + require.NoError(t, err) + + return member +} diff --git a/lib/auth/access_request_test.go b/lib/auth/access_request_test.go index 1e25579e04c7..fde1c7d4df32 100644 --- a/lib/auth/access_request_test.go +++ b/lib/auth/access_request_test.go @@ -1564,11 +1564,17 @@ func TestUpdateAccessRequestWithAdditionalReviewers(t *testing.T) { return req } - mustAccessList := func(name string, owners ...string) *accesslist.AccessList { + type testAccessListOwner struct { + name string + kind string + } + + mustAccessListWithMembershipKind := func(name string, owners ...testAccessListOwner) *accesslist.AccessList { ownersSpec := make([]accesslist.Owner, len(owners)) for i, owner := range owners { ownersSpec[i] = accesslist.Owner{ - Name: owner, + Name: owner.name, + MembershipKind: owner.kind, } } accessList, err := accesslist.NewAccessList(header.Metadata{ @@ -1587,10 +1593,22 @@ func TestUpdateAccessRequestWithAdditionalReviewers(t *testing.T) { return accessList } + mustAccessList := func(name string, owners ...string) *accesslist.AccessList { + ownersStruct := make([]testAccessListOwner, 0, len(owners)) + for _, owner := range owners { + ownersStruct = append(ownersStruct, testAccessListOwner{owner, accesslist.MembershipKindUser}) + } + return mustAccessListWithMembershipKind(name, ownersStruct...) + } + tests := []struct { name string req types.AccessRequest accessLists []*accesslist.AccessList + accessListMembers []struct { + Header header.Metadata + Spec accesslist.AccessListMemberSpec + } promotions *types.AccessRequestAllowedPromotions expectedReviewers []string }{ @@ -1615,6 +1633,94 @@ func TestUpdateAccessRequestWithAdditionalReviewers(t *testing.T) { }, expectedReviewers: []string{"rev1", "rev2", "owner1", "owner2", "owner3"}, }, + { + name: "with ownership through nested list", + req: mustRequest("rev1"), + accessLists: []*accesslist.AccessList{ + mustAccessListWithMembershipKind( + "root", + testAccessListOwner{"owner1", accesslist.MembershipKindUser}, + testAccessListOwner{"nested", accesslist.MembershipKindList}, + ), + mustAccessListWithMembershipKind( + "nested", + testAccessListOwner{"owner1", accesslist.MembershipKindUser}, + testAccessListOwner{"nested1", accesslist.MembershipKindList}, + ), + mustAccessList("nested1", "owner1"), + }, + accessListMembers: []struct { + Header header.Metadata + Spec accesslist.AccessListMemberSpec + }{ + { + Header: header.Metadata{ + Name: "nested", + }, + Spec: accesslist.AccessListMemberSpec{ + AccessList: "root", + Name: "nested", + Joined: clock.Now().UTC(), + Expires: clock.Now().UTC().Add(24 * time.Hour), + Reason: "because", + AddedBy: "owner1", + MembershipKind: accesslist.MembershipKindList, + }, + }, + { + Header: header.Metadata{ + Name: "nested1", + }, + Spec: accesslist.AccessListMemberSpec{ + AccessList: "nested", + Name: "nested1", + Joined: clock.Now().UTC(), + Expires: clock.Now().UTC().Add(24 * time.Hour), + Reason: "because", + AddedBy: "owner1", + MembershipKind: accesslist.MembershipKindList, + }, + }, + { + Header: header.Metadata{ + Name: "owner2", + }, + Spec: accesslist.AccessListMemberSpec{ + AccessList: "nested", + Name: "owner2", + Joined: clock.Now().UTC(), + Expires: clock.Now().UTC().Add(24 * time.Hour), + Reason: "because", + AddedBy: "owner1", + MembershipKind: accesslist.MembershipKindUser, + }, + }, + { + Header: header.Metadata{ + Name: "owner3", + }, + Spec: accesslist.AccessListMemberSpec{ + AccessList: "nested1", + Name: "owner3", + Joined: clock.Now().UTC(), + Expires: clock.Now().UTC().Add(24 * time.Hour), + Reason: "because", + AddedBy: "owner1", + MembershipKind: accesslist.MembershipKindUser, + }, + }, + }, + promotions: &types.AccessRequestAllowedPromotions{ + Promotions: []*types.AccessRequestAllowedPromotion{ + {AccessListName: "root"}, + {AccessListName: "nested"}, + }, + }, + // owner1 is owner of 'root', should be included + // owner2 is member of 'nested', which is owner of 'root', should be included via inheritance + // owner3 is member of 'nested1', which is member of 'nested', which is owner of 'root', should be included via two levels of inheritance + expectedReviewers: []string{"rev1", "owner1", "owner2", "owner3"}, + }, { name: "no promotions", req: mustRequest("rev1", "rev2"), @@ -1644,6 +1750,14 @@ func TestUpdateAccessRequestWithAdditionalReviewers(t *testing.T) { _, err = accessLists.UpsertAccessList(ctx, accessList) require.NoError(t, err) } + if test.accessListMembers != nil { + for _, memberData := range test.accessListMembers { + member, err := accesslist.NewAccessListMember(memberData.Header, memberData.Spec) + require.NoError(t, err) + _, err = accessLists.UpsertAccessListMember(ctx, member) + require.NoError(t, err) + } + } req := test.req.Copy() updateAccessRequestWithAdditionalReviewers(ctx, req, accessLists, test.promotions) diff --git a/lib/auth/auth.go b/lib/auth/auth.go index ea5fb1d5954a..d3913b60612c 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -5206,13 +5206,13 @@ func updateAccessRequestWithAdditionalReviewers(ctx context.Context, req types.A // Iterate through the promotions, adding the owners of the corresponding access lists as reviewers. for _, promotion := range promotions.Promotions { - accessList, err := accessLists.GetAccessList(ctx, promotion.AccessListName) + allOwners, err := accessLists.GetAccessListOwners(ctx, promotion.AccessListName) if err != nil { - log.WithError(err).Warn("Failed to get access list, skipping additional reviewers") + log.WithError(err).Warnf("Failed to get nested access list owners for %v, skipping additional reviewers", promotion.AccessListName) break } - for _, owner := range accessList.GetOwners() { + for _, owner := range allOwners { additionalReviewers[owner.Name] = struct{}{} } } diff --git a/lib/auth/authclient/api.go b/lib/auth/authclient/api.go index 80b25dc26d2b..b1f960766282 100644 --- a/lib/auth/authclient/api.go +++ b/lib/auth/authclient/api.go @@ -1154,7 +1154,7 @@ type Cache interface { GetAccessList(context.Context, string) (*accesslist.AccessList, error) // CountAccessListMembers will count all access list members. - CountAccessListMembers(ctx context.Context, accessListName string) (uint32, error) + CountAccessListMembers(ctx context.Context, accessListName string) (users uint32, lists uint32, err error) // ListAccessListMembers returns a paginated list of all access list members. // May return a DynamicAccessListError if the requested access list has an // implicit member list and the underlying implementation does not have diff --git a/lib/auth/userloginstate/generator.go b/lib/auth/userloginstate/generator.go index 5b8551b392db..391b3b88b815 100644 --- a/lib/auth/userloginstate/generator.go +++ b/lib/auth/userloginstate/generator.go @@ -32,9 +32,9 @@ import ( "github.com/gravitational/teleport/api/types/header" "github.com/gravitational/teleport/api/types/userloginstate" "github.com/gravitational/teleport/api/utils" + "github.com/gravitational/teleport/lib/accesslists" "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/tlsca" ) // AccessListsAndLockGetter is an interface for retrieving access lists and locks. @@ -97,12 +97,11 @@ func (g *GeneratorConfig) CheckAndSetDefaults() error { // Generator will generate a user login state from a user. type Generator struct { - log *logrus.Entry - accessLists AccessListsAndLockGetter - access services.Access - usageEvents UsageEventsClient - memberChecker *services.AccessListMembershipChecker - clock clockwork.Clock + log *logrus.Entry + accessLists AccessListsAndLockGetter + access services.Access + usageEvents UsageEventsClient + clock clockwork.Clock } // NewGenerator creates a new user login state generator. @@ -112,12 +111,11 @@ func NewGenerator(config GeneratorConfig) (*Generator, error) { } return &Generator{ - log: config.Log, - accessLists: config.AccessLists, - access: config.Access, - usageEvents: config.UsageEvents, - memberChecker: services.NewAccessListMembershipChecker(config.Clock, config.AccessLists, config.Access), - clock: config.Clock, + log: config.Log, + accessLists: config.AccessLists, + access: config.Access, + usageEvents: config.UsageEvents, + clock: config.Clock, }, nil } @@ -151,7 +149,8 @@ func (g *Generator) Generate(ctx context.Context, user types.User) (*userloginst } // Generate the user login state. - if err := g.addAccessListsToState(ctx, user, uls); err != nil { + inheritedRoles, inheritedTraits, err := g.addAccessListsToState(ctx, user, uls) + if err != nil { return nil, trace.Wrap(err) } @@ -162,7 +161,7 @@ func (g *Generator) Generate(ctx context.Context, user types.User) (*userloginst if g.usageEvents != nil { // Emit the usage event metadata. - if err := g.emitUsageEvent(ctx, user, uls); err != nil { + if err := g.emitUsageEvent(ctx, user, uls, inheritedRoles, inheritedTraits); err != nil { g.log.Debug("Error emitting usage event during user login state generation, skipping") } } @@ -170,35 +169,56 @@ func (g *Generator) Generate(ctx context.Context, user types.User) (*userloginst return uls, nil } -// addAccessListsToState will added the user's applicable access lists to the user login state. -func (g *Generator) addAccessListsToState(ctx context.Context, user types.User, state *userloginstate.UserLoginState) error { +// addAccessListsToState will add the user's applicable access lists to the user login state, +// returning any inherited roles and traits. +func (g *Generator) addAccessListsToState(ctx context.Context, user types.User, state *userloginstate.UserLoginState) ([]string, map[string][]string, error) { accessLists, err := g.accessLists.GetAccessLists(ctx) if err != nil { - return trace.Wrap(err) + return nil, nil, trace.Wrap(err) } - // Create an identity for testing membership to access lists. - identity := tlsca.Identity{ - Username: user.GetName(), - Groups: user.GetRoles(), - Traits: user.GetTraits(), - UserType: user.GetUserType(), + accessListHierarchy, err := accesslists.NewHierarchy(ctx, accesslists.HierarchyConfig{ + AccessLists: accessLists, + Locks: g.accessLists, + Members: g.accessLists, + Clock: g.clock, + }) + if err != nil { + return nil, nil, trace.Wrap(err) } + var allInheritedRoles []string + allInheritedTraits := make(map[string][]string) + for _, accessList := range accessLists { - if err := services.IsAccessListOwner(identity, accessList); err == nil { - g.grantRolesAndTraits(identity, accessList.Spec.OwnerGrants, state) + // Grants are inherited if the user is a member of the access list, explicitly or via inheritance. + if membershipKind, err := accessListHierarchy.IsAccessListMember(ctx, user, accessList.GetName()); err == nil && membershipKind != accesslists.MembershipOrOwnershipTypeNone { + g.grantRolesAndTraits(accessList.Spec.Grants, state) + if membershipKind == accesslists.MembershipOrOwnershipTypeInherited { + allInheritedRoles = append(allInheritedRoles, accessList.Spec.Grants.Roles...) + for k, values := range accessList.Spec.Grants.Traits { + allInheritedTraits[k] = append(allInheritedTraits[k], values...) + } + } } - - if err := g.memberChecker.IsAccessListMember(ctx, identity, accessList); err == nil { - g.grantRolesAndTraits(identity, accessList.Spec.Grants, state) + // OwnerGrants are inherited if the user is an owner of the access list, explicitly or via inheritance. + if ownershipType, err := accessListHierarchy.IsAccessListOwner(ctx, user, accessList.GetName()); err == nil && ownershipType != accesslists.MembershipOrOwnershipTypeNone { + g.grantRolesAndTraits(accessList.Spec.OwnerGrants, state) + if ownershipType == accesslists.MembershipOrOwnershipTypeInherited { + allInheritedRoles = append(allInheritedRoles, accessList.Spec.OwnerGrants.Roles...) + for k, values := range accessList.Spec.OwnerGrants.Traits { + allInheritedTraits[k] = append(allInheritedTraits[k], values...) + } + } } } - return nil + return allInheritedRoles, allInheritedTraits, nil } -func (g *Generator) grantRolesAndTraits(identity tlsca.Identity, grants accesslist.Grants, state *userloginstate.UserLoginState) { +// grantRolesAndTraits will append the roles and traits from the provided Grants to the UserLoginState, +// returning inherited roles and traits if membershipOrOwnershipType is inherited. +func (g *Generator) grantRolesAndTraits(grants accesslist.Grants, state *userloginstate.UserLoginState) { state.Spec.Roles = append(state.Spec.Roles, grants.Roles...) if state.Spec.Traits == nil && len(grants.Traits) > 0 { @@ -214,7 +234,6 @@ func (g *Generator) grantRolesAndTraits(identity tlsca.Identity, grants accessli func (g *Generator) postProcess(ctx context.Context, state *userloginstate.UserLoginState) error { // Deduplicate roles and traits state.Spec.Roles = utils.Deduplicate(state.Spec.Roles) - for k, v := range state.Spec.Traits { state.Spec.Traits[k] = utils.Deduplicate(v) } @@ -225,6 +244,7 @@ func (g *Generator) postProcess(ctx context.Context, state *userloginstate.UserL } // Make sure all the roles exist. If they don't, error out. + // Since InheritedRoles are always a subset of Roles, we don't need to check them. var existingRoles []string for _, role := range state.Spec.Roles { _, err := g.access.GetRole(ctx, role) @@ -240,7 +260,7 @@ func (g *Generator) postProcess(ctx context.Context, state *userloginstate.UserL } // emitUsageEvent will emit the usage event for user state generation. -func (g *Generator) emitUsageEvent(ctx context.Context, user types.User, state *userloginstate.UserLoginState) error { +func (g *Generator) emitUsageEvent(ctx context.Context, user types.User, state *userloginstate.UserLoginState, inheritedRoles []string, inheritedTraits map[string][]string) error { staticRoleCount := len(user.GetRoles()) staticTraitCount := 0 for _, values := range user.GetTraits() { @@ -253,17 +273,30 @@ func (g *Generator) emitUsageEvent(ctx context.Context, user types.User, state * stateTraitCount += len(values) } + inheritedRoles = utils.Deduplicate(inheritedRoles) + for k, v := range inheritedTraits { + inheritedTraits[k] = utils.Deduplicate(v) + } + + countInheritedRolesGranted := len(inheritedRoles) + countInheritedTraitsGranted := 0 + for _, values := range inheritedTraits { + countInheritedTraitsGranted += len(values) + } + countRolesGranted := stateRoleCount - staticRoleCount countTraitsGranted := stateTraitCount - staticTraitCount - // No roles or traits were granted, so skip emitting the event. - if countRolesGranted == 0 && countTraitsGranted == 0 { + // No roles or traits were granted or inherited, so skip emitting the event. + if countRolesGranted+countTraitsGranted+countInheritedRolesGranted+countInheritedTraitsGranted == 0 { return nil } grantsToUser := &usageeventsv1.AccessListGrantsToUser{ - CountRolesGranted: int32(countRolesGranted), - CountTraitsGranted: int32(countTraitsGranted), + CountRolesGranted: int32(countRolesGranted), + CountTraitsGranted: int32(countTraitsGranted), + CountInheritedRolesGranted: int32(countInheritedRolesGranted), + CountInheritedTraitsGranted: int32(countInheritedTraitsGranted), } if err := g.usageEvents.SubmitUsageEvent(ctx, &proto.SubmitUsageEventRequest{ diff --git a/lib/auth/userloginstate/generator_test.go b/lib/auth/userloginstate/generator_test.go index 962ac7c07b03..9825b35733f5 100644 --- a/lib/auth/userloginstate/generator_test.go +++ b/lib/auth/userloginstate/generator_test.go @@ -57,6 +57,7 @@ func TestAccessLists(t *testing.T) { }) user, err := types.NewUser("user") + require.NoError(t, err) user.SetStaticLabels(map[string]string{ "label1": "value1", "label2": "value2", @@ -65,24 +66,25 @@ func TestAccessLists(t *testing.T) { user.SetTraits(map[string][]string{ "otrait1": {"value1", "value2"}, }) - require.NoError(t, err) userNoRolesOrTraits, err := types.NewUser("user") require.NoError(t, err) clock := clockwork.NewFakeClock() tests := []struct { - name string - user types.User - cloud bool - accessLists []*accesslist.AccessList - members []*accesslist.AccessListMember - locks []types.Lock - roles []string - wantErr require.ErrorAssertionFunc - expected *userloginstate.UserLoginState - expectedRoleCount int - expectedTraitCount int + name string + user types.User + cloud bool + accessLists []*accesslist.AccessList + members []*accesslist.AccessListMember + locks []types.Lock + roles []string + wantErr require.ErrorAssertionFunc + expected *userloginstate.UserLoginState + expectedRoleCount int + expectedTraitCount int + expectedInheritedRoleCount int + expectedInheritedTraitCount int }{ { name: "access lists are empty", @@ -98,9 +100,12 @@ func TestAccessLists(t *testing.T) { []string{"orole1"}, trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1"}, - trait.Traits{"otrait1": {"value1", "value2"}}), - expectedRoleCount: 0, - expectedTraitCount: 0, + trait.Traits{"otrait1": {"value1", "value2"}}, + ), + expectedRoleCount: 0, + expectedTraitCount: 0, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "access lists add roles and traits", @@ -126,9 +131,12 @@ func TestAccessLists(t *testing.T) { []string{"orole1"}, trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1", "role1", "role2"}, - trait.Traits{"otrait1": {"value1", "value2"}, "trait1": {"value1", "value2"}, "trait2": {"value3"}}), - expectedRoleCount: 2, - expectedTraitCount: 3, + trait.Traits{"otrait1": {"value1", "value2"}, "trait1": {"value1", "value2"}, "trait2": {"value3"}}, + ), + expectedRoleCount: 2, + expectedTraitCount: 3, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "lock prevents adding roles and traits", @@ -157,9 +165,12 @@ func TestAccessLists(t *testing.T) { []string{"orole1"}, trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1"}, - trait.Traits{"otrait1": []string{"value1", "value2"}}), - expectedRoleCount: 0, - expectedTraitCount: 0, + trait.Traits{"otrait1": []string{"value1", "value2"}}, + ), + expectedRoleCount: 0, + expectedTraitCount: 0, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "access lists add member roles and traits (cloud disabled)", @@ -185,9 +196,12 @@ func TestAccessLists(t *testing.T) { []string{"orole1"}, trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1", "role1", "role2"}, - trait.Traits{"otrait1": {"value1", "value2"}, "trait1": {"value1", "value2"}, "trait2": {"value3"}}), - expectedRoleCount: 0, - expectedTraitCount: 0, + trait.Traits{"otrait1": {"value1", "value2"}, "trait1": {"value1", "value2"}, "trait2": {"value3"}}, + ), + expectedRoleCount: 0, + expectedTraitCount: 0, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "access lists add owner roles and traits", @@ -212,9 +226,12 @@ func TestAccessLists(t *testing.T) { []string{"orole1"}, trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1", "owner-role1", "owner-role2"}, - trait.Traits{"otrait1": {"value1", "value2"}, "owner-trait1": {"owner-value1"}}), - expectedRoleCount: 2, - expectedTraitCount: 1, + trait.Traits{"otrait1": {"value1", "value2"}, "owner-trait1": {"owner-value1"}}, + ), + expectedRoleCount: 2, + expectedTraitCount: 1, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "access lists add owner and member roles and traits", @@ -239,9 +256,12 @@ func TestAccessLists(t *testing.T) { []string{"orole1"}, trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1", "owner-role1", "owner-role2", "role1"}, - trait.Traits{"otrait1": {"value1", "value2"}, "trait1": {"owner-value1", "value1"}}), - expectedRoleCount: 3, - expectedTraitCount: 2, + trait.Traits{"otrait1": {"value1", "value2"}, "trait1": {"owner-value1", "value1"}}, + ), + expectedRoleCount: 3, + expectedTraitCount: 2, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "access lists add member roles and traits, roles missing from backend", @@ -287,9 +307,13 @@ func TestAccessLists(t *testing.T) { trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1", "role1"}, trait.Traits{ - "otrait1": {"value1", "value2"}, "trait1": {"value1"}}), - expectedRoleCount: 1, - expectedTraitCount: 1, + "otrait1": {"value1", "value2"}, "trait1": {"value1"}, + }, + ), + expectedRoleCount: 1, + expectedTraitCount: 1, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "access lists add roles with duplicates", @@ -310,9 +334,12 @@ func TestAccessLists(t *testing.T) { []string{"orole1"}, trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1", "role1", "role2", "role3"}, - trait.Traits{"otrait1": {"value1", "value2"}}), - expectedRoleCount: 3, - expectedTraitCount: 0, + trait.Traits{"otrait1": {"value1", "value2"}}, + ), + expectedRoleCount: 3, + expectedTraitCount: 0, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "access lists add traits with duplicates", @@ -343,9 +370,12 @@ func TestAccessLists(t *testing.T) { []string{"orole1"}, trait.Traits{"otrait1": {"value1", "value2"}}, []string{"orole1"}, - trait.Traits{"otrait1": {"value1", "value2"}, "trait1": {"value1", "value2"}, "trait2": {"value3", "value4", "value1"}, "trait3": {"value5", "value6"}}), - expectedRoleCount: 0, - expectedTraitCount: 7, + trait.Traits{"otrait1": {"value1", "value2"}, "trait1": {"value1", "value2"}, "trait2": {"value3", "value4", "value1"}, "trait3": {"value5", "value6"}}, + ), + expectedRoleCount: 0, + expectedTraitCount: 7, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, }, { name: "access lists add traits with no roles or traits in original", @@ -375,9 +405,148 @@ func TestAccessLists(t *testing.T) { trait.Traits{ "trait1": {"value1", "value2"}, "trait2": {"value3", "value4"}, - "trait3": {"value5", "value6"}}), - expectedRoleCount: 1, - expectedTraitCount: 6, + "trait3": {"value5", "value6"}, + }, + ), + expectedRoleCount: 1, + expectedTraitCount: 6, + expectedInheritedRoleCount: 0, + expectedInheritedTraitCount: 0, + }, + { + name: "access lists member of nested list", + cloud: true, + user: userNoRolesOrTraits, + // user is member of acl 3, acl 1 includes acl 2, which includes 3 + // so user will be granted role1 and 2, and trait1 + accessLists: []*accesslist.AccessList{ + newAccessList(t, clock, "1", grants([]string{"role1"}, + trait.Traits{ + "trait1": {"value"}, + }), + emptyGrants), + newAccessList(t, clock, "2", grants([]string{"role1"}, trait.Traits{}), + emptyGrants), + newAccessList(t, clock, "3", grants([]string{"role2"}, trait.Traits{}), emptyGrants), + }, + members: append( + newAccessListMembers(t, clock, "3", "user"), + newAccessListMemberWithKind(t, clock, "2", accesslist.MembershipKindList, "3"), + newAccessListMemberWithKind(t, clock, "1", accesslist.MembershipKindList, "2")), + roles: []string{"role1", "role2"}, + wantErr: require.NoError, + expected: newUserLoginState(t, "user", + nil, + nil, + nil, + []string{"role1", "role2"}, + trait.Traits{"trait1": {"value"}}, + ), + expectedRoleCount: 2, + expectedTraitCount: 1, + expectedInheritedRoleCount: 1, + expectedInheritedTraitCount: 1, + }, + { + name: "access lists member of nested list", + cloud: true, + user: userNoRolesOrTraits, + // user is member of acl 3, acl 1 includes acl 2, which includes 3 + // so user will be granted role1 and 2, and trait1 + accessLists: []*accesslist.AccessList{ + newAccessList(t, clock, "1", grants([]string{"role1"}, + trait.Traits{ + "trait1": {"value"}, + }), + emptyGrants), + newAccessList(t, clock, "2", grants([]string{"role1"}, trait.Traits{}), + emptyGrants), + newAccessList(t, clock, "3", grants([]string{"role2"}, trait.Traits{}), emptyGrants), + }, + members: append( + newAccessListMembers(t, clock, "3", "user"), + newAccessListMemberWithKind(t, clock, "2", accesslist.MembershipKindList, "3"), + newAccessListMemberWithKind(t, clock, "1", accesslist.MembershipKindList, "2")), + roles: []string{"role1", "role2"}, + wantErr: require.NoError, + expected: newUserLoginState(t, "user", + nil, + nil, + nil, + []string{"role1", "role2"}, + trait.Traits{"trait1": {"value"}}, + ), + expectedRoleCount: 2, + expectedTraitCount: 1, + expectedInheritedRoleCount: 1, + expectedInheritedTraitCount: 1, + }, + { + name: "access lists member of nested list, in diamond formation", + cloud: true, + user: userNoRolesOrTraits, + // user is member of acl 1, acl 2 and 3 include acl 1, acl 4 includes acls 2 and 3 + // so user will be granted {trait: [1,2,3,4]} + accessLists: []*accesslist.AccessList{ + newAccessList(t, clock, "1", grants([]string{}, trait.Traits{"trait": {"1"}}), emptyGrants), + newAccessList(t, clock, "2", grants([]string{}, trait.Traits{"trait": {"2"}}), emptyGrants), + newAccessList(t, clock, "3", grants([]string{}, trait.Traits{"trait": {"3"}}), emptyGrants), + newAccessList(t, clock, "4", grants([]string{}, trait.Traits{"trait": {"4"}}), emptyGrants), + }, + members: append( + newAccessListMembers(t, clock, "1", "user"), + newAccessListMemberWithKind(t, clock, "2", accesslist.MembershipKindList, "1"), + newAccessListMemberWithKind(t, clock, "3", accesslist.MembershipKindList, "1"), + newAccessListMemberWithKind(t, clock, "4", accesslist.MembershipKindList, "3"), + newAccessListMemberWithKind(t, clock, "4", accesslist.MembershipKindList, "2"), + ), + roles: nil, + wantErr: require.NoError, + expected: newUserLoginState(t, "user", + nil, + nil, + nil, + nil, + trait.Traits{"trait": {"1", "2", "3", "4"}}, + ), + expectedRoleCount: 0, + expectedTraitCount: 4, + expectedInheritedRoleCount: 0, + // trait 1 is directly granted to user via acl 1; it is not inherited + expectedInheritedTraitCount: 3, + }, + { + name: "members in nested access lists inherit parent's owner grants", + cloud: true, + user: userNoRolesOrTraits, + // user is member of acl 1, acl 3, includes members of acl 2, which includes members of acl 1 as owners + accessLists: []*accesslist.AccessList{ + newAccessList(t, clock, "1", emptyGrants, grants([]string{"oroleA"}, trait.Traits{"okey": {"oval1"}})), + newAccessList(t, clock, "2", emptyGrants, grants([]string{"oroleB"}, trait.Traits{"okey": {"oval2"}})), + newAccessListWithOwners(t, clock, "3", emptyGrants, grants([]string{"oroleC"}, trait.Traits{"okey": {"oval3"}}), []accesslist.Owner{{ + Name: "2", + Description: "hello", + MembershipKind: accesslist.MembershipKindList}, + }), + }, + members: append( + newAccessListMembers(t, clock, "1", "user"), + newAccessListMemberWithKind(t, clock, "2", accesslist.MembershipKindList, "1"), + newAccessListMemberWithKind(t, clock, "3", accesslist.MembershipKindList, "2"), + ), + roles: []string{"oroleA", "oroleB", "oroleC"}, + wantErr: require.NoError, + expected: newUserLoginState(t, "user", + nil, + nil, + nil, + []string{"oroleC"}, + trait.Traits{"okey": {"oval3"}}, + ), + expectedRoleCount: 1, + expectedTraitCount: 1, + expectedInheritedRoleCount: 1, + expectedInheritedTraitCount: 1, }, } @@ -438,6 +607,8 @@ func TestAccessLists(t *testing.T) { require.Equal(t, test.expectedRoleCount, int(event.AccessListGrantsToUser.CountRolesGranted)) require.Equal(t, test.expectedTraitCount, int(event.AccessListGrantsToUser.CountTraitsGranted)) + require.Equal(t, test.expectedInheritedRoleCount, int(event.AccessListGrantsToUser.CountInheritedRolesGranted)) + require.Equal(t, test.expectedInheritedTraitCount, int(event.AccessListGrantsToUser.CountInheritedTraitsGranted)) } }) } @@ -521,6 +692,33 @@ func newAccessList(t *testing.T, clock clockwork.Clock, name string, grants acce return accessList } +func newAccessListWithOwners(t *testing.T, clock clockwork.Clock, name string, grants accesslist.Grants, ownerGrants accesslist.Grants, owners []accesslist.Owner) *accesslist.AccessList { + t.Helper() + + accessList, err := accesslist.NewAccessList(header.Metadata{ + Name: name, + }, accesslist.Spec{ + Title: "title", + Audit: accesslist.Audit{ + NextAuditDate: clock.Now().Add(time.Hour * 48), + }, + Owners: owners, + OwnershipRequires: accesslist.Requires{ + Roles: []string{}, + Traits: map[string][]string{}, + }, + MembershipRequires: accesslist.Requires{ + Roles: []string{}, + Traits: map[string][]string{}, + }, + Grants: grants, + OwnerGrants: ownerGrants, + }) + require.NoError(t, err) + + return accessList +} + func newAccessListMembers(t *testing.T, clock clockwork.Clock, accessList string, members ...string) []*accesslist.AccessListMember { alMembers := make([]*accesslist.AccessListMember, len(members)) for i, member := range members { @@ -541,6 +739,25 @@ func newAccessListMembers(t *testing.T, clock clockwork.Clock, accessList string return alMembers } +func newAccessListMemberWithKind(t *testing.T, clock clockwork.Clock, accessList string, kind string, member string) *accesslist.AccessListMember { + + var err error + res, err := accesslist.NewAccessListMember(header.Metadata{ + Name: member, + }, accesslist.AccessListMemberSpec{ + AccessList: accessList, + Name: member, + Joined: clock.Now(), + Expires: clock.Now().Add(24 * time.Hour), + Reason: "added", + AddedBy: ownerUser, + MembershipKind: kind, + }) + require.NoError(t, err) + + return res +} + func newUserLoginState(t *testing.T, name string, labels map[string]string, originalRoles []string, originalTraits map[string][]string, roles []string, traits map[string][]string) *userloginstate.UserLoginState { t.Helper() diff --git a/lib/authz/permissions.go b/lib/authz/permissions.go index f8b558701860..380eb402cd88 100644 --- a/lib/authz/permissions.go +++ b/lib/authz/permissions.go @@ -1230,7 +1230,8 @@ func definitionForBuiltinRole(clusterName string, recConfig readonly.SessionReco types.NewRule(types.KindRole, services.RO()), types.NewRule(types.KindLock, services.RW()), types.NewRule(types.KindSAML, services.ReadNoSecrets()), - // Okta can manage access lists and roles it creates. + types.NewRule(types.KindAccessList, services.RO()), + // Okta can read/write access lists and roles it creates. { Resources: []string{types.KindRole}, Verbs: services.RW(), diff --git a/lib/cache/cache.go b/lib/cache/cache.go index 47678d0b89a4..bfff5202f64f 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -3247,13 +3247,13 @@ func (c *Cache) GetAccessList(ctx context.Context, name string) (*accesslist.Acc } // CountAccessListMembers will count all access list members. -func (c *Cache) CountAccessListMembers(ctx context.Context, accessListName string) (uint32, error) { +func (c *Cache) CountAccessListMembers(ctx context.Context, accessListName string) (uint32, uint32, error) { ctx, span := c.Tracer.Start(ctx, "cache/CountAccessListMembers") defer span.End() rg, err := readCollectionCache(c, c.collections.accessListMembers) if err != nil { - return 0, trace.Wrap(err) + return 0, 0, trace.Wrap(err) } defer rg.Release() return rg.reader.CountAccessListMembers(ctx, accessListName) diff --git a/lib/cache/cache_test.go b/lib/cache/cache_test.go index 7a9546bc1762..42297138d4c1 100644 --- a/lib/cache/cache_test.go +++ b/lib/cache/cache_test.go @@ -2560,16 +2560,17 @@ func TestAccessListMembers(t *testing.T) { require.NoError(t, err) } - count, err := p.accessLists.CountAccessListMembers(ctx, al.GetName()) + count, listCount, err := p.accessLists.CountAccessListMembers(ctx, al.GetName()) require.NoError(t, err) require.Equal(t, uint32(40), count) + require.Equal(t, uint32(0), listCount) // Eventually, this should be reflected in the cache. require.Eventually(t, func() bool { // Make sure the cache has a single resource in it. - count, err := p.cache.CountAccessListMembers(ctx, al.GetName()) + count, listCount, err := p.cache.CountAccessListMembers(ctx, al.GetName()) assert.NoError(t, err) - return count == uint32(40) + return count == uint32(40) && listCount == uint32(0) }, time.Second*2, time.Millisecond*250) } diff --git a/lib/cache/collections.go b/lib/cache/collections.go index 093d52b4c374..8a843c307f29 100644 --- a/lib/cache/collections.go +++ b/lib/cache/collections.go @@ -3197,7 +3197,7 @@ func (accessListMemberExecutor) getReader(cache *Cache, cacheOK bool) accessList } type accessListMembersGetter interface { - CountAccessListMembers(ctx context.Context, accessListName string) (uint32, error) + CountAccessListMembers(ctx context.Context, accessListName string) (uint32, uint32, error) ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, nextToken string) ([]*accesslist.AccessListMember, string, error) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) ([]*accesslist.AccessListMember, string, error) diff --git a/lib/modules/modules.go b/lib/modules/modules.go index 69cb6704f8c9..e8c80cdb8c99 100644 --- a/lib/modules/modules.go +++ b/lib/modules/modules.go @@ -232,6 +232,9 @@ type AccessResourcesGetter interface { ListAccessLists(context.Context, int, string) ([]*accesslist.AccessList, string, error) ListResources(ctx context.Context, req proto.ListResourcesRequest) (*types.ListResourcesResponse, error) + GetAccessList(context.Context, string) (*accesslist.AccessList, error) + GetAccessLists(ctx context.Context) ([]*accesslist.AccessList, error) + ListAccessListMembers(ctx context.Context, accessList string, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) @@ -253,8 +256,12 @@ type AccessListSuggestionClient interface { type RoleGetter interface { GetRole(ctx context.Context, name string) (types.Role, error) } -type AccessListGetter interface { + +type AccessListAndMembersGetter interface { GetAccessList(ctx context.Context, name string) (*accesslist.AccessList, error) + GetAccessLists(ctx context.Context) ([]*accesslist.AccessList, error) + GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) + ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) } // Modules defines interface that external libraries can implement customizing @@ -279,7 +286,7 @@ type Modules interface { // GenerateAccessRequestPromotions generates a list of valid promotions for given access request. GenerateAccessRequestPromotions(context.Context, AccessResourcesGetter, types.AccessRequest) (*types.AccessRequestAllowedPromotions, error) // GetSuggestedAccessLists generates a list of valid promotions for given access request. - GetSuggestedAccessLists(ctx context.Context, identity *tlsca.Identity, clt AccessListSuggestionClient, accessListGetter AccessListGetter, requestID string) ([]*accesslist.AccessList, error) + GetSuggestedAccessLists(ctx context.Context, identity *tlsca.Identity, clt AccessListSuggestionClient, accessListGetter AccessListAndMembersGetter, requestID string) ([]*accesslist.AccessList, error) // EnableRecoveryCodes enables the usage of recovery codes for resetting forgotten passwords EnableRecoveryCodes() // EnablePlugins enables the hosted plugins runtime @@ -423,7 +430,7 @@ func (p *defaultModules) GenerateAccessRequestPromotions(_ context.Context, _ Ac } func (p *defaultModules) GetSuggestedAccessLists(ctx context.Context, identity *tlsca.Identity, clt AccessListSuggestionClient, - accessListGetter AccessListGetter, requestID string, + accessListGetter AccessListAndMembersGetter, requestID string, ) ([]*accesslist.AccessList, error) { return nil, trace.NotImplemented("GetSuggestedAccessLists not implemented") } diff --git a/lib/services/access_list.go b/lib/services/access_list.go index 9f4749a2ca97..13cab3e51889 100644 --- a/lib/services/access_list.go +++ b/lib/services/access_list.go @@ -20,17 +20,13 @@ package services import ( "context" - "slices" "time" "github.com/gravitational/trace" - "github.com/jonboulle/clockwork" accesslistclient "github.com/gravitational/teleport/api/client/accesslist" accesslistv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" - "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/accesslist" - "github.com/gravitational/teleport/lib/tlsca" "github.com/gravitational/teleport/lib/utils" ) @@ -48,6 +44,8 @@ type AccessListsGetter interface { GetAccessList(context.Context, string) (*accesslist.AccessList, error) // GetAccessListsToReview returns access lists that the user needs to review. GetAccessListsToReview(context.Context) ([]*accesslist.AccessList, error) + // GetInheritedGrants returns grants inherited by access list accessListID from parent access lists. + GetInheritedGrants(context.Context, string) (*accesslist.Grants, error) } // AccessListsSuggestionsGetter defines an interface for reading access lists suggestions. @@ -140,6 +138,10 @@ type AccessListMemberGetter interface { // implicit member list and the underlying implementation does not have // enough information to compute the dynamic member record. GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) + // GetAccessList returns the specified access list resource. + GetAccessList(context.Context, string) (*accesslist.AccessList, error) + // GetAccessLists returns a list of all access lists. + GetAccessLists(context.Context) ([]*accesslist.AccessList, error) } // AccessListMembersGetter defines an interface for reading access list members. @@ -147,7 +149,7 @@ type AccessListMembersGetter interface { AccessListMemberGetter // CountAccessListMembers will count all access list members. - CountAccessListMembers(ctx context.Context, accessListName string) (uint32, error) + CountAccessListMembers(ctx context.Context, accessListName string) (membersCount uint32, listCount uint32, err error) // ListAccessListMembers returns a paginated list of all access list members. // May return a DynamicAccessListError if the requested access list has an // implicit member list and the underlying implementation does not have @@ -156,6 +158,8 @@ type AccessListMembersGetter interface { // ListAllAccessListMembers returns a paginated list of all access list members for all access lists. ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) + // GetAccessListOwners returns a list of all owners in an Access List, including those inherited from nested Access Lists. + GetAccessListOwners(ctx context.Context, accessList string) ([]*accesslist.Owner, error) } // AccessListMembers defines an interface for managing AccessListMembers. @@ -218,139 +222,6 @@ func UnmarshalAccessListMember(data []byte, opts ...MarshalOption) (*accesslist. return &member, nil } -// IsAccessListOwner will return true if the user is an owner for the current list. -func IsAccessListOwner(identity tlsca.Identity, accessList *accesslist.AccessList) error { - // An opaque access denied error. - accessDenied := trace.AccessDenied("access denied") - - // Is the supplied identity in the owners list? - ownerIdx := slices.IndexFunc(accessList.GetOwners(), func(owner accesslist.Owner) bool { - return owner.Name == identity.Username - }) - if ownerIdx == -1 { - return accessDenied - } - - // Does the supplied Identity meet the ownership requirements? - if !UserMeetsRequirements(identity, accessList.Spec.OwnershipRequires) { - return accessDenied - } - - // We've gotten through all the checks, so the user is an owner. - return nil -} - -// AccessListMembershipChecker will check if users are members of an access list and -// makes sure the user is not locked and meets membership requirements. -type AccessListMembershipChecker struct { - members AccessListMemberGetter - locks LockGetter - clock clockwork.Clock -} - -// NewAccessListMembershipChecker will create a new access list membership checker. -func NewAccessListMembershipChecker(clock clockwork.Clock, members AccessListMemberGetter, locks LockGetter) *AccessListMembershipChecker { - return &AccessListMembershipChecker{ - members: members, - locks: locks, - clock: clock, - } -} - -// IsAccessListMember will return true if the user is a member for the current list. -func (a AccessListMembershipChecker) IsAccessListMember(ctx context.Context, identity tlsca.Identity, accessList *accesslist.AccessList) error { - username := identity.Username - - // Allow for nil locks while we transition away from using `IsAccessListMember` outside of this struct. - if a.locks != nil { - locks, err := a.locks.GetLocks(ctx, true, types.LockTarget{ - User: username, - }) - if err != nil { - return trace.Wrap(err) - } - - if len(locks) > 0 { - return trace.AccessDenied("user %s is currently locked", username) - } - } - - member, err := a.members.GetAccessListMember(ctx, accessList.GetName(), username) - if trace.IsNotFound(err) { - // The member has not been found, so we know they're not a member of this list. - return trace.NotFound("user %s is not a member of the access list", username) - } else if err != nil { - // Some other error has occurred - return trace.Wrap(err) - } - - expires := member.Spec.Expires - if !expires.IsZero() && !a.clock.Now().Before(expires) { - return trace.AccessDenied("user %s's membership has expired in the access list", username) - } - - if !UserMeetsRequirements(identity, accessList.Spec.MembershipRequires) { - return trace.AccessDenied("user %s is a member, but does not have the roles or traits required to be a member of this list", username) - } - - return nil -} - -// TODO(mdwn): Remove this in favor of using the access list membership checker. -func IsAccessListMember(ctx context.Context, identity tlsca.Identity, clock clockwork.Clock, accessList *accesslist.AccessList, members AccessListMemberGetter) error { - // See if the member getter also implements lock getter. If so, use it. Otherwise, nil is fine. - lockGetter, _ := members.(LockGetter) - return AccessListMembershipChecker{ - members: members, - locks: lockGetter, - clock: clock, - }.IsAccessListMember(ctx, identity, accessList) -} - -// UserMeetsRequirements will return true if the user meets the requirements for the access list. -func UserMeetsRequirements(identity tlsca.Identity, requires accesslist.Requires) bool { - // Assemble the user's roles for easy look up. - userRolesMap := map[string]struct{}{} - for _, role := range identity.Groups { - userRolesMap[role] = struct{}{} - } - - // Check that the user meets the role requirements. - for _, role := range requires.Roles { - if _, ok := userRolesMap[role]; !ok { - return false - } - } - - // Assemble traits for easy lookup. - userTraitsMap := map[string]map[string]struct{}{} - for k, values := range identity.Traits { - if _, ok := userTraitsMap[k]; !ok { - userTraitsMap[k] = map[string]struct{}{} - } - - for _, v := range values { - userTraitsMap[k][v] = struct{}{} - } - } - - // Check that user meets trait requirements. - for k, values := range requires.Traits { - if _, ok := userTraitsMap[k]; !ok { - return false - } - - for _, v := range values { - if _, ok := userTraitsMap[k][v]; !ok { - return false - } - } - } - - // The user meets all requirements. - return true -} - // AccessListReviews defines an interface for managing Access List reviews. type AccessListReviews interface { // ListAccessListReviews will list access list reviews for a particular access list. diff --git a/lib/services/access_list_test.go b/lib/services/access_list_test.go index 2b4acc552105..b69074144981 100644 --- a/lib/services/access_list_test.go +++ b/lib/services/access_list_test.go @@ -19,30 +19,18 @@ package services import ( - "context" "testing" "time" "github.com/gravitational/trace" - "github.com/jonboulle/clockwork" "github.com/stretchr/testify/require" - "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/accesslist" "github.com/gravitational/teleport/api/types/header" "github.com/gravitational/teleport/api/types/trait" - "github.com/gravitational/teleport/lib/tlsca" "github.com/gravitational/teleport/lib/utils" ) -const ( - ownerUser = "owner-user" - member1 = "member1" - member2 = "member2" - member3 = "member3" - member4 = "member4" -) - // TestAccessListUnmarshal verifies an access list resource can be unmarshaled. func TestAccessListUnmarshal(t *testing.T) { expected, err := accesslist.NewAccessList( @@ -197,304 +185,11 @@ func TestAccessListMemberMarshal(t *testing.T) { require.Equal(t, expected, actual) } -func TestIsAccessListOwner(t *testing.T) { - tests := []struct { - name string - identity tlsca.Identity - errAssertionFunc require.ErrorAssertionFunc - }{ - { - name: "is owner", - identity: tlsca.Identity{ - Username: ownerUser, - Groups: []string{"orole1", "orole2"}, - Traits: map[string][]string{ - "otrait1": {"ovalue1", "ovalue2"}, - "otrait2": {"ovalue3", "ovalue4"}, - }, - }, - errAssertionFunc: require.NoError, - }, - { - name: "is not an owner", - identity: tlsca.Identity{ - Username: "not-owner", - Groups: []string{"orole1", "orole2"}, - Traits: map[string][]string{ - "otrait1": {"ovalue1", "ovalue2"}, - "otrait2": {"ovalue3", "ovalue4"}, - }, - }, - errAssertionFunc: requireAccessDenied, - }, - { - name: "is owner with missing roles", - identity: tlsca.Identity{ - Username: "not-owner", - Groups: []string{"orole1"}, - Traits: map[string][]string{ - "otrait1": {"ovalue1", "ovalue2"}, - "otrait2": {"ovalue3", "ovalue4"}, - }, - }, - errAssertionFunc: requireAccessDenied, - }, - { - name: "is owner with missing traits", - identity: tlsca.Identity{ - Username: "not-owner", - Groups: []string{"orole1", "orole2"}, - Traits: map[string][]string{ - "otrait1": {"ovalue1"}, - "otrait2": {"ovalue3"}, - }, - }, - errAssertionFunc: requireAccessDenied, - }, - } - - for _, test := range tests { - test := test - t.Run(test.name, func(t *testing.T) { - t.Parallel() - - accessList := newAccessList(t) - - test.errAssertionFunc(t, IsAccessListOwner(test.identity, accessList)) - }) - } -} - -// testMembersAndLockGetter implements AccessListMembersGetter and LockGetter for testing. -type testMembersAndLockGetter struct { - members map[string]map[string]*accesslist.AccessListMember - locks map[string]types.Lock -} - -// ListAccessListMembers returns a paginated list of all access list members. -func (t *testMembersAndLockGetter) ListAccessListMembers(ctx context.Context, accessList string, _ int, _ string) (members []*accesslist.AccessListMember, nextToken string, err error) { - for _, member := range t.members[accessList] { - members = append(members, member) - } - return members, "", nil -} - -// ListAllAccessListMembers returns a paginated list of all access list members for all access lists. -func (t *testMembersAndLockGetter) ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) ([]*accesslist.AccessListMember, string, error) { - var allMembers []*accesslist.AccessListMember - for _, members := range t.members { - for _, member := range members { - allMembers = append(allMembers, member) - } - } - - return allMembers, "", nil -} - -// GetAccessListMember returns the specified access list member resource. -func (t *testMembersAndLockGetter) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) { - members, ok := t.members[accessList] - if !ok { - return nil, trace.NotFound("not found") - } - - member, ok := members[memberName] - if !ok { - return nil, trace.NotFound("not found") - } - - return member, nil -} - -// GetLock gets a lock by name. -func (t *testMembersAndLockGetter) GetLock(_ context.Context, name string) (types.Lock, error) { - if t.locks == nil { - return nil, trace.NotFound("not found") - } - - lock, ok := t.locks[name] - if !ok { - return nil, trace.NotFound("not found") - } - - return lock, nil -} - -// GetLocks gets all/in-force locks that match at least one of the targets when specified. -func (t *testMembersAndLockGetter) GetLocks(ctx context.Context, inForceOnly bool, targets ...types.LockTarget) ([]types.Lock, error) { - locks := make([]types.Lock, 0, len(t.locks)) - for _, lock := range t.locks { - locks = append(locks, lock) - } - return locks, nil -} - func requireAccessDenied(t require.TestingT, err error, i ...interface{}) { require.Error(t, err) require.True(t, trace.IsAccessDenied(err), "expected AccessDenied, got %T: %s", err, err.Error()) } -func TestIsAccessListMemberChecker(t *testing.T) { - tests := []struct { - name string - identity tlsca.Identity - memberCtx context.Context - currentTime time.Time - locks map[string]types.Lock - errAssertionFunc require.ErrorAssertionFunc - }{ - { - name: "is member", - identity: tlsca.Identity{ - Username: member1, - Groups: []string{"mrole1", "mrole2"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1", "mvalue2"}, - "mtrait2": {"mvalue3", "mvalue4"}, - }, - }, - currentTime: time.Date(2023, 2, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: require.NoError, - }, - { - name: "is locked member", - identity: tlsca.Identity{ - Username: member1, - Groups: []string{"mrole1", "mrole2"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1", "mvalue2"}, - "mtrait2": {"mvalue3", "mvalue4"}, - }, - }, - locks: map[string]types.Lock{ - "test-lock": newUserLock(t, "test-lock", member1), - }, - currentTime: time.Date(2023, 2, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: func(t require.TestingT, err error, i ...interface{}) { - require.ErrorIs(t, err, trace.AccessDenied("user %s is currently locked", member1)) - }, - }, - { - name: "is not a member", - identity: tlsca.Identity{ - Username: member4, - Groups: []string{"mrole1", "mrole2"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1", "mvalue2"}, - "mtrait2": {"mvalue3", "mvalue4"}, - }, - }, - currentTime: time.Date(2023, 2, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: func(t require.TestingT, err error, i ...interface{}) { - require.True(t, trace.IsNotFound(err)) - }, - }, - { - name: "is expired member", - identity: tlsca.Identity{ - Username: member2, - Groups: []string{"mrole1", "mrole2"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1", "mvalue2"}, - "mtrait2": {"mvalue3", "mvalue4"}, - }, - }, - currentTime: time.Date(2026, 7, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: requireAccessDenied, - }, - { - name: "member has no expiration", - identity: tlsca.Identity{ - Username: member3, - Groups: []string{"mrole1", "mrole2"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1", "mvalue2"}, - "mtrait2": {"mvalue3", "mvalue4"}, - }, - }, - currentTime: time.Date(2030, 7, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: require.NoError, - }, - { - name: "is member with missing roles", - identity: tlsca.Identity{ - Username: member1, - Groups: []string{"mrole1"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1", "mvalue2"}, - "mtrait2": {"mvalue3", "mvalue4"}, - }, - }, - currentTime: time.Date(2023, 2, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: requireAccessDenied, - }, - { - name: "is member with no expiration and missing roles", - identity: tlsca.Identity{ - Username: member3, - Groups: []string{"mrole1"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1", "mvalue2"}, - "mtrait2": {"mvalue3", "mvalue4"}, - }, - }, - currentTime: time.Date(2023, 2, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: requireAccessDenied, - }, - { - name: "is member with missing traits", - identity: tlsca.Identity{ - Username: member1, - Groups: []string{"mrole1", "mrole2"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1"}, - "mtrait2": {"mvalue3"}, - }, - }, - currentTime: time.Date(2023, 2, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: requireAccessDenied, - }, - { - name: "is member with no expiration and missing traits", - identity: tlsca.Identity{ - Username: member3, - Groups: []string{"mrole1", "mrole2"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1"}, - "mtrait2": {"mvalue3"}, - }, - }, - currentTime: time.Date(2023, 2, 1, 0, 0, 0, 0, time.UTC), - errAssertionFunc: requireAccessDenied, - }, - } - - for _, test := range tests { - test := test - t.Run(test.name, func(t *testing.T) { - t.Parallel() - - ctx := context.Background() - - accessList := newAccessList(t) - members := newAccessListMembers(t) - - memberMap := map[string]map[string]*accesslist.AccessListMember{} - for _, member := range members { - accessListName := member.Spec.AccessList - if _, ok := memberMap[accessListName]; !ok { - memberMap[accessListName] = map[string]*accesslist.AccessListMember{} - } - memberMap[accessListName][member.Spec.Name] = member - } - getter := &testMembersAndLockGetter{members: memberMap, locks: test.locks} - - checker := NewAccessListMembershipChecker(clockwork.NewFakeClockAt(test.currentTime), getter, getter) - test.errAssertionFunc(t, checker.IsAccessListMember(ctx, test.identity, accessList)) - }) - } -} - // TestAccessListReviewUnmarshal verifies an access list review resource can be unmarshaled. func TestAccessListReviewUnmarshal(t *testing.T) { expected, err := accesslist.NewReview( @@ -596,102 +291,6 @@ func TestAccessListReviewMarshal(t *testing.T) { require.Equal(t, expected, actual) } -func newAccessList(t *testing.T) *accesslist.AccessList { - t.Helper() - - accessList, err := accesslist.NewAccessList( - header.Metadata{ - Name: "test", - }, - accesslist.Spec{ - Title: "title", - Description: "test access list", - Owners: []accesslist.Owner{ - { - Name: ownerUser, - Description: "owner user", - }, - { - Name: "test-user2", - Description: "test user 2", - }, - }, - Audit: accesslist.Audit{ - NextAuditDate: time.Date(2024, 6, 1, 0, 0, 0, 0, time.UTC), - Recurrence: accesslist.Recurrence{ - Frequency: accesslist.ThreeMonths, - DayOfMonth: accesslist.FifteenthDayOfMonth, - }, - }, - MembershipRequires: accesslist.Requires{ - Roles: []string{"mrole1", "mrole2"}, - Traits: map[string][]string{ - "mtrait1": {"mvalue1", "mvalue2"}, - "mtrait2": {"mvalue3", "mvalue4"}, - }, - }, - OwnershipRequires: accesslist.Requires{ - Roles: []string{"orole1", "orole2"}, - Traits: map[string][]string{ - "otrait1": {"ovalue1", "ovalue2"}, - "otrait2": {"ovalue3", "ovalue4"}, - }, - }, - Grants: accesslist.Grants{ - Roles: []string{"grole1", "grole2"}, - Traits: map[string][]string{ - "gtrait1": {"gvalue1", "gvalue2"}, - "gtrait2": {"gvalue3", "gvalue4"}, - }, - }, - }, - ) - require.NoError(t, err) - - return accessList -} - -func newAccessListMembers(t *testing.T) []*accesslist.AccessListMember { - t.Helper() - - member1, err := accesslist.NewAccessListMember(header.Metadata{ - Name: member1, - }, accesslist.AccessListMemberSpec{ - AccessList: "test", - Name: member1, - Joined: time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC), - Expires: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC), - Reason: "because", - AddedBy: ownerUser, - }) - require.NoError(t, err) - - member2, err := accesslist.NewAccessListMember(header.Metadata{ - Name: member2, - }, accesslist.AccessListMemberSpec{ - AccessList: "test", - Name: member2, - Joined: time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC), - Expires: time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC), - Reason: "because again", - AddedBy: ownerUser, - }) - require.NoError(t, err) - - member3, err := accesslist.NewAccessListMember(header.Metadata{ - Name: member3, - }, accesslist.AccessListMemberSpec{ - AccessList: "test", - Name: member3, - Joined: time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC), - Reason: "because for the third time", - AddedBy: ownerUser, - }) - require.NoError(t, err) - - return []*accesslist.AccessListMember{member1, member2, member3} -} - var accessListYAML = `--- kind: access_list version: v1 @@ -787,16 +386,3 @@ spec: review_frequency_changed: 3 months review_day_of_month_changed: "15" ` - -func newUserLock(t *testing.T, name, user string) types.Lock { - t.Helper() - - lock, err := types.NewLock(name, types.LockSpecV2{ - Target: types.LockTarget{ - User: user, - }, - }) - require.NoError(t, err) - - return lock -} diff --git a/lib/services/local/access_list.go b/lib/services/local/access_list.go index 8938d4832bf3..d7f2c8c78a73 100644 --- a/lib/services/local/access_list.go +++ b/lib/services/local/access_list.go @@ -34,6 +34,7 @@ import ( "github.com/gravitational/teleport/api/types/accesslist" "github.com/gravitational/teleport/api/types/header" "github.com/gravitational/teleport/entitlements" + "github.com/gravitational/teleport/lib/accesslists" "github.com/gravitational/teleport/lib/backend" "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/services" @@ -138,6 +139,12 @@ func (a *AccessListService) GetAccessLists(ctx context.Context) ([]*accesslist.A return accessLists, trace.Wrap(err) } +// GetInheritedGrants returns grants inherited by access list accessListID from parent access lists. +// This is not implemented in the local service. +func (a *AccessListService) GetInheritedGrants(ctx context.Context, accessListID string) (*accesslist.Grants, error) { + return nil, trace.NotImplemented("GetInheritedGrants should not be called") +} + // ListAccessLists returns a paginated list of access lists. func (a *AccessListService) ListAccessLists(ctx context.Context, pageSize int, nextToken string) ([]*accesslist.AccessList, string, error) { return a.service.ListResources(ctx, pageSize, nextToken) @@ -248,15 +255,26 @@ func (a *AccessListService) GetSuggestedAccessLists(ctx context.Context, accessR } // CountAccessListMembers will count all access list members. -func (a *AccessListService) CountAccessListMembers(ctx context.Context, accessListName string) (uint32, error) { +func (a *AccessListService) CountAccessListMembers(ctx context.Context, accessListName string) (users uint32, lists uint32, err error) { count := uint(0) - err := a.service.RunWhileLocked(ctx, lockName(accessListName), accessListLockTTL, func(ctx context.Context, _ backend.Backend) error { + listCount := uint(0) + err = a.service.RunWhileLocked(ctx, lockName(accessListName), accessListLockTTL, func(ctx context.Context, _ backend.Backend) error { var err error - count, err = a.memberService.WithPrefix(accessListName).CountResources(ctx) - return trace.Wrap(err) + members, err := a.memberService.WithPrefix(accessListName).GetResources(ctx) + if err != nil { + return trace.Wrap(err) + } + for _, member := range members { + if member.Spec.MembershipKind == accesslist.MembershipKindList { + listCount++ + } else { + count++ + } + } + return nil }) - return uint32(count), trace.Wrap(err) + return uint32(count), uint32(listCount), trace.Wrap(err) } // ListAccessListMembers returns a paginated list of all access list members. @@ -303,6 +321,30 @@ func (a *AccessListService) GetAccessListMember(ctx context.Context, accessList return member, trace.Wrap(err) } +// GetAccessListOwners returns a list of all owners in an Access List, including those inherited from nested Access Lists. +// +// Returned Owners are not validated for ownership requirements – use `IsAccessListOwner` for validation. +func (a *AccessListService) GetAccessListOwners(ctx context.Context, accessListName string) ([]*accesslist.Owner, error) { + accessLists, err := a.GetAccessLists(ctx) + if err != nil { + return nil, trace.Wrap(err, "getting access lists") + } + hierarchy, err := accesslists.NewHierarchy(ctx, accesslists.HierarchyConfig{ + AccessLists: accessLists, + Members: a, + Locks: nil, + Clock: a.clock, + }) + if err != nil { + return nil, trace.Wrap(err, "creating hierarchy") + } + owners, err := hierarchy.GetOwners(accessListName) + if err != nil { + return nil, trace.Wrap(err, "getting owners") + } + return owners, nil +} + // UpsertAccessListMember creates or updates an access list member resource. func (a *AccessListService) UpsertAccessListMember(ctx context.Context, member *accesslist.AccessListMember) (*accesslist.AccessListMember, error) { var upserted *accesslist.AccessListMember @@ -350,10 +392,9 @@ func (a *AccessListService) DeleteAccessListMember(ctx context.Context, accessLi } // DeleteAllAccessListMembersForAccessList hard deletes all access list members -// for an access list. Note that deleting all members is the only member -// operation allowed on a list with implicit membership, as it provides a -// mechanism for cleaning out the user list if a list is converted from explicit -// to implicit. +// for an access list. Note that deleting all members is the only member operation +// allowed on a list with implicit membership, as it provides a mechanism for +// cleaning out the user list if a list is converted from explicit to implicit. func (a *AccessListService) DeleteAllAccessListMembersForAccessList(ctx context.Context, accessList string) error { err := a.service.RunWhileLocked(ctx, lockName(accessList), accessListLockTTL, func(ctx context.Context, _ backend.Backend) error { _, err := a.service.GetResource(ctx, accessList) @@ -367,7 +408,6 @@ func (a *AccessListService) DeleteAllAccessListMembersForAccessList(ctx context. // DeleteAllAccessListMembers hard deletes all access list members. func (a *AccessListService) DeleteAllAccessListMembers(ctx context.Context) error { - // Locks are not used here as this operation is more likely to be used by the cache. return trace.Wrap(a.memberService.DeleteAllResources(ctx)) } diff --git a/lib/services/simple/access_list.go b/lib/services/simple/access_list.go index c04824c63bc8..12ac35af488d 100644 --- a/lib/services/simple/access_list.go +++ b/lib/services/simple/access_list.go @@ -132,9 +132,24 @@ func (a *AccessListService) DeleteAllAccessLists(ctx context.Context) error { } // CountAccessListMembers will count all access list members. -func (a *AccessListService) CountAccessListMembers(ctx context.Context, accessListName string) (uint32, error) { - count, err := a.memberService.WithPrefix(accessListName).CountResources(ctx) - return uint32(count), trace.Wrap(err) +func (a *AccessListService) CountAccessListMembers(ctx context.Context, accessListName string) (uint32, uint32, error) { + members, err := a.memberService.WithPrefix(accessListName).GetResources(ctx) + if err != nil { + return 0, 0, trace.Wrap(err) + } + + var count uint32 + var listCount uint32 + + for _, member := range members { + if member.Spec.MembershipKind == accesslist.MembershipKindList { + listCount++ + } else { + count++ + } + } + + return count, listCount, nil } // ListAccessListMembers returns a paginated list of all access list members. diff --git a/lib/usagereporter/teleport/types.go b/lib/usagereporter/teleport/types.go index 41bdde6df9d6..cf6405a6ba78 100644 --- a/lib/usagereporter/teleport/types.go +++ b/lib/usagereporter/teleport/types.go @@ -727,7 +727,8 @@ func (e *AccessListMemberCreateEvent) Anonymize(a utils.Anonymizer) prehogv1a.Su return prehogv1a.SubmitEventRequest{ Event: &prehogv1a.SubmitEventRequest_AccessListMemberCreate{ AccessListMemberCreate: &prehogv1a.AccessListMemberCreateEvent{ - UserName: a.AnonymizeString(e.UserName), + UserName: a.AnonymizeString(e.UserName), + MemberKind: e.MemberKind, Metadata: &prehogv1a.AccessListMetadata{ Id: a.AnonymizeString(e.Metadata.Id), }, @@ -743,7 +744,8 @@ func (e *AccessListMemberUpdateEvent) Anonymize(a utils.Anonymizer) prehogv1a.Su return prehogv1a.SubmitEventRequest{ Event: &prehogv1a.SubmitEventRequest_AccessListMemberUpdate{ AccessListMemberUpdate: &prehogv1a.AccessListMemberUpdateEvent{ - UserName: a.AnonymizeString(e.UserName), + UserName: a.AnonymizeString(e.UserName), + MemberKind: e.MemberKind, Metadata: &prehogv1a.AccessListMetadata{ Id: a.AnonymizeString(e.Metadata.Id), }, @@ -759,7 +761,8 @@ func (e *AccessListMemberDeleteEvent) Anonymize(a utils.Anonymizer) prehogv1a.Su return prehogv1a.SubmitEventRequest{ Event: &prehogv1a.SubmitEventRequest_AccessListMemberDelete{ AccessListMemberDelete: &prehogv1a.AccessListMemberDeleteEvent{ - UserName: a.AnonymizeString(e.UserName), + UserName: a.AnonymizeString(e.UserName), + MemberKind: e.MemberKind, Metadata: &prehogv1a.AccessListMetadata{ Id: a.AnonymizeString(e.Metadata.Id), }, @@ -775,9 +778,11 @@ func (e *AccessListGrantsToUserEvent) Anonymize(a utils.Anonymizer) prehogv1a.Su return prehogv1a.SubmitEventRequest{ Event: &prehogv1a.SubmitEventRequest_AccessListGrantsToUser{ AccessListGrantsToUser: &prehogv1a.AccessListGrantsToUserEvent{ - UserName: a.AnonymizeString(e.UserName), - CountRolesGranted: e.CountRolesGranted, - CountTraitsGranted: e.CountTraitsGranted, + UserName: a.AnonymizeString(e.UserName), + CountRolesGranted: e.CountRolesGranted, + CountTraitsGranted: e.CountTraitsGranted, + CountInheritedRolesGranted: e.CountInheritedRolesGranted, + CountInheritedTraitsGranted: e.CountInheritedTraitsGranted, }, }, } @@ -1655,6 +1660,7 @@ func ConvertUsageEvent(event *usageeventsv1.UsageEventOneOf, userMD UserMetadata Metadata: &prehogv1a.AccessListMetadata{ Id: e.AccessListMemberCreate.Metadata.Id, }, + MemberKind: e.AccessListMemberCreate.MemberMetadata.MembershipKind.String(), } return ret, nil case *usageeventsv1.UsageEventOneOf_AccessListMemberUpdate: @@ -1663,6 +1669,7 @@ func ConvertUsageEvent(event *usageeventsv1.UsageEventOneOf, userMD UserMetadata Metadata: &prehogv1a.AccessListMetadata{ Id: e.AccessListMemberUpdate.Metadata.Id, }, + MemberKind: e.AccessListMemberUpdate.MemberMetadata.MembershipKind.String(), } return ret, nil case *usageeventsv1.UsageEventOneOf_AccessListMemberDelete: @@ -1671,13 +1678,16 @@ func ConvertUsageEvent(event *usageeventsv1.UsageEventOneOf, userMD UserMetadata Metadata: &prehogv1a.AccessListMetadata{ Id: e.AccessListMemberDelete.Metadata.Id, }, + MemberKind: e.AccessListMemberDelete.MemberMetadata.MembershipKind.String(), } return ret, nil case *usageeventsv1.UsageEventOneOf_AccessListGrantsToUser: ret := &AccessListGrantsToUserEvent{ - UserName: userMD.Username, - CountRolesGranted: e.AccessListGrantsToUser.CountRolesGranted, - CountTraitsGranted: e.AccessListGrantsToUser.CountTraitsGranted, + UserName: userMD.Username, + CountRolesGranted: e.AccessListGrantsToUser.CountRolesGranted, + CountTraitsGranted: e.AccessListGrantsToUser.CountTraitsGranted, + CountInheritedRolesGranted: e.AccessListGrantsToUser.CountInheritedRolesGranted, + CountInheritedTraitsGranted: e.AccessListGrantsToUser.CountInheritedTraitsGranted, } return ret, nil case *usageeventsv1.UsageEventOneOf_TagExecuteQuery: diff --git a/lib/usagereporter/teleport/usagereporter_test.go b/lib/usagereporter/teleport/usagereporter_test.go index 32a310eb3931..fa4e81b51b37 100644 --- a/lib/usagereporter/teleport/usagereporter_test.go +++ b/lib/usagereporter/teleport/usagereporter_test.go @@ -25,7 +25,9 @@ import ( "github.com/stretchr/testify/require" "github.com/gravitational/teleport" + accesslistv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" usageeventsv1 "github.com/gravitational/teleport/api/gen/proto/go/usageevents/v1" + "github.com/gravitational/teleport/api/types/accesslist" prehogv1a "github.com/gravitational/teleport/gen/proto/go/prehog/v1alpha" "github.com/gravitational/teleport/lib/utils" ) @@ -448,6 +450,9 @@ func TestConvertUsageEvent(t *testing.T) { Metadata: &usageeventsv1.AccessListMetadata{ Id: "someid", }, + MemberMetadata: &usageeventsv1.AccessListMemberMetadata{ + MembershipKind: accesslistv1.MembershipKind_MEMBERSHIP_KIND_USER, + }, }, }}, identityUsername: "myuser", @@ -458,6 +463,7 @@ func TestConvertUsageEvent(t *testing.T) { Metadata: &prehogv1a.AccessListMetadata{ Id: expectedAnonymizedAccessListIDString, }, + MemberKind: accesslist.MembershipKindUser, }, }}, }, @@ -468,6 +474,9 @@ func TestConvertUsageEvent(t *testing.T) { Metadata: &usageeventsv1.AccessListMetadata{ Id: "someid", }, + MemberMetadata: &usageeventsv1.AccessListMemberMetadata{ + MembershipKind: accesslistv1.MembershipKind_MEMBERSHIP_KIND_USER, + }, }, }}, identityUsername: "myuser", @@ -478,6 +487,7 @@ func TestConvertUsageEvent(t *testing.T) { Metadata: &prehogv1a.AccessListMetadata{ Id: expectedAnonymizedAccessListIDString, }, + MemberKind: accesslist.MembershipKindUser, }, }}, }, @@ -488,6 +498,9 @@ func TestConvertUsageEvent(t *testing.T) { Metadata: &usageeventsv1.AccessListMetadata{ Id: "someid", }, + MemberMetadata: &usageeventsv1.AccessListMemberMetadata{ + MembershipKind: accesslistv1.MembershipKind_MEMBERSHIP_KIND_USER, + }, }, }}, identityUsername: "myuser", @@ -498,6 +511,7 @@ func TestConvertUsageEvent(t *testing.T) { Metadata: &prehogv1a.AccessListMetadata{ Id: expectedAnonymizedAccessListIDString, }, + MemberKind: accesslist.MembershipKindUser, }, }}, }, @@ -505,17 +519,21 @@ func TestConvertUsageEvent(t *testing.T) { name: "access list grants to user event", event: &usageeventsv1.UsageEventOneOf{Event: &usageeventsv1.UsageEventOneOf_AccessListGrantsToUser{ AccessListGrantsToUser: &usageeventsv1.AccessListGrantsToUser{ - CountRolesGranted: 5, - CountTraitsGranted: 6, + CountRolesGranted: 5, + CountTraitsGranted: 6, + CountInheritedRolesGranted: 0, + CountInheritedTraitsGranted: 0, }, }}, identityUsername: "myuser", errCheck: require.NoError, expected: &prehogv1a.SubmitEventRequest{Event: &prehogv1a.SubmitEventRequest_AccessListGrantsToUser{ AccessListGrantsToUser: &prehogv1a.AccessListGrantsToUserEvent{ - UserName: expectedAnonymizedUserString, - CountRolesGranted: 5, - CountTraitsGranted: 6, + UserName: expectedAnonymizedUserString, + CountRolesGranted: 5, + CountTraitsGranted: 6, + CountInheritedRolesGranted: 0, + CountInheritedTraitsGranted: 0, }, }}, }, diff --git a/proto/prehog/v1alpha/teleport.proto b/proto/prehog/v1alpha/teleport.proto index 7da6c810248e..66b64061ba8a 100644 --- a/proto/prehog/v1alpha/teleport.proto +++ b/proto/prehog/v1alpha/teleport.proto @@ -933,6 +933,8 @@ message AccessListMemberCreateEvent { // user_name is the anonymized user name string user_name = 1; AccessListMetadata metadata = 2; + // member_kind is the type of membership of the created member in the parent access list. + string member_kind = 3; } // AccessListMemberUpdate is an event that is emitted when a member is updated in an access list. @@ -940,6 +942,8 @@ message AccessListMemberUpdateEvent { // user_name is the anonymized user name string user_name = 1; AccessListMetadata metadata = 2; + // membership_kind is the type of membership of the updated member in the parent access list. + string member_kind = 3; } // AccessListMemberDelete is an event that is emitted when a member is removed from an access list. @@ -947,6 +951,8 @@ message AccessListMemberDeleteEvent { // user_name is anonymized user name string user_name = 1; AccessListMetadata metadata = 2; + // member_kind is the type of membership of the deleted user in the parent access list. + string member_kind = 3; } // AccessListGrantsToUser is an event that is emitted when access list permissions are granted to a user @@ -960,6 +966,12 @@ message AccessListGrantsToUserEvent { // count_traits_granted is the number of traits granted to a user. int32 count_traits_granted = 3; + + // count_inherited_roles_granted is the number of roles granted to a user inherited from nested access lists. + int32 count_inherited_roles_granted = 4; + + // count_inherited_traits_granted is the number of traits granted to a user inherited from nested access lists. + int32 count_inherited_traits_granted = 5; } // AccessListReviewCreateEvent is an event that is emitted when an access list review is created. diff --git a/tool/tctl/common/acl_command.go b/tool/tctl/common/acl_command.go index 93fd4c122a8f..54986c3b2d93 100644 --- a/tool/tctl/common/acl_command.go +++ b/tool/tctl/common/acl_command.go @@ -49,6 +49,8 @@ type ACLCommand struct { // Used for managing a particular access list. accessListName string + // Used to add an access list to another one + memberKind string // Used for managing membership to an access list. userName string @@ -56,6 +58,11 @@ type ACLCommand struct { reason string } +const ( + memberKindUser = "user" + memberKindList = "list" +) + // Initialize allows ACLCommand to plug itself into the CLI parser func (c *ACLCommand) Initialize(app *kingpin.Application, _ *servicecfg.Config) { acl := app.Command("acl", "Manage access lists.").Alias("access-lists") @@ -70,6 +77,7 @@ func (c *ACLCommand) Initialize(app *kingpin.Application, _ *servicecfg.Config) users := acl.Command("users", "Manage user membership to access lists.") c.usersAdd = users.Command("add", "Add a user to an access list.") + c.usersAdd.Flag("kind", "Access list member kind, 'user' or 'list'").Default(memberKindUser).EnumVar(&c.memberKind, memberKindUser, memberKindList) c.usersAdd.Arg("access-list-name", "The access list name.").Required().StringVar(&c.accessListName) c.usersAdd.Arg("user", "The user to add to the access list.").Required().StringVar(&c.userName) c.usersAdd.Arg("expires", "When the user's access expires (must be in RFC3339). Defaults to the expiration time of the access list.").StringVar(&c.expires) @@ -151,6 +159,14 @@ func (c *ACLCommand) UsersAdd(ctx context.Context, client *authclient.Client) er } } + var membershipKind string + switch c.memberKind { + case memberKindList: + membershipKind = accesslist.MembershipKindList + case "", memberKindUser: + membershipKind = accesslist.MembershipKindUser + } + member, err := accesslist.NewAccessListMember(header.Metadata{ Name: c.userName, }, accesslist.AccessListMemberSpec{ @@ -160,8 +176,9 @@ func (c *ACLCommand) UsersAdd(ctx context.Context, client *authclient.Client) er Expires: expires, // The following fields will be updated in the backend, so their values here don't matter. - Joined: time.Now(), - AddedBy: "dummy", + Joined: time.Now(), + AddedBy: "dummy", + MembershipKind: membershipKind, }) if err != nil { return trace.Wrap(err) @@ -219,7 +236,11 @@ func (c *ACLCommand) UsersList(ctx context.Context, client *authclient.Client) e } fmt.Printf("Members of %s:\n", c.accessListName) for _, member := range allMembers { - fmt.Printf("- %s\n", member.Spec.Name) + if member.Spec.MembershipKind == accesslist.MembershipKindList { + fmt.Printf("- (Access List) %s \n", member.Spec.Name) + } else { + fmt.Printf("- %s\n", member.Spec.Name) + } } return nil default: @@ -249,6 +270,7 @@ func displayAccessListsText(accessLists ...*accesslist.AccessList) error { for k, values := range accessList.GetGrants().Traits { traitStrings = append(traitStrings, fmt.Sprintf("%s:{%s}", k, strings.Join(values, ","))) } + grantedTraits := strings.Join(traitStrings, ",") table.AddRow([]string{ accessList.GetName(), diff --git a/tool/teleport/testenv/test_server.go b/tool/teleport/testenv/test_server.go index fecc18e42347..5f3b120f9c42 100644 --- a/tool/teleport/testenv/test_server.go +++ b/tool/teleport/testenv/test_server.go @@ -446,7 +446,7 @@ func (p *cliModules) GenerateAccessRequestPromotions(_ context.Context, _ module return &types.AccessRequestAllowedPromotions{}, nil } -func (p *cliModules) GetSuggestedAccessLists(ctx context.Context, _ *tlsca.Identity, _ modules.AccessListSuggestionClient, _ modules.AccessListGetter, _ string) ([]*accesslist.AccessList, error) { +func (p *cliModules) GetSuggestedAccessLists(ctx context.Context, _ *tlsca.Identity, _ modules.AccessListSuggestionClient, _ modules.AccessListAndMembersGetter, _ string) ([]*accesslist.AccessList, error) { return []*accesslist.AccessList{}, nil } diff --git a/tool/tsh/common/tsh_test.go b/tool/tsh/common/tsh_test.go index 09ec6ca8fb1c..41866ca977a7 100644 --- a/tool/tsh/common/tsh_test.go +++ b/tool/tsh/common/tsh_test.go @@ -219,7 +219,7 @@ func (p *cliModules) GenerateAccessRequestPromotions(_ context.Context, _ module return &types.AccessRequestAllowedPromotions{}, nil } -func (p *cliModules) GetSuggestedAccessLists(ctx context.Context, _ *tlsca.Identity, _ modules.AccessListSuggestionClient, _ modules.AccessListGetter, _ string) ([]*accesslist.AccessList, error) { +func (p *cliModules) GetSuggestedAccessLists(ctx context.Context, _ *tlsca.Identity, _ modules.AccessListSuggestionClient, _ modules.AccessListAndMembersGetter, _ string) ([]*accesslist.AccessList, error) { return []*accesslist.AccessList{}, nil } diff --git a/web/packages/teleport/src/services/api/api.ts b/web/packages/teleport/src/services/api/api.ts index 6c2d18587f84..f1259558fee2 100644 --- a/web/packages/teleport/src/services/api/api.ts +++ b/web/packages/teleport/src/services/api/api.ts @@ -28,7 +28,7 @@ import parseError, { ApiError } from './parseError'; export const MFA_HEADER = 'Teleport-Mfa-Response'; const api = { - get(url, abortSignal?) { + get(url: string, abortSignal?: AbortSignal) { return api.fetchJsonWithMfaAuthnRetry(url, { signal: abortSignal }); },