From 7adba6de40450f9836a512b2695d7cf88a306bb9 Mon Sep 17 00:00:00 2001 From: j75689 Date: Fri, 4 Aug 2023 12:14:34 +0800 Subject: [PATCH] feat: group member expiration --- Makefile | 1 + app/upgrade.go | 33 +- deployment/readme.md | 9 + go.mod | 4 +- go.sum | 6 +- proto/greenfield/permission/types.proto | 8 + proto/greenfield/storage/events.proto | 34 + proto/greenfield/storage/query.proto | 1 + proto/greenfield/storage/tx.proto | 29 + x/permission/keeper/keeper.go | 67 +- x/permission/types/keys.go | 18 +- x/permission/types/types.pb.go | 240 ++++- x/storage/client/cli/tx.go | 59 ++ x/storage/keeper/cross_app_group.go | 91 ++ x/storage/keeper/grpc_query.go | 4 +- x/storage/keeper/keeper.go | 69 +- x/storage/keeper/msg_server.go | 32 + x/storage/types/crosschain.go | 149 +++ x/storage/types/errors.go | 50 +- x/storage/types/events.pb.go | 1013 +++++++++++++++--- x/storage/types/expected_keepers.go | 9 +- x/storage/types/expected_keepers_mocks.go | 103 +- x/storage/types/message.go | 67 ++ x/storage/types/options.go | 8 + x/storage/types/query.pb.go | 382 ++++--- x/storage/types/tx.pb.go | 1158 +++++++++++++++++---- 26 files changed, 3059 insertions(+), 585 deletions(-) diff --git a/Makefile b/Makefile index f9653fbf1..7542ac32e 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,7 @@ format: tools: go install github.com/cosmos/gogoproto/protoc-gen-gocosmos go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway + go install github.com/golang/mock/mockgen proto-gen: cd proto && buf generate && cp -r github.com/bnb-chain/greenfield/x/* ../x && cp -r github.com/bnb-chain/greenfield/types/* ../types && rm -rf github.com && go mod tidy diff --git a/app/upgrade.go b/app/upgrade.go index 439c85aa2..ea428ff58 100644 --- a/app/upgrade.go +++ b/app/upgrade.go @@ -1,7 +1,12 @@ package app import ( + storagetypes "github.com/bnb-chain/greenfield/x/storage/types" serverconfig "github.com/cosmos/cosmos-sdk/server/config" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + gashubtypes "github.com/cosmos/cosmos-sdk/x/gashub/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" ) func (app *App) RegisterUpgradeHandlers(chainID string, serverCfg *serverconfig.Config) error { @@ -13,13 +18,12 @@ func (app *App) RegisterUpgradeHandlers(chainID string, serverCfg *serverconfig. // Register the upgrade handlers here // app.registerPublicDelegationUpgradeHandler() - // app.register...() - // ... + app.registerBEP1001UpgradeHandler() + return nil } // registerPublicDelegationUpgradeHandler registers the upgrade handlers for the public delegation upgrade. -// it will be enabled at the future version. // func (app *App) registerPublicDelegationUpgradeHandler() { // // Register the upgrade handler // app.UpgradeKeeper.SetUpgradeHandler(upgradetypes.EnablePublicDelegationUpgrade, @@ -36,3 +40,26 @@ func (app *App) RegisterUpgradeHandlers(chainID string, serverCfg *serverconfig. // }, // ) // } + +// registerBEP1001UpgradeHandler registers the upgrade handlers for BEP1001. +func (app *App) registerBEP1001UpgradeHandler() { + // Register the upgrade handler + app.UpgradeKeeper.SetUpgradeHandler(upgradetypes.BEP1001, + func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + app.Logger().Info("processing upgrade handler", "name", plan.Name, "info", plan.Info) + app.Logger().Info("register /greenfield.storage.MsgRenewGroupMember gas params", "name", plan.Name, "info", plan.Info) + app.GashubKeeper.SetMsgGasParams(ctx, *gashubtypes.NewMsgGasParamsWithFixedGas("/greenfield.storage.MsgRenewGroupMember", 1.2e3)) + return fromVM, nil + }) + + // Register the upgrade initializer + app.UpgradeKeeper.SetUpgradeInitializer(upgradetypes.BEP1001, + func() error { + app.Logger().Info("processing upgrade initializer", "name", upgradetypes.BEP1001) + // enable the expiration of the group member from cross-chain operation + app.Logger().Info("register UpdateGroupMemberV2SynPackageType") + storagetypes.RegisterUpdateGroupMemberV2SynPackageType() + return nil + }, + ) +} diff --git a/deployment/readme.md b/deployment/readme.md index 546995e53..2d2ec1491 100644 --- a/deployment/readme.md +++ b/deployment/readme.md @@ -86,6 +86,15 @@ bash ./deployment/localup/localup.sh stop 3. Send Tx ```bash +VALIDATOR=$(./build/bin/gnfd keys show validator0 -a --home ./deployment/localup/.local/validator0 --keyring-backend test) +GROUP_NAME="admin2" + +./build/bin/gnfd tx storage create-group $GROUP_NAME --members "0xfABDd8b607201667fE54054CB4AD9068Afa2993e,0xC6D661d5Ee633eA3DfD4D86f368cdd839D682D18,0xba8dde27ddc0f39041a1d9a4efd24b5b5d81fe17" --from validator0 --home ./deployment/localup/.local/validator0 --keyring-backend test --node http://localhost:26750 -b sync + +./build/bin/gnfd q storage head-group-member $VALIDATOR $GROUP_NAME 0xfABDd8b607201667fE54054CB4AD9068Afa2993e --node http://localhost:26750 + +./build/bin/gnfd tx storage renew-group-member $GROUP_NAME 0xfABDd8b607201667fE54054CB4AD9068Afa2993e 1691118864 --from validator0 --home ./deployment/localup/.local/validator0 --keyring-backend test --node http://localhost:26750 -b sync + ./build/bin/gnfd tx bank send validator0 0x32Ff14Fa1547314b95991976DB432F9Aa648A423 500000000000000000000BNB --home ./deployment/localup/.local/validator0 --keyring-backend test --node http://localhost:26750 -b sync ``` diff --git a/go.mod b/go.mod index 30740871a..6c87373d7 100644 --- a/go.mod +++ b/go.mod @@ -27,6 +27,7 @@ require ( github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.15.0 github.com/stretchr/testify v1.8.4 + go.uber.org/mock v0.2.0 google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 google.golang.org/grpc v1.56.1 google.golang.org/protobuf v1.30.0 @@ -176,7 +177,8 @@ replace ( github.com/cometbft/cometbft => github.com/bnb-chain/greenfield-cometbft v0.0.2-alpha.2 github.com/cometbft/cometbft-db => github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1 github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 - github.com/cosmos/cosmos-sdk => github.com/bnb-chain/greenfield-cosmos-sdk v0.2.3-alpha.3.0.20230803020148-9216a6aea390 + // TODO: bump to the official version after the release + github.com/cosmos/cosmos-sdk => github.com/j75689/greenfield-cosmos-sdk v0.0.0-20230803221121-ae1fe2c384e5 //github.com/bnb-chain/greenfield-cosmos-sdk v0.2.3-alpha.5 github.com/cosmos/iavl => github.com/bnb-chain/greenfield-iavl v0.20.1-alpha.1 github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index 82c607fbf..ab25a3bdf 100644 --- a/go.sum +++ b/go.sum @@ -163,8 +163,6 @@ github.com/bnb-chain/greenfield-cometbft v0.0.2-alpha.2 h1:ys9kmgtRx04wcCextE6Cr github.com/bnb-chain/greenfield-cometbft v0.0.2-alpha.2/go.mod h1:EBmwmUdaNbGPyGjf1cMuoN3pAeM2tQu7Lfg95813EAw= github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1 h1:XcWulGacHVRiSCx90Q8Y//ajOrLNBQWR/KDB89dy3cU= github.com/bnb-chain/greenfield-cometbft-db v0.8.1-alpha.1/go.mod h1:ey1CiK4bYo1RBNJLRiVbYr5CMdSxci9S/AZRINLtppI= -github.com/bnb-chain/greenfield-cosmos-sdk v0.2.3-alpha.3.0.20230803020148-9216a6aea390 h1:tuXCEm4WHJ/7mhYM9Nqq5z+Qu96xsSZ6pqw0LE0+Fqo= -github.com/bnb-chain/greenfield-cosmos-sdk v0.2.3-alpha.3.0.20230803020148-9216a6aea390/go.mod h1:hpvg93+VGXHAcv/pVVdp24Ik/9miw4uRh8+tD0DDYas= github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20230425074444-eb5869b05fe9 h1:6fLpmmI0EZvDTfPvI0zy5dBaaTUboHnEkoC5/p/w8TQ= github.com/bnb-chain/greenfield-cosmos-sdk/api v0.0.0-20230425074444-eb5869b05fe9/go.mod h1:rbc4o84RSEvhf09o2+4Qiazsv0snRJLiEZdk17HeIDw= github.com/bnb-chain/greenfield-cosmos-sdk/math v0.0.0-20230425074444-eb5869b05fe9 h1:1ZdK+iR1Up02bOa2YTZCml7PBpP//kcdamOcK6aWO/s= @@ -704,6 +702,8 @@ github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHn github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= github.com/ipfs/go-log/v2 v2.4.0/go.mod h1:nPZnh7Cj7lwS3LpRU5Mwr2ol1c2gXIEXuF6aywqrtmo= +github.com/j75689/greenfield-cosmos-sdk v0.0.0-20230803221121-ae1fe2c384e5 h1:NV6AqwL4apq4SFX71P+6naQuLszE2Ysp/BF3q27EkGM= +github.com/j75689/greenfield-cosmos-sdk v0.0.0-20230803221121-ae1fe2c384e5/go.mod h1:hpvg93+VGXHAcv/pVVdp24Ik/9miw4uRh8+tD0DDYas= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= @@ -1454,6 +1454,8 @@ go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.3.0/go.mod h1:9CWT6lKIep8U41DDaPiH6eFscnTyjfTANNQNx6LrIcA= go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= +go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= diff --git a/proto/greenfield/permission/types.proto b/proto/greenfield/permission/types.proto index 7fc819bfb..e8933ee44 100644 --- a/proto/greenfield/permission/types.proto +++ b/proto/greenfield/permission/types.proto @@ -72,3 +72,11 @@ message GroupMember { // member is the account address of the member string member = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } + +message GroupMemberExtra { + // expiration_time defines the expiration time of the group member + google.protobuf.Timestamp expiration_time = 1 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false + ]; +} \ No newline at end of file diff --git a/proto/greenfield/storage/events.proto b/proto/greenfield/storage/events.proto index 527da5f34..2658ba468 100644 --- a/proto/greenfield/storage/events.proto +++ b/proto/greenfield/storage/events.proto @@ -3,6 +3,7 @@ package greenfield.storage; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; import "greenfield/storage/common.proto"; import "greenfield/storage/types.proto"; @@ -340,6 +341,39 @@ message EventUpdateGroupMember { repeated string members_to_delete = 6 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } +message EventRenewGroupMember { + // operator define the account address of operator who update the group member + string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // owner define the account address of group owner + string owner = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // group_name define the name of the group + string group_name = 3; + // id define an u256 id for group + string group_id = 4 [ + (cosmos_proto.scalar) = "cosmos.Uint", + (gogoproto.customtype) = "Uint", + (gogoproto.nullable) = false + ]; + // source_type define the source of the group. CrossChain or Greenfield origin + SourceType source_type = 5; + // members define the all the address of the members. + repeated string members = 6 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // extra defines extra info for the group + string extra = 7; + // members_detail defines the all the members detail of the group. + repeated EventGroupMemberDetail members_detail = 8; +} + +message EventGroupMemberDetail { + // member defines the account address of the group member + string member = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // expiration_time defines the expiration time of the group member + google.protobuf.Timestamp expiration_time = 2 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false + ]; +} + // EventUpdateGroupExtra is emitted on MsgUpdateGroupExtra message EventUpdateGroupExtra { // operator define the account address of operator who update the group member diff --git a/proto/greenfield/storage/query.proto b/proto/greenfield/storage/query.proto index 80273e897..c55ee1481 100644 --- a/proto/greenfield/storage/query.proto +++ b/proto/greenfield/storage/query.proto @@ -280,6 +280,7 @@ message QueryHeadGroupMemberRequest { message QueryHeadGroupMemberResponse { permission.GroupMember group_member = 1; + permission.GroupMemberExtra group_member_extra = 2; } message QueryPolicyForGroupRequest { diff --git a/proto/greenfield/storage/tx.proto b/proto/greenfield/storage/tx.proto index 2537a7b70..723cf4dba 100644 --- a/proto/greenfield/storage/tx.proto +++ b/proto/greenfield/storage/tx.proto @@ -42,6 +42,7 @@ service Msg { rpc UpdateGroupExtra(MsgUpdateGroupExtra) returns (MsgUpdateGroupExtraResponse); rpc LeaveGroup(MsgLeaveGroup) returns (MsgLeaveGroupResponse); rpc MirrorGroup(MsgMirrorGroup) returns (MsgMirrorGroupResponse); + rpc RenewGroupMember(MsgRenewGroupMember) returns (MsgRenewGroupMemberResponse); // basic operation of policy rpc PutPolicy(MsgPutPolicy) returns (MsgPutPolicyResponse); @@ -322,6 +323,34 @@ message MsgUpdateGroupMember { message MsgUpdateGroupMemberResponse {} +message MsgRenewGroupMember { + option (cosmos.msg.v1.signer) = "operator"; + + // operator defines the account address of the operator who has the UpdateGroupMember permission of the group. + string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_owner defines the account address of the group owner + string group_owner = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_name defines the name of the group which to be updated + string group_name = 3; + + // members defines a list of members which will be renew to the group + repeated MsgGroupMember members = 4; +} + +message MsgRenewGroupMemberResponse {} + +message MsgGroupMember { + // member defines the account address of the group member + string member = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // expiration_time defines the expiration time of the group member + google.protobuf.Timestamp expiration_time = 2 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false + ]; +} + message MsgUpdateGroupExtra { option (cosmos.msg.v1.signer) = "operator"; diff --git a/x/permission/keeper/keeper.go b/x/permission/keeper/keeper.go index d94e635ff..4fe929ea6 100644 --- a/x/permission/keeper/keeper.go +++ b/x/permission/keeper/keeper.go @@ -2,6 +2,7 @@ package keeper import ( "fmt" + "time" "cosmossdk.io/math" "github.com/cometbft/cometbft/libs/log" @@ -58,11 +59,11 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) } -func (k Keeper) AddGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) error { +func (k Keeper) AddGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) (math.Uint, error) { store := ctx.KVStore(k.storeKey) memberKey := types.GetGroupMemberKey(groupID, member) if store.Has(memberKey) { - return storagetypes.ErrGroupMemberAlreadyExists + return math.ZeroUint(), storagetypes.ErrGroupMemberAlreadyExists } groupMember := types.GroupMember{ GroupId: groupID, @@ -71,9 +72,37 @@ func (k Keeper) AddGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.Ac id := k.groupMemberSeq.NextVal(store) store.Set(memberKey, id.Bytes()) store.Set(types.GetGroupMemberByIDKey(id), k.cdc.MustMarshal(&groupMember)) + return id, nil +} + +func (k Keeper) AddGroupMemberWithExpiration(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress, expiration time.Time) error { + id, err := k.AddGroupMember(ctx, groupID, member) + if err != nil { + return err + } + + store := ctx.KVStore(k.storeKey) + // We can simply override the whole value here, because the expiration time is the only field in the value. + // If there are more fields in the future, we should use a more sophisticated way to update the value. + memberExtra := types.GroupMemberExtra{ + ExpirationTime: expiration, + } + store.Set(types.GetGroupMemberExtraKey(groupID, member), id.Bytes()) + store.Set(types.GetGroupMemberExtraByIDKey(id), k.cdc.MustMarshal(&memberExtra)) return nil } +func (k Keeper) UpdateGroupMemberExpiration(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress, memberID math.Uint, expiration time.Time) { + store := ctx.KVStore(k.storeKey) + // We can simply override the whole value here, because the expiration time is the only field in the value. + // If there are more fields in the future, we should use a more sophisticated way to update the value. + memberExtra := types.GroupMemberExtra{ + ExpirationTime: expiration, + } + store.Set(types.GetGroupMemberExtraKey(groupID, member), memberID.Bytes()) + store.Set(types.GetGroupMemberExtraByIDKey(memberID), k.cdc.MustMarshal(&memberExtra)) +} + func (k Keeper) RemoveGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) error { store := ctx.KVStore(k.storeKey) memberKey := types.GetGroupMemberKey(groupID, member) @@ -86,6 +115,18 @@ func (k Keeper) RemoveGroupMember(ctx sdk.Context, groupID math.Uint, member sdk return nil } +func (k Keeper) RemoveGroupMemberExtra(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) error { + store := ctx.KVStore(k.storeKey) + memberKey := types.GetGroupMemberExtraKey(groupID, member) + bz := store.Get(memberKey) + if bz == nil { + return storagetypes.ErrNoSuchGroupMember + } + store.Delete(memberKey) + store.Delete(types.GetGroupMemberExtraByIDKey(k.groupMemberSeq.DecodeSequence(bz))) + return nil +} + func (k Keeper) GetGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) (*types.GroupMember, bool) { store := ctx.KVStore(k.storeKey) memberKey := types.GetGroupMemberKey(groupID, member) @@ -108,6 +149,28 @@ func (k Keeper) GetGroupMemberByID(ctx sdk.Context, groupMemberID math.Uint) (*t return &groupMember, true } +func (k Keeper) GetGroupMemberExtra(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) (*types.GroupMemberExtra, bool) { + store := ctx.KVStore(k.storeKey) + memberKey := types.GetGroupMemberExtraKey(groupID, member) + bz := store.Get(memberKey) + if bz == nil { + return nil, false + } + + return k.GetGroupMemberExtraByID(ctx, k.groupMemberSeq.DecodeSequence(bz)) +} + +func (k Keeper) GetGroupMemberExtraByID(ctx sdk.Context, groupMemberID math.Uint) (*types.GroupMemberExtra, bool) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.GetGroupMemberExtraByIDKey(groupMemberID)) + if bz == nil { + return nil, false + } + var groupMember types.GroupMemberExtra + k.cdc.MustUnmarshal(bz, &groupMember) + return &groupMember, true +} + func (k Keeper) updatePolicy(ctx sdk.Context, policy *types.Policy, newPolicy *types.Policy) *types.Policy { store := ctx.KVStore(k.storeKey) policy.Statements = newPolicy.Statements diff --git a/x/permission/types/keys.go b/x/permission/types/keys.go index caf8df6fe..248ff2859 100644 --- a/x/permission/types/keys.go +++ b/x/permission/types/keys.go @@ -30,12 +30,14 @@ var ( ObjectPolicyForAccountPrefix = []byte{0x12} GroupPolicyForAccountPrefix = []byte{0x13} GroupMemberPrefix = []byte{0x14} + GroupMemberExtraPrefix = []byte{0x15} BucketPolicyForGroupPrefix = []byte{0x21} ObjectPolicyForGroupPrefix = []byte{0x22} - PolicyByIDPrefix = []byte{0x31} - GroupMemberByIDPrefix = []byte{0x32} + PolicyByIDPrefix = []byte{0x31} + GroupMemberByIDPrefix = []byte{0x32} + GroupMemberExtraByIDPrefix = []byte{0x33} PolicySequencePrefix = []byte{0x41} GroupMemberSequencePrefix = []byte{0x42} @@ -92,3 +94,15 @@ func GetGroupMemberKey(groupID math.Uint, member sdk.AccAddress) []byte { func GetGroupMemberByIDKey(memberID math.Uint) []byte { return append(GroupMemberByIDPrefix, memberID.Bytes()...) } + +func GroupMembersExtraPrefix(groupID math.Uint) []byte { + return append(GroupMemberExtraPrefix, groupID.Bytes()...) +} + +func GetGroupMemberExtraKey(groupID math.Uint, member sdk.AccAddress) []byte { + return append(GroupMemberExtraPrefix, append(groupID.Bytes(), member.Bytes()...)...) +} + +func GetGroupMemberExtraByIDKey(memberID math.Uint) []byte { + return append(GroupMemberExtraByIDPrefix, memberID.Bytes()...) +} diff --git a/x/permission/types/types.pb.go b/x/permission/types/types.pb.go index 341a415a1..836103745 100644 --- a/x/permission/types/types.pb.go +++ b/x/permission/types/types.pb.go @@ -241,50 +241,97 @@ func (m *GroupMember) GetMember() string { return "" } +type GroupMemberExtra struct { + // expiration_time defines the expiration time of the group member + ExpirationTime time.Time `protobuf:"bytes,1,opt,name=expiration_time,json=expirationTime,proto3,stdtime" json:"expiration_time"` +} + +func (m *GroupMemberExtra) Reset() { *m = GroupMemberExtra{} } +func (m *GroupMemberExtra) String() string { return proto.CompactTextString(m) } +func (*GroupMemberExtra) ProtoMessage() {} +func (*GroupMemberExtra) Descriptor() ([]byte, []int) { + return fileDescriptor_0d2afeea9f743f03, []int{3} +} +func (m *GroupMemberExtra) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupMemberExtra) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GroupMemberExtra.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 *GroupMemberExtra) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupMemberExtra.Merge(m, src) +} +func (m *GroupMemberExtra) XXX_Size() int { + return m.Size() +} +func (m *GroupMemberExtra) XXX_DiscardUnknown() { + xxx_messageInfo_GroupMemberExtra.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupMemberExtra proto.InternalMessageInfo + +func (m *GroupMemberExtra) GetExpirationTime() time.Time { + if m != nil { + return m.ExpirationTime + } + return time.Time{} +} + func init() { proto.RegisterType((*Policy)(nil), "greenfield.permission.Policy") proto.RegisterType((*PolicyGroup)(nil), "greenfield.permission.PolicyGroup") proto.RegisterType((*PolicyGroup_Item)(nil), "greenfield.permission.PolicyGroup.Item") proto.RegisterType((*GroupMember)(nil), "greenfield.permission.GroupMember") + proto.RegisterType((*GroupMemberExtra)(nil), "greenfield.permission.GroupMemberExtra") } func init() { proto.RegisterFile("greenfield/permission/types.proto", fileDescriptor_0d2afeea9f743f03) } var fileDescriptor_0d2afeea9f743f03 = []byte{ - // 521 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x6a, 0x13, 0x41, - 0x1c, 0xc7, 0x33, 0x49, 0x1a, 0x93, 0x89, 0x56, 0x18, 0x2a, 0xac, 0x11, 0x36, 0x69, 0x2e, 0x06, - 0x24, 0xb3, 0x12, 0x41, 0x3c, 0xa8, 0x68, 0x0e, 0x4a, 0xc0, 0x42, 0xd9, 0xd6, 0x8b, 0x97, 0x90, - 0xdd, 0x9d, 0x6e, 0x07, 0x32, 0x7f, 0x98, 0x99, 0x40, 0xf2, 0x0e, 0x1e, 0xfa, 0x10, 0x3e, 0x42, - 0x9f, 0x41, 0x72, 0x2c, 0x3d, 0x89, 0x87, 0x28, 0xc9, 0x8b, 0xc8, 0xce, 0xee, 0x76, 0x03, 0x56, - 0xab, 0xbd, 0xcd, 0x6f, 0xf6, 0xf3, 0xfd, 0xcd, 0x77, 0xe6, 0x3b, 0x3b, 0x70, 0x3f, 0x56, 0x84, - 0xf0, 0x13, 0x4a, 0xa6, 0x91, 0x27, 0x89, 0x62, 0x54, 0x6b, 0x2a, 0xb8, 0x67, 0x16, 0x92, 0x68, - 0x2c, 0x95, 0x30, 0x02, 0x3d, 0x28, 0x10, 0x5c, 0x20, 0xad, 0x87, 0xa1, 0xd0, 0x4c, 0xe8, 0xb1, - 0x85, 0xbc, 0xb4, 0x48, 0x15, 0xad, 0xbd, 0x58, 0xc4, 0x22, 0x9d, 0x4f, 0x46, 0xd9, 0x6c, 0x3b, - 0x16, 0x22, 0x9e, 0x12, 0xcf, 0x56, 0xc1, 0xec, 0xc4, 0x33, 0x94, 0x11, 0x6d, 0x26, 0x4c, 0x66, - 0x40, 0xf7, 0x7a, 0x2f, 0xa1, 0x60, 0x4c, 0xf0, 0xab, 0x26, 0x05, 0xa3, 0x88, 0x16, 0x33, 0x15, - 0x92, 0x6d, 0xb7, 0xdd, 0xcf, 0x15, 0x58, 0x3b, 0x14, 0x53, 0x1a, 0x2e, 0xd0, 0x13, 0x58, 0xa6, - 0x91, 0x03, 0x3a, 0xa0, 0xd7, 0x18, 0x3e, 0x5a, 0xae, 0xda, 0xa5, 0xef, 0xab, 0x76, 0xf5, 0x23, - 0xe5, 0xe6, 0xf2, 0xbc, 0xdf, 0xcc, 0x0c, 0x27, 0xa5, 0x5f, 0xa6, 0x11, 0x7a, 0x0d, 0x1b, 0x52, - 0x51, 0x1e, 0x52, 0x39, 0x99, 0x3a, 0xe5, 0x0e, 0xe8, 0x35, 0x07, 0x1d, 0x7c, 0xed, 0xce, 0xf1, - 0x61, 0xce, 0xf9, 0x85, 0x04, 0xbd, 0x83, 0xf7, 0x72, 0x3f, 0xe3, 0xc4, 0x8f, 0x53, 0xe9, 0x80, - 0xde, 0xee, 0x60, 0x7f, 0xbb, 0x47, 0x0e, 0x60, 0x3f, 0x1b, 0x1c, 0x2f, 0x24, 0xf1, 0xef, 0xaa, - 0xad, 0x0a, 0xbd, 0x84, 0xcd, 0xab, 0x3e, 0x34, 0x72, 0xaa, 0x37, 0xbb, 0x87, 0x39, 0x3f, 0x8a, - 0xd0, 0x1b, 0x08, 0xb5, 0x99, 0x18, 0xc2, 0x08, 0x37, 0xda, 0xd9, 0xe9, 0x54, 0xfe, 0xb2, 0x8d, - 0xa3, 0x1c, 0xf4, 0xb7, 0x34, 0xe8, 0x00, 0xde, 0x27, 0x73, 0x49, 0xd5, 0xc4, 0x50, 0xc1, 0xc7, - 0x49, 0x44, 0x4e, 0xcd, 0x9e, 0x46, 0x0b, 0xa7, 0xf9, 0xe1, 0x3c, 0x3f, 0x7c, 0x9c, 0xe7, 0x37, - 0xac, 0x2f, 0x57, 0x6d, 0x70, 0xf6, 0xa3, 0x0d, 0xfc, 0xdd, 0x42, 0x9c, 0x7c, 0xee, 0x7e, 0x05, - 0xb0, 0x99, 0xc6, 0xf1, 0x5e, 0x89, 0x99, 0x44, 0xaf, 0xe0, 0x0e, 0x35, 0x84, 0x69, 0x07, 0x58, - 0x6f, 0x8f, 0xff, 0x74, 0xc4, 0x85, 0x04, 0x8f, 0x0c, 0x61, 0x7e, 0xaa, 0x6a, 0xcd, 0x61, 0x35, - 0x29, 0xd1, 0x0b, 0xd8, 0x90, 0x16, 0x19, 0xff, 0x5b, 0xc2, 0xf5, 0x94, 0x1e, 0x45, 0xe8, 0x39, - 0xac, 0xc7, 0x49, 0xdb, 0x44, 0x58, 0xbe, 0x59, 0x78, 0xc7, 0xc2, 0xa3, 0xa8, 0xfb, 0x05, 0xc0, - 0xa6, 0xf5, 0x73, 0x40, 0x58, 0x40, 0xd4, 0xff, 0x5d, 0xae, 0x5b, 0x2e, 0x8a, 0x9e, 0xc2, 0x1a, - 0xb3, 0xcb, 0xd9, 0xdb, 0xd4, 0x18, 0x3a, 0x97, 0xe7, 0xfd, 0xbd, 0x8c, 0x7c, 0x1b, 0x45, 0x8a, - 0x68, 0x7d, 0x64, 0x14, 0xe5, 0xb1, 0x9f, 0x71, 0xc3, 0x0f, 0xcb, 0xb5, 0x0b, 0x2e, 0xd6, 0x2e, - 0xf8, 0xb9, 0x76, 0xc1, 0xd9, 0xc6, 0x2d, 0x5d, 0x6c, 0xdc, 0xd2, 0xb7, 0x8d, 0x5b, 0xfa, 0x34, - 0x88, 0xa9, 0x39, 0x9d, 0x05, 0x38, 0x14, 0xcc, 0x0b, 0x78, 0xd0, 0x0f, 0x4f, 0x27, 0x94, 0x7b, - 0x5b, 0xbf, 0xd3, 0xfc, 0xb7, 0x07, 0x20, 0xa8, 0xd9, 0xac, 0x9f, 0xfd, 0x0a, 0x00, 0x00, 0xff, - 0xff, 0x6a, 0x25, 0x5b, 0x0a, 0x26, 0x04, 0x00, 0x00, + // 540 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x4f, 0x6b, 0x13, 0x41, + 0x18, 0xc6, 0x33, 0x49, 0x1a, 0x93, 0x89, 0x56, 0x19, 0x2a, 0xac, 0x11, 0x36, 0xe9, 0x5e, 0x0c, + 0x48, 0x76, 0x25, 0x82, 0x78, 0x50, 0xd1, 0x80, 0x4a, 0xc0, 0x42, 0xd9, 0xd6, 0x8b, 0x97, 0xb0, + 0x7f, 0xa6, 0xdb, 0x81, 0xcc, 0xce, 0x30, 0x33, 0x81, 0xe4, 0x3b, 0x78, 0xe8, 0x87, 0xf0, 0x23, + 0xf4, 0x33, 0x48, 0x8e, 0xa5, 0x27, 0xf1, 0x10, 0x25, 0xf9, 0x22, 0xb2, 0xb3, 0xbb, 0xdd, 0x05, + 0xa3, 0xad, 0xde, 0xe6, 0x9d, 0xfc, 0x9e, 0xf7, 0x7d, 0x66, 0x9e, 0xc9, 0xc2, 0xfd, 0x48, 0x60, + 0x1c, 0x9f, 0x10, 0x3c, 0x0d, 0x1d, 0x8e, 0x05, 0x25, 0x52, 0x12, 0x16, 0x3b, 0x6a, 0xc1, 0xb1, + 0xb4, 0xb9, 0x60, 0x8a, 0xa1, 0xfb, 0x05, 0x62, 0x17, 0x48, 0xe7, 0x41, 0xc0, 0x24, 0x65, 0x72, + 0xa2, 0x21, 0x27, 0x2d, 0x52, 0x45, 0x67, 0x2f, 0x62, 0x11, 0x4b, 0xf7, 0x93, 0x55, 0xb6, 0xdb, + 0x8d, 0x18, 0x8b, 0xa6, 0xd8, 0xd1, 0x95, 0x3f, 0x3b, 0x71, 0x14, 0xa1, 0x58, 0x2a, 0x8f, 0xf2, + 0x0c, 0xb0, 0xb6, 0x7b, 0x09, 0x18, 0xa5, 0x2c, 0xbe, 0x6a, 0x52, 0x30, 0x02, 0x4b, 0x36, 0x13, + 0x01, 0x2e, 0xbb, 0xb5, 0x3e, 0xd7, 0x60, 0xe3, 0x90, 0x4d, 0x49, 0xb0, 0x40, 0x8f, 0x61, 0x95, + 0x84, 0x06, 0xe8, 0x81, 0x7e, 0x6b, 0xf4, 0x70, 0xb9, 0xea, 0x56, 0xbe, 0xaf, 0xba, 0xf5, 0x8f, + 0x24, 0x56, 0x97, 0xe7, 0x83, 0x76, 0x66, 0x38, 0x29, 0xdd, 0x2a, 0x09, 0xd1, 0x2b, 0xd8, 0xe2, + 0x82, 0xc4, 0x01, 0xe1, 0xde, 0xd4, 0xa8, 0xf6, 0x40, 0xbf, 0x3d, 0xec, 0xd9, 0x5b, 0x4f, 0x6e, + 0x1f, 0xe6, 0x9c, 0x5b, 0x48, 0xd0, 0x3b, 0x78, 0x27, 0xf7, 0x33, 0x49, 0xfc, 0x18, 0xb5, 0x1e, + 0xe8, 0xef, 0x0e, 0xf7, 0xcb, 0x3d, 0x72, 0xc0, 0x76, 0xb3, 0xc5, 0xf1, 0x82, 0x63, 0xf7, 0xb6, + 0x28, 0x55, 0xe8, 0x05, 0x6c, 0x5f, 0xf5, 0x21, 0xa1, 0x51, 0xbf, 0xde, 0x3d, 0xcc, 0xf9, 0x71, + 0x88, 0x5e, 0x43, 0x28, 0x95, 0xa7, 0x30, 0xc5, 0xb1, 0x92, 0xc6, 0x4e, 0xaf, 0xf6, 0x97, 0x63, + 0x1c, 0xe5, 0xa0, 0x5b, 0xd2, 0xa0, 0x03, 0x78, 0x17, 0xcf, 0x39, 0x11, 0x9e, 0x22, 0x2c, 0x9e, + 0x24, 0x11, 0x19, 0x0d, 0x7d, 0x1b, 0x1d, 0x3b, 0xcd, 0xcf, 0xce, 0xf3, 0xb3, 0x8f, 0xf3, 0xfc, + 0x46, 0xcd, 0xe5, 0xaa, 0x0b, 0xce, 0x7e, 0x74, 0x81, 0xbb, 0x5b, 0x88, 0x93, 0x9f, 0xad, 0xaf, + 0x00, 0xb6, 0xd3, 0x38, 0xde, 0x0b, 0x36, 0xe3, 0xe8, 0x25, 0xdc, 0x21, 0x0a, 0x53, 0x69, 0x00, + 0xed, 0xed, 0xd1, 0x9f, 0xae, 0xb8, 0x90, 0xd8, 0x63, 0x85, 0xa9, 0x9b, 0xaa, 0x3a, 0x73, 0x58, + 0x4f, 0x4a, 0xf4, 0x1c, 0xb6, 0xb8, 0x46, 0x26, 0x37, 0x4b, 0xb8, 0x99, 0xd2, 0xe3, 0x10, 0x3d, + 0x83, 0xcd, 0x28, 0x69, 0x9b, 0x08, 0xab, 0xd7, 0x0b, 0x6f, 0x69, 0x78, 0x1c, 0x5a, 0x5f, 0x00, + 0x6c, 0x6b, 0x3f, 0x07, 0x98, 0xfa, 0x58, 0xfc, 0xdb, 0xe3, 0xfa, 0xcf, 0xa1, 0xe8, 0x09, 0x6c, + 0x50, 0x3d, 0x4e, 0xbf, 0xa6, 0xd6, 0xc8, 0xb8, 0x3c, 0x1f, 0xec, 0x65, 0xe4, 0x9b, 0x30, 0x14, + 0x58, 0xca, 0x23, 0x25, 0x48, 0x1c, 0xb9, 0x19, 0x67, 0x79, 0xf0, 0x5e, 0xc9, 0xe5, 0xdb, 0xb9, + 0x12, 0xde, 0xb6, 0x48, 0xc1, 0x8d, 0x22, 0xad, 0x6c, 0x8b, 0x74, 0xf4, 0x61, 0xb9, 0x36, 0xc1, + 0xc5, 0xda, 0x04, 0x3f, 0xd7, 0x26, 0x38, 0xdb, 0x98, 0x95, 0x8b, 0x8d, 0x59, 0xf9, 0xb6, 0x31, + 0x2b, 0x9f, 0x86, 0x11, 0x51, 0xa7, 0x33, 0xdf, 0x0e, 0x18, 0x75, 0xfc, 0xd8, 0x1f, 0x04, 0xa7, + 0x1e, 0x89, 0x9d, 0xd2, 0x3f, 0x76, 0xfe, 0xdb, 0x37, 0xc6, 0x6f, 0xe8, 0xd9, 0x4f, 0x7f, 0x05, + 0x00, 0x00, 0xff, 0xff, 0x31, 0x61, 0x39, 0x2b, 0x89, 0x04, 0x00, 0x00, } func (m *Policy) Marshal() (dAtA []byte, err error) { @@ -501,6 +548,37 @@ func (m *GroupMember) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *GroupMemberExtra) 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 *GroupMemberExtra) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupMemberExtra) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ExpirationTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpirationTime):]) + if err3 != nil { + return 0, err3 + } + i -= n3 + i = encodeVarintTypes(dAtA, i, uint64(n3)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { offset -= sovTypes(v) base := offset @@ -587,6 +665,17 @@ func (m *GroupMember) Size() (n int) { return n } +func (m *GroupMemberExtra) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpirationTime) + n += 1 + l + sovTypes(uint64(l)) + return n +} + func sovTypes(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -1188,6 +1277,89 @@ func (m *GroupMember) Unmarshal(dAtA []byte) error { } return nil } +func (m *GroupMemberExtra) 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 ErrIntOverflowTypes + } + 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: GroupMemberExtra: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupMemberExtra: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ExpirationTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTypes(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/storage/client/cli/tx.go b/x/storage/client/cli/tx.go index 62c193b2c..0a77113c4 100644 --- a/x/storage/client/cli/tx.go +++ b/x/storage/client/cli/tx.go @@ -2,10 +2,12 @@ package cli import ( "encoding/hex" + "errors" "fmt" "math/big" "strconv" "strings" + "time" cmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/client" @@ -52,6 +54,7 @@ func GetTxCmd() *cobra.Command { CmdDeleteGroup(), CmdUpdateGroupMember(), CmdUpdateGroupExtra(), + CmdRenewGroupMember(), CmdLeaveGroup(), CmdMirrorGroup(), ) @@ -677,6 +680,62 @@ func CmdUpdateGroupMember() *cobra.Command { return cmd } +func CmdRenewGroupMember() *cobra.Command { + cmd := &cobra.Command{ + Use: "renew-group-member [group-name] [member] [member-expiration]", + Short: "renew the member of the group you own, split member-addresses and member-expiration(UNIX timestamp) by ,", + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argGroupName := args[0] + argMember := args[1] + argMemberExpiration := args[2] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + memberExpirationStr := strings.Split(argMemberExpiration, ",") + members := strings.Split(argMember, ",") + + if len(memberExpirationStr) != len(members) { + return errors.New("member and member-expiration should have the same length") + } + + msgGroupMember := make([]*types.MsgGroupMember, 0, len(argMember)) + for i := range members { + _, err := sdk.AccAddressFromHexUnsafe(members[i]) + if err != nil { + return err + } + expiration, err := strconv.ParseInt(memberExpirationStr[i], 10, 64) + if err != nil { + return err + } + msgGroupMember = append(msgGroupMember, &types.MsgGroupMember{ + Member: members[i], + ExpirationTime: time.Unix(expiration, 0), + }) + } + + msg := types.NewMsgRenewGroupMember( + clientCtx.GetFromAddress(), + clientCtx.GetFromAddress(), + argGroupName, + msgGroupMember, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + func CmdUpdateGroupExtra() *cobra.Command { cmd := &cobra.Command{ Use: "update-group-extra [group-name] [extra]", diff --git a/x/storage/keeper/cross_app_group.go b/x/storage/keeper/cross_app_group.go index 77b8e27a0..92eec0835 100644 --- a/x/storage/keeper/cross_app_group.go +++ b/x/storage/keeper/cross_app_group.go @@ -117,6 +117,9 @@ func (app *GroupApp) ExecuteSynPackage(ctx sdk.Context, appCtx *sdk.CrossChainAp case *types.UpdateGroupMemberSynPackage: operationType = types.OperationUpdateGroupMember result = app.handleUpdateGroupMemberSynPackage(ctx, appCtx, p) + case *types.UpdateGroupMemberV2SynPackage: + operationType = types.OperationUpdateGroupMember + result = app.handleUpdateGroupMemberV2SynPackage(ctx, appCtx, p) default: return sdk.ExecuteResult{ Err: types.ErrInvalidCrossChainPackage, @@ -374,6 +377,94 @@ func (app *GroupApp) handleUpdateGroupMemberSynPackage(ctx sdk.Context, header * } } +func (app *GroupApp) handleUpdateGroupMemberV2SynPackage(ctx sdk.Context, header *sdk.CrossChainAppContext, updateGroupPackage *types.UpdateGroupMemberV2SynPackage) sdk.ExecuteResult { + err := updateGroupPackage.ValidateBasic() + if err != nil { + return sdk.ExecuteResult{ + Payload: types.UpdateGroupMemberAckPackage{ + Status: types.StatusFail, + Operator: updateGroupPackage.Operator, + ExtraData: updateGroupPackage.ExtraData, + }.MustSerialize(), + Err: err, + } + } + + groupInfo, found := app.storageKeeper.GetGroupInfoById(ctx, math.NewUintFromBigInt(updateGroupPackage.GroupId)) + if !found { + return sdk.ExecuteResult{ + Payload: types.UpdateGroupMemberAckPackage{ + Status: types.StatusFail, + Operator: updateGroupPackage.Operator, + ExtraData: updateGroupPackage.ExtraData, + }.MustSerialize(), + Err: types.ErrNoSuchGroup, + } + } + + switch updateGroupPackage.OperationType { + case types.OperationAddGroupMember, types.OperationDeleteGroupMember: + err = app.handleAddOrDeleteGroupMemberOperation(ctx, groupInfo, updateGroupPackage) + case types.OperationRenewGroupMember: + err = app.handleRenewGroupOperation(ctx, groupInfo, updateGroupPackage) + } + + if err != nil { + return sdk.ExecuteResult{ + Payload: types.UpdateGroupMemberAckPackage{ + Status: types.StatusFail, + Operator: updateGroupPackage.Operator, + ExtraData: updateGroupPackage.ExtraData, + }.MustSerialize(), + Err: err, + } + } + + return sdk.ExecuteResult{ + Payload: types.UpdateGroupMemberAckPackage{ + Status: types.StatusSuccess, + Id: groupInfo.Id.BigInt(), + Operator: updateGroupPackage.Operator, + OperationType: updateGroupPackage.OperationType, + Members: updateGroupPackage.Members, + ExtraData: updateGroupPackage.ExtraData, + }.MustSerialize(), + } +} + +func (app *GroupApp) handleAddOrDeleteGroupMemberOperation(ctx sdk.Context, groupInfo *types.GroupInfo, updateGroupPackage *types.UpdateGroupMemberV2SynPackage) error { + options := types.UpdateGroupMemberOptions{ + SourceType: types.SOURCE_TYPE_BSC_CROSS_CHAIN, + } + if updateGroupPackage.OperationType == types.OperationAddGroupMember { + options.MembersToAdd = updateGroupPackage.GetMembers() + } else { + options.MembersToDelete = updateGroupPackage.GetMembers() + } + + return app.storageKeeper.UpdateGroupMember( + ctx, + updateGroupPackage.Operator, + groupInfo, + options, + ) +} + +func (app *GroupApp) handleRenewGroupOperation(ctx sdk.Context, groupInfo *types.GroupInfo, updateGroupPackage *types.UpdateGroupMemberV2SynPackage) error { + options := types.RenewGroupMemberOptions{ + SourceType: types.SOURCE_TYPE_BSC_CROSS_CHAIN, + Members: updateGroupPackage.GetMembers(), + MembersExpiration: updateGroupPackage.GetMemberExpiration(), + } + + return app.storageKeeper.RenewGroupMember( + ctx, + updateGroupPackage.Operator, + groupInfo, + options, + ) +} + func (app *GroupApp) handleUpdateGroupMemberAckPackage(ctx sdk.Context, header *sdk.CrossChainAppContext, createGroupPackage *types.UpdateGroupMemberAckPackage) sdk.ExecuteResult { app.storageKeeper.Logger(ctx).Error("received update group member ack package ") diff --git a/x/storage/keeper/grpc_query.go b/x/storage/keeper/grpc_query.go index ea2aa50a7..c0b9640c4 100644 --- a/x/storage/keeper/grpc_query.go +++ b/x/storage/keeper/grpc_query.go @@ -558,7 +558,9 @@ func (k Keeper) HeadGroupMember(goCtx context.Context, req *types.QueryHeadGroup if !found { return nil, types.ErrNoSuchGroupMember } - return &types.QueryHeadGroupMemberResponse{GroupMember: groupMember}, nil + groupMemberExtra, _ := k.permKeeper.GetGroupMemberExtra(ctx, groupInfo.Id, member) + + return &types.QueryHeadGroupMemberResponse{GroupMember: groupMember, GroupMemberExtra: groupMemberExtra}, nil } func (k Keeper) QueryPolicyById(goCtx context.Context, req *types.QueryPolicyByIdRequest) (*types. diff --git a/x/storage/keeper/keeper.go b/x/storage/keeper/keeper.go index 20b6e1676..92f431db8 100644 --- a/x/storage/keeper/keeper.go +++ b/x/storage/keeper/keeper.go @@ -11,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/store/prefix" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/cosmos/gogoproto/proto" "github.com/bnb-chain/greenfield/internal/sequence" @@ -1260,7 +1261,7 @@ func (k Keeper) CreateGroup( if err != nil { return sdkmath.ZeroUint(), err } - err = k.permKeeper.AddGroupMember(ctx, groupInfo.Id, memberAddress) + _, err = k.permKeeper.AddGroupMember(ctx, groupInfo.Id, memberAddress) if err != nil { return sdkmath.Uint{}, err } @@ -1363,6 +1364,12 @@ func (k Keeper) LeaveGroup( return err } + if ctx.IsUpgraded(upgradetypes.BEP1001) { + if err := k.permKeeper.RemoveGroupMemberExtra(ctx, groupInfo.Id, member); err != nil { + return err + } + } + if err := ctx.EventManager().EmitTypedEvents(&types.EventDeleteGroup{ Owner: groupInfo.Owner, GroupName: groupInfo.GroupName, @@ -1391,7 +1398,7 @@ func (k Keeper) UpdateGroupMember(ctx sdk.Context, operator sdk.AccAddress, grou if err != nil { return err } - err = k.permKeeper.AddGroupMember(ctx, groupInfo.Id, memberAcc) + _, err = k.permKeeper.AddGroupMember(ctx, groupInfo.Id, memberAcc) if err != nil { return err } @@ -1421,6 +1428,64 @@ func (k Keeper) UpdateGroupMember(ctx sdk.Context, operator sdk.AccAddress, grou return nil } +func (k Keeper) RenewGroupMember(ctx sdk.Context, operator sdk.AccAddress, groupInfo *types.GroupInfo, opts types.RenewGroupMemberOptions) error { + if !ctx.IsUpgraded(upgradetypes.BEP1001) { + return types.ErrRenewGroupMemberNotAllow + } + + if groupInfo.SourceType != opts.SourceType { + return types.ErrSourceTypeMismatch + } + + // check permission + effect := k.VerifyGroupPermission(ctx, groupInfo, operator, permtypes.ACTION_UPDATE_GROUP_MEMBER) + if effect != permtypes.EFFECT_ALLOW { + return types.ErrAccessDenied.Wrapf( + "The operator(%s) has no UpdateGroupMember permission of the group(%s), operator(%s)", + operator.String(), groupInfo.GroupName, groupInfo.Owner) + } + + eventMembersDetail := make([]*types.EventGroupMemberDetail, 0, len(opts.Members)) + for i := range opts.Members { + member := opts.Members[i] + memberExpiration := opts.MembersExpiration[i] + memberAcc, err := sdk.AccAddressFromHexUnsafe(member) + if err != nil { + return err + } + + groupMember, found := k.permKeeper.GetGroupMember(ctx, groupInfo.Id, memberAcc) + if !found { + err = k.permKeeper.AddGroupMemberWithExpiration(ctx, groupInfo.Id, memberAcc, memberExpiration) + if err != nil { + return err + } + } else { + k.permKeeper.UpdateGroupMemberExpiration(ctx, groupInfo.Id, memberAcc, groupMember.Id, memberExpiration) + } + + eventMembersDetail = append(eventMembersDetail, &types.EventGroupMemberDetail{ + Member: member, + ExpirationTime: memberExpiration, + }) + } + + if err := ctx.EventManager().EmitTypedEvents(&types.EventRenewGroupMember{ + Operator: operator.String(), + Owner: groupInfo.Owner, + GroupName: groupInfo.GroupName, + GroupId: groupInfo.Id, + SourceType: groupInfo.SourceType, + Members: opts.Members, + Extra: groupInfo.Extra, + MembersDetail: eventMembersDetail, + }); err != nil { + return err + } + + return nil +} + func (k Keeper) UpdateGroupExtra(ctx sdk.Context, operator sdk.AccAddress, groupInfo *types.GroupInfo, extra string) error { // check permission diff --git a/x/storage/keeper/msg_server.go b/x/storage/keeper/msg_server.go index cd7277471..9b69318d5 100644 --- a/x/storage/keeper/msg_server.go +++ b/x/storage/keeper/msg_server.go @@ -2,6 +2,7 @@ package keeper import ( "context" + "time" errorsmod "cosmossdk.io/errors" "cosmossdk.io/math" @@ -292,6 +293,37 @@ func (k msgServer) UpdateGroupMember(goCtx context.Context, msg *types.MsgUpdate return &types.MsgUpdateGroupMemberResponse{}, nil } +func (k msgServer) RenewGroupMember(goCtx context.Context, msg *types.MsgRenewGroupMember) (*types.MsgRenewGroupMemberResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + operator := sdk.MustAccAddressFromHex(msg.Operator) + + groupOwner := sdk.MustAccAddressFromHex(msg.GroupOwner) + + groupInfo, found := k.GetGroupInfo(ctx, groupOwner, msg.GroupName) + if !found { + return nil, types.ErrNoSuchGroup + } + + members := make([]string, 0, len(msg.Members)) + membersExpiration := make([]time.Time, 0, len(msg.Members)) + for i := range msg.Members { + members = append(members, msg.Members[i].GetMember()) + membersExpiration = append(membersExpiration, msg.Members[i].GetExpirationTime()) + } + + err := k.Keeper.RenewGroupMember(ctx, operator, groupInfo, storagetypes.RenewGroupMemberOptions{ + SourceType: types.SOURCE_TYPE_ORIGIN, + Members: members, + MembersExpiration: membersExpiration, + }) + if err != nil { + return nil, err + } + + return &types.MsgRenewGroupMemberResponse{}, nil +} + func (k msgServer) UpdateGroupExtra(goCtx context.Context, msg *types.MsgUpdateGroupExtra) (*types.MsgUpdateGroupExtraResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) diff --git a/x/storage/types/crosschain.go b/x/storage/types/crosschain.go index e43b2650b..0b66a11e4 100644 --- a/x/storage/types/crosschain.go +++ b/x/storage/types/crosschain.go @@ -2,6 +2,7 @@ package types import ( "math/big" + time "time" "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" @@ -873,6 +874,7 @@ func (p DeleteGroupAckPackage) MustSerialize() []byte { const ( OperationAddGroupMember uint8 = 0 OperationDeleteGroupMember uint8 = 1 + OperationRenewGroupMember uint8 = 2 ) type UpdateGroupMemberSynPackage struct { @@ -980,6 +982,153 @@ func DeserializeUpdateGroupMemberSynPackage(serializedPackage []byte) (interface return &tp, nil } +type UpdateGroupMemberV2SynPackage struct { + Operator sdk.AccAddress + GroupId *big.Int + OperationType uint8 + Members []sdk.AccAddress + ExtraData []byte + MemberExpiration []uint64 +} + +func RegisterUpdateGroupMemberV2SynPackageType() { + DeserializeFuncMap[GroupChannelId] = map[uint8][3]DeserializeFunc{ + OperationMirrorGroup: { + DeserializeMirrorGroupSynPackage, + DeserializeMirrorGroupAckPackage, + DeserializeMirrorGroupSynPackage, + }, + OperationCreateGroup: { + DeserializeCreateGroupSynPackage, + DeserializeCreateGroupAckPackage, + DeserializeCreateGroupSynPackage, + }, + OperationDeleteGroup: { + DeserializeDeleteGroupSynPackage, + DeserializeDeleteGroupAckPackage, + DeserializeDeleteGroupSynPackage, + }, + OperationUpdateGroupMember: { + DeserializeUpdateGroupMemberV2SynPackage, + DeserializeUpdateGroupMemberAckPackage, + DeserializeUpdateGroupMemberV2SynPackage, + }, + } +} + +type UpdateGroupMemberV2SynPackageStruct struct { + Operator common.Address + GroupId *big.Int + OperationType uint8 + Members []common.Address + ExtraData []byte + MemberExpiration []uint64 +} + +var ( + updateGroupMemberV2SynPackageType, _ = abi.NewType("tuple", "", []abi.ArgumentMarshaling{ + {Name: "Operator", Type: "address"}, + {Name: "GroupId", Type: "uint256"}, + {Name: "OperationType", Type: "uint8"}, + {Name: "Members", Type: "address[]"}, + {Name: "ExtraData", Type: "bytes"}, + {Name: "MemberExpiration", Type: "uint64[]"}, + }) + + updateGroupMemberV2SynPackageArgs = abi.Arguments{ + {Type: updateGroupMemberV2SynPackageType}, + } +) + +func (p UpdateGroupMemberV2SynPackage) GetMembers() []string { + members := make([]string, 0, len(p.Members)) + for _, member := range p.Members { + members = append(members, member.String()) + } + return members +} + +func (p UpdateGroupMemberV2SynPackage) GetMemberExpiration() []time.Time { + memberExpiration := make([]time.Time, 0, len(p.MemberExpiration)) + for _, expiration := range p.MemberExpiration { + memberExpiration = append(memberExpiration, time.Unix(int64(expiration), 0)) + } + return memberExpiration +} + +func (p UpdateGroupMemberV2SynPackage) MustSerialize() []byte { + totalMember := len(p.Members) + members := make([]common.Address, totalMember) + for i, member := range p.Members { + members[i] = common.BytesToAddress(member) + } + + encodedBytes, err := updateGroupMemberSynPackageArgs.Pack(&UpdateGroupMemberSynPackageStruct{ + common.BytesToAddress(p.Operator), + SafeBigInt(p.GroupId), + p.OperationType, + members, + p.ExtraData, + }) + if err != nil { + panic("encode update group member syn package error") + } + return encodedBytes +} + +func (p UpdateGroupMemberV2SynPackage) ValidateBasic() error { + if p.OperationType != OperationAddGroupMember && p.OperationType != OperationDeleteGroupMember && p.OperationType != OperationRenewGroupMember { + return ErrInvalidOperationType + } + + if p.Operator.Empty() { + return sdkerrors.ErrInvalidAddress + } + if p.GroupId == nil || p.GroupId.Cmp(big.NewInt(0)) < 0 { + return ErrInvalidId + } + + for _, member := range p.Members { + if member.Empty() { + return sdkerrors.ErrInvalidAddress + } + } + + if len(p.Members) != len(p.MemberExpiration) { + return ErrInvalidGroupMemberExpiration + } + + return nil +} + +func DeserializeUpdateGroupMemberV2SynPackage(serializedPackage []byte) (interface{}, error) { + unpacked, err := updateGroupMemberV2SynPackageArgs.Unpack(serializedPackage) + if err != nil { + return nil, errors.Wrapf(ErrInvalidCrossChainPackage, "deserialize update group member sun package failed") + } + + unpackedStruct := abi.ConvertType(unpacked[0], UpdateGroupMemberV2SynPackageStruct{}) + pkgStruct, ok := unpackedStruct.(UpdateGroupMemberV2SynPackageStruct) + if !ok { + return nil, errors.Wrapf(ErrInvalidCrossChainPackage, "reflect update group member sun package failed") + } + + totalMember := len(pkgStruct.Members) + members := make([]sdk.AccAddress, totalMember) + for i, member := range pkgStruct.Members { + members[i] = member.Bytes() + } + tp := UpdateGroupMemberV2SynPackage{ + pkgStruct.Operator.Bytes(), + pkgStruct.GroupId, + pkgStruct.OperationType, + members, + pkgStruct.ExtraData, + pkgStruct.MemberExpiration, + } + return &tp, nil +} + type UpdateGroupMemberAckPackage struct { Status uint8 Id *big.Int diff --git a/x/storage/types/errors.go b/x/storage/types/errors.go index 9fb387674..282eebbab 100644 --- a/x/storage/types/errors.go +++ b/x/storage/types/errors.go @@ -6,31 +6,31 @@ import ( // x/storage module sentinel errors var ( - ErrNoSuchBucket = errors.Register(ModuleName, 1100, "No such bucket") - ErrNoSuchObject = errors.Register(ModuleName, 1101, "No such object") - ErrNoSuchGroup = errors.Register(ModuleName, 1102, "No such group") - ErrNoSuchGroupMember = errors.Register(ModuleName, 1103, "No such group member") - ErrBucketAlreadyExists = errors.Register(ModuleName, 1104, "Bucket already exists") - ErrObjectAlreadyExists = errors.Register(ModuleName, 1105, "Object already exists") - ErrGroupAlreadyExists = errors.Register(ModuleName, 1106, "Group already exists") - ErrAccessDenied = errors.Register(ModuleName, 1107, "Access denied") - ErrObjectAlreadySealed = errors.Register(ModuleName, 1108, "Object already sealed") - ErrBucketNotEmpty = errors.Register(ModuleName, 1109, "Bucket is not empty") - ErrGroupMemberAlreadyExists = errors.Register(ModuleName, 1110, "Group member already exists") - ErrNoSuchStorageProvider = errors.Register(ModuleName, 1111, "No such storage provider") - ErrObjectNotCreated = errors.Register(ModuleName, 1112, "Object not created") - ErrObjectNotSealed = errors.Register(ModuleName, 1113, "Object not sealed") - ErrSourceTypeMismatch = errors.Register(ModuleName, 1114, "Object source type mismatch") - ErrTooLargeObject = errors.Register(ModuleName, 1115, "Object payload size is too large") - ErrInvalidApproval = errors.Register(ModuleName, 1116, "Invalid approval of sp") - ErrChargeFailed = errors.Register(ModuleName, 1117, "charge failed error") - ErrInvalidVisibility = errors.Register(ModuleName, 1118, "Invalid type of visibility") - ErrUpdateQuotaFailed = errors.Register(ModuleName, 1119, "Update quota failed") - - ErrNoSuchPolicy = errors.Register(ModuleName, 1120, "No such Policy") - - ErrInvalidRedundancyType = errors.Register(ModuleName, 1122, "Invalid redundancy type") - ErrInvalidGlobalVirtualGroup = errors.Register(ModuleName, 1123, "invalid global virtual group") + ErrNoSuchBucket = errors.Register(ModuleName, 1100, "No such bucket") + ErrNoSuchObject = errors.Register(ModuleName, 1101, "No such object") + ErrNoSuchGroup = errors.Register(ModuleName, 1102, "No such group") + ErrNoSuchGroupMember = errors.Register(ModuleName, 1103, "No such group member") + ErrBucketAlreadyExists = errors.Register(ModuleName, 1104, "Bucket already exists") + ErrObjectAlreadyExists = errors.Register(ModuleName, 1105, "Object already exists") + ErrGroupAlreadyExists = errors.Register(ModuleName, 1106, "Group already exists") + ErrAccessDenied = errors.Register(ModuleName, 1107, "Access denied") + ErrObjectAlreadySealed = errors.Register(ModuleName, 1108, "Object already sealed") + ErrBucketNotEmpty = errors.Register(ModuleName, 1109, "Bucket is not empty") + ErrGroupMemberAlreadyExists = errors.Register(ModuleName, 1110, "Group member already exists") + ErrNoSuchStorageProvider = errors.Register(ModuleName, 1111, "No such storage provider") + ErrObjectNotCreated = errors.Register(ModuleName, 1112, "Object not created") + ErrObjectNotSealed = errors.Register(ModuleName, 1113, "Object not sealed") + ErrSourceTypeMismatch = errors.Register(ModuleName, 1114, "Object source type mismatch") + ErrTooLargeObject = errors.Register(ModuleName, 1115, "Object payload size is too large") + ErrInvalidApproval = errors.Register(ModuleName, 1116, "Invalid approval of sp") + ErrChargeFailed = errors.Register(ModuleName, 1117, "charge failed error") + ErrInvalidVisibility = errors.Register(ModuleName, 1118, "Invalid type of visibility") + ErrUpdateQuotaFailed = errors.Register(ModuleName, 1119, "Update quota failed") + ErrNoSuchPolicy = errors.Register(ModuleName, 1120, "No such Policy") + ErrInvalidRedundancyType = errors.Register(ModuleName, 1122, "Invalid redundancy type") + ErrInvalidGlobalVirtualGroup = errors.Register(ModuleName, 1123, "invalid global virtual group") + ErrRenewGroupMemberNotAllow = errors.Register(ModuleName, 1124, "Renew group member not allow") + ErrInvalidGroupMemberExpiration = errors.Register(ModuleName, 1125, "invalid group member with expiration") ErrInvalidCrossChainPackage = errors.Register(ModuleName, 3000, "invalid cross chain package") ErrAlreadyMirrored = errors.Register(ModuleName, 3001, "resource is already mirrored") diff --git a/x/storage/types/events.pb.go b/x/storage/types/events.pb.go index 9a23d9396..8728ff850 100644 --- a/x/storage/types/events.pb.go +++ b/x/storage/types/events.pb.go @@ -8,15 +8,19 @@ import ( _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" + time "time" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf +var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -1372,6 +1376,161 @@ func (m *EventUpdateGroupMember) GetMembersToDelete() []string { return nil } +type EventRenewGroupMember struct { + // operator define the account address of operator who update the group member + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // owner define the account address of group owner + Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + // group_name define the name of the group + GroupName string `protobuf:"bytes,3,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` + // id define an u256 id for group + GroupId Uint `protobuf:"bytes,4,opt,name=group_id,json=groupId,proto3,customtype=Uint" json:"group_id"` + // source_type define the source of the group. CrossChain or Greenfield origin + SourceType SourceType `protobuf:"varint,5,opt,name=source_type,json=sourceType,proto3,enum=greenfield.storage.SourceType" json:"source_type,omitempty"` + // members define the all the address of the members. + Members []string `protobuf:"bytes,6,rep,name=members,proto3" json:"members,omitempty"` + // extra defines extra info for the group + Extra string `protobuf:"bytes,7,opt,name=extra,proto3" json:"extra,omitempty"` + // members_detail defines the all the members detail of the group. + MembersDetail []*EventGroupMemberDetail `protobuf:"bytes,8,rep,name=members_detail,json=membersDetail,proto3" json:"members_detail,omitempty"` +} + +func (m *EventRenewGroupMember) Reset() { *m = EventRenewGroupMember{} } +func (m *EventRenewGroupMember) String() string { return proto.CompactTextString(m) } +func (*EventRenewGroupMember) ProtoMessage() {} +func (*EventRenewGroupMember) Descriptor() ([]byte, []int) { + return fileDescriptor_946dcba4f763ddc4, []int{16} +} +func (m *EventRenewGroupMember) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventRenewGroupMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventRenewGroupMember.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 *EventRenewGroupMember) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventRenewGroupMember.Merge(m, src) +} +func (m *EventRenewGroupMember) XXX_Size() int { + return m.Size() +} +func (m *EventRenewGroupMember) XXX_DiscardUnknown() { + xxx_messageInfo_EventRenewGroupMember.DiscardUnknown(m) +} + +var xxx_messageInfo_EventRenewGroupMember proto.InternalMessageInfo + +func (m *EventRenewGroupMember) GetOperator() string { + if m != nil { + return m.Operator + } + return "" +} + +func (m *EventRenewGroupMember) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *EventRenewGroupMember) GetGroupName() string { + if m != nil { + return m.GroupName + } + return "" +} + +func (m *EventRenewGroupMember) GetSourceType() SourceType { + if m != nil { + return m.SourceType + } + return SOURCE_TYPE_ORIGIN +} + +func (m *EventRenewGroupMember) GetMembers() []string { + if m != nil { + return m.Members + } + return nil +} + +func (m *EventRenewGroupMember) GetExtra() string { + if m != nil { + return m.Extra + } + return "" +} + +func (m *EventRenewGroupMember) GetMembersDetail() []*EventGroupMemberDetail { + if m != nil { + return m.MembersDetail + } + return nil +} + +type EventGroupMemberDetail struct { + // member defines the account address of the group member + Member string `protobuf:"bytes,1,opt,name=member,proto3" json:"member,omitempty"` + // expiration_time defines the expiration time of the group member + ExpirationTime time.Time `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3,stdtime" json:"expiration_time"` +} + +func (m *EventGroupMemberDetail) Reset() { *m = EventGroupMemberDetail{} } +func (m *EventGroupMemberDetail) String() string { return proto.CompactTextString(m) } +func (*EventGroupMemberDetail) ProtoMessage() {} +func (*EventGroupMemberDetail) Descriptor() ([]byte, []int) { + return fileDescriptor_946dcba4f763ddc4, []int{17} +} +func (m *EventGroupMemberDetail) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventGroupMemberDetail) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventGroupMemberDetail.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 *EventGroupMemberDetail) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventGroupMemberDetail.Merge(m, src) +} +func (m *EventGroupMemberDetail) XXX_Size() int { + return m.Size() +} +func (m *EventGroupMemberDetail) XXX_DiscardUnknown() { + xxx_messageInfo_EventGroupMemberDetail.DiscardUnknown(m) +} + +var xxx_messageInfo_EventGroupMemberDetail proto.InternalMessageInfo + +func (m *EventGroupMemberDetail) GetMember() string { + if m != nil { + return m.Member + } + return "" +} + +func (m *EventGroupMemberDetail) GetExpirationTime() time.Time { + if m != nil { + return m.ExpirationTime + } + return time.Time{} +} + // EventUpdateGroupExtra is emitted on MsgUpdateGroupExtra type EventUpdateGroupExtra struct { // operator define the account address of operator who update the group member @@ -1390,7 +1549,7 @@ func (m *EventUpdateGroupExtra) Reset() { *m = EventUpdateGroupExtra{} } func (m *EventUpdateGroupExtra) String() string { return proto.CompactTextString(m) } func (*EventUpdateGroupExtra) ProtoMessage() {} func (*EventUpdateGroupExtra) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{16} + return fileDescriptor_946dcba4f763ddc4, []int{18} } func (m *EventUpdateGroupExtra) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1463,7 +1622,7 @@ func (m *EventMirrorBucket) Reset() { *m = EventMirrorBucket{} } func (m *EventMirrorBucket) String() string { return proto.CompactTextString(m) } func (*EventMirrorBucket) ProtoMessage() {} func (*EventMirrorBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{17} + return fileDescriptor_946dcba4f763ddc4, []int{19} } func (m *EventMirrorBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1529,7 +1688,7 @@ func (m *EventMirrorBucketResult) Reset() { *m = EventMirrorBucketResult func (m *EventMirrorBucketResult) String() string { return proto.CompactTextString(m) } func (*EventMirrorBucketResult) ProtoMessage() {} func (*EventMirrorBucketResult) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{18} + return fileDescriptor_946dcba4f763ddc4, []int{20} } func (m *EventMirrorBucketResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1597,7 +1756,7 @@ func (m *EventMirrorObject) Reset() { *m = EventMirrorObject{} } func (m *EventMirrorObject) String() string { return proto.CompactTextString(m) } func (*EventMirrorObject) ProtoMessage() {} func (*EventMirrorObject) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{19} + return fileDescriptor_946dcba4f763ddc4, []int{21} } func (m *EventMirrorObject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1672,7 +1831,7 @@ func (m *EventMirrorObjectResult) Reset() { *m = EventMirrorObjectResult func (m *EventMirrorObjectResult) String() string { return proto.CompactTextString(m) } func (*EventMirrorObjectResult) ProtoMessage() {} func (*EventMirrorObjectResult) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{20} + return fileDescriptor_946dcba4f763ddc4, []int{22} } func (m *EventMirrorObjectResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1745,7 +1904,7 @@ func (m *EventMirrorGroup) Reset() { *m = EventMirrorGroup{} } func (m *EventMirrorGroup) String() string { return proto.CompactTextString(m) } func (*EventMirrorGroup) ProtoMessage() {} func (*EventMirrorGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{21} + return fileDescriptor_946dcba4f763ddc4, []int{23} } func (m *EventMirrorGroup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1811,7 +1970,7 @@ func (m *EventMirrorGroupResult) Reset() { *m = EventMirrorGroupResult{} func (m *EventMirrorGroupResult) String() string { return proto.CompactTextString(m) } func (*EventMirrorGroupResult) ProtoMessage() {} func (*EventMirrorGroupResult) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{22} + return fileDescriptor_946dcba4f763ddc4, []int{24} } func (m *EventMirrorGroupResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1871,7 +2030,7 @@ func (m *EventStalePolicyCleanup) Reset() { *m = EventStalePolicyCleanup func (m *EventStalePolicyCleanup) String() string { return proto.CompactTextString(m) } func (*EventStalePolicyCleanup) ProtoMessage() {} func (*EventStalePolicyCleanup) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{23} + return fileDescriptor_946dcba4f763ddc4, []int{25} } func (m *EventStalePolicyCleanup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1930,7 +2089,7 @@ func (m *EventMigrationBucket) Reset() { *m = EventMigrationBucket{} } func (m *EventMigrationBucket) String() string { return proto.CompactTextString(m) } func (*EventMigrationBucket) ProtoMessage() {} func (*EventMigrationBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{24} + return fileDescriptor_946dcba4f763ddc4, []int{26} } func (m *EventMigrationBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1994,7 +2153,7 @@ func (m *EventCancelMigrationBucket) Reset() { *m = EventCancelMigration func (m *EventCancelMigrationBucket) String() string { return proto.CompactTextString(m) } func (*EventCancelMigrationBucket) ProtoMessage() {} func (*EventCancelMigrationBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{25} + return fileDescriptor_946dcba4f763ddc4, []int{27} } func (m *EventCancelMigrationBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2055,7 +2214,7 @@ func (m *EventCompleteMigrationBucket) Reset() { *m = EventCompleteMigra func (m *EventCompleteMigrationBucket) String() string { return proto.CompactTextString(m) } func (*EventCompleteMigrationBucket) ProtoMessage() {} func (*EventCompleteMigrationBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_946dcba4f763ddc4, []int{26} + return fileDescriptor_946dcba4f763ddc4, []int{28} } func (m *EventCompleteMigrationBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2129,6 +2288,8 @@ func init() { proto.RegisterType((*EventDeleteGroup)(nil), "greenfield.storage.EventDeleteGroup") proto.RegisterType((*EventLeaveGroup)(nil), "greenfield.storage.EventLeaveGroup") proto.RegisterType((*EventUpdateGroupMember)(nil), "greenfield.storage.EventUpdateGroupMember") + proto.RegisterType((*EventRenewGroupMember)(nil), "greenfield.storage.EventRenewGroupMember") + proto.RegisterType((*EventGroupMemberDetail)(nil), "greenfield.storage.EventGroupMemberDetail") proto.RegisterType((*EventUpdateGroupExtra)(nil), "greenfield.storage.EventUpdateGroupExtra") proto.RegisterType((*EventMirrorBucket)(nil), "greenfield.storage.EventMirrorBucket") proto.RegisterType((*EventMirrorBucketResult)(nil), "greenfield.storage.EventMirrorBucketResult") @@ -2145,103 +2306,111 @@ func init() { func init() { proto.RegisterFile("greenfield/storage/events.proto", fileDescriptor_946dcba4f763ddc4) } var fileDescriptor_946dcba4f763ddc4 = []byte{ - // 1525 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xbf, 0x6f, 0xdb, 0x46, - 0x1b, 0x36, 0x25, 0x4a, 0xb6, 0x4f, 0x96, 0x14, 0xf3, 0xf3, 0x97, 0xe8, 0x73, 0xf2, 0xc9, 0x0a, - 0x87, 0xd4, 0x01, 0x1a, 0x1b, 0x48, 0xda, 0x22, 0x53, 0x03, 0xdb, 0x49, 0x0b, 0xa1, 0xcd, 0x8f, - 0x52, 0x49, 0x86, 0x2e, 0xc4, 0x89, 0x3c, 0xcb, 0x6c, 0x48, 0x1e, 0x7b, 0x77, 0x72, 0xa3, 0xfc, - 0x03, 0x9d, 0x0a, 0x74, 0x6c, 0x97, 0x4e, 0x1d, 0x0a, 0x14, 0x05, 0x3a, 0x64, 0xed, 0x9e, 0x6e, - 0x69, 0xba, 0xf4, 0x07, 0x10, 0x14, 0xc9, 0x94, 0x2e, 0xdd, 0x3b, 0x15, 0xbc, 0x3b, 0x51, 0xa4, - 0x28, 0x87, 0xa6, 0x52, 0xc7, 0xce, 0x26, 0xbe, 0x7a, 0xee, 0xf8, 0xbe, 0xcf, 0x3d, 0xef, 0x7b, - 0xef, 0x1d, 0xc1, 0x4a, 0x8f, 0x20, 0xe4, 0x6f, 0x3b, 0xc8, 0xb5, 0xd7, 0x29, 0xc3, 0x04, 0xf6, - 0xd0, 0x3a, 0xda, 0x45, 0x3e, 0xa3, 0x6b, 0x01, 0xc1, 0x0c, 0x6b, 0xda, 0x08, 0xb0, 0x26, 0x01, - 0xcb, 0xff, 0xb3, 0x30, 0xf5, 0x30, 0x35, 0x39, 0x62, 0x5d, 0x3c, 0x08, 0xf8, 0xf2, 0x52, 0x0f, - 0xf7, 0xb0, 0xb0, 0x87, 0xbf, 0xa4, 0x75, 0xd2, 0x5b, 0x2c, 0xec, 0x79, 0xd8, 0x97, 0x80, 0xe6, - 0x04, 0x00, 0x1b, 0x04, 0x48, 0x4e, 0xab, 0xff, 0xac, 0x82, 0xc5, 0x2b, 0xa1, 0x5b, 0x5b, 0x04, - 0x41, 0x86, 0x36, 0xfb, 0xd6, 0x1d, 0xc4, 0xb4, 0x35, 0x50, 0xc2, 0x9f, 0xf8, 0x88, 0x34, 0x94, - 0x96, 0xb2, 0x3a, 0xbf, 0xd9, 0x78, 0x74, 0xff, 0xdc, 0x92, 0xf4, 0x66, 0xc3, 0xb6, 0x09, 0xa2, - 0xb4, 0xc3, 0x88, 0xe3, 0xf7, 0x0c, 0x01, 0xd3, 0x56, 0x40, 0xa5, 0xcb, 0x47, 0x9a, 0x3e, 0xf4, - 0x50, 0xa3, 0x10, 0x8e, 0x32, 0x80, 0x30, 0x5d, 0x83, 0x1e, 0xd2, 0x36, 0x01, 0xd8, 0x75, 0xa8, - 0xd3, 0x75, 0x5c, 0x87, 0x0d, 0x1a, 0xc5, 0x96, 0xb2, 0x5a, 0x3b, 0xaf, 0xaf, 0xa5, 0x19, 0x58, - 0xbb, 0x1d, 0xa1, 0x6e, 0x0e, 0x02, 0x64, 0xc4, 0x46, 0x69, 0x27, 0xc1, 0xbc, 0xc5, 0x9d, 0x34, - 0x21, 0x6b, 0xa8, 0x2d, 0x65, 0xb5, 0x68, 0xcc, 0x09, 0xc3, 0x06, 0xd3, 0x2e, 0x82, 0x79, 0xe9, - 0x81, 0x63, 0x37, 0x4a, 0xdc, 0xeb, 0x93, 0x0f, 0x1e, 0xaf, 0xcc, 0xfc, 0xf6, 0x78, 0x45, 0xbd, - 0xe5, 0xf8, 0xec, 0xd1, 0xfd, 0x73, 0x15, 0x19, 0x41, 0xf8, 0x68, 0xcc, 0x09, 0x74, 0xdb, 0xd6, - 0x2e, 0x81, 0x0a, 0xc5, 0x7d, 0x62, 0x21, 0x33, 0xe4, 0xa5, 0x51, 0xe6, 0xbe, 0x35, 0x27, 0xf9, - 0xd6, 0xe1, 0x30, 0xe1, 0x17, 0x8d, 0x7e, 0x6b, 0xaf, 0x03, 0xcd, 0xda, 0x81, 0xa4, 0x87, 0x6c, - 0x93, 0x20, 0x68, 0x9b, 0x1f, 0xf7, 0x31, 0x83, 0x8d, 0xd9, 0x96, 0xb2, 0xaa, 0x1a, 0xc7, 0xe4, - 0x3f, 0x06, 0x82, 0xf6, 0x07, 0xa1, 0x5d, 0xdb, 0x00, 0xf5, 0x00, 0x0e, 0x3c, 0xe4, 0x33, 0x13, - 0x0a, 0x2a, 0x1b, 0x73, 0x19, 0x24, 0xd7, 0xe4, 0x00, 0x69, 0xd5, 0x74, 0x50, 0x0d, 0x88, 0xe3, - 0x41, 0x32, 0x30, 0x69, 0x10, 0xc6, 0x3b, 0xdf, 0x52, 0x56, 0xab, 0x46, 0x45, 0x1a, 0x3b, 0x41, - 0xdb, 0xd6, 0x36, 0x41, 0xb3, 0xe7, 0xe2, 0x2e, 0x74, 0xcd, 0x5d, 0x87, 0xb0, 0x3e, 0x74, 0xcd, - 0x1e, 0xc1, 0xfd, 0xc0, 0xdc, 0x86, 0x9e, 0xe3, 0x0e, 0xc2, 0x41, 0x80, 0x0f, 0x5a, 0x16, 0xa8, - 0xdb, 0x02, 0xf4, 0x6e, 0x88, 0x79, 0x87, 0x43, 0xda, 0xb6, 0x76, 0x11, 0x94, 0x29, 0x83, 0xac, - 0x4f, 0x1b, 0x15, 0x4e, 0x4a, 0x6b, 0x12, 0x29, 0x42, 0x31, 0x1d, 0x8e, 0x33, 0x24, 0x5e, 0xff, - 0xa2, 0x20, 0x55, 0x75, 0x19, 0xb9, 0x28, 0x52, 0xd5, 0x1b, 0x60, 0x0e, 0x07, 0x88, 0x40, 0x86, - 0xb3, 0x85, 0x15, 0x21, 0x47, 0x5a, 0x2c, 0x4c, 0xa5, 0xc5, 0x62, 0x4a, 0x8b, 0x09, 0xa9, 0xa8, - 0x79, 0xa4, 0x92, 0x4d, 0x6a, 0x29, 0x8b, 0x54, 0xfd, 0xd3, 0x22, 0xf8, 0x2f, 0xa7, 0xe6, 0x56, - 0x60, 0x47, 0x09, 0xd7, 0xf6, 0xb7, 0xf1, 0x94, 0xf4, 0x64, 0xa6, 0x5e, 0x22, 0xdc, 0x62, 0x9e, - 0x70, 0x27, 0x0b, 0x5b, 0xdd, 0x43, 0xd8, 0xaf, 0xa5, 0x85, 0xcd, 0xf3, 0x30, 0x25, 0xdf, 0x64, - 0x2d, 0x28, 0x4f, 0x55, 0x0b, 0xb2, 0x57, 0x62, 0x36, 0x73, 0x25, 0xbe, 0x51, 0xc0, 0x71, 0x21, - 0x52, 0x87, 0x5a, 0xd8, 0x67, 0x8e, 0xdf, 0x1f, 0x2a, 0x35, 0xc1, 0x99, 0x92, 0x87, 0xb3, 0xcc, - 0xe5, 0x38, 0x0e, 0xca, 0x04, 0x41, 0x8a, 0x7d, 0xa9, 0x4c, 0xf9, 0x14, 0x56, 0x37, 0x9b, 0x27, - 0x4b, 0xac, 0xba, 0x09, 0xc3, 0x06, 0xd3, 0x1f, 0x97, 0x12, 0x55, 0xfa, 0x7a, 0xf7, 0x23, 0x64, - 0x31, 0xed, 0x3c, 0x98, 0xe5, 0xf5, 0x6f, 0x1f, 0x7a, 0x19, 0x02, 0xff, 0xfd, 0x6c, 0x5a, 0x01, - 0x15, 0xcc, 0xdd, 0x11, 0x00, 0x55, 0x00, 0x84, 0x29, 0xad, 0xbf, 0x72, 0x1e, 0x2e, 0x2f, 0x82, - 0x79, 0x39, 0xb5, 0x5c, 0xcf, 0xac, 0x91, 0x02, 0xdd, 0xb6, 0xd3, 0x15, 0x72, 0x2e, 0x5d, 0x21, - 0x4f, 0x83, 0x85, 0x00, 0x0e, 0x5c, 0x0c, 0x6d, 0x93, 0x3a, 0xf7, 0x10, 0x2f, 0xa2, 0xaa, 0x51, - 0x91, 0xb6, 0x8e, 0x73, 0x6f, 0x7c, 0xd7, 0x02, 0x53, 0x29, 0xf5, 0x34, 0x58, 0x08, 0xc5, 0x15, - 0xa6, 0x05, 0xdf, 0x5f, 0x2a, 0x9c, 0xa0, 0x8a, 0xb4, 0xf1, 0x0d, 0x24, 0xb1, 0xb1, 0x2d, 0xa4, - 0x36, 0xb6, 0x61, 0x11, 0xae, 0xee, 0x5d, 0x84, 0x85, 0x20, 0x92, 0x45, 0x58, 0x7b, 0x0f, 0xd4, - 0x09, 0xb2, 0xfb, 0xbe, 0x0d, 0x7d, 0x6b, 0x20, 0x5e, 0x5e, 0xdb, 0x3b, 0x04, 0x23, 0x82, 0xf2, - 0x10, 0x6a, 0x24, 0xf1, 0x3c, 0xbe, 0x4b, 0xd6, 0x73, 0xef, 0x92, 0xa7, 0xc0, 0xbc, 0xb5, 0x83, - 0xac, 0x3b, 0xb4, 0xef, 0xd1, 0xc6, 0xb1, 0x56, 0x71, 0x75, 0xc1, 0x18, 0x19, 0xf4, 0xbf, 0x14, - 0x70, 0x42, 0x08, 0x1c, 0xfa, 0x16, 0x72, 0x13, 0x32, 0x3f, 0xa0, 0xba, 0x38, 0x26, 0xdc, 0x62, - 0x4a, 0xb8, 0x29, 0x11, 0xa9, 0x69, 0x11, 0x25, 0x24, 0x5a, 0xce, 0x21, 0x51, 0xfd, 0x59, 0x01, - 0xd4, 0x79, 0xc4, 0x1d, 0x04, 0xdd, 0x43, 0x8e, 0x34, 0x11, 0x45, 0x29, 0x4f, 0xa2, 0x8d, 0xd4, - 0x59, 0xce, 0xa9, 0xce, 0x37, 0xc1, 0x89, 0x89, 0x15, 0x3c, 0x2a, 0xdd, 0x4b, 0xe9, 0xd2, 0xdd, - 0xb6, 0xb5, 0x0b, 0xe0, 0xb8, 0x8b, 0xad, 0x49, 0xa3, 0x44, 0x8a, 0xff, 0x87, 0xff, 0x9b, 0x1c, - 0x34, 0xe2, 0x7a, 0x0b, 0x07, 0x83, 0x17, 0xe2, 0xfa, 0x0c, 0xa8, 0x53, 0x62, 0x99, 0x69, 0xbe, - 0xab, 0x94, 0x58, 0x9b, 0x23, 0xca, 0x25, 0x2e, 0x4d, 0x7b, 0x88, 0xbb, 0x3e, 0x62, 0xfe, 0x0c, - 0xa8, 0xdb, 0x94, 0x25, 0xe6, 0x13, 0x15, 0xb4, 0x6a, 0x53, 0x96, 0x9c, 0x2f, 0xc4, 0xc5, 0xe7, - 0x2b, 0x45, 0xb8, 0xd8, 0x7c, 0x97, 0x40, 0x35, 0xf6, 0xde, 0xfd, 0x69, 0xb2, 0x12, 0xb9, 0xc4, - 0xbb, 0xe1, 0x6a, 0xec, 0x45, 0xfb, 0xab, 0xbb, 0x95, 0xc8, 0x87, 0xb6, 0xad, 0xff, 0xad, 0x24, - 0x5a, 0xbf, 0xa3, 0xa4, 0x6c, 0x35, 0x8f, 0xb2, 0xf7, 0x16, 0x5a, 0x69, 0x6f, 0xa1, 0xfd, 0xa8, - 0xc8, 0xe6, 0xce, 0x40, 0x5c, 0xf2, 0x47, 0x2c, 0xb5, 0xf3, 0x10, 0x30, 0xb1, 0x3d, 0x92, 0xc1, - 0x8c, 0xb9, 0xa5, 0x4c, 0xea, 0x39, 0x47, 0x6f, 0x2d, 0xe4, 0xa1, 0x7d, 0xaa, 0xf6, 0xe8, 0xb3, - 0x42, 0xa2, 0xa7, 0x96, 0x5a, 0x3c, 0xc0, 0x9e, 0xfa, 0x00, 0x75, 0x97, 0xec, 0x39, 0x4a, 0xd3, - 0xf4, 0x1c, 0xfa, 0xd7, 0x05, 0x70, 0x2c, 0xd6, 0x2e, 0x72, 0x75, 0xe6, 0x3e, 0xd3, 0xff, 0x1f, - 0x00, 0x21, 0xf9, 0x18, 0x07, 0xf3, 0xdc, 0xc2, 0x23, 0x7c, 0x0b, 0xcc, 0x45, 0x19, 0xb1, 0x8f, - 0x53, 0xc5, 0x6c, 0x4f, 0x16, 0xf0, 0xb1, 0x46, 0x42, 0xcd, 0xdd, 0x48, 0x9c, 0x07, 0xb3, 0x1e, - 0xf2, 0xba, 0x88, 0x84, 0xe7, 0x8b, 0xe2, 0xf3, 0xbb, 0x5e, 0x09, 0xd4, 0x96, 0x40, 0x09, 0xdd, - 0x65, 0x04, 0x8a, 0x72, 0x68, 0x88, 0x07, 0xfd, 0x4b, 0x45, 0xd2, 0x24, 0x4a, 0xd5, 0x18, 0x4d, - 0x85, 0x69, 0x68, 0x2a, 0x3e, 0x8f, 0x26, 0x75, 0xff, 0x34, 0xe9, 0xbf, 0x2a, 0x72, 0xcb, 0x7a, - 0x1f, 0xc1, 0x5d, 0xe9, 0xda, 0x25, 0x50, 0x13, 0x01, 0x45, 0x07, 0xac, 0xac, 0xa5, 0xac, 0x0a, - 0xfc, 0xf0, 0xe4, 0x75, 0x44, 0x62, 0xfb, 0xbd, 0x20, 0x2b, 0x8b, 0x48, 0x57, 0x1e, 0xdc, 0x55, - 0xee, 0xe8, 0x4b, 0xba, 0x22, 0x38, 0x98, 0xb8, 0xb4, 0xb7, 0x87, 0xeb, 0x43, 0x4d, 0x86, 0xc3, - 0x35, 0xca, 0x14, 0xe8, 0x82, 0xc4, 0xdf, 0xc4, 0x1b, 0xb6, 0xad, 0x5d, 0x06, 0x8b, 0xb1, 0xf1, - 0xa2, 0xba, 0x35, 0xca, 0x19, 0x53, 0xd4, 0xa3, 0x29, 0x84, 0x8a, 0xf5, 0x3f, 0x95, 0x44, 0x31, - 0xe4, 0xec, 0x5e, 0x09, 0xf5, 0xfe, 0x6a, 0x93, 0x1b, 0xa5, 0x70, 0x29, 0x9e, 0xc2, 0x0f, 0x86, - 0xdd, 0xc6, 0x55, 0x87, 0x10, 0x4c, 0x5e, 0xe8, 0xa2, 0x29, 0xdf, 0x4d, 0x4a, 0xae, 0x8b, 0x23, - 0x1d, 0x54, 0x6d, 0x44, 0x99, 0x69, 0xed, 0x40, 0xc7, 0x1f, 0xf5, 0x10, 0x95, 0xd0, 0xb8, 0x15, - 0xda, 0xda, 0xb6, 0xfe, 0xfd, 0xf0, 0x08, 0x14, 0x0f, 0xc5, 0x40, 0xb4, 0xef, 0xb2, 0x70, 0x57, - 0x94, 0x6d, 0xb6, 0xc2, 0x07, 0x0e, 0x9b, 0xe8, 0x43, 0x76, 0xf9, 0x59, 0x92, 0xfd, 0x57, 0xb6, - 0xd7, 0xdb, 0x4f, 0xac, 0x3f, 0x25, 0x97, 0x47, 0xc4, 0xfa, 0xa2, 0xcb, 0x73, 0xc8, 0x31, 0xfd, - 0x30, 0xdc, 0x00, 0x45, 0x4c, 0x47, 0xaa, 0x4f, 0x48, 0xf9, 0xaf, 0xa6, 0xfd, 0xff, 0x76, 0xd8, - 0xa2, 0xc6, 0xfc, 0xcf, 0x58, 0x92, 0x43, 0xf4, 0x76, 0x57, 0x0a, 0xa8, 0xc3, 0xa0, 0x8b, 0x6e, - 0x60, 0xd7, 0xb1, 0x06, 0x5b, 0x2e, 0x82, 0x7e, 0x3f, 0xd0, 0x96, 0xc1, 0x5c, 0xd7, 0xc5, 0xd6, - 0x9d, 0x6b, 0x7d, 0x8f, 0xfb, 0x5b, 0x34, 0xa2, 0xe7, 0xb0, 0x61, 0x92, 0x9d, 0xaf, 0xe3, 0x6f, - 0x63, 0xee, 0x72, 0x65, 0x72, 0xc3, 0x24, 0x36, 0x80, 0xb0, 0xef, 0x35, 0x80, 0x1d, 0xfd, 0xd6, - 0x1f, 0x29, 0x60, 0x49, 0xb2, 0xd4, 0x23, 0x90, 0x39, 0xd8, 0x7f, 0x89, 0x65, 0x32, 0xd7, 0x85, - 0xf3, 0x59, 0xb0, 0x18, 0x1e, 0x3e, 0x27, 0xdd, 0xba, 0xd4, 0x6c, 0xca, 0x6e, 0x8c, 0x2e, 0x5e, - 0xf4, 0xef, 0x14, 0xb0, 0x1c, 0xbb, 0x30, 0x3a, 0xea, 0xa1, 0xe9, 0x5f, 0x15, 0xc0, 0x29, 0x79, - 0x05, 0xe1, 0x05, 0xe1, 0xd2, 0x1c, 0xf9, 0xc5, 0xc8, 0xbe, 0x62, 0x57, 0x33, 0xbf, 0x20, 0x9d, - 0x05, 0x8b, 0x94, 0x58, 0x63, 0x0b, 0x2a, 0x0a, 0x51, 0x8d, 0x12, 0x2b, 0xb6, 0xa0, 0x9b, 0xed, - 0x07, 0x4f, 0x9a, 0xca, 0xc3, 0x27, 0x4d, 0xe5, 0x8f, 0x27, 0x4d, 0xe5, 0xf3, 0xa7, 0xcd, 0x99, - 0x87, 0x4f, 0x9b, 0x33, 0xbf, 0x3c, 0x6d, 0xce, 0x7c, 0xb8, 0xde, 0x73, 0xd8, 0x4e, 0xbf, 0xbb, - 0x66, 0x61, 0x6f, 0xbd, 0xeb, 0x77, 0xcf, 0xf1, 0x1c, 0x5b, 0x8f, 0x7d, 0xd7, 0xbc, 0x9b, 0xfc, - 0xb2, 0xd9, 0x2d, 0xf3, 0x4f, 0x9b, 0x17, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x30, 0xf3, 0x5c, - 0x69, 0x83, 0x1d, 0x00, 0x00, + // 1653 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcb, 0x73, 0xdb, 0x44, + 0x18, 0x8f, 0xfc, 0x8a, 0xb3, 0x8e, 0xed, 0x46, 0x84, 0xd4, 0xa4, 0xc5, 0x71, 0x75, 0x28, 0x29, + 0x43, 0x6d, 0x26, 0x05, 0xa6, 0x27, 0x3a, 0x49, 0x5a, 0x18, 0x0f, 0xf4, 0xa5, 0xb4, 0x3d, 0x70, + 0xd1, 0xac, 0xa5, 0x8d, 0x23, 0x2a, 0x69, 0x85, 0x76, 0x9d, 0xd6, 0xfd, 0x07, 0x38, 0x31, 0xd3, + 0x23, 0x5c, 0x38, 0x71, 0x60, 0x86, 0x61, 0x86, 0x61, 0x7a, 0xe5, 0x5e, 0x6e, 0xa5, 0x5c, 0x78, + 0xcc, 0x14, 0xa6, 0x3d, 0x95, 0x0b, 0x77, 0x4e, 0x8c, 0x76, 0xd7, 0xb2, 0x64, 0x39, 0x55, 0xe4, + 0x90, 0x26, 0xe5, 0xe6, 0x5d, 0xff, 0x56, 0xfa, 0x1e, 0xbf, 0xfd, 0x7d, 0xdf, 0xae, 0xc0, 0x52, + 0xd7, 0x43, 0xc8, 0xd9, 0x34, 0x91, 0x65, 0xb4, 0x08, 0xc5, 0x1e, 0xec, 0xa2, 0x16, 0xda, 0x46, + 0x0e, 0x25, 0x4d, 0xd7, 0xc3, 0x14, 0xcb, 0xf2, 0x10, 0xd0, 0x14, 0x80, 0xc5, 0x57, 0x74, 0x4c, + 0x6c, 0x4c, 0x34, 0x86, 0x68, 0xf1, 0x01, 0x87, 0x2f, 0xce, 0x77, 0x71, 0x17, 0xf3, 0x79, 0xff, + 0x97, 0x98, 0x5d, 0xea, 0x62, 0xdc, 0xb5, 0x50, 0x8b, 0x8d, 0x3a, 0xbd, 0xcd, 0x16, 0x35, 0x6d, + 0x44, 0x28, 0xb4, 0xdd, 0x00, 0x10, 0x37, 0x43, 0xc7, 0xb6, 0x8d, 0x1d, 0x01, 0xa8, 0x8f, 0x01, + 0xd0, 0xbe, 0x8b, 0xc4, 0x7b, 0x95, 0x9f, 0x73, 0x60, 0xee, 0x82, 0x6f, 0xf7, 0xba, 0x87, 0x20, + 0x45, 0x6b, 0x3d, 0xfd, 0x26, 0xa2, 0x72, 0x13, 0xe4, 0xf1, 0x2d, 0x07, 0x79, 0x35, 0xa9, 0x21, + 0x2d, 0xcf, 0xac, 0xd5, 0x1e, 0xde, 0x3b, 0x3d, 0x2f, 0xcc, 0x5d, 0x35, 0x0c, 0x0f, 0x11, 0xb2, + 0x41, 0x3d, 0xd3, 0xe9, 0xaa, 0x1c, 0x26, 0x2f, 0x81, 0x52, 0x87, 0xad, 0xd4, 0x1c, 0x68, 0xa3, + 0x5a, 0xc6, 0x5f, 0xa5, 0x02, 0x3e, 0x75, 0x09, 0xda, 0x48, 0x5e, 0x03, 0x60, 0xdb, 0x24, 0x66, + 0xc7, 0xb4, 0x4c, 0xda, 0xaf, 0x65, 0x1b, 0xd2, 0x72, 0x65, 0x45, 0x69, 0xc6, 0x43, 0xd4, 0xbc, + 0x11, 0xa0, 0xae, 0xf5, 0x5d, 0xa4, 0x86, 0x56, 0xc9, 0xc7, 0xc0, 0x8c, 0xce, 0x8c, 0xd4, 0x20, + 0xad, 0xe5, 0x1a, 0xd2, 0x72, 0x56, 0x2d, 0xf2, 0x89, 0x55, 0x2a, 0x9f, 0x05, 0x33, 0xc2, 0x02, + 0xd3, 0xa8, 0xe5, 0x99, 0xd5, 0xc7, 0xee, 0x3f, 0x5a, 0x9a, 0xfa, 0xed, 0xd1, 0x52, 0xee, 0xba, + 0xe9, 0xd0, 0x87, 0xf7, 0x4e, 0x97, 0x84, 0x07, 0xfe, 0x50, 0x2d, 0x72, 0x74, 0xdb, 0x90, 0xcf, + 0x81, 0x12, 0xc1, 0x3d, 0x4f, 0x47, 0x9a, 0x1f, 0x97, 0x5a, 0x81, 0xd9, 0x56, 0x1f, 0x67, 0xdb, + 0x06, 0x83, 0x71, 0xbb, 0x48, 0xf0, 0x5b, 0x7e, 0x03, 0xc8, 0xfa, 0x16, 0xf4, 0xba, 0xc8, 0xd0, + 0x3c, 0x04, 0x0d, 0xed, 0x93, 0x1e, 0xa6, 0xb0, 0x36, 0xdd, 0x90, 0x96, 0x73, 0xea, 0x11, 0xf1, + 0x8f, 0x8a, 0xa0, 0x71, 0xd5, 0x9f, 0x97, 0x57, 0x41, 0xd5, 0x85, 0x7d, 0x1b, 0x39, 0x54, 0x83, + 0x3c, 0x94, 0xb5, 0x62, 0x42, 0x90, 0x2b, 0x62, 0x81, 0x98, 0x95, 0x15, 0x50, 0x76, 0x3d, 0xd3, + 0x86, 0x5e, 0x5f, 0x23, 0xae, 0xef, 0xef, 0x4c, 0x43, 0x5a, 0x2e, 0xab, 0x25, 0x31, 0xb9, 0xe1, + 0xb6, 0x0d, 0x79, 0x0d, 0xd4, 0xbb, 0x16, 0xee, 0x40, 0x4b, 0xdb, 0x36, 0x3d, 0xda, 0x83, 0x96, + 0xd6, 0xf5, 0x70, 0xcf, 0xd5, 0x36, 0xa1, 0x6d, 0x5a, 0x7d, 0x7f, 0x11, 0x60, 0x8b, 0x16, 0x39, + 0xea, 0x06, 0x07, 0xbd, 0xef, 0x63, 0xde, 0x63, 0x90, 0xb6, 0x21, 0x9f, 0x05, 0x05, 0x42, 0x21, + 0xed, 0x91, 0x5a, 0x89, 0x05, 0xa5, 0x31, 0x2e, 0x28, 0x9c, 0x31, 0x1b, 0x0c, 0xa7, 0x0a, 0xbc, + 0xf2, 0x79, 0x46, 0xb0, 0xea, 0x3c, 0xb2, 0x50, 0xc0, 0xaa, 0xb7, 0x40, 0x11, 0xbb, 0xc8, 0x83, + 0x14, 0x27, 0x13, 0x2b, 0x40, 0x0e, 0xb9, 0x98, 0x99, 0x88, 0x8b, 0xd9, 0x18, 0x17, 0x23, 0x54, + 0xc9, 0xa5, 0xa1, 0x4a, 0x72, 0x50, 0xf3, 0x49, 0x41, 0x55, 0x3e, 0xcd, 0x82, 0x97, 0x59, 0x68, + 0xae, 0xbb, 0x46, 0xb0, 0xe1, 0xda, 0xce, 0x26, 0x9e, 0x30, 0x3c, 0x89, 0x5b, 0x2f, 0xe2, 0x6e, + 0x36, 0x8d, 0xbb, 0xe3, 0x89, 0x9d, 0xdb, 0x81, 0xd8, 0xaf, 0xc5, 0x89, 0xcd, 0xf6, 0x61, 0x8c, + 0xbe, 0x51, 0x2d, 0x28, 0x4c, 0xa4, 0x05, 0xc9, 0x99, 0x98, 0x4e, 0xcc, 0xc4, 0xd7, 0x12, 0x58, + 0xe0, 0x24, 0x35, 0x89, 0x8e, 0x1d, 0x6a, 0x3a, 0xbd, 0x01, 0x53, 0x23, 0x31, 0x93, 0xd2, 0xc4, + 0x2c, 0x31, 0x1d, 0x0b, 0xa0, 0xe0, 0x21, 0x48, 0xb0, 0x23, 0x98, 0x29, 0x46, 0xbe, 0xba, 0x19, + 0x6c, 0xb3, 0x84, 0xd4, 0x8d, 0x4f, 0xac, 0x52, 0xe5, 0x51, 0x3e, 0xa2, 0xd2, 0x97, 0x3b, 0x1f, + 0x23, 0x9d, 0xca, 0x2b, 0x60, 0x9a, 0xe9, 0xdf, 0x2e, 0xf8, 0x32, 0x00, 0xfe, 0xf7, 0xbb, 0x69, + 0x09, 0x94, 0x30, 0x33, 0x87, 0x03, 0x72, 0x1c, 0xc0, 0xa7, 0xe2, 0xfc, 0x2b, 0xa4, 0x89, 0xe5, + 0x59, 0x30, 0x23, 0x1e, 0x2d, 0xf2, 0x99, 0xb4, 0x92, 0xa3, 0xdb, 0x46, 0x5c, 0x21, 0x8b, 0x71, + 0x85, 0x3c, 0x01, 0x66, 0x5d, 0xd8, 0xb7, 0x30, 0x34, 0x34, 0x62, 0xde, 0x41, 0x4c, 0x44, 0x73, + 0x6a, 0x49, 0xcc, 0x6d, 0x98, 0x77, 0x46, 0xab, 0x16, 0x98, 0x88, 0xa9, 0x27, 0xc0, 0xac, 0x4f, + 0x2e, 0x7f, 0x5b, 0xb0, 0xfa, 0x52, 0x62, 0x01, 0x2a, 0x89, 0x39, 0x56, 0x40, 0x22, 0x85, 0x6d, + 0x36, 0x56, 0xd8, 0x06, 0x22, 0x5c, 0xde, 0x59, 0x84, 0x39, 0x21, 0xa2, 0x22, 0x2c, 0x7f, 0x00, + 0xaa, 0x1e, 0x32, 0x7a, 0x8e, 0x01, 0x1d, 0xbd, 0xcf, 0x5f, 0x5e, 0xd9, 0xd9, 0x05, 0x35, 0x80, + 0x32, 0x17, 0x2a, 0x5e, 0x64, 0x3c, 0x5a, 0x25, 0xab, 0xa9, 0xab, 0xe4, 0x71, 0x30, 0xa3, 0x6f, + 0x21, 0xfd, 0x26, 0xe9, 0xd9, 0xa4, 0x76, 0xa4, 0x91, 0x5d, 0x9e, 0x55, 0x87, 0x13, 0xca, 0xdf, + 0x12, 0x38, 0xca, 0x09, 0x0e, 0x1d, 0x1d, 0x59, 0x11, 0x9a, 0xef, 0x93, 0x2e, 0x8e, 0x10, 0x37, + 0x1b, 0x23, 0x6e, 0x8c, 0x44, 0xb9, 0x38, 0x89, 0x22, 0x14, 0x2d, 0xa4, 0xa0, 0xa8, 0xf2, 0x34, + 0x03, 0xaa, 0xcc, 0xe3, 0x0d, 0x04, 0xad, 0x03, 0xf6, 0x34, 0xe2, 0x45, 0x3e, 0xcd, 0x46, 0x1b, + 0xb2, 0xb3, 0x90, 0x92, 0x9d, 0x6f, 0x83, 0xa3, 0x63, 0x15, 0x3c, 0x90, 0xee, 0xf9, 0xb8, 0x74, + 0xb7, 0x0d, 0xf9, 0x0c, 0x58, 0xb0, 0xb0, 0x3e, 0x6e, 0x15, 0xdf, 0xe2, 0x2f, 0xb1, 0x7f, 0xa3, + 0x8b, 0x86, 0xb1, 0x5e, 0xc7, 0x6e, 0x7f, 0x4f, 0xb1, 0x3e, 0x09, 0xaa, 0xc4, 0xd3, 0xb5, 0x78, + 0xbc, 0xcb, 0xc4, 0xd3, 0xd7, 0x86, 0x21, 0x17, 0xb8, 0x78, 0xd8, 0x7d, 0xdc, 0xe5, 0x61, 0xe4, + 0x4f, 0x82, 0xaa, 0x41, 0x68, 0xe4, 0x79, 0x5c, 0x41, 0xcb, 0x06, 0xa1, 0xd1, 0xe7, 0xf9, 0xb8, + 0xf0, 0xf3, 0xf2, 0x01, 0x2e, 0xf4, 0xbc, 0x73, 0xa0, 0x1c, 0x7a, 0xef, 0xee, 0x38, 0x59, 0x0a, + 0x4c, 0x62, 0xdd, 0x70, 0x39, 0xf4, 0xa2, 0xdd, 0xe9, 0x6e, 0x29, 0xb0, 0xa1, 0x6d, 0x28, 0xff, + 0x48, 0x91, 0xd6, 0xef, 0x30, 0x31, 0x3b, 0x97, 0x86, 0xd9, 0x3b, 0x13, 0x2d, 0xbf, 0x33, 0xd1, + 0x7e, 0x94, 0x44, 0x73, 0xa7, 0x22, 0x46, 0xf9, 0x43, 0xb6, 0xb5, 0xd3, 0x04, 0x60, 0x6c, 0x7b, + 0x24, 0x9c, 0x19, 0x31, 0x4b, 0x1a, 0xd7, 0x73, 0x0e, 0xdf, 0x9a, 0x49, 0x13, 0xf6, 0x89, 0xda, + 0xa3, 0xcf, 0x32, 0x91, 0x9e, 0x5a, 0x70, 0x71, 0x1f, 0x7b, 0xea, 0x7d, 0xe4, 0x5d, 0xb4, 0xe7, + 0xc8, 0x4f, 0xd2, 0x73, 0x28, 0x5f, 0x65, 0xc0, 0x91, 0x50, 0xbb, 0xc8, 0xd8, 0x99, 0xfa, 0x4c, + 0xff, 0x2a, 0x00, 0x9c, 0xf2, 0xa1, 0x18, 0xcc, 0xb0, 0x19, 0xe6, 0xe1, 0x3b, 0xa0, 0x18, 0xec, + 0x88, 0x5d, 0x9c, 0x2a, 0xa6, 0xbb, 0x42, 0xc0, 0x47, 0x1a, 0x89, 0x5c, 0xea, 0x46, 0x62, 0x05, + 0x4c, 0xdb, 0xc8, 0xee, 0x20, 0xcf, 0x3f, 0x5f, 0x64, 0x9f, 0xdd, 0xf5, 0x0a, 0xa0, 0x3c, 0x0f, + 0xf2, 0xe8, 0x36, 0xf5, 0x20, 0x97, 0x43, 0x95, 0x0f, 0x94, 0x2f, 0x24, 0x11, 0x26, 0x2e, 0x55, + 0x23, 0x61, 0xca, 0x4c, 0x12, 0xa6, 0xec, 0xb3, 0xc2, 0x94, 0xdb, 0x7d, 0x98, 0x94, 0x5f, 0x25, + 0x51, 0xb2, 0x3e, 0x44, 0x70, 0x5b, 0x98, 0x76, 0x0e, 0x54, 0xb8, 0x43, 0xc1, 0x01, 0x2b, 0x29, + 0x95, 0x65, 0x8e, 0x1f, 0x9c, 0xbc, 0x0e, 0x89, 0x6f, 0xbf, 0x67, 0x84, 0xb2, 0xf0, 0xed, 0xca, + 0x9c, 0xbb, 0xc8, 0x0c, 0x7d, 0x4e, 0x57, 0x04, 0xfb, 0xe3, 0x97, 0xfc, 0xee, 0x20, 0x3f, 0x44, + 0xa3, 0xd8, 0xcf, 0x51, 0x22, 0x41, 0x67, 0x05, 0xfe, 0x1a, 0x5e, 0x35, 0x0c, 0xf9, 0x3c, 0x98, + 0x0b, 0xad, 0xe7, 0xea, 0x56, 0x2b, 0x24, 0x3c, 0xa2, 0x1a, 0x3c, 0x82, 0xb3, 0x58, 0xf9, 0x3e, + 0x1b, 0xd4, 0x20, 0x07, 0xdd, 0xfa, 0xdf, 0x04, 0x77, 0x44, 0x37, 0xf2, 0x7b, 0xd1, 0x8d, 0x42, + 0x6a, 0xdd, 0x98, 0x0e, 0xe9, 0x86, 0x7c, 0x75, 0x98, 0x67, 0x03, 0x51, 0x68, 0x5a, 0xb5, 0x62, + 0x23, 0xbb, 0x5c, 0x5a, 0x79, 0x7d, 0x9c, 0x35, 0x2c, 0x15, 0xa1, 0x2c, 0x9c, 0x67, 0x2b, 0x06, + 0x3b, 0x93, 0xf0, 0xa1, 0x2f, 0x45, 0x0b, 0xe3, 0x91, 0xf2, 0x9b, 0xa0, 0xc0, 0xb1, 0x89, 0x39, + 0x13, 0x38, 0xf9, 0x22, 0xa8, 0xa2, 0xdb, 0xae, 0xe9, 0x41, 0x6a, 0x62, 0x47, 0xa3, 0xa6, 0x90, + 0xef, 0xd2, 0xca, 0x62, 0x93, 0xdf, 0x27, 0x37, 0x07, 0xf7, 0xc9, 0xcd, 0x6b, 0x83, 0xfb, 0xe4, + 0xb5, 0xa2, 0x9f, 0x85, 0xbb, 0x7f, 0x2c, 0x49, 0x6a, 0x65, 0xb8, 0xd8, 0xff, 0x5b, 0xf9, 0x4b, + 0x8a, 0x54, 0x57, 0x66, 0xe1, 0x05, 0x16, 0x88, 0x17, 0x9a, 0x50, 0x41, 0x6e, 0xf3, 0xe1, 0x9a, + 0x70, 0x7f, 0xd0, 0xbe, 0x5e, 0x34, 0x3d, 0x0f, 0x7b, 0x7b, 0xba, 0xb9, 0x4c, 0x77, 0x35, 0x97, + 0xea, 0x26, 0x52, 0x01, 0x65, 0x03, 0x11, 0xaa, 0xe9, 0x5b, 0xd0, 0x74, 0x86, 0x4d, 0x69, 0xc9, + 0x9f, 0x5c, 0xf7, 0xe7, 0xda, 0x86, 0xf2, 0xdd, 0xe0, 0x4c, 0x1d, 0x76, 0x45, 0x45, 0xa4, 0x67, + 0x51, 0xbf, 0xcd, 0x12, 0xe7, 0x36, 0x89, 0x2d, 0x1c, 0x9c, 0xca, 0x0e, 0xd8, 0xe4, 0xa7, 0xd1, + 0xe8, 0xbf, 0xb0, 0x87, 0x87, 0xdd, 0xf8, 0xfa, 0x53, 0x34, 0x3d, 0xdc, 0xd7, 0xbd, 0xa6, 0xe7, + 0x80, 0x7d, 0xfa, 0x61, 0xd0, 0x51, 0x71, 0x9f, 0x0e, 0x55, 0xe3, 0x19, 0xb3, 0x3f, 0x17, 0xb7, + 0xff, 0x9b, 0x81, 0x0c, 0x87, 0xec, 0x4f, 0x48, 0xc9, 0x01, 0x5a, 0xbb, 0x2d, 0x08, 0xb4, 0x41, + 0xa1, 0x85, 0xae, 0x60, 0xcb, 0xd4, 0xfb, 0xeb, 0x16, 0x82, 0x4e, 0xcf, 0x95, 0x17, 0x41, 0xb1, + 0x63, 0x61, 0xfd, 0xe6, 0xa5, 0x9e, 0xcd, 0xec, 0xcd, 0xaa, 0xc1, 0xd8, 0xaf, 0xa4, 0xe2, 0x28, + 0x65, 0x3a, 0x9b, 0x58, 0x94, 0x86, 0xb1, 0x95, 0x94, 0x77, 0x14, 0xfe, 0x41, 0x4a, 0x05, 0x46, + 0xf0, 0x5b, 0x79, 0x28, 0x81, 0x79, 0x11, 0xa5, 0x2e, 0xaf, 0x13, 0xcf, 0x51, 0x26, 0x53, 0x7d, + 0xc1, 0x38, 0x05, 0xe6, 0x0c, 0x42, 0xb5, 0x71, 0xd7, 0x78, 0x15, 0x83, 0xd0, 0x2b, 0xc3, 0x9b, + 0x3c, 0xe5, 0x5b, 0x09, 0x2c, 0x86, 0x6e, 0x20, 0x0f, 0xbb, 0x6b, 0xca, 0x97, 0x19, 0x70, 0x5c, + 0xdc, 0x69, 0xd9, 0xae, 0x9f, 0x9a, 0x43, 0x9f, 0x8c, 0xe4, 0x6f, 0x36, 0xb9, 0xc4, 0x4f, 0x92, + 0xa7, 0xc0, 0x1c, 0xf1, 0xf4, 0x91, 0x84, 0x72, 0x21, 0xaa, 0x10, 0x4f, 0x0f, 0x25, 0x74, 0xad, + 0x7d, 0xff, 0x71, 0x5d, 0x7a, 0xf0, 0xb8, 0x2e, 0xfd, 0xf9, 0xb8, 0x2e, 0xdd, 0x7d, 0x52, 0x9f, + 0x7a, 0xf0, 0xa4, 0x3e, 0xf5, 0xcb, 0x93, 0xfa, 0xd4, 0x47, 0xad, 0xae, 0x49, 0xb7, 0x7a, 0x9d, + 0xa6, 0x8e, 0xed, 0x56, 0xc7, 0xe9, 0x9c, 0x66, 0x7b, 0xac, 0x15, 0xfa, 0x50, 0x7e, 0x3b, 0xfa, + 0xa9, 0xbc, 0x53, 0x60, 0xfd, 0xd2, 0x99, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x75, 0xbc, 0x64, + 0xc3, 0xf5, 0x1f, 0x00, 0x00, } func (m *EventCreateBucket) Marshal() (dAtA []byte, err error) { @@ -3308,6 +3477,133 @@ func (m *EventUpdateGroupMember) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *EventRenewGroupMember) 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 *EventRenewGroupMember) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventRenewGroupMember) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.MembersDetail) > 0 { + for iNdEx := len(m.MembersDetail) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MembersDetail[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if len(m.Extra) > 0 { + i -= len(m.Extra) + copy(dAtA[i:], m.Extra) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Extra))) + i-- + dAtA[i] = 0x3a + } + if len(m.Members) > 0 { + for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Members[iNdEx]) + copy(dAtA[i:], m.Members[iNdEx]) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Members[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } + if m.SourceType != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.SourceType)) + i-- + dAtA[i] = 0x28 + } + { + size := m.GroupId.Size() + i -= size + if _, err := m.GroupId.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.GroupName) > 0 { + i -= len(m.GroupName) + copy(dAtA[i:], m.GroupName) + i = encodeVarintEvents(dAtA, i, uint64(len(m.GroupName))) + i-- + dAtA[i] = 0x1a + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x12 + } + if len(m.Operator) > 0 { + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *EventGroupMemberDetail) 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 *EventGroupMemberDetail) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventGroupMemberDetail) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ExpirationTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpirationTime):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintEvents(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x12 + if len(m.Member) > 0 { + i -= len(m.Member) + copy(dAtA[i:], m.Member) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Member))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *EventUpdateGroupExtra) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4377,7 +4673,7 @@ func (m *EventUpdateGroupMember) Size() (n int) { return n } -func (m *EventUpdateGroupExtra) Size() (n int) { +func (m *EventRenewGroupMember) Size() (n int) { if m == nil { return 0 } @@ -4397,45 +4693,102 @@ func (m *EventUpdateGroupExtra) Size() (n int) { } l = m.GroupId.Size() n += 1 + l + sovEvents(uint64(l)) + if m.SourceType != 0 { + n += 1 + sovEvents(uint64(m.SourceType)) + } + if len(m.Members) > 0 { + for _, s := range m.Members { + l = len(s) + n += 1 + l + sovEvents(uint64(l)) + } + } l = len(m.Extra) if l > 0 { n += 1 + l + sovEvents(uint64(l)) } + if len(m.MembersDetail) > 0 { + for _, e := range m.MembersDetail { + l = e.Size() + n += 1 + l + sovEvents(uint64(l)) + } + } return n } -func (m *EventMirrorBucket) Size() (n int) { +func (m *EventGroupMemberDetail) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Operator) - if l > 0 { - n += 1 + l + sovEvents(uint64(l)) - } - l = len(m.BucketName) + l = len(m.Member) if l > 0 { n += 1 + l + sovEvents(uint64(l)) } - l = m.BucketId.Size() + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpirationTime) n += 1 + l + sovEvents(uint64(l)) - if m.DestChainId != 0 { - n += 1 + sovEvents(uint64(m.DestChainId)) - } return n } -func (m *EventMirrorBucketResult) Size() (n int) { +func (m *EventUpdateGroupExtra) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Status != 0 { - n += 1 + sovEvents(uint64(m.Status)) - } - l = len(m.BucketName) + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.GroupName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.GroupId.Size() + n += 1 + l + sovEvents(uint64(l)) + l = len(m.Extra) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + return n +} + +func (m *EventMirrorBucket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.BucketId.Size() + n += 1 + l + sovEvents(uint64(l)) + if m.DestChainId != 0 { + n += 1 + sovEvents(uint64(m.DestChainId)) + } + return n +} + +func (m *EventMirrorBucketResult) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Status != 0 { + n += 1 + sovEvents(uint64(m.Status)) + } + l = len(m.BucketName) if l > 0 { n += 1 + l + sovEvents(uint64(l)) } @@ -8250,6 +8603,418 @@ func (m *EventUpdateGroupMember) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventRenewGroupMember) 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 ErrIntOverflowEvents + } + 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: EventRenewGroupMember: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventRenewGroupMember: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GroupId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceType", wireType) + } + m.SourceType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SourceType |= SourceType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Members = append(m.Members, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Extra", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Extra = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MembersDetail", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MembersDetail = append(m.MembersDetail, &EventGroupMemberDetail{}) + if err := m.MembersDetail[len(m.MembersDetail)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EventGroupMemberDetail) 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 ErrIntOverflowEvents + } + 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: EventGroupMemberDetail: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventGroupMemberDetail: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Member", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Member = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ExpirationTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *EventUpdateGroupExtra) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/storage/types/expected_keepers.go b/x/storage/types/expected_keepers.go index 1ff74670e..9a59fcf75 100644 --- a/x/storage/types/expected_keepers.go +++ b/x/storage/types/expected_keepers.go @@ -2,6 +2,7 @@ package types import ( "math/big" + time "time" "cosmossdk.io/math" sdkmath "cosmossdk.io/math" @@ -54,14 +55,19 @@ type PermissionKeeper interface { resourceID math.Uint) (math.Uint, error) VerifyPolicy(ctx sdk.Context, resourceID math.Uint, resourceType resource.ResourceType, operator sdk.AccAddress, action permtypes.ActionType, opts *permtypes.VerifyOptions) permtypes.Effect - AddGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) error + AddGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) (math.Uint, error) + AddGroupMemberWithExpiration(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress, expiration time.Time) error + UpdateGroupMemberExpiration(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress, memberID math.Uint, expiration time.Time) RemoveGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) error + RemoveGroupMemberExtra(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) error GetPolicyByID(ctx sdk.Context, policyID math.Uint) (*permtypes.Policy, bool) GetPolicyForAccount(ctx sdk.Context, resourceID math.Uint, resourceType resource.ResourceType, addr sdk.AccAddress) (policy *permtypes.Policy, isFound bool) GetPolicyForGroup(ctx sdk.Context, resourceID math.Uint, resourceType resource.ResourceType, groupID math.Uint) (policy *permtypes.Policy, isFound bool) GetGroupMember(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) (*permtypes.GroupMember, bool) GetGroupMemberByID(ctx sdk.Context, groupMemberID math.Uint) (*permtypes.GroupMember, bool) + GetGroupMemberExtra(ctx sdk.Context, groupID math.Uint, member sdk.AccAddress) (*permtypes.GroupMemberExtra, bool) + GetGroupMemberExtraByID(ctx sdk.Context, groupMemberID math.Uint) (*permtypes.GroupMemberExtra, bool) ForceDeleteAccountPolicyForResource(ctx sdk.Context, maxDelete, deletedCount uint64, resourceType resource.ResourceType, resourceID math.Uint) (uint64, bool) ForceDeleteGroupPolicyForResource(ctx sdk.Context, maxDelete, deletedCount uint64, resourceType resource.ResourceType, resourceID math.Uint) (uint64, bool) ForceDeleteGroupMembers(ctx sdk.Context, maxDelete, deletedTotal uint64, groupId math.Uint) (uint64, bool) @@ -105,6 +111,7 @@ type StorageKeeper interface { groupName string, opts CreateGroupOptions) (sdkmath.Uint, error) SetGroupInfo(ctx sdk.Context, groupInfo *GroupInfo) UpdateGroupMember(ctx sdk.Context, operator sdk.AccAddress, groupInfo *GroupInfo, opts UpdateGroupMemberOptions) error + RenewGroupMember(ctx sdk.Context, operator sdk.AccAddress, groupInfo *GroupInfo, opts RenewGroupMemberOptions) error GetObjectInfoById(ctx sdk.Context, objectId sdkmath.Uint) (*ObjectInfo, bool) SetObjectInfo(ctx sdk.Context, objectInfo *ObjectInfo) DeleteObject( diff --git a/x/storage/types/expected_keepers_mocks.go b/x/storage/types/expected_keepers_mocks.go index e5a20df47..f3575daab 100644 --- a/x/storage/types/expected_keepers_mocks.go +++ b/x/storage/types/expected_keepers_mocks.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: expected_keepers.go +// Source: x/storage/types/expected_keepers.go // Package types is a generated GoMock package. package types @@ -7,18 +7,18 @@ package types import ( big "math/big" reflect "reflect" + time "time" math "cosmossdk.io/math" - log "github.com/cometbft/cometbft/libs/log" - types3 "github.com/cosmos/cosmos-sdk/types" - types4 "github.com/cosmos/cosmos-sdk/x/auth/types" - gomock "github.com/golang/mock/gomock" - resource "github.com/bnb-chain/greenfield/types/resource" types "github.com/bnb-chain/greenfield/x/payment/types" types0 "github.com/bnb-chain/greenfield/x/permission/types" types1 "github.com/bnb-chain/greenfield/x/sp/types" types2 "github.com/bnb-chain/greenfield/x/virtualgroup/types" + log "github.com/cometbft/cometbft/libs/log" + types3 "github.com/cosmos/cosmos-sdk/types" + types4 "github.com/cosmos/cosmos-sdk/x/auth/types" + gomock "github.com/golang/mock/gomock" ) // MockAccountKeeper is a mock of AccountKeeper interface. @@ -368,11 +368,12 @@ func (m *MockPermissionKeeper) EXPECT() *MockPermissionKeeperMockRecorder { } // AddGroupMember mocks base method. -func (m *MockPermissionKeeper) AddGroupMember(ctx types3.Context, groupID math.Uint, member types3.AccAddress) error { +func (m *MockPermissionKeeper) AddGroupMember(ctx types3.Context, groupID math.Uint, member types3.AccAddress) (math.Uint, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AddGroupMember", ctx, groupID, member) - ret0, _ := ret[0].(error) - return ret0 + ret0, _ := ret[0].(math.Uint) + ret1, _ := ret[1].(error) + return ret0, ret1 } // AddGroupMember indicates an expected call of AddGroupMember. @@ -381,6 +382,20 @@ func (mr *MockPermissionKeeperMockRecorder) AddGroupMember(ctx, groupID, member return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddGroupMember", reflect.TypeOf((*MockPermissionKeeper)(nil).AddGroupMember), ctx, groupID, member) } +// AddGroupMemberWithExpiration mocks base method. +func (m *MockPermissionKeeper) AddGroupMemberWithExpiration(ctx types3.Context, groupID math.Uint, member types3.AccAddress, expiration time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddGroupMemberWithExpiration", ctx, groupID, member, expiration) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddGroupMemberWithExpiration indicates an expected call of AddGroupMemberWithExpiration. +func (mr *MockPermissionKeeperMockRecorder) AddGroupMemberWithExpiration(ctx, groupID, member, expiration interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddGroupMemberWithExpiration", reflect.TypeOf((*MockPermissionKeeper)(nil).AddGroupMemberWithExpiration), ctx, groupID, member, expiration) +} + // DeletePolicy mocks base method. func (m *MockPermissionKeeper) DeletePolicy(ctx types3.Context, principal *types0.Principal, resourceType resource.ResourceType, resourceID math.Uint) (math.Uint, error) { m.ctrl.T.Helper() @@ -513,6 +528,36 @@ func (mr *MockPermissionKeeperMockRecorder) GetGroupMemberByID(ctx, groupMemberI return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGroupMemberByID", reflect.TypeOf((*MockPermissionKeeper)(nil).GetGroupMemberByID), ctx, groupMemberID) } +// GetGroupMemberExtra mocks base method. +func (m *MockPermissionKeeper) GetGroupMemberExtra(ctx types3.Context, groupID math.Uint, member types3.AccAddress) (*types0.GroupMemberExtra, bool) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetGroupMemberExtra", ctx, groupID, member) + ret0, _ := ret[0].(*types0.GroupMemberExtra) + ret1, _ := ret[1].(bool) + return ret0, ret1 +} + +// GetGroupMemberExtra indicates an expected call of GetGroupMemberExtra. +func (mr *MockPermissionKeeperMockRecorder) GetGroupMemberExtra(ctx, groupID, member interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGroupMemberExtra", reflect.TypeOf((*MockPermissionKeeper)(nil).GetGroupMemberExtra), ctx, groupID, member) +} + +// GetGroupMemberExtraByID mocks base method. +func (m *MockPermissionKeeper) GetGroupMemberExtraByID(ctx types3.Context, groupMemberID math.Uint) (*types0.GroupMemberExtra, bool) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetGroupMemberExtraByID", ctx, groupMemberID) + ret0, _ := ret[0].(*types0.GroupMemberExtra) + ret1, _ := ret[1].(bool) + return ret0, ret1 +} + +// GetGroupMemberExtraByID indicates an expected call of GetGroupMemberExtraByID. +func (mr *MockPermissionKeeperMockRecorder) GetGroupMemberExtraByID(ctx, groupMemberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGroupMemberExtraByID", reflect.TypeOf((*MockPermissionKeeper)(nil).GetGroupMemberExtraByID), ctx, groupMemberID) +} + // GetPolicyByID mocks base method. func (m *MockPermissionKeeper) GetPolicyByID(ctx types3.Context, policyID math.Uint) (*types0.Policy, bool) { m.ctrl.T.Helper() @@ -587,6 +632,32 @@ func (mr *MockPermissionKeeperMockRecorder) RemoveGroupMember(ctx, groupID, memb return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveGroupMember", reflect.TypeOf((*MockPermissionKeeper)(nil).RemoveGroupMember), ctx, groupID, member) } +// RemoveGroupMemberExtra mocks base method. +func (m *MockPermissionKeeper) RemoveGroupMemberExtra(ctx types3.Context, groupID math.Uint, member types3.AccAddress) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveGroupMemberExtra", ctx, groupID, member) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveGroupMemberExtra indicates an expected call of RemoveGroupMemberExtra. +func (mr *MockPermissionKeeperMockRecorder) RemoveGroupMemberExtra(ctx, groupID, member interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveGroupMemberExtra", reflect.TypeOf((*MockPermissionKeeper)(nil).RemoveGroupMemberExtra), ctx, groupID, member) +} + +// UpdateGroupMemberExpiration mocks base method. +func (m *MockPermissionKeeper) UpdateGroupMemberExpiration(ctx types3.Context, groupID math.Uint, member types3.AccAddress, memberID math.Uint, expiration time.Time) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UpdateGroupMemberExpiration", ctx, groupID, member, memberID, expiration) +} + +// UpdateGroupMemberExpiration indicates an expected call of UpdateGroupMemberExpiration. +func (mr *MockPermissionKeeperMockRecorder) UpdateGroupMemberExpiration(ctx, groupID, member, memberID, expiration interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateGroupMemberExpiration", reflect.TypeOf((*MockPermissionKeeper)(nil).UpdateGroupMemberExpiration), ctx, groupID, member, memberID, expiration) +} + // VerifyPolicy mocks base method. func (m *MockPermissionKeeper) VerifyPolicy(ctx types3.Context, resourceID math.Uint, resourceType resource.ResourceType, operator types3.AccAddress, action types0.ActionType, opts *types0.VerifyOptions) types0.Effect { m.ctrl.T.Helper() @@ -946,6 +1017,20 @@ func (mr *MockStorageKeeperMockRecorder) Logger(ctx interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Logger", reflect.TypeOf((*MockStorageKeeper)(nil).Logger), ctx) } +// RenewGroupMember mocks base method. +func (m *MockStorageKeeper) RenewGroupMember(ctx types3.Context, operator types3.AccAddress, groupInfo *GroupInfo, opts RenewGroupMemberOptions) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RenewGroupMember", ctx, operator, groupInfo, opts) + ret0, _ := ret[0].(error) + return ret0 +} + +// RenewGroupMember indicates an expected call of RenewGroupMember. +func (mr *MockStorageKeeperMockRecorder) RenewGroupMember(ctx, operator, groupInfo, opts interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RenewGroupMember", reflect.TypeOf((*MockStorageKeeper)(nil).RenewGroupMember), ctx, operator, groupInfo, opts) +} + // SetBucketInfo mocks base method. func (m *MockStorageKeeper) SetBucketInfo(ctx types3.Context, bucketInfo *BucketInfo) { m.ctrl.T.Helper() diff --git a/x/storage/types/message.go b/x/storage/types/message.go index b55a6e44a..ca699ccbf 100644 --- a/x/storage/types/message.go +++ b/x/storage/types/message.go @@ -44,6 +44,7 @@ const ( TypeMsgUpdateGroupMember = "update_group_member" TypeMsgUpdateGroupExtra = "update_group_extra" TypeMsgMirrorGroup = "mirror_group" + TypeMsgRenewGroupMember = "renew_group_member" MaxGroupExtraInfoLimit = 512 @@ -1425,3 +1426,69 @@ func (m *MsgUpdateParams) ValidateBasic() error { return nil } + +func NewMsgRenewGroupMember( + operator sdk.AccAddress, groupOwner sdk.AccAddress, groupName string, members []*MsgGroupMember) *MsgRenewGroupMember { + + return &MsgRenewGroupMember{ + Operator: operator.String(), + GroupOwner: groupOwner.String(), + GroupName: groupName, + Members: members, + } +} + +// Route implements the sdk.Msg interface. +func (msg *MsgRenewGroupMember) Route() string { + return RouterKey +} + +// Type implements the sdk.Msg interface. +func (msg *MsgRenewGroupMember) Type() string { + return TypeMsgRenewGroupMember +} + +// GetSigners implements the sdk.Msg interface. +func (msg *MsgRenewGroupMember) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromHexUnsafe(msg.Operator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +// GetSignBytes returns the message bytes to sign over. +func (msg *MsgRenewGroupMember) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg *MsgRenewGroupMember) ValidateBasic() error { + _, err := sdk.AccAddressFromHexUnsafe(msg.Operator) + if err != nil { + return errors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid operator address (%s)", err) + } + + _, err = sdk.AccAddressFromHexUnsafe(msg.GroupOwner) + if err != nil { + return errors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid group owner address (%s)", err) + } + + err = s3util.CheckValidGroupName(msg.GroupName) + if err != nil { + return err + } + + if len(msg.Members) > MaxGroupMemberLimitOnce { + return gnfderrors.ErrInvalidParameter.Wrapf("Once renew group member limit exceeded") + } + for _, member := range msg.Members { + _, err = sdk.AccAddressFromHexUnsafe(member.Member) + if err != nil { + return errors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid member address (%s)", err) + } + } + + return nil +} diff --git a/x/storage/types/options.go b/x/storage/types/options.go index dc36988e8..60bbf8713 100644 --- a/x/storage/types/options.go +++ b/x/storage/types/options.go @@ -1,6 +1,8 @@ package types import ( + time "time" + "github.com/bnb-chain/greenfield/types/common" ) @@ -63,6 +65,12 @@ type UpdateGroupMemberOptions struct { MembersToDelete []string } +type RenewGroupMemberOptions struct { + SourceType SourceType + Members []string + MembersExpiration []time.Time +} + type DeleteGroupOptions struct { SourceType SourceType } diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index 44a18846d..a1b9ed6bc 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -1386,7 +1386,8 @@ func (m *QueryHeadGroupMemberRequest) GetGroupName() string { } type QueryHeadGroupMemberResponse struct { - GroupMember *types1.GroupMember `protobuf:"bytes,1,opt,name=group_member,json=groupMember,proto3" json:"group_member,omitempty"` + GroupMember *types1.GroupMember `protobuf:"bytes,1,opt,name=group_member,json=groupMember,proto3" json:"group_member,omitempty"` + GroupMemberExtra *types1.GroupMemberExtra `protobuf:"bytes,2,opt,name=group_member_extra,json=groupMemberExtra,proto3" json:"group_member_extra,omitempty"` } func (m *QueryHeadGroupMemberResponse) Reset() { *m = QueryHeadGroupMemberResponse{} } @@ -1429,6 +1430,13 @@ func (m *QueryHeadGroupMemberResponse) GetGroupMember() *types1.GroupMember { return nil } +func (m *QueryHeadGroupMemberResponse) GetGroupMemberExtra() *types1.GroupMemberExtra { + if m != nil { + return m.GroupMemberExtra + } + return nil +} + type QueryPolicyForGroupRequest struct { Resource string `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` PrincipalGroupId string `protobuf:"bytes,2,opt,name=principal_group_id,json=principalGroupId,proto3" json:"principal_group_id,omitempty"` @@ -2185,166 +2193,168 @@ func init() { func init() { proto.RegisterFile("greenfield/storage/query.proto", fileDescriptor_b1b80b580af04cb0) } var fileDescriptor_b1b80b580af04cb0 = []byte{ - // 2544 bytes of a gzipped FileDescriptorProto + // 2568 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0xdb, 0x6f, 0xdc, 0x58, - 0x19, 0xaf, 0x93, 0x36, 0x4d, 0x4e, 0x42, 0x5b, 0xce, 0x66, 0xb7, 0xe9, 0xb4, 0x4d, 0x5b, 0x2f, - 0xb4, 0xdd, 0xb6, 0x19, 0xb7, 0x69, 0x8b, 0x9a, 0xde, 0x50, 0xb2, 0x4d, 0xca, 0x48, 0xbd, 0x04, - 0x37, 0x0a, 0xa2, 0x12, 0xb2, 0xce, 0xd8, 0x27, 0x53, 0x6f, 0x66, 0xec, 0xa9, 0xed, 0x69, 0x32, - 0x1b, 0x8d, 0x10, 0xfb, 0x02, 0x8f, 0x08, 0x84, 0x84, 0x04, 0x48, 0x08, 0xc4, 0xf5, 0x05, 0xc1, - 0xee, 0x0b, 0x12, 0x12, 0x2f, 0x20, 0xad, 0x84, 0x90, 0x56, 0xcb, 0x0b, 0xda, 0x87, 0x15, 0xb4, - 0xfc, 0x21, 0xc8, 0xe7, 0x7c, 0xc7, 0x3e, 0xbe, 0x8c, 0x3d, 0xd9, 0xcc, 0x3e, 0x75, 0x7c, 0xfc, - 0x5d, 0x7e, 0xdf, 0xe5, 0x7c, 0xe7, 0xf8, 0x97, 0xa2, 0xd9, 0x86, 0x47, 0xa9, 0xb3, 0x61, 0xd3, - 0xa6, 0xa5, 0xf9, 0x81, 0xeb, 0x91, 0x06, 0xd5, 0x9e, 0x77, 0xa8, 0xd7, 0xad, 0xb6, 0x3d, 0x37, - 0x70, 0x31, 0x8e, 0xdf, 0x57, 0xe1, 0x7d, 0xe5, 0x82, 0xe9, 0xfa, 0x2d, 0xd7, 0xd7, 0xea, 0xc4, - 0x07, 0x61, 0xed, 0xc5, 0x95, 0x3a, 0x0d, 0xc8, 0x15, 0xad, 0x4d, 0x1a, 0xb6, 0x43, 0x02, 0xdb, - 0x75, 0xb8, 0x7e, 0xe5, 0x18, 0x97, 0x35, 0xd8, 0x93, 0xc6, 0x1f, 0xe0, 0xd5, 0x74, 0xc3, 0x6d, - 0xb8, 0x7c, 0x3d, 0xfc, 0x05, 0xab, 0x27, 0x1a, 0xae, 0xdb, 0x68, 0x52, 0x8d, 0xb4, 0x6d, 0x8d, - 0x38, 0x8e, 0x1b, 0x30, 0x6b, 0x42, 0x47, 0x95, 0xe0, 0xb6, 0xa9, 0xd7, 0xb2, 0x7d, 0xdf, 0x76, - 0x1d, 0xcd, 0x74, 0x5b, 0xad, 0xc8, 0xe5, 0x99, 0x7c, 0x99, 0xa0, 0xdb, 0xa6, 0xc2, 0xcc, 0xa9, - 0x9c, 0xa8, 0xdb, 0xc4, 0x23, 0x2d, 0x21, 0x90, 0x97, 0x16, 0xd9, 0xc0, 0x9b, 0xd2, 0xfb, 0x17, - 0xb6, 0x17, 0x74, 0x48, 0xb3, 0xe1, 0xb9, 0x9d, 0xb6, 0x2c, 0xa4, 0x4e, 0x23, 0xfc, 0xf5, 0x30, - 0x3b, 0xab, 0xcc, 0xb2, 0x4e, 0x9f, 0x77, 0xa8, 0x1f, 0xa8, 0x8f, 0xd1, 0x6b, 0x89, 0x55, 0xbf, - 0xed, 0x3a, 0x3e, 0xc5, 0x37, 0xd0, 0x18, 0x47, 0x30, 0xa3, 0x9c, 0x56, 0xce, 0x4f, 0xce, 0x57, - 0xaa, 0xd9, 0xcc, 0x57, 0xb9, 0xce, 0xd2, 0xfe, 0x0f, 0x3f, 0x3d, 0xb5, 0x4f, 0x07, 0x79, 0xf5, - 0x0e, 0x3a, 0x29, 0x19, 0x5c, 0xea, 0xae, 0xd9, 0x2d, 0xea, 0x07, 0xa4, 0xd5, 0x06, 0x8f, 0xf8, - 0x04, 0x9a, 0x08, 0xc4, 0x1a, 0xb3, 0x3e, 0xaa, 0xc7, 0x0b, 0xea, 0x53, 0x34, 0xdb, 0x4f, 0x7d, - 0xcf, 0xd0, 0x16, 0xd0, 0x1b, 0xcc, 0xf6, 0xd7, 0x28, 0xb1, 0x96, 0x3a, 0xe6, 0x26, 0x0d, 0x04, - 0xa6, 0x53, 0x68, 0xb2, 0xce, 0x16, 0x0c, 0x87, 0xb4, 0x28, 0x33, 0x3c, 0xa1, 0x23, 0xbe, 0xf4, - 0x88, 0xb4, 0xa8, 0xba, 0x80, 0x2a, 0x29, 0xd5, 0xa5, 0x6e, 0xcd, 0x12, 0xea, 0xc7, 0xd1, 0x04, - 0xa8, 0xdb, 0x16, 0x28, 0x8f, 0xf3, 0x85, 0x9a, 0xa5, 0x3e, 0x45, 0x47, 0x33, 0x5e, 0x21, 0x94, - 0xaf, 0x46, 0x6e, 0x6d, 0x67, 0xc3, 0x85, 0x78, 0x66, 0xf3, 0xe2, 0xe1, 0x8a, 0x35, 0x67, 0xc3, - 0x15, 0xb0, 0xc2, 0xdf, 0xea, 0x53, 0x29, 0xa2, 0xc7, 0xf5, 0x77, 0xa8, 0x39, 0x70, 0x44, 0xa1, - 0x80, 0xcb, 0x34, 0xb8, 0xc0, 0x08, 0x17, 0xe0, 0x4b, 0x99, 0x90, 0xb9, 0xed, 0x54, 0xc8, 0xa0, - 0x1e, 0x87, 0xcc, 0x17, 0x6a, 0x96, 0xfa, 0x67, 0x45, 0x8a, 0x59, 0xe0, 0x8a, 0x63, 0x16, 0x8a, - 0x25, 0x31, 0x73, 0x45, 0x1e, 0xb3, 0x1b, 0xfd, 0xc6, 0xdf, 0x42, 0xd3, 0x8d, 0xa6, 0x5b, 0x27, - 0x4d, 0x03, 0x5a, 0xdd, 0x60, 0xbd, 0xce, 0x22, 0x98, 0x9c, 0xbf, 0x28, 0x5b, 0x92, 0xf7, 0x42, - 0xf5, 0x3e, 0x53, 0x5a, 0xe7, 0x4b, 0xf7, 0xc3, 0x25, 0x1d, 0x37, 0x32, 0x6b, 0x2a, 0x01, 0xe8, - 0x0f, 0x6c, 0x3f, 0xe0, 0x59, 0x17, 0x7b, 0x05, 0xaf, 0x20, 0x14, 0x4f, 0x14, 0x40, 0x7e, 0xb6, - 0x0a, 0x53, 0x24, 0x1c, 0x3f, 0x55, 0x3e, 0xab, 0x60, 0xfc, 0x54, 0x57, 0x49, 0x83, 0x82, 0xae, - 0x2e, 0x69, 0xaa, 0xbf, 0x56, 0xd0, 0x4c, 0xd6, 0x07, 0xe4, 0x67, 0x11, 0x4d, 0x49, 0x3d, 0x11, - 0x36, 0xf9, 0xe8, 0x00, 0x4d, 0x31, 0x19, 0x37, 0x85, 0x8f, 0xef, 0x27, 0x70, 0xf2, 0xbc, 0x9c, - 0x2b, 0xc5, 0xc9, 0xfd, 0x27, 0x80, 0xbe, 0xa7, 0x48, 0xc9, 0xe0, 0xe5, 0x18, 0x76, 0x32, 0xd2, - 0x8d, 0x3a, 0x92, 0xd9, 0x7a, 0xdf, 0x53, 0xd0, 0x99, 0x34, 0x88, 0xa5, 0x2e, 0xc4, 0x6e, 0x0d, - 0x1b, 0x4e, 0x62, 0x2b, 0x8f, 0xa4, 0xb6, 0x72, 0xa2, 0x70, 0x51, 0x3e, 0xe2, 0xc2, 0x49, 0x8d, - 0x5d, 0x58, 0x38, 0xa9, 0xb3, 0x27, 0xe3, 0xce, 0x1e, 0x62, 0xe1, 0x2e, 0xa1, 0xc3, 0x0c, 0xe7, - 0xa3, 0x95, 0x35, 0x91, 0xa0, 0x63, 0x68, 0x3c, 0x70, 0x37, 0xa9, 0x13, 0xef, 0xd7, 0x83, 0xec, - 0xb9, 0x66, 0xa9, 0xdf, 0x84, 0x29, 0xc2, 0x73, 0xca, 0x74, 0xa2, 0xcd, 0x3a, 0xd1, 0xa2, 0x01, - 0x31, 0x2c, 0x12, 0x10, 0x48, 0xaa, 0xda, 0xbf, 0x13, 0x1f, 0xd2, 0x80, 0xdc, 0x23, 0x01, 0xd1, - 0xc7, 0x5b, 0xf0, 0x2b, 0x32, 0xcd, 0x23, 0xfe, 0x2c, 0xa6, 0xb9, 0x66, 0x8e, 0xe9, 0x6f, 0xa0, - 0xd7, 0x99, 0x69, 0xb6, 0x6d, 0x65, 0xcb, 0x77, 0xb3, 0x96, 0xcf, 0xe4, 0x59, 0x66, 0x8a, 0x39, - 0x86, 0xbf, 0xa3, 0xa0, 0x13, 0xfc, 0x0c, 0x72, 0x9b, 0xb6, 0xd9, 0x5d, 0x71, 0xbd, 0x45, 0xd3, - 0x74, 0x3b, 0x4e, 0x34, 0x5b, 0x2b, 0x68, 0xdc, 0xa3, 0xbe, 0xdb, 0xf1, 0x4c, 0x31, 0x58, 0xa3, - 0x67, 0xbc, 0x8c, 0xbe, 0xd8, 0xf6, 0x6c, 0xc7, 0xb4, 0xdb, 0xa4, 0x69, 0x10, 0xcb, 0xf2, 0xa8, - 0xef, 0xf3, 0x3e, 0x5a, 0x9a, 0xf9, 0xf8, 0x83, 0xb9, 0x69, 0x28, 0xe6, 0x22, 0x7f, 0xf3, 0x24, - 0xf0, 0x6c, 0xa7, 0xa1, 0x1f, 0x89, 0x54, 0x60, 0x5d, 0x5d, 0x17, 0xa7, 0x68, 0x06, 0x02, 0x04, - 0x79, 0x1d, 0x8d, 0xb5, 0xd9, 0x3b, 0x88, 0xf0, 0xa4, 0x1c, 0x61, 0x7c, 0xcf, 0xa8, 0x72, 0x03, - 0x3a, 0x08, 0xab, 0x9f, 0x88, 0xd8, 0xd6, 0xa9, 0x67, 0x6f, 0x74, 0x57, 0x23, 0x41, 0x11, 0xdb, - 0x35, 0x34, 0xee, 0xb6, 0xa9, 0x47, 0x02, 0xd7, 0xe3, 0xb1, 0x15, 0xc0, 0x8e, 0x24, 0x4b, 0x37, - 0x71, 0xfa, 0xb4, 0x19, 0x4d, 0x9f, 0x36, 0x78, 0x09, 0x4d, 0x12, 0x33, 0xec, 0x5d, 0x23, 0xbc, - 0xb3, 0xcc, 0xec, 0x3f, 0xad, 0x9c, 0x3f, 0x94, 0x2c, 0x9b, 0x14, 0xd4, 0x22, 0x93, 0x5c, 0xeb, - 0xb6, 0xa9, 0x8e, 0x48, 0xf4, 0x3b, 0x4a, 0x5a, 0x36, 0xb6, 0x38, 0x69, 0x74, 0x63, 0x83, 0x9a, - 0x01, 0x0b, 0xed, 0x50, 0xdf, 0xa4, 0x2d, 0x33, 0x21, 0x1d, 0x84, 0xd5, 0xe7, 0xd0, 0x69, 0xe1, - 0x69, 0xc6, 0x0f, 0x0e, 0x48, 0xd6, 0x02, 0x9a, 0x64, 0x67, 0x8b, 0xe1, 0x6e, 0x39, 0xb4, 0x3c, - 0x5f, 0x88, 0x09, 0x3f, 0x0e, 0x65, 0xf1, 0x49, 0xc4, 0x9f, 0xe4, 0x84, 0x4d, 0xb0, 0x15, 0x36, - 0xf4, 0xd6, 0xa5, 0x83, 0x1d, 0x5c, 0x42, 0x0c, 0xb7, 0x85, 0xa2, 0x74, 0x7c, 0x9e, 0xec, 0xdb, - 0xde, 0x6c, 0xc6, 0x70, 0xbb, 0xec, 0xc2, 0xf0, 0x13, 0x05, 0x0c, 0x87, 0x13, 0x8c, 0x49, 0x0c, - 0x7d, 0xa0, 0xa7, 0x92, 0x32, 0x32, 0x78, 0x52, 0xd4, 0x5f, 0xc8, 0xe7, 0x8d, 0x40, 0x07, 0x71, - 0xdf, 0xcf, 0x81, 0xf7, 0x59, 0x66, 0x23, 0xbe, 0x2b, 0xf0, 0xf1, 0x31, 0x3d, 0xc2, 0xc6, 0x74, - 0x49, 0x06, 0x51, 0x94, 0x41, 0x5f, 0xfd, 0x9d, 0x82, 0x8e, 0x27, 0x6b, 0xf3, 0x90, 0xb6, 0xea, - 0xd4, 0x13, 0x79, 0xbc, 0x8c, 0xc6, 0x5a, 0x6c, 0xa1, 0xb4, 0x1f, 0x40, 0x6e, 0x0f, 0x19, 0x4b, - 0xb5, 0xd1, 0x68, 0xba, 0x8d, 0x28, 0xec, 0xf6, 0x0c, 0x54, 0x48, 0xea, 0x32, 0x9a, 0xe2, 0xea, - 0x12, 0xe2, 0xd4, 0x1c, 0x96, 0xb6, 0x85, 0x6c, 0x81, 0x23, 0xe6, 0x0f, 0xea, 0x06, 0x5c, 0x15, - 0xa3, 0x69, 0x95, 0xd8, 0x25, 0x45, 0xe3, 0xf2, 0x12, 0xc2, 0xf1, 0xb8, 0x84, 0xb2, 0x88, 0x73, - 0x37, 0x9e, 0x8a, 0xbc, 0x10, 0x96, 0xba, 0x06, 0x99, 0x4f, 0xfb, 0xd9, 0xdb, 0x4c, 0xbc, 0x0e, - 0x5b, 0x82, 0x2f, 0xa7, 0x2e, 0xb9, 0x5c, 0x46, 0xba, 0xe4, 0xf2, 0x85, 0x9a, 0xa5, 0xae, 0x42, - 0xaf, 0xca, 0x6a, 0x7b, 0x03, 0xf2, 0x33, 0x05, 0x3e, 0xc6, 0x1e, 0xb8, 0xe6, 0xe6, 0x0a, 0xa5, - 0xf1, 0xce, 0x0c, 0x93, 0xd4, 0x22, 0x5e, 0xd7, 0xf0, 0xdb, 0xd1, 0xa1, 0xa2, 0x0c, 0x70, 0xa8, - 0x84, 0x3a, 0x4f, 0xda, 0xb0, 0x1e, 0x86, 0x63, 0x7a, 0x94, 0x04, 0xd4, 0x20, 0x01, 0xcb, 0xf1, - 0xa8, 0x3e, 0xce, 0x17, 0x16, 0x03, 0x7c, 0x06, 0x4d, 0xb5, 0x49, 0xb7, 0xe9, 0x12, 0xcb, 0xf0, - 0xed, 0x77, 0x79, 0x2f, 0xed, 0xd7, 0x27, 0x61, 0xed, 0x89, 0xfd, 0x2e, 0x55, 0x9b, 0x68, 0x3a, - 0x09, 0x0f, 0xc2, 0x5d, 0x43, 0x63, 0xa4, 0x15, 0x9e, 0x4e, 0x80, 0xe9, 0x76, 0xf8, 0xd5, 0xf5, - 0xc9, 0xa7, 0xa7, 0xce, 0x36, 0xec, 0xe0, 0x59, 0xa7, 0x5e, 0x35, 0xdd, 0x16, 0x7c, 0x6b, 0xc3, - 0x3f, 0x73, 0xbe, 0xb5, 0x09, 0xdf, 0xa6, 0x35, 0x27, 0xf8, 0xf8, 0x83, 0x39, 0x04, 0x11, 0xd4, - 0x9c, 0x40, 0x07, 0x5b, 0xea, 0x5d, 0x69, 0x9b, 0xf1, 0xfb, 0xc5, 0xf2, 0x76, 0xe0, 0x91, 0x81, - 0x3f, 0xd9, 0xe4, 0xde, 0x4f, 0xe8, 0x47, 0xbd, 0x8f, 0x68, 0xb8, 0x20, 0x0f, 0xd2, 0xb3, 0x79, - 0x63, 0xa0, 0xe6, 0x04, 0xd4, 0x73, 0x48, 0x53, 0xba, 0x6e, 0x4f, 0x30, 0x4d, 0x36, 0x51, 0xef, - 0x40, 0xef, 0xd7, 0xfc, 0x55, 0xcf, 0x36, 0xe9, 0xdb, 0xcf, 0x88, 0xd3, 0xa0, 0xd6, 0xc0, 0x28, - 0xff, 0x7b, 0x10, 0xc2, 0x4c, 0xeb, 0x03, 0xca, 0x19, 0x74, 0xd0, 0xe4, 0x4b, 0x4c, 0x79, 0x5c, - 0x17, 0x8f, 0xf8, 0x1d, 0x84, 0xcd, 0x8e, 0xe7, 0x51, 0x27, 0x30, 0x3c, 0x4a, 0x2c, 0xa3, 0x1d, - 0xaa, 0xc3, 0xf0, 0xd8, 0x4d, 0x05, 0xee, 0x51, 0x53, 0xaa, 0xc0, 0x3d, 0x6a, 0xea, 0x47, 0xc0, - 0xae, 0x4e, 0x89, 0xc5, 0x40, 0xe1, 0x1d, 0x74, 0x5c, 0xf8, 0x8a, 0x3a, 0x31, 0x70, 0x3d, 0x0a, - 0x4e, 0x47, 0x87, 0xe0, 0x74, 0x06, 0x1c, 0xac, 0x42, 0xd7, 0x86, 0xe6, 0xb9, 0xf3, 0x6f, 0xa3, - 0x93, 0xc2, 0xb9, 0x4f, 0x4d, 0xd7, 0xb1, 0xd2, 0xee, 0xf7, 0x0f, 0xc1, 0x7d, 0x05, 0x5c, 0x3c, - 0x11, 0x1e, 0x24, 0x00, 0x5d, 0x24, 0xde, 0x1a, 0x2f, 0x48, 0xd3, 0xb6, 0xc2, 0x2b, 0x8f, 0x11, - 0x90, 0x6d, 0xc3, 0x23, 0x01, 0x9d, 0x39, 0x30, 0x04, 0xef, 0x47, 0xc1, 0xfe, 0xba, 0x30, 0xbf, - 0x46, 0xb6, 0x75, 0x12, 0x50, 0x5c, 0x47, 0x87, 0x1c, 0xba, 0x25, 0x17, 0x78, 0x6c, 0x08, 0xee, - 0xa6, 0x1c, 0xba, 0x15, 0x17, 0xd7, 0x47, 0x47, 0x43, 0x1f, 0x79, 0x85, 0x3d, 0x38, 0x04, 0x67, - 0xd3, 0x0e, 0xdd, 0xca, 0x16, 0x75, 0x0b, 0x1d, 0x0b, 0x9d, 0xe6, 0x17, 0x74, 0x7c, 0x08, 0x6e, - 0xdf, 0x70, 0xe8, 0x56, 0x5e, 0x31, 0x9f, 0xa3, 0xf0, 0x4d, 0x5e, 0x21, 0x27, 0x86, 0xe0, 0xf5, - 0x35, 0x87, 0x6e, 0xa5, 0x8b, 0xa8, 0x3a, 0x70, 0x2f, 0x95, 0xce, 0x4f, 0x7f, 0x79, 0xdb, 0xf6, - 0x03, 0xe9, 0xdb, 0x2c, 0x3a, 0xfb, 0xe0, 0xdb, 0x8c, 0x5f, 0x38, 0x2c, 0x3c, 0x8f, 0x0e, 0xf2, - 0xb3, 0x99, 0xdf, 0x54, 0x8a, 0x06, 0xbe, 0x10, 0x54, 0xdf, 0x57, 0x80, 0x44, 0xcb, 0x71, 0x08, - 0x63, 0x65, 0x1d, 0x8d, 0xd1, 0x70, 0x41, 0x7c, 0xa6, 0xde, 0xcd, 0x1b, 0x7c, 0xc5, 0x36, 0xaa, - 0xec, 0xc9, 0x5f, 0x76, 0x02, 0xaf, 0xab, 0x83, 0xb5, 0xca, 0x02, 0x9a, 0x94, 0x96, 0xf1, 0x11, - 0x34, 0xba, 0x49, 0xbb, 0x10, 0x53, 0xf8, 0x13, 0x4f, 0xa3, 0x03, 0x2f, 0x48, 0xb3, 0xc3, 0x07, - 0xd5, 0xb8, 0xce, 0x1f, 0x6e, 0x8e, 0xdc, 0x50, 0xd4, 0x0e, 0x9c, 0xa7, 0xfc, 0xde, 0x97, 0xc8, - 0xcf, 0x1e, 0xee, 0xd9, 0xa7, 0x84, 0x6a, 0x38, 0x7f, 0x21, 0x87, 0x20, 0x10, 0xce, 0x5f, 0x5f, - 0xbd, 0x09, 0xf3, 0x57, 0x72, 0x9b, 0xba, 0x02, 0x88, 0xd2, 0xf0, 0x5c, 0x4d, 0xe8, 0xe3, 0x50, - 0x1b, 0x5f, 0xfd, 0x8d, 0xe0, 0x03, 0x12, 0x98, 0x21, 0xc5, 0xab, 0xa9, 0x14, 0xdf, 0x28, 0x4e, - 0xf1, 0xe7, 0x9a, 0xdc, 0xf9, 0xbf, 0x9c, 0x41, 0x07, 0x98, 0x2f, 0xdc, 0x43, 0x63, 0x9c, 0x1c, - 0xc5, 0x67, 0xfb, 0x02, 0x4a, 0x50, 0xc4, 0x95, 0x73, 0xa5, 0x72, 0x1c, 0xb3, 0xaa, 0xbe, 0xf7, - 0xaf, 0xff, 0xfd, 0x70, 0xe4, 0x04, 0xae, 0x68, 0x7d, 0x09, 0x6d, 0xfc, 0x07, 0xf1, 0x01, 0x92, - 0x21, 0x78, 0xf1, 0x95, 0x12, 0x3f, 0x59, 0x2e, 0xb9, 0x32, 0xbf, 0x1b, 0x15, 0x40, 0x59, 0x65, - 0x28, 0xcf, 0xe3, 0xb3, 0xfd, 0x51, 0x6a, 0x3b, 0x11, 0x21, 0xdd, 0xc3, 0x3f, 0x55, 0x10, 0x8a, - 0xef, 0x10, 0xf8, 0x42, 0x5f, 0x97, 0x19, 0x5a, 0xb9, 0x72, 0x71, 0x20, 0x59, 0xc0, 0x75, 0x9d, - 0xe1, 0xd2, 0xf0, 0x5c, 0x1e, 0xae, 0x67, 0xe1, 0x01, 0xc0, 0xaf, 0x0d, 0xda, 0x8e, 0x74, 0xa3, - 0xe8, 0xe1, 0xdf, 0x2a, 0xe8, 0x50, 0x92, 0x95, 0xc6, 0xd5, 0x01, 0xdc, 0x4a, 0x3d, 0xbe, 0x3b, - 0x98, 0x0b, 0x0c, 0xe6, 0x55, 0x7c, 0xa5, 0x04, 0xa6, 0x51, 0x0f, 0x6f, 0xcd, 0x11, 0x58, 0xdb, - 0xea, 0xe1, 0x1f, 0x2b, 0xe8, 0x0b, 0xb1, 0xc5, 0x47, 0x2b, 0x6b, 0xf8, 0xcd, 0xbe, 0x9e, 0x63, - 0xe6, 0xaa, 0xd2, 0x3f, 0xe3, 0x19, 0xc2, 0x4a, 0xfd, 0x0a, 0x43, 0x77, 0x19, 0x57, 0xcb, 0xd0, - 0x39, 0x1b, 0x81, 0xb6, 0x23, 0x08, 0xb1, 0x1e, 0xfe, 0x3d, 0x14, 0x99, 0xb3, 0x4d, 0x25, 0x45, - 0x4e, 0x30, 0xed, 0x25, 0xd9, 0x4b, 0xb2, 0xdf, 0xea, 0xdb, 0x0c, 0xdf, 0x1d, 0x7c, 0xab, 0x2f, - 0x3e, 0xce, 0x89, 0x24, 0x8b, 0xac, 0xed, 0x48, 0xe4, 0x49, 0x5c, 0xf2, 0x98, 0x95, 0x2f, 0x29, - 0x79, 0x86, 0xbe, 0xdf, 0x1d, 0xe8, 0xf2, 0x92, 0x03, 0x3c, 0x28, 0x79, 0xf4, 0x87, 0x81, 0xb8, - 0xe4, 0x11, 0xff, 0xb7, 0xd7, 0x92, 0x67, 0x88, 0xc4, 0x01, 0x4a, 0x2e, 0x92, 0x97, 0x2c, 0xf9, - 0x0f, 0x14, 0x34, 0x29, 0x11, 0xf0, 0xb8, 0x7f, 0x4a, 0xb2, 0x7f, 0x0a, 0xa8, 0x5c, 0x1a, 0x4c, - 0x18, 0x20, 0x9e, 0x67, 0x10, 0x55, 0x7c, 0x3a, 0x0f, 0x62, 0xd3, 0xf6, 0x03, 0xe8, 0x4a, 0x1f, - 0xff, 0x1c, 0x40, 0x01, 0xb9, 0x5c, 0x02, 0x2a, 0x49, 0xc9, 0x97, 0x80, 0x4a, 0xf1, 0xd5, 0xc5, - 0x79, 0x63, 0xa0, 0x78, 0xde, 0xfc, 0xd4, 0xc0, 0xf9, 0xab, 0x82, 0x5e, 0xcf, 0xa5, 0xe2, 0xf1, - 0xf5, 0x41, 0xfc, 0x67, 0xa8, 0xfb, 0x5d, 0xc2, 0x5e, 0x64, 0xb0, 0x6f, 0xe1, 0x85, 0x32, 0xd8, - 0x61, 0x37, 0x46, 0xc3, 0x27, 0x31, 0x87, 0x7e, 0xa4, 0xa0, 0xa9, 0x88, 0x11, 0x19, 0xb8, 0x27, - 0xdf, 0x2a, 0x3e, 0xbf, 0xe5, 0x96, 0x2c, 0x1f, 0xe5, 0x70, 0x27, 0x49, 0x76, 0xe4, 0x3f, 0x14, - 0x20, 0x1a, 0xd3, 0xac, 0x2f, 0xbe, 0xdc, 0xff, 0x9c, 0xcb, 0xe7, 0xa8, 0x2b, 0x57, 0x76, 0xa1, - 0x01, 0xa8, 0x1f, 0x32, 0xd4, 0xf7, 0xf1, 0x72, 0xee, 0xc1, 0xc8, 0x79, 0x90, 0x0d, 0xd7, 0x33, - 0x08, 0xd7, 0xd3, 0x76, 0x04, 0x8b, 0xd3, 0xd3, 0x76, 0x32, 0x9c, 0x77, 0x0f, 0xff, 0x53, 0x41, - 0x47, 0xd2, 0x4c, 0x6c, 0x41, 0x20, 0x7d, 0x08, 0xe9, 0x82, 0x40, 0xfa, 0xd1, 0xbc, 0xea, 0x1a, - 0x0b, 0xe4, 0x11, 0x7e, 0x90, 0x17, 0xc8, 0x0b, 0xa6, 0x65, 0x48, 0x7f, 0x8a, 0xdf, 0x11, 0x34, - 0x76, 0x2f, 0x3d, 0x75, 0x25, 0x46, 0xba, 0x87, 0x7f, 0xa5, 0xa0, 0x89, 0xa8, 0x6b, 0xf0, 0x5b, - 0x85, 0x03, 0x54, 0xe6, 0xbf, 0x2a, 0x17, 0x06, 0x11, 0x1d, 0xa4, 0xbb, 0xe3, 0xce, 0xd1, 0x76, - 0xa4, 0xfb, 0x70, 0x4f, 0x3c, 0xf1, 0xfd, 0x19, 0xde, 0x57, 0x62, 0xfe, 0xb4, 0xe0, 0x28, 0xcb, - 0x50, 0xc0, 0x95, 0x8b, 0x03, 0xc9, 0x0e, 0xd2, 0xe4, 0x6c, 0x23, 0x32, 0x54, 0x7e, 0x12, 0x2b, - 0xfe, 0xa5, 0x82, 0x0e, 0xa7, 0xe8, 0x48, 0xac, 0x95, 0x67, 0x28, 0xc1, 0xb1, 0x56, 0x2e, 0x0f, - 0xae, 0x00, 0x68, 0xe7, 0x18, 0xda, 0x73, 0xf8, 0xcb, 0x25, 0x5b, 0x12, 0x28, 0xd9, 0xbf, 0x09, - 0x2a, 0x2e, 0x49, 0x35, 0x16, 0x9c, 0xb3, 0xb9, 0xdc, 0x67, 0x45, 0x1b, 0x58, 0x1e, 0x70, 0x3e, - 0x60, 0x38, 0x57, 0xf0, 0xbd, 0x92, 0x4d, 0x08, 0x6d, 0x90, 0xbb, 0x05, 0xc5, 0x07, 0x4b, 0x2f, - 0x3c, 0x4e, 0x0e, 0xa7, 0x48, 0xca, 0x82, 0x86, 0xc8, 0x10, 0xa0, 0x05, 0x0d, 0x91, 0x65, 0x3d, - 0xd5, 0x6b, 0x0c, 0x7a, 0x15, 0x5f, 0x2a, 0x80, 0x0e, 0x37, 0x84, 0x88, 0x55, 0xed, 0xe1, 0xef, - 0x2a, 0x68, 0x4a, 0x66, 0x15, 0x71, 0xff, 0xcf, 0x8d, 0x24, 0x2d, 0x5a, 0x39, 0x5f, 0x2e, 0x08, - 0xc8, 0xbe, 0xc4, 0x90, 0xcd, 0xe2, 0x13, 0xb9, 0xad, 0xea, 0x9a, 0x9b, 0xc6, 0x06, 0xa5, 0xf8, - 0x8f, 0xd0, 0x99, 0x12, 0x59, 0x58, 0xd2, 0x99, 0x59, 0x5a, 0xb2, 0xa4, 0x33, 0x73, 0x78, 0x48, - 0xf5, 0x16, 0x03, 0x77, 0x1d, 0x5f, 0x2d, 0xbb, 0xb2, 0x32, 0xce, 0x31, 0x75, 0x18, 0xff, 0x49, - 0xf4, 0x69, 0x92, 0x3e, 0x2c, 0xe8, 0xd3, 0x5c, 0x9e, 0xb2, 0xa0, 0x4f, 0xf3, 0x79, 0x49, 0xf5, - 0x26, 0x43, 0x7d, 0x0d, 0xcf, 0xe7, 0xa1, 0xb6, 0x7d, 0x4e, 0xe4, 0x18, 0xc0, 0x55, 0xa6, 0x40, - 0xff, 0x5d, 0x7c, 0x03, 0x66, 0xb8, 0x85, 0x82, 0x6f, 0xc0, 0x7e, 0xe4, 0x49, 0xc1, 0x37, 0x60, - 0x5f, 0xea, 0x42, 0xbd, 0xc7, 0xd0, 0xdf, 0xc5, 0xb7, 0xf3, 0xd0, 0xcb, 0x83, 0xc0, 0x37, 0xd8, - 0xb7, 0xb7, 0x98, 0x61, 0xb6, 0xd5, 0xd3, 0x76, 0xe0, 0x4d, 0x0f, 0xbf, 0xaf, 0xa0, 0x23, 0xe9, - 0x0f, 0xf8, 0x82, 0x1b, 0x5b, 0x96, 0xd8, 0x28, 0xb8, 0xfa, 0xe4, 0x70, 0x02, 0x03, 0xa0, 0x4e, - 0xc1, 0xcd, 0x1e, 0x0f, 0x7e, 0x2f, 0x6c, 0xf3, 0xe9, 0x3c, 0xc6, 0xa3, 0xa0, 0xd7, 0xf3, 0xb9, - 0x91, 0x5d, 0xa2, 0x2f, 0xec, 0x18, 0x19, 0xbd, 0x18, 0x12, 0x11, 0xef, 0xd2, 0x5b, 0xaa, 0x7d, - 0xf8, 0x72, 0x56, 0xf9, 0xe8, 0xe5, 0xac, 0xf2, 0x9f, 0x97, 0xb3, 0xca, 0xf7, 0x5f, 0xcd, 0xee, - 0xfb, 0xe8, 0xd5, 0xec, 0xbe, 0x7f, 0xbf, 0x9a, 0xdd, 0xf7, 0x54, 0x93, 0x68, 0xba, 0xba, 0x53, - 0x9f, 0x33, 0x9f, 0x11, 0xdb, 0x91, 0x3d, 0x6c, 0x27, 0xff, 0xc7, 0x5c, 0x7d, 0x8c, 0xfd, 0x6f, - 0xb8, 0xab, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x9f, 0xd7, 0xc3, 0x6b, 0x28, 0x00, 0x00, + 0xfd, 0xaf, 0x93, 0x36, 0x4d, 0x4e, 0xf2, 0x6b, 0xf3, 0x3b, 0x9b, 0xdd, 0xa6, 0xd3, 0x36, 0x6d, + 0xbd, 0xd0, 0x76, 0xdb, 0x66, 0xdc, 0xa6, 0x2d, 0x6a, 0x7a, 0x43, 0xc9, 0x36, 0x29, 0x23, 0xf5, + 0x12, 0xdc, 0x10, 0x44, 0x25, 0x64, 0x9d, 0xb1, 0x4f, 0xa6, 0xde, 0xcc, 0xd8, 0x53, 0xdb, 0xd3, + 0x74, 0x36, 0x1a, 0x21, 0xf6, 0x05, 0x1e, 0x11, 0x08, 0x09, 0x09, 0x90, 0x10, 0x88, 0xeb, 0x0b, + 0x82, 0xdd, 0x17, 0xa4, 0x95, 0x78, 0x01, 0x69, 0x25, 0x84, 0xb4, 0x5a, 0x5e, 0xd0, 0x3e, 0xac, + 0xa0, 0xe5, 0x0f, 0x41, 0x3e, 0xe7, 0x7b, 0xec, 0xe3, 0xcb, 0xd8, 0x93, 0xcd, 0xf0, 0xd4, 0xf1, + 0xf1, 0xf7, 0xf2, 0xf9, 0x5e, 0xce, 0xf7, 0x1c, 0x7f, 0x52, 0x34, 0xd7, 0xf0, 0x28, 0x75, 0x36, + 0x6d, 0xda, 0xb4, 0x34, 0x3f, 0x70, 0x3d, 0xd2, 0xa0, 0xda, 0xb3, 0x0e, 0xf5, 0xba, 0xd5, 0xb6, + 0xe7, 0x06, 0x2e, 0xc6, 0xf1, 0xfb, 0x2a, 0xbc, 0xaf, 0x9c, 0x37, 0x5d, 0xbf, 0xe5, 0xfa, 0x5a, + 0x9d, 0xf8, 0x20, 0xac, 0x3d, 0xbf, 0x5c, 0xa7, 0x01, 0xb9, 0xac, 0xb5, 0x49, 0xc3, 0x76, 0x48, + 0x60, 0xbb, 0x0e, 0xd7, 0xaf, 0x1c, 0xe5, 0xb2, 0x06, 0x7b, 0xd2, 0xf8, 0x03, 0xbc, 0x9a, 0x69, + 0xb8, 0x0d, 0x97, 0xaf, 0x87, 0xbf, 0x60, 0xf5, 0x78, 0xc3, 0x75, 0x1b, 0x4d, 0xaa, 0x91, 0xb6, + 0xad, 0x11, 0xc7, 0x71, 0x03, 0x66, 0x4d, 0xe8, 0xa8, 0x12, 0xdc, 0x36, 0xf5, 0x5a, 0xb6, 0xef, + 0xdb, 0xae, 0xa3, 0x99, 0x6e, 0xab, 0x15, 0xb9, 0x3c, 0x9d, 0x2f, 0x13, 0x74, 0xdb, 0x54, 0x98, + 0x39, 0x99, 0x13, 0x75, 0x9b, 0x78, 0xa4, 0x25, 0x04, 0xf2, 0xd2, 0x22, 0x1b, 0x78, 0x53, 0x7a, + 0xff, 0xdc, 0xf6, 0x82, 0x0e, 0x69, 0x36, 0x3c, 0xb7, 0xd3, 0x96, 0x85, 0xd4, 0x19, 0x84, 0xbf, + 0x1a, 0x66, 0x67, 0x8d, 0x59, 0xd6, 0xe9, 0xb3, 0x0e, 0xf5, 0x03, 0xf5, 0x11, 0x7a, 0x2d, 0xb1, + 0xea, 0xb7, 0x5d, 0xc7, 0xa7, 0xf8, 0x3a, 0x1a, 0xe3, 0x08, 0x66, 0x95, 0x53, 0xca, 0xb9, 0xc9, + 0x85, 0x4a, 0x35, 0x9b, 0xf9, 0x2a, 0xd7, 0x59, 0xde, 0xff, 0xd1, 0x67, 0x27, 0xf7, 0xe9, 0x20, + 0xaf, 0xde, 0x46, 0x27, 0x24, 0x83, 0xcb, 0xdd, 0x75, 0xbb, 0x45, 0xfd, 0x80, 0xb4, 0xda, 0xe0, + 0x11, 0x1f, 0x47, 0x13, 0x81, 0x58, 0x63, 0xd6, 0x47, 0xf5, 0x78, 0x41, 0x7d, 0x82, 0xe6, 0xfa, + 0xa9, 0xef, 0x19, 0xda, 0x22, 0x7a, 0x83, 0xd9, 0xfe, 0x0a, 0x25, 0xd6, 0x72, 0xc7, 0xdc, 0xa2, + 0x81, 0xc0, 0x74, 0x12, 0x4d, 0xd6, 0xd9, 0x82, 0xe1, 0x90, 0x16, 0x65, 0x86, 0x27, 0x74, 0xc4, + 0x97, 0x1e, 0x92, 0x16, 0x55, 0x17, 0x51, 0x25, 0xa5, 0xba, 0xdc, 0xad, 0x59, 0x42, 0xfd, 0x18, + 0x9a, 0x00, 0x75, 0xdb, 0x02, 0xe5, 0x71, 0xbe, 0x50, 0xb3, 0xd4, 0x27, 0xe8, 0x48, 0xc6, 0x2b, + 0x84, 0xf2, 0xe5, 0xc8, 0xad, 0xed, 0x6c, 0xba, 0x10, 0xcf, 0x5c, 0x5e, 0x3c, 0x5c, 0xb1, 0xe6, + 0x6c, 0xba, 0x02, 0x56, 0xf8, 0x5b, 0x7d, 0x22, 0x45, 0xf4, 0xa8, 0xfe, 0x0e, 0x35, 0x07, 0x8e, + 0x28, 0x14, 0x70, 0x99, 0x06, 0x17, 0x18, 0xe1, 0x02, 0x7c, 0x29, 0x13, 0x32, 0xb7, 0x9d, 0x0a, + 0x19, 0xd4, 0xe3, 0x90, 0xf9, 0x42, 0xcd, 0x52, 0xff, 0xa4, 0x48, 0x31, 0x0b, 0x5c, 0x71, 0xcc, + 0x42, 0xb1, 0x24, 0x66, 0xae, 0xc8, 0x63, 0x76, 0xa3, 0xdf, 0xf8, 0x9b, 0x68, 0xa6, 0xd1, 0x74, + 0xeb, 0xa4, 0x69, 0x40, 0xab, 0x1b, 0xac, 0xd7, 0x59, 0x04, 0x93, 0x0b, 0x17, 0x64, 0x4b, 0xf2, + 0x5e, 0xa8, 0xde, 0x63, 0x4a, 0x1b, 0x7c, 0xe9, 0x5e, 0xb8, 0xa4, 0xe3, 0x46, 0x66, 0x4d, 0x25, + 0x00, 0xfd, 0xbe, 0xed, 0x07, 0x3c, 0xeb, 0x62, 0xaf, 0xe0, 0x55, 0x84, 0xe2, 0x89, 0x02, 0xc8, + 0xcf, 0x54, 0x61, 0x8a, 0x84, 0xe3, 0xa7, 0xca, 0x67, 0x15, 0x8c, 0x9f, 0xea, 0x1a, 0x69, 0x50, + 0xd0, 0xd5, 0x25, 0x4d, 0xf5, 0x57, 0x0a, 0x9a, 0xcd, 0xfa, 0x80, 0xfc, 0x2c, 0xa1, 0x29, 0xa9, + 0x27, 0xc2, 0x26, 0x1f, 0x1d, 0xa0, 0x29, 0x26, 0xe3, 0xa6, 0xf0, 0xf1, 0xbd, 0x04, 0x4e, 0x9e, + 0x97, 0xb3, 0xa5, 0x38, 0xb9, 0xff, 0x04, 0xd0, 0xf7, 0x14, 0x29, 0x19, 0xbc, 0x1c, 0xc3, 0x4e, + 0x46, 0xba, 0x51, 0x47, 0x32, 0x5b, 0xef, 0xbb, 0x0a, 0x3a, 0x9d, 0x06, 0xb1, 0xdc, 0x85, 0xd8, + 0xad, 0x61, 0xc3, 0x49, 0x6c, 0xe5, 0x91, 0xd4, 0x56, 0x4e, 0x14, 0x2e, 0xca, 0x47, 0x5c, 0x38, + 0xa9, 0xb1, 0x0b, 0x0b, 0x27, 0x75, 0xf6, 0x64, 0xdc, 0xd9, 0x43, 0x2c, 0xdc, 0x45, 0x74, 0x98, + 0xe1, 0x7c, 0xb8, 0xba, 0x2e, 0x12, 0x74, 0x14, 0x8d, 0x07, 0xee, 0x16, 0x75, 0xe2, 0xfd, 0x7a, + 0x90, 0x3d, 0xd7, 0x2c, 0xf5, 0x1b, 0x30, 0x45, 0x78, 0x4e, 0x99, 0x4e, 0xb4, 0x59, 0x27, 0x5a, + 0x34, 0x20, 0x86, 0x45, 0x02, 0x02, 0x49, 0x55, 0xfb, 0x77, 0xe2, 0x03, 0x1a, 0x90, 0xbb, 0x24, + 0x20, 0xfa, 0x78, 0x0b, 0x7e, 0x45, 0xa6, 0x79, 0xc4, 0x9f, 0xc7, 0x34, 0xd7, 0xcc, 0x31, 0xfd, + 0x75, 0xf4, 0x3a, 0x33, 0xcd, 0xb6, 0xad, 0x6c, 0xf9, 0x4e, 0xd6, 0xf2, 0xe9, 0x3c, 0xcb, 0x4c, + 0x31, 0xc7, 0xf0, 0xb7, 0x15, 0x74, 0x9c, 0x9f, 0x41, 0x6e, 0xd3, 0x36, 0xbb, 0xab, 0xae, 0xb7, + 0x64, 0x9a, 0x6e, 0xc7, 0x89, 0x66, 0x6b, 0x05, 0x8d, 0x7b, 0xd4, 0x77, 0x3b, 0x9e, 0x29, 0x06, + 0x6b, 0xf4, 0x8c, 0x57, 0xd0, 0xff, 0xb7, 0x3d, 0xdb, 0x31, 0xed, 0x36, 0x69, 0x1a, 0xc4, 0xb2, + 0x3c, 0xea, 0xfb, 0xbc, 0x8f, 0x96, 0x67, 0x3f, 0xf9, 0x60, 0x7e, 0x06, 0x8a, 0xb9, 0xc4, 0xdf, + 0x3c, 0x0e, 0x3c, 0xdb, 0x69, 0xe8, 0xd3, 0x91, 0x0a, 0xac, 0xab, 0x1b, 0xe2, 0x14, 0xcd, 0x40, + 0x80, 0x20, 0xaf, 0xa1, 0xb1, 0x36, 0x7b, 0x07, 0x11, 0x9e, 0x90, 0x23, 0x8c, 0xef, 0x19, 0x55, + 0x6e, 0x40, 0x07, 0x61, 0xf5, 0x53, 0x11, 0xdb, 0x06, 0xf5, 0xec, 0xcd, 0xee, 0x5a, 0x24, 0x28, + 0x62, 0xbb, 0x8a, 0xc6, 0xdd, 0x36, 0xf5, 0x48, 0xe0, 0x7a, 0x3c, 0xb6, 0x02, 0xd8, 0x91, 0x64, + 0xe9, 0x26, 0x4e, 0x9f, 0x36, 0xa3, 0xe9, 0xd3, 0x06, 0x2f, 0xa3, 0x49, 0x62, 0x86, 0xbd, 0x6b, + 0x84, 0x77, 0x96, 0xd9, 0xfd, 0xa7, 0x94, 0x73, 0x87, 0x92, 0x65, 0x93, 0x82, 0x5a, 0x62, 0x92, + 0xeb, 0xdd, 0x36, 0xd5, 0x11, 0x89, 0x7e, 0x47, 0x49, 0xcb, 0xc6, 0x16, 0x27, 0x8d, 0x6e, 0x6e, + 0x52, 0x33, 0x60, 0xa1, 0x1d, 0xea, 0x9b, 0xb4, 0x15, 0x26, 0xa4, 0x83, 0xb0, 0xfa, 0x0c, 0x3a, + 0x2d, 0x3c, 0xcd, 0xf8, 0xc1, 0x01, 0xc9, 0x5a, 0x44, 0x93, 0xec, 0x6c, 0x31, 0xdc, 0x6d, 0x87, + 0x96, 0xe7, 0x0b, 0x31, 0xe1, 0x47, 0xa1, 0x2c, 0x3e, 0x81, 0xf8, 0x93, 0x9c, 0xb0, 0x09, 0xb6, + 0xc2, 0x86, 0xde, 0x86, 0x74, 0xb0, 0x83, 0x4b, 0x88, 0xe1, 0x96, 0x50, 0x94, 0x8e, 0xcf, 0x13, + 0x7d, 0xdb, 0x9b, 0xcd, 0x18, 0x6e, 0x97, 0x5d, 0x18, 0x7e, 0xac, 0x80, 0xe1, 0x70, 0x82, 0x31, + 0x89, 0xa1, 0x0f, 0xf4, 0x54, 0x52, 0x46, 0x06, 0x4f, 0x8a, 0xfa, 0x73, 0xf9, 0xbc, 0x11, 0xe8, + 0x20, 0xee, 0x7b, 0x39, 0xf0, 0x3e, 0xcf, 0x6c, 0xc4, 0x77, 0x04, 0x3e, 0x3e, 0xa6, 0x47, 0xd8, + 0x98, 0x2e, 0xc9, 0x20, 0x8a, 0x32, 0xe8, 0xab, 0xbf, 0x55, 0xd0, 0xb1, 0x64, 0x6d, 0x1e, 0xd0, + 0x56, 0x9d, 0x7a, 0x22, 0x8f, 0x97, 0xd0, 0x58, 0x8b, 0x2d, 0x94, 0xf6, 0x03, 0xc8, 0xed, 0x21, + 0x63, 0xa9, 0x36, 0x1a, 0x4d, 0xb7, 0xd1, 0x87, 0x62, 0xbb, 0x67, 0xb0, 0x42, 0x56, 0x57, 0xd0, + 0x14, 0xd7, 0x97, 0x20, 0xa7, 0x06, 0xb1, 0xb4, 0x2f, 0x64, 0x0b, 0x1c, 0x32, 0x7f, 0xc0, 0x5f, + 0x43, 0x58, 0x36, 0x63, 0xd0, 0x17, 0x81, 0x47, 0xa2, 0x03, 0xac, 0xd4, 0xd8, 0x4a, 0x28, 0xae, + 0x4f, 0x37, 0x52, 0x2b, 0xea, 0x26, 0x5c, 0x41, 0xa3, 0x29, 0x98, 0xd8, 0x7d, 0x45, 0x63, 0xf8, + 0x22, 0xc2, 0xf1, 0x18, 0x86, 0x72, 0x8b, 0xf3, 0x3c, 0x9e, 0xb6, 0xbc, 0xc0, 0x96, 0xba, 0x0e, + 0x15, 0x4d, 0xfb, 0xd9, 0xdb, 0xac, 0xbd, 0x06, 0x5b, 0x8d, 0x2f, 0xa7, 0x2e, 0xcf, 0x5c, 0x46, + 0xba, 0x3c, 0xf3, 0x85, 0x9a, 0xa5, 0xae, 0xc1, 0x1e, 0x90, 0xd5, 0xf6, 0x06, 0xe4, 0xa7, 0x0a, + 0x7c, 0xe4, 0xdd, 0x77, 0xcd, 0xad, 0x55, 0x4a, 0xe3, 0x1d, 0x1f, 0x26, 0xa9, 0x45, 0xbc, 0xae, + 0xe1, 0xb7, 0xa3, 0xc3, 0x4a, 0x19, 0xe0, 0xb0, 0x0a, 0x75, 0x1e, 0xb7, 0x61, 0x3d, 0x0c, 0xc7, + 0xf4, 0x28, 0x09, 0xa8, 0x41, 0x02, 0x96, 0xe3, 0x51, 0x7d, 0x9c, 0x2f, 0x2c, 0x05, 0xf8, 0x34, + 0x9a, 0x6a, 0x93, 0x6e, 0xd3, 0x25, 0x96, 0xe1, 0xdb, 0xef, 0xf2, 0x1e, 0xdd, 0xaf, 0x4f, 0xc2, + 0xda, 0x63, 0xfb, 0x5d, 0xaa, 0x36, 0xd1, 0x4c, 0x12, 0x1e, 0x84, 0xbb, 0x8e, 0xc6, 0x48, 0x2b, + 0x3c, 0xf5, 0x00, 0xd3, 0xad, 0xf0, 0x6b, 0xee, 0xd3, 0xcf, 0x4e, 0x9e, 0x69, 0xd8, 0xc1, 0xd3, + 0x4e, 0xbd, 0x6a, 0xba, 0x2d, 0xf8, 0x86, 0x87, 0x7f, 0xe6, 0x7d, 0x6b, 0x0b, 0xbe, 0x79, 0x6b, + 0x4e, 0xf0, 0xc9, 0x07, 0xf3, 0x08, 0x22, 0xa8, 0x39, 0x81, 0x0e, 0xb6, 0xd4, 0x3b, 0xd2, 0xf6, + 0xe5, 0xf7, 0x16, 0xde, 0x7e, 0x83, 0x7e, 0x0a, 0x52, 0x69, 0x4b, 0x25, 0xf4, 0xa3, 0x2d, 0x85, + 0x58, 0xfb, 0xcb, 0x03, 0xfa, 0x4c, 0xde, 0x78, 0xa9, 0x39, 0x01, 0xf5, 0x1c, 0xd2, 0x94, 0xae, + 0xf1, 0x13, 0x4c, 0x93, 0x4d, 0xea, 0xdb, 0xd0, 0xfb, 0x35, 0x7f, 0xcd, 0xb3, 0x4d, 0xfa, 0xf6, + 0x53, 0xe2, 0x34, 0xa8, 0x35, 0x30, 0xca, 0x7f, 0x1f, 0x84, 0x30, 0xd3, 0xfa, 0x80, 0x72, 0x16, + 0x1d, 0x34, 0xf9, 0x12, 0x53, 0x1e, 0xd7, 0xc5, 0x23, 0x7e, 0x07, 0x61, 0xb3, 0xe3, 0x79, 0xd4, + 0x09, 0x0c, 0x8f, 0x12, 0xcb, 0x68, 0x87, 0xea, 0x30, 0x94, 0x76, 0x53, 0x81, 0xbb, 0xd4, 0x94, + 0x2a, 0x70, 0x97, 0x9a, 0xfa, 0x34, 0xd8, 0xd5, 0x29, 0xb1, 0x18, 0x28, 0xbc, 0x83, 0x8e, 0x09, + 0x5f, 0x51, 0x27, 0x06, 0xae, 0x47, 0xc1, 0xe9, 0xe8, 0x10, 0x9c, 0xce, 0x82, 0x83, 0x35, 0xe8, + 0xda, 0xd0, 0x3c, 0x77, 0xfe, 0x2d, 0x74, 0x42, 0x38, 0xf7, 0xa9, 0xe9, 0x3a, 0x56, 0xda, 0xfd, + 0xfe, 0x21, 0xb8, 0xaf, 0x80, 0x8b, 0xc7, 0xc2, 0x83, 0x04, 0xa0, 0x8b, 0xc4, 0x5b, 0xe3, 0x39, + 0x69, 0xda, 0x56, 0x78, 0x95, 0x32, 0x02, 0xf2, 0xc2, 0xf0, 0x48, 0x40, 0x67, 0x0f, 0x0c, 0xc1, + 0xfb, 0x11, 0xb0, 0xbf, 0x21, 0xcc, 0xaf, 0x93, 0x17, 0x3a, 0x09, 0x28, 0xae, 0xa3, 0x43, 0x0e, + 0xdd, 0x96, 0x0b, 0x3c, 0x36, 0x04, 0x77, 0x53, 0x0e, 0xdd, 0x8e, 0x8b, 0xeb, 0xa3, 0x23, 0xa1, + 0x8f, 0xbc, 0xc2, 0x1e, 0x1c, 0x82, 0xb3, 0x19, 0x87, 0x6e, 0x67, 0x8b, 0xba, 0x8d, 0x8e, 0x86, + 0x4e, 0xf3, 0x0b, 0x3a, 0x3e, 0x04, 0xb7, 0x6f, 0x38, 0x74, 0x3b, 0xaf, 0x98, 0xcf, 0x50, 0xf8, + 0x26, 0xaf, 0x90, 0x13, 0x43, 0xf0, 0xfa, 0x9a, 0x43, 0xb7, 0xd3, 0x45, 0x54, 0x1d, 0xb8, 0xef, + 0x4a, 0x27, 0xa9, 0xbf, 0xf2, 0xc2, 0xf6, 0x03, 0xe9, 0x9b, 0x2f, 0x3a, 0xfb, 0xe0, 0x9b, 0x8f, + 0x5f, 0x64, 0x2c, 0xbc, 0x80, 0x0e, 0xf2, 0xb3, 0x9a, 0xdf, 0x80, 0x8a, 0x06, 0xbe, 0x10, 0x54, + 0xdf, 0x57, 0x80, 0x9c, 0xcb, 0x71, 0x08, 0x63, 0x65, 0x03, 0x8d, 0xd1, 0x70, 0x41, 0x7c, 0xfe, + 0xde, 0xc9, 0x1b, 0x7c, 0xc5, 0x36, 0xaa, 0xec, 0xc9, 0x5f, 0x71, 0x02, 0xaf, 0xab, 0x83, 0xb5, + 0xca, 0x22, 0x9a, 0x94, 0x96, 0xf1, 0x34, 0x1a, 0xdd, 0xa2, 0x5d, 0x88, 0x29, 0xfc, 0x89, 0x67, + 0xd0, 0x81, 0xe7, 0xa4, 0xd9, 0xe1, 0x83, 0x6a, 0x5c, 0xe7, 0x0f, 0x37, 0x46, 0xae, 0x2b, 0x6a, + 0x07, 0xce, 0x53, 0x7e, 0x9f, 0x4c, 0xe4, 0x67, 0x0f, 0xf7, 0xf7, 0x93, 0x42, 0x35, 0x9c, 0xbf, + 0x90, 0x43, 0x10, 0x08, 0xe7, 0xaf, 0xaf, 0xde, 0x80, 0xf9, 0x2b, 0xb9, 0x4d, 0x5d, 0x01, 0x44, + 0x69, 0x78, 0xae, 0x26, 0xf4, 0x71, 0xa8, 0x8d, 0xaf, 0xfe, 0x5a, 0xf0, 0x0c, 0x09, 0xcc, 0x90, + 0xe2, 0xb5, 0x54, 0x8a, 0xaf, 0x17, 0xa7, 0xf8, 0x7f, 0x9a, 0xdc, 0x85, 0x0f, 0x4f, 0xa3, 0x03, + 0xcc, 0x17, 0xee, 0xa1, 0x31, 0x4e, 0xba, 0xe2, 0x33, 0x7d, 0x01, 0x25, 0xa8, 0xe7, 0xca, 0xd9, + 0x52, 0x39, 0x8e, 0x59, 0x55, 0xdf, 0xfb, 0xc7, 0x7f, 0x7e, 0x30, 0x72, 0x1c, 0x57, 0xb4, 0xbe, + 0x44, 0x39, 0xfe, 0xbd, 0xf8, 0xb0, 0xc9, 0x10, 0xc7, 0xf8, 0x72, 0x89, 0x9f, 0x2c, 0x47, 0x5d, + 0x59, 0xd8, 0x8d, 0x0a, 0xa0, 0xac, 0x32, 0x94, 0xe7, 0xf0, 0x99, 0xfe, 0x28, 0xb5, 0x9d, 0x88, + 0xe8, 0xee, 0xe1, 0x9f, 0x28, 0x08, 0xc5, 0x77, 0x08, 0x7c, 0xbe, 0xaf, 0xcb, 0x0c, 0x5d, 0x5d, + 0xb9, 0x30, 0x90, 0x2c, 0xe0, 0xba, 0xc6, 0x70, 0x69, 0x78, 0x3e, 0x0f, 0xd7, 0xd3, 0xf0, 0x00, + 0xe0, 0xd7, 0x06, 0x6d, 0x47, 0xba, 0x51, 0xf4, 0xf0, 0x6f, 0x14, 0x74, 0x28, 0xc9, 0x76, 0xe3, + 0xea, 0x00, 0x6e, 0xa5, 0x1e, 0xdf, 0x1d, 0xcc, 0x45, 0x06, 0xf3, 0x0a, 0xbe, 0x5c, 0x02, 0xd3, + 0xa8, 0x87, 0xb7, 0xe6, 0x08, 0xac, 0x6d, 0xf5, 0xf0, 0x8f, 0x14, 0xf4, 0x7f, 0xb1, 0xc5, 0x87, + 0xab, 0xeb, 0xf8, 0xcd, 0xbe, 0x9e, 0x63, 0x46, 0xac, 0xd2, 0x3f, 0xe3, 0x19, 0x22, 0x4c, 0xfd, + 0x12, 0x43, 0x77, 0x09, 0x57, 0xcb, 0xd0, 0x39, 0x9b, 0x81, 0xb6, 0x23, 0x88, 0xb6, 0x1e, 0xfe, + 0x1d, 0x14, 0x99, 0xb3, 0x58, 0x25, 0x45, 0x4e, 0x30, 0xf8, 0x25, 0xd9, 0x4b, 0xb2, 0xea, 0xea, + 0xdb, 0x0c, 0xdf, 0x6d, 0x7c, 0xb3, 0x2f, 0x3e, 0xce, 0xb5, 0x24, 0x8b, 0xac, 0xed, 0x48, 0xa4, + 0x4c, 0x5c, 0xf2, 0x98, 0xed, 0x2f, 0x29, 0x79, 0xe6, 0xcf, 0x02, 0xbb, 0x03, 0x5d, 0x5e, 0x72, + 0x80, 0x07, 0x25, 0x8f, 0xfe, 0xe0, 0x10, 0x97, 0x3c, 0xe2, 0x15, 0xf7, 0x5a, 0xf2, 0x0c, 0x41, + 0x39, 0x40, 0xc9, 0x45, 0xf2, 0x92, 0x25, 0xff, 0xbe, 0x82, 0x26, 0x25, 0x62, 0x1f, 0xf7, 0x4f, + 0x49, 0xf6, 0x4f, 0x0c, 0x95, 0x8b, 0x83, 0x09, 0x03, 0xc4, 0x73, 0x0c, 0xa2, 0x8a, 0x4f, 0xe5, + 0x41, 0x6c, 0xda, 0x7e, 0x00, 0x5d, 0xe9, 0xe3, 0x9f, 0x01, 0x28, 0x20, 0xad, 0x4b, 0x40, 0x25, + 0xa9, 0xfe, 0x12, 0x50, 0x29, 0x1e, 0xbc, 0x38, 0x6f, 0x0c, 0x14, 0xcf, 0x9b, 0x9f, 0x1a, 0x38, + 0x7f, 0x56, 0xd0, 0xeb, 0xb9, 0x14, 0x3f, 0xbe, 0x36, 0x88, 0xff, 0xcc, 0x9f, 0x04, 0x76, 0x09, + 0x7b, 0x89, 0xc1, 0xbe, 0x89, 0x17, 0xcb, 0x60, 0x87, 0xdd, 0x18, 0x0d, 0x9f, 0xc4, 0x1c, 0xfa, + 0xa1, 0x82, 0xa6, 0x22, 0xa2, 0x65, 0xe0, 0x9e, 0x7c, 0xab, 0xf8, 0xfc, 0x96, 0x5b, 0xb2, 0x7c, + 0x94, 0xc3, 0x9d, 0x24, 0xd9, 0x91, 0x7f, 0x53, 0x80, 0xc0, 0x4c, 0xb3, 0xc9, 0xf8, 0x52, 0xff, + 0x73, 0x2e, 0x9f, 0xfb, 0xae, 0x5c, 0xde, 0x85, 0x06, 0xa0, 0x7e, 0xc0, 0x50, 0xdf, 0xc3, 0x2b, + 0xb9, 0x07, 0x23, 0xe7, 0x41, 0x36, 0x5d, 0xcf, 0x20, 0x5c, 0x4f, 0xdb, 0x11, 0x2c, 0x4e, 0x4f, + 0xdb, 0xc9, 0x70, 0xe9, 0x3d, 0xfc, 0x77, 0x05, 0x4d, 0xa7, 0x19, 0xde, 0x82, 0x40, 0xfa, 0x10, + 0xdd, 0x05, 0x81, 0xf4, 0xa3, 0x8f, 0xd5, 0x75, 0x16, 0xc8, 0x43, 0x7c, 0x3f, 0x2f, 0x90, 0xe7, + 0x4c, 0xcb, 0x90, 0xfe, 0xc4, 0xbf, 0x23, 0xe8, 0xf1, 0x5e, 0x7a, 0xea, 0x4a, 0x4c, 0x77, 0x0f, + 0xff, 0x52, 0x41, 0x13, 0x51, 0xd7, 0xe0, 0xb7, 0x0a, 0x07, 0xa8, 0xcc, 0x7f, 0x55, 0xce, 0x0f, + 0x22, 0x3a, 0x48, 0x77, 0xc7, 0x9d, 0xa3, 0xed, 0x48, 0xf7, 0xe1, 0x9e, 0x78, 0xe2, 0xfb, 0x33, + 0xbc, 0xaf, 0xc4, 0xbc, 0x6c, 0xc1, 0x51, 0x96, 0xa1, 0x96, 0x2b, 0x17, 0x06, 0x92, 0x1d, 0xa4, + 0xc9, 0xd9, 0x46, 0x64, 0xa8, 0xfc, 0x24, 0x56, 0xfc, 0x0b, 0x05, 0x1d, 0x4e, 0xb1, 0x9c, 0x58, + 0x2b, 0xcf, 0x50, 0x82, 0xbb, 0xad, 0x5c, 0x1a, 0x5c, 0x01, 0xd0, 0xce, 0x33, 0xb4, 0x67, 0xf1, + 0x17, 0x4b, 0xb6, 0x24, 0x50, 0xbd, 0x7f, 0x11, 0x54, 0x5c, 0x92, 0x6a, 0x2c, 0x38, 0x67, 0x73, + 0xb9, 0xcf, 0x8a, 0x36, 0xb0, 0x3c, 0xe0, 0xbc, 0xcf, 0x70, 0xae, 0xe2, 0xbb, 0x25, 0x9b, 0x10, + 0xda, 0x20, 0x77, 0x0b, 0x8a, 0x0f, 0x96, 0x5e, 0x78, 0x9c, 0x1c, 0x4e, 0x91, 0x94, 0x05, 0x0d, + 0x91, 0x21, 0x40, 0x0b, 0x1a, 0x22, 0xcb, 0x7a, 0xaa, 0x57, 0x19, 0xf4, 0x2a, 0xbe, 0x58, 0x00, + 0x1d, 0x6e, 0x08, 0x11, 0xab, 0xda, 0xc3, 0xdf, 0x51, 0xd0, 0x94, 0xcc, 0x2a, 0xe2, 0xfe, 0x9f, + 0x1b, 0x49, 0x5a, 0xb4, 0x72, 0xae, 0x5c, 0x10, 0x90, 0x7d, 0x81, 0x21, 0x9b, 0xc3, 0xc7, 0x73, + 0x5b, 0xd5, 0x35, 0xb7, 0x8c, 0x4d, 0x4a, 0xf1, 0x1f, 0xa0, 0x33, 0x25, 0xb2, 0xb0, 0xa4, 0x33, + 0xb3, 0xb4, 0x64, 0x49, 0x67, 0xe6, 0xf0, 0x90, 0xea, 0x4d, 0x06, 0xee, 0x1a, 0xbe, 0x52, 0x76, + 0x65, 0x65, 0x9c, 0x63, 0xea, 0x30, 0xfe, 0xa3, 0xe8, 0xd3, 0x24, 0x7d, 0x58, 0xd0, 0xa7, 0xb9, + 0x3c, 0x65, 0x41, 0x9f, 0xe6, 0xf3, 0x92, 0xea, 0x0d, 0x86, 0xfa, 0x2a, 0x5e, 0xc8, 0x43, 0x6d, + 0xfb, 0x9c, 0xc8, 0x31, 0x80, 0xab, 0x4c, 0x81, 0xfe, 0xab, 0xf8, 0x06, 0xcc, 0x70, 0x0b, 0x05, + 0xdf, 0x80, 0xfd, 0xc8, 0x93, 0x82, 0x6f, 0xc0, 0xbe, 0xd4, 0x85, 0x7a, 0x97, 0xa1, 0xbf, 0x83, + 0x6f, 0xe5, 0xa1, 0x97, 0x07, 0x81, 0x6f, 0xb0, 0x6f, 0x6f, 0x31, 0xc3, 0x6c, 0xab, 0xa7, 0xed, + 0xc0, 0x9b, 0x1e, 0x7e, 0x5f, 0x41, 0xd3, 0xe9, 0x0f, 0xf8, 0x82, 0x1b, 0x5b, 0x96, 0xd8, 0x28, + 0xb8, 0xfa, 0xe4, 0x70, 0x02, 0x03, 0xa0, 0x4e, 0xc1, 0xcd, 0x1e, 0x0f, 0x7e, 0x2f, 0x6c, 0xf3, + 0x99, 0x3c, 0xc6, 0xa3, 0xa0, 0xd7, 0xf3, 0xb9, 0x91, 0x5d, 0xa2, 0x2f, 0xec, 0x18, 0x19, 0xbd, + 0x18, 0x12, 0x11, 0xef, 0xd2, 0x5b, 0xae, 0x7d, 0xf4, 0x72, 0x4e, 0xf9, 0xf8, 0xe5, 0x9c, 0xf2, + 0xaf, 0x97, 0x73, 0xca, 0xf7, 0x5e, 0xcd, 0xed, 0xfb, 0xf8, 0xd5, 0xdc, 0xbe, 0x7f, 0xbe, 0x9a, + 0xdb, 0xf7, 0x44, 0x93, 0x68, 0xba, 0xba, 0x53, 0x9f, 0x37, 0x9f, 0x12, 0xdb, 0x91, 0x3d, 0xbc, + 0x48, 0xfe, 0x4f, 0xbc, 0xfa, 0x18, 0xfb, 0x5f, 0x76, 0x57, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, + 0x71, 0xe3, 0x72, 0xee, 0xc3, 0x28, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4395,6 +4405,18 @@ func (m *QueryHeadGroupMemberResponse) MarshalToSizedBuffer(dAtA []byte) (int, e _ = i var l int _ = l + if m.GroupMemberExtra != nil { + { + size, err := m.GroupMemberExtra.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.GroupMember != nil { { size, err := m.GroupMember.MarshalToSizedBuffer(dAtA[:i]) @@ -5468,6 +5490,10 @@ func (m *QueryHeadGroupMemberResponse) Size() (n int) { l = m.GroupMember.Size() n += 1 + l + sovQuery(uint64(l)) } + if m.GroupMemberExtra != nil { + l = m.GroupMemberExtra.Size() + n += 1 + l + sovQuery(uint64(l)) + } return n } @@ -8555,6 +8581,42 @@ func (m *QueryHeadGroupMemberResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupMemberExtra", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GroupMemberExtra == nil { + m.GroupMemberExtra = &types1.GroupMemberExtra{} + } + if err := m.GroupMemberExtra.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index b5a626cbb..decd81d46 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -1379,6 +1379,168 @@ func (m *MsgUpdateGroupMemberResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateGroupMemberResponse proto.InternalMessageInfo +type MsgRenewGroupMember struct { + // operator defines the account address of the operator who has the UpdateGroupMember permission of the group. + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // group_owner defines the account address of the group owner + GroupOwner string `protobuf:"bytes,2,opt,name=group_owner,json=groupOwner,proto3" json:"group_owner,omitempty"` + // group_name defines the name of the group which to be updated + GroupName string `protobuf:"bytes,3,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` + // members defines a list of members which will be renew to the group + Members []*MsgGroupMember `protobuf:"bytes,4,rep,name=members,proto3" json:"members,omitempty"` +} + +func (m *MsgRenewGroupMember) Reset() { *m = MsgRenewGroupMember{} } +func (m *MsgRenewGroupMember) String() string { return proto.CompactTextString(m) } +func (*MsgRenewGroupMember) ProtoMessage() {} +func (*MsgRenewGroupMember) Descriptor() ([]byte, []int) { + return fileDescriptor_ddb71b028305a3cc, []int{24} +} +func (m *MsgRenewGroupMember) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRenewGroupMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRenewGroupMember.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 *MsgRenewGroupMember) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRenewGroupMember.Merge(m, src) +} +func (m *MsgRenewGroupMember) XXX_Size() int { + return m.Size() +} +func (m *MsgRenewGroupMember) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRenewGroupMember.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRenewGroupMember proto.InternalMessageInfo + +func (m *MsgRenewGroupMember) GetOperator() string { + if m != nil { + return m.Operator + } + return "" +} + +func (m *MsgRenewGroupMember) GetGroupOwner() string { + if m != nil { + return m.GroupOwner + } + return "" +} + +func (m *MsgRenewGroupMember) GetGroupName() string { + if m != nil { + return m.GroupName + } + return "" +} + +func (m *MsgRenewGroupMember) GetMembers() []*MsgGroupMember { + if m != nil { + return m.Members + } + return nil +} + +type MsgRenewGroupMemberResponse struct { +} + +func (m *MsgRenewGroupMemberResponse) Reset() { *m = MsgRenewGroupMemberResponse{} } +func (m *MsgRenewGroupMemberResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRenewGroupMemberResponse) ProtoMessage() {} +func (*MsgRenewGroupMemberResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ddb71b028305a3cc, []int{25} +} +func (m *MsgRenewGroupMemberResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRenewGroupMemberResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRenewGroupMemberResponse.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 *MsgRenewGroupMemberResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRenewGroupMemberResponse.Merge(m, src) +} +func (m *MsgRenewGroupMemberResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRenewGroupMemberResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRenewGroupMemberResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRenewGroupMemberResponse proto.InternalMessageInfo + +type MsgGroupMember struct { + // member defines the account address of the group member + Member string `protobuf:"bytes,1,opt,name=member,proto3" json:"member,omitempty"` + // expiration_time defines the expiration time of the group member + ExpirationTime time.Time `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3,stdtime" json:"expiration_time"` +} + +func (m *MsgGroupMember) Reset() { *m = MsgGroupMember{} } +func (m *MsgGroupMember) String() string { return proto.CompactTextString(m) } +func (*MsgGroupMember) ProtoMessage() {} +func (*MsgGroupMember) Descriptor() ([]byte, []int) { + return fileDescriptor_ddb71b028305a3cc, []int{26} +} +func (m *MsgGroupMember) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgGroupMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgGroupMember.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 *MsgGroupMember) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgGroupMember.Merge(m, src) +} +func (m *MsgGroupMember) XXX_Size() int { + return m.Size() +} +func (m *MsgGroupMember) XXX_DiscardUnknown() { + xxx_messageInfo_MsgGroupMember.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgGroupMember proto.InternalMessageInfo + +func (m *MsgGroupMember) GetMember() string { + if m != nil { + return m.Member + } + return "" +} + +func (m *MsgGroupMember) GetExpirationTime() time.Time { + if m != nil { + return m.ExpirationTime + } + return time.Time{} +} + type MsgUpdateGroupExtra struct { // operator defines the account address of the operator who has the UpdateGroupMember permission of the group. Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` @@ -1394,7 +1556,7 @@ func (m *MsgUpdateGroupExtra) Reset() { *m = MsgUpdateGroupExtra{} } func (m *MsgUpdateGroupExtra) String() string { return proto.CompactTextString(m) } func (*MsgUpdateGroupExtra) ProtoMessage() {} func (*MsgUpdateGroupExtra) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{24} + return fileDescriptor_ddb71b028305a3cc, []int{27} } func (m *MsgUpdateGroupExtra) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1458,7 +1620,7 @@ func (m *MsgUpdateGroupExtraResponse) Reset() { *m = MsgUpdateGroupExtra func (m *MsgUpdateGroupExtraResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateGroupExtraResponse) ProtoMessage() {} func (*MsgUpdateGroupExtraResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{25} + return fileDescriptor_ddb71b028305a3cc, []int{28} } func (m *MsgUpdateGroupExtraResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1500,7 +1662,7 @@ func (m *MsgLeaveGroup) Reset() { *m = MsgLeaveGroup{} } func (m *MsgLeaveGroup) String() string { return proto.CompactTextString(m) } func (*MsgLeaveGroup) ProtoMessage() {} func (*MsgLeaveGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{26} + return fileDescriptor_ddb71b028305a3cc, []int{29} } func (m *MsgLeaveGroup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1557,7 +1719,7 @@ func (m *MsgLeaveGroupResponse) Reset() { *m = MsgLeaveGroupResponse{} } func (m *MsgLeaveGroupResponse) String() string { return proto.CompactTextString(m) } func (*MsgLeaveGroupResponse) ProtoMessage() {} func (*MsgLeaveGroupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{27} + return fileDescriptor_ddb71b028305a3cc, []int{30} } func (m *MsgLeaveGroupResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1606,7 +1768,7 @@ func (m *MsgUpdateBucketInfo) Reset() { *m = MsgUpdateBucketInfo{} } func (m *MsgUpdateBucketInfo) String() string { return proto.CompactTextString(m) } func (*MsgUpdateBucketInfo) ProtoMessage() {} func (*MsgUpdateBucketInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{28} + return fileDescriptor_ddb71b028305a3cc, []int{31} } func (m *MsgUpdateBucketInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1677,7 +1839,7 @@ func (m *MsgUpdateBucketInfoResponse) Reset() { *m = MsgUpdateBucketInfo func (m *MsgUpdateBucketInfoResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateBucketInfoResponse) ProtoMessage() {} func (*MsgUpdateBucketInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{29} + return fileDescriptor_ddb71b028305a3cc, []int{32} } func (m *MsgUpdateBucketInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1719,7 +1881,7 @@ func (m *MsgCancelCreateObject) Reset() { *m = MsgCancelCreateObject{} } func (m *MsgCancelCreateObject) String() string { return proto.CompactTextString(m) } func (*MsgCancelCreateObject) ProtoMessage() {} func (*MsgCancelCreateObject) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{30} + return fileDescriptor_ddb71b028305a3cc, []int{33} } func (m *MsgCancelCreateObject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1776,7 +1938,7 @@ func (m *MsgCancelCreateObjectResponse) Reset() { *m = MsgCancelCreateOb func (m *MsgCancelCreateObjectResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelCreateObjectResponse) ProtoMessage() {} func (*MsgCancelCreateObjectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{31} + return fileDescriptor_ddb71b028305a3cc, []int{34} } func (m *MsgCancelCreateObjectResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1823,7 +1985,7 @@ func (m *MsgPutPolicy) Reset() { *m = MsgPutPolicy{} } func (m *MsgPutPolicy) String() string { return proto.CompactTextString(m) } func (*MsgPutPolicy) ProtoMessage() {} func (*MsgPutPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{32} + return fileDescriptor_ddb71b028305a3cc, []int{35} } func (m *MsgPutPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1895,7 +2057,7 @@ func (m *MsgPutPolicyResponse) Reset() { *m = MsgPutPolicyResponse{} } func (m *MsgPutPolicyResponse) String() string { return proto.CompactTextString(m) } func (*MsgPutPolicyResponse) ProtoMessage() {} func (*MsgPutPolicyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{33} + return fileDescriptor_ddb71b028305a3cc, []int{36} } func (m *MsgPutPolicyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1937,7 +2099,7 @@ func (m *MsgDeletePolicy) Reset() { *m = MsgDeletePolicy{} } func (m *MsgDeletePolicy) String() string { return proto.CompactTextString(m) } func (*MsgDeletePolicy) ProtoMessage() {} func (*MsgDeletePolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{34} + return fileDescriptor_ddb71b028305a3cc, []int{37} } func (m *MsgDeletePolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1995,7 +2157,7 @@ func (m *MsgDeletePolicyResponse) Reset() { *m = MsgDeletePolicyResponse func (m *MsgDeletePolicyResponse) String() string { return proto.CompactTextString(m) } func (*MsgDeletePolicyResponse) ProtoMessage() {} func (*MsgDeletePolicyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{35} + return fileDescriptor_ddb71b028305a3cc, []int{38} } func (m *MsgDeletePolicyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2039,7 +2201,7 @@ func (m *MsgMirrorObject) Reset() { *m = MsgMirrorObject{} } func (m *MsgMirrorObject) String() string { return proto.CompactTextString(m) } func (*MsgMirrorObject) ProtoMessage() {} func (*MsgMirrorObject) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{36} + return fileDescriptor_ddb71b028305a3cc, []int{39} } func (m *MsgMirrorObject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2096,7 +2258,7 @@ func (m *MsgMirrorObjectResponse) Reset() { *m = MsgMirrorObjectResponse func (m *MsgMirrorObjectResponse) String() string { return proto.CompactTextString(m) } func (*MsgMirrorObjectResponse) ProtoMessage() {} func (*MsgMirrorObjectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{37} + return fileDescriptor_ddb71b028305a3cc, []int{40} } func (m *MsgMirrorObjectResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2138,7 +2300,7 @@ func (m *MsgMirrorBucket) Reset() { *m = MsgMirrorBucket{} } func (m *MsgMirrorBucket) String() string { return proto.CompactTextString(m) } func (*MsgMirrorBucket) ProtoMessage() {} func (*MsgMirrorBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{38} + return fileDescriptor_ddb71b028305a3cc, []int{41} } func (m *MsgMirrorBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2188,7 +2350,7 @@ func (m *MsgUpdateObjectInfoResponse) Reset() { *m = MsgUpdateObjectInfo func (m *MsgUpdateObjectInfoResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateObjectInfoResponse) ProtoMessage() {} func (*MsgUpdateObjectInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{39} + return fileDescriptor_ddb71b028305a3cc, []int{42} } func (m *MsgUpdateObjectInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2233,7 +2395,7 @@ func (m *MsgUpdateObjectInfo) Reset() { *m = MsgUpdateObjectInfo{} } func (m *MsgUpdateObjectInfo) String() string { return proto.CompactTextString(m) } func (*MsgUpdateObjectInfo) ProtoMessage() {} func (*MsgUpdateObjectInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{40} + return fileDescriptor_ddb71b028305a3cc, []int{43} } func (m *MsgUpdateObjectInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2297,7 +2459,7 @@ func (m *MsgMirrorBucketResponse) Reset() { *m = MsgMirrorBucketResponse func (m *MsgMirrorBucketResponse) String() string { return proto.CompactTextString(m) } func (*MsgMirrorBucketResponse) ProtoMessage() {} func (*MsgMirrorBucketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{41} + return fileDescriptor_ddb71b028305a3cc, []int{44} } func (m *MsgMirrorBucketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2339,7 +2501,7 @@ func (m *MsgMirrorGroup) Reset() { *m = MsgMirrorGroup{} } func (m *MsgMirrorGroup) String() string { return proto.CompactTextString(m) } func (*MsgMirrorGroup) ProtoMessage() {} func (*MsgMirrorGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{42} + return fileDescriptor_ddb71b028305a3cc, []int{45} } func (m *MsgMirrorGroup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2389,7 +2551,7 @@ func (m *MsgMirrorGroupResponse) Reset() { *m = MsgMirrorGroupResponse{} func (m *MsgMirrorGroupResponse) String() string { return proto.CompactTextString(m) } func (*MsgMirrorGroupResponse) ProtoMessage() {} func (*MsgMirrorGroupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{43} + return fileDescriptor_ddb71b028305a3cc, []int{46} } func (m *MsgMirrorGroupResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2431,7 +2593,7 @@ func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParams) ProtoMessage() {} func (*MsgUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{44} + return fileDescriptor_ddb71b028305a3cc, []int{47} } func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2482,7 +2644,7 @@ func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParamsResponse) ProtoMessage() {} func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{45} + return fileDescriptor_ddb71b028305a3cc, []int{48} } func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2527,7 +2689,7 @@ func (m *MsgMigrateBucket) Reset() { *m = MsgMigrateBucket{} } func (m *MsgMigrateBucket) String() string { return proto.CompactTextString(m) } func (*MsgMigrateBucket) ProtoMessage() {} func (*MsgMigrateBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{46} + return fileDescriptor_ddb71b028305a3cc, []int{49} } func (m *MsgMigrateBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2591,7 +2753,7 @@ func (m *MsgMigrateBucketResponse) Reset() { *m = MsgMigrateBucketRespon func (m *MsgMigrateBucketResponse) String() string { return proto.CompactTextString(m) } func (*MsgMigrateBucketResponse) ProtoMessage() {} func (*MsgMigrateBucketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{47} + return fileDescriptor_ddb71b028305a3cc, []int{50} } func (m *MsgMigrateBucketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2636,7 +2798,7 @@ func (m *MsgCompleteMigrateBucket) Reset() { *m = MsgCompleteMigrateBuck func (m *MsgCompleteMigrateBucket) String() string { return proto.CompactTextString(m) } func (*MsgCompleteMigrateBucket) ProtoMessage() {} func (*MsgCompleteMigrateBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{48} + return fileDescriptor_ddb71b028305a3cc, []int{51} } func (m *MsgCompleteMigrateBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2700,7 +2862,7 @@ func (m *MsgCompleteMigrateBucketResponse) Reset() { *m = MsgCompleteMig func (m *MsgCompleteMigrateBucketResponse) String() string { return proto.CompactTextString(m) } func (*MsgCompleteMigrateBucketResponse) ProtoMessage() {} func (*MsgCompleteMigrateBucketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{49} + return fileDescriptor_ddb71b028305a3cc, []int{52} } func (m *MsgCompleteMigrateBucketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2741,7 +2903,7 @@ func (m *MsgCancelMigrateBucket) Reset() { *m = MsgCancelMigrateBucket{} func (m *MsgCancelMigrateBucket) String() string { return proto.CompactTextString(m) } func (*MsgCancelMigrateBucket) ProtoMessage() {} func (*MsgCancelMigrateBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{50} + return fileDescriptor_ddb71b028305a3cc, []int{53} } func (m *MsgCancelMigrateBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2791,7 +2953,7 @@ func (m *MsgCancelMigrateBucketResponse) Reset() { *m = MsgCancelMigrate func (m *MsgCancelMigrateBucketResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelMigrateBucketResponse) ProtoMessage() {} func (*MsgCancelMigrateBucketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_ddb71b028305a3cc, []int{51} + return fileDescriptor_ddb71b028305a3cc, []int{54} } func (m *MsgCancelMigrateBucketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2845,6 +3007,9 @@ func init() { proto.RegisterType((*MsgDeleteGroupResponse)(nil), "greenfield.storage.MsgDeleteGroupResponse") proto.RegisterType((*MsgUpdateGroupMember)(nil), "greenfield.storage.MsgUpdateGroupMember") proto.RegisterType((*MsgUpdateGroupMemberResponse)(nil), "greenfield.storage.MsgUpdateGroupMemberResponse") + proto.RegisterType((*MsgRenewGroupMember)(nil), "greenfield.storage.MsgRenewGroupMember") + proto.RegisterType((*MsgRenewGroupMemberResponse)(nil), "greenfield.storage.MsgRenewGroupMemberResponse") + proto.RegisterType((*MsgGroupMember)(nil), "greenfield.storage.MsgGroupMember") proto.RegisterType((*MsgUpdateGroupExtra)(nil), "greenfield.storage.MsgUpdateGroupExtra") proto.RegisterType((*MsgUpdateGroupExtraResponse)(nil), "greenfield.storage.MsgUpdateGroupExtraResponse") proto.RegisterType((*MsgLeaveGroup)(nil), "greenfield.storage.MsgLeaveGroup") @@ -2878,142 +3043,146 @@ func init() { func init() { proto.RegisterFile("greenfield/storage/tx.proto", fileDescriptor_ddb71b028305a3cc) } var fileDescriptor_ddb71b028305a3cc = []byte{ - // 2152 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7, - 0xd9, 0x37, 0x25, 0xea, 0x83, 0x0f, 0xa9, 0x0f, 0xaf, 0x95, 0x88, 0xa1, 0x5e, 0x53, 0x34, 0xf3, - 0x22, 0x91, 0xbf, 0x44, 0x47, 0x75, 0x8d, 0x54, 0x87, 0xa0, 0x92, 0xd3, 0x18, 0x42, 0xa2, 0x5a, - 0x59, 0xda, 0x2e, 0x10, 0xa0, 0x60, 0x86, 0xbb, 0xe3, 0xd5, 0x36, 0xdc, 0x8f, 0xce, 0x2c, 0x65, - 0x33, 0x05, 0x7a, 0xe8, 0xa5, 0xd7, 0x00, 0xe9, 0xa1, 0x87, 0xa2, 0x40, 0x81, 0x1e, 0x7a, 0x2a, - 0x8a, 0x22, 0xb7, 0x02, 0x45, 0x2f, 0x05, 0x8c, 0x9e, 0x8c, 0x9c, 0x8a, 0x1e, 0xdc, 0xc0, 0x2e, - 0xd0, 0x3f, 0x21, 0xd7, 0x62, 0x76, 0x66, 0x77, 0x87, 0xfb, 0x49, 0xcb, 0x52, 0xe2, 0x93, 0xbd, - 0x33, 0xbf, 0x99, 0x79, 0x9e, 0xdf, 0xf3, 0x35, 0xf3, 0x50, 0xb0, 0x66, 0x10, 0x8c, 0xed, 0xfb, - 0x26, 0x1e, 0xe8, 0x1d, 0xea, 0x39, 0x04, 0x19, 0xb8, 0xe3, 0x3d, 0xdc, 0x74, 0x89, 0xe3, 0x39, - 0x8a, 0x12, 0x4d, 0x6e, 0x8a, 0xc9, 0xc6, 0xaa, 0xe6, 0x50, 0xcb, 0xa1, 0x1d, 0x8b, 0x1a, 0x9d, - 0xa3, 0xb7, 0xd8, 0x3f, 0x1c, 0xdc, 0x78, 0x8d, 0x4f, 0xf4, 0xfc, 0xaf, 0x0e, 0xff, 0x10, 0x53, - 0x2b, 0x86, 0x63, 0x38, 0x7c, 0x9c, 0xfd, 0x4f, 0x8c, 0xae, 0x1b, 0x8e, 0x63, 0x0c, 0x70, 0xc7, - 0xff, 0xea, 0x0f, 0xef, 0x77, 0x3c, 0xd3, 0xc2, 0xd4, 0x43, 0x96, 0x2b, 0x00, 0x2d, 0x49, 0x36, - 0xcd, 0xb1, 0x2c, 0xc7, 0xee, 0x20, 0xd7, 0x25, 0xce, 0x11, 0x1a, 0x84, 0x5b, 0x24, 0x10, 0x0f, - 0x08, 0x72, 0x5d, 0x4c, 0x04, 0xa0, 0x2d, 0x01, 0x5c, 0x4c, 0x2c, 0x93, 0x52, 0xd3, 0xb1, 0x05, - 0x36, 0x65, 0x93, 0x80, 0x82, 0x42, 0x80, 0x8b, 0x08, 0xb2, 0x84, 0x7e, 0xed, 0xbf, 0x4e, 0xc3, - 0xd2, 0x3e, 0x35, 0x6e, 0x12, 0x8c, 0x3c, 0xbc, 0x3b, 0xd4, 0x3e, 0xc1, 0x9e, 0xb2, 0x05, 0x73, - 0x1a, 0xfb, 0x76, 0x48, 0xbd, 0xd4, 0x2a, 0x6d, 0x54, 0x76, 0xeb, 0x5f, 0x7e, 0x71, 0x75, 0x45, - 0xd0, 0xb2, 0xa3, 0xeb, 0x04, 0x53, 0xda, 0xf5, 0x88, 0x69, 0x1b, 0x6a, 0x00, 0x54, 0xd6, 0xa1, - 0xda, 0xf7, 0x57, 0xf7, 0x6c, 0x64, 0xe1, 0xfa, 0x14, 0x5b, 0xa7, 0x02, 0x1f, 0xfa, 0x21, 0xb2, - 0xb0, 0xb2, 0x0b, 0x70, 0x64, 0x52, 0xb3, 0x6f, 0x0e, 0x4c, 0x6f, 0x54, 0x9f, 0x6e, 0x95, 0x36, - 0x16, 0xb7, 0xda, 0x9b, 0x49, 0x2b, 0x6d, 0xde, 0x0b, 0x51, 0x77, 0x46, 0x2e, 0x56, 0xa5, 0x55, - 0xca, 0x0e, 0x2c, 0xb9, 0x68, 0x64, 0x61, 0xdb, 0xeb, 0x21, 0x2e, 0x46, 0xbd, 0x5c, 0x20, 0xe0, - 0xa2, 0x58, 0x20, 0x46, 0x95, 0xf7, 0x40, 0x71, 0x89, 0x69, 0x21, 0x32, 0xea, 0x51, 0x37, 0xdc, - 0x65, 0xa6, 0x60, 0x97, 0x65, 0xb1, 0xa6, 0xeb, 0x06, 0xfb, 0xbc, 0x0f, 0xe7, 0xe4, 0x7d, 0x84, - 0x6d, 0xeb, 0xb3, 0xad, 0xd2, 0x46, 0x75, 0x6b, 0x4d, 0xd6, 0x4b, 0xd8, 0x63, 0x47, 0x40, 0xd4, - 0xb3, 0xd1, 0x5e, 0x62, 0x48, 0xb9, 0x02, 0x8a, 0x76, 0x88, 0x88, 0x81, 0xf5, 0x1e, 0xc1, 0x48, - 0xef, 0xfd, 0x74, 0xe8, 0x78, 0xa8, 0x3e, 0xd7, 0x2a, 0x6d, 0x94, 0xd5, 0x65, 0x31, 0xa3, 0x62, - 0xa4, 0x7f, 0xc8, 0xc6, 0xb7, 0x6b, 0xbf, 0xf8, 0xef, 0x9f, 0x2e, 0x05, 0xc4, 0xb7, 0xbb, 0xb0, - 0x1a, 0xb3, 0x9f, 0x8a, 0xa9, 0xeb, 0xd8, 0x14, 0x2b, 0x6f, 0x43, 0x45, 0xd8, 0xc4, 0xd4, 0x85, - 0x25, 0xd7, 0x1e, 0x3d, 0x59, 0x3f, 0xf3, 0xaf, 0x27, 0xeb, 0xe5, 0xbb, 0xa6, 0xed, 0x7d, 0xf9, - 0xc5, 0xd5, 0xaa, 0x50, 0x97, 0x7d, 0xaa, 0xf3, 0x1c, 0xbd, 0xa7, 0xb7, 0x1f, 0xf8, 0x4e, 0xf1, - 0x2e, 0x1e, 0xe0, 0xd0, 0x29, 0xae, 0xc3, 0xbc, 0xe3, 0x62, 0x32, 0x91, 0x57, 0x84, 0xc8, 0x42, - 0xb7, 0xd8, 0x5e, 0x60, 0xca, 0x84, 0xf8, 0xf6, 0x6b, 0xbe, 0x36, 0xf2, 0xc1, 0x81, 0x36, 0xed, - 0x5f, 0x95, 0x60, 0x85, 0xcd, 0x99, 0x54, 0x73, 0x6c, 0xcf, 0xb4, 0x87, 0xa7, 0x2b, 0x99, 0xf2, - 0x2a, 0xcc, 0x12, 0x8c, 0xa8, 0x63, 0xfb, 0xce, 0x5a, 0x51, 0xc5, 0x57, 0x5c, 0xe2, 0x26, 0xfc, - 0x5f, 0x9a, 0x54, 0xa1, 0xd8, 0xff, 0x91, 0x03, 0xec, 0x76, 0xff, 0x27, 0x58, 0x3b, 0xa5, 0x00, - 0x5b, 0x87, 0xaa, 0xe3, 0x6f, 0xcf, 0x01, 0x5c, 0x68, 0xe0, 0x43, 0x3e, 0xe0, 0x02, 0xd4, 0x5c, - 0x34, 0x1a, 0x38, 0x48, 0xef, 0x51, 0xf3, 0x53, 0xec, 0x87, 0x4e, 0x59, 0xad, 0x8a, 0xb1, 0xae, - 0xf9, 0x69, 0x3c, 0x48, 0x67, 0x8e, 0x15, 0xa4, 0x17, 0xa0, 0xc6, 0xa8, 0x60, 0x41, 0xea, 0x8d, - 0x5c, 0xec, 0x87, 0x44, 0x45, 0xad, 0x8a, 0x31, 0x06, 0xcf, 0x0a, 0x9e, 0xb9, 0x63, 0x05, 0xcf, - 0x45, 0x58, 0xc6, 0x0f, 0x5d, 0xa6, 0xb7, 0x76, 0x88, 0xb5, 0x4f, 0xe8, 0xd0, 0xa2, 0xf5, 0xf9, - 0xd6, 0xf4, 0x46, 0x4d, 0x5d, 0xe2, 0xe3, 0x37, 0x83, 0x61, 0xe5, 0x7d, 0x58, 0x22, 0x58, 0x1f, - 0xda, 0x3a, 0xb2, 0xb5, 0x11, 0x97, 0xae, 0x92, 0xad, 0xa3, 0x1a, 0x42, 0x7d, 0x1d, 0x17, 0xc9, - 0xd8, 0x77, 0x4e, 0x18, 0x72, 0x2b, 0xcb, 0x61, 0x28, 0x0c, 0x33, 0x61, 0x18, 0x72, 0xf4, 0x9e, - 0xde, 0xfe, 0x7c, 0x0a, 0x16, 0xf6, 0xa9, 0xd1, 0xc5, 0x68, 0x20, 0x3c, 0xe7, 0x94, 0x7c, 0xbd, - 0xd0, 0x77, 0xbe, 0x0b, 0xab, 0xc6, 0xc0, 0xe9, 0xa3, 0x41, 0xef, 0xc8, 0x24, 0xde, 0x10, 0x0d, - 0x7a, 0x06, 0x71, 0x86, 0x2e, 0xd3, 0x88, 0xb9, 0xd1, 0x82, 0xba, 0xc2, 0xa7, 0xef, 0xf1, 0xd9, - 0x5b, 0x6c, 0x72, 0x4f, 0x57, 0xde, 0x85, 0x75, 0x8a, 0x35, 0xc7, 0xd6, 0x85, 0xa9, 0xfb, 0x03, - 0xda, 0x43, 0x86, 0xd1, 0xa3, 0xa6, 0x61, 0x23, 0x6f, 0x48, 0x30, 0x4f, 0xbd, 0x35, 0x75, 0x2d, - 0x84, 0x75, 0xdd, 0xdd, 0x01, 0xdd, 0x31, 0x8c, 0x6e, 0x08, 0x89, 0x47, 0xdc, 0x2a, 0xbc, 0x32, - 0x46, 0x4a, 0x18, 0x6a, 0xbf, 0x29, 0xc1, 0xb9, 0x7d, 0x6a, 0xa8, 0x98, 0x8d, 0x7e, 0xfb, 0xa4, - 0xc5, 0xe5, 0x3e, 0x0f, 0x6b, 0x29, 0xd2, 0x85, 0xd2, 0xff, 0x91, 0x1b, 0xfb, 0xa6, 0xe3, 0x8e, - 0x84, 0xdc, 0x8d, 0xb8, 0xdc, 0x92, 0x74, 0x6f, 0xc0, 0x12, 0x25, 0x5a, 0x2f, 0x29, 0xe1, 0x02, - 0x25, 0xda, 0x6e, 0x24, 0xe4, 0x1b, 0xb0, 0xa4, 0x53, 0x6f, 0x0c, 0xc7, 0x05, 0x5d, 0xd0, 0xa9, - 0x37, 0x8e, 0x63, 0xfb, 0xc9, 0x0a, 0x95, 0xc3, 0xfd, 0x6e, 0x47, 0x8e, 0x20, 0xf6, 0x93, 0x71, - 0x33, 0xe1, 0x7e, 0x12, 0x4e, 0x85, 0x55, 0x86, 0x3b, 0x66, 0x8d, 0x5c, 0xd1, 0xa9, 0x77, 0x10, - 0x8f, 0xf4, 0x38, 0x9f, 0x1f, 0xfa, 0x7e, 0x10, 0xf1, 0x75, 0x02, 0x01, 0xf7, 0xeb, 0x92, 0x54, - 0xf8, 0x5e, 0x2e, 0xef, 0x91, 0x2b, 0x63, 0xcc, 0x73, 0x1e, 0x27, 0x2a, 0xe3, 0xe9, 0x8a, 0xbe, - 0x0d, 0x10, 0xf2, 0x4b, 0xeb, 0xd3, 0xad, 0xe9, 0x22, 0x82, 0x2b, 0x01, 0xc1, 0x54, 0xaa, 0xaa, - 0xe5, 0xe7, 0xaa, 0xaa, 0x31, 0x95, 0xff, 0x52, 0x82, 0xc5, 0x30, 0xdf, 0xfa, 0xd9, 0xe6, 0x58, - 0x45, 0xf5, 0x3c, 0x00, 0xcf, 0x63, 0x92, 0xa6, 0x15, 0x7f, 0xc4, 0x57, 0x74, 0x0b, 0xe6, 0x2c, - 0x6c, 0xf5, 0x31, 0x09, 0xb4, 0xcc, 0xd9, 0x52, 0x00, 0x95, 0x15, 0x98, 0xc1, 0x0f, 0x3d, 0x82, - 0x84, 0x7e, 0xfc, 0x23, 0x56, 0x2c, 0x0e, 0xe0, 0xd5, 0x71, 0xe1, 0x43, 0xd7, 0xbd, 0x01, 0xf3, - 0x61, 0x62, 0x9d, 0xc0, 0x73, 0xe7, 0x0c, 0x9e, 0x68, 0xdb, 0x9e, 0x4f, 0x07, 0xf7, 0x0e, 0x4e, - 0xc7, 0xf1, 0x6c, 0x9f, 0x4f, 0x48, 0xdc, 0x4a, 0x75, 0x5f, 0x0f, 0xe9, 0xd4, 0xc8, 0x3e, 0x53, - 0xbe, 0x4b, 0xde, 0x75, 0xf5, 0x40, 0xc5, 0x7d, 0x9f, 0x9f, 0x63, 0x8a, 0xf5, 0x3d, 0xa8, 0x72, - 0xb1, 0x9c, 0x07, 0x36, 0x26, 0x5c, 0xae, 0x9c, 0x85, 0x5c, 0x87, 0xdb, 0x0c, 0x1b, 0xd3, 0x68, - 0x3a, 0x6e, 0xe2, 0x77, 0x60, 0x51, 0x58, 0xae, 0xe7, 0x39, 0xec, 0x3d, 0x50, 0x2f, 0x17, 0x58, - 0xba, 0x26, 0xf0, 0x77, 0x9c, 0x1d, 0x9d, 0x55, 0xb8, 0xb3, 0xd2, 0x7a, 0xdd, 0xa7, 0xa2, 0x3e, - 0x53, 0xb0, 0xc5, 0x52, 0xb8, 0x05, 0xe7, 0x2e, 0xdd, 0xfb, 0x13, 0xe4, 0x85, 0xec, 0xfe, 0x83, - 0x17, 0x3a, 0x09, 0xf0, 0x03, 0xe6, 0x65, 0x2f, 0x1d, 0xb9, 0xe9, 0xb1, 0x90, 0x5a, 0x16, 0xe3, - 0xba, 0x84, 0xba, 0xfe, 0xa1, 0xe4, 0x97, 0xc5, 0x0f, 0x30, 0x3a, 0x12, 0x9e, 0x7d, 0x0d, 0x66, - 0x39, 0x7f, 0x85, 0x3a, 0x0a, 0xdc, 0xe9, 0x69, 0xb8, 0x5d, 0x65, 0xba, 0x88, 0x63, 0xc4, 0xc5, - 0x24, 0x92, 0x34, 0x4a, 0xd0, 0x53, 0x92, 0xbd, 0x78, 0xd1, 0xdd, 0xb3, 0xef, 0x3b, 0xa7, 0x95, - 0x9f, 0x3f, 0x48, 0x7d, 0x4e, 0x4e, 0xfb, 0x65, 0xb7, 0x99, 0x52, 0x76, 0xef, 0xee, 0xd9, 0xde, - 0x8d, 0xeb, 0xf7, 0xd0, 0x60, 0x88, 0x93, 0xcf, 0xcd, 0x93, 0x78, 0x74, 0x9f, 0xc0, 0xb3, 0x22, - 0xcf, 0x6b, 0x22, 0x46, 0x43, 0xc6, 0x7f, 0x5b, 0xe2, 0x97, 0x03, 0x64, 0x6b, 0x78, 0x30, 0xf6, - 0xf6, 0x7a, 0x49, 0xca, 0xf9, 0x3a, 0x9c, 0x4f, 0x95, 0x2f, 0xd4, 0xe0, 0x6f, 0x53, 0x50, 0xdb, - 0xa7, 0xc6, 0xc1, 0xd0, 0x3b, 0x70, 0x06, 0xa6, 0x36, 0x3a, 0xa6, 0xe0, 0xef, 0x40, 0xc5, 0x25, - 0xa6, 0xad, 0x99, 0x2e, 0x1a, 0xf8, 0x62, 0x57, 0xb7, 0x5a, 0x32, 0xf3, 0x51, 0x67, 0x69, 0xf3, - 0x20, 0xc0, 0xa9, 0xd1, 0x12, 0x76, 0x07, 0x25, 0x98, 0x3a, 0x43, 0xa2, 0x05, 0x4a, 0x85, 0xdf, - 0xca, 0xf7, 0x01, 0xa8, 0x87, 0x3c, 0xcc, 0x4c, 0x4d, 0xfd, 0xbc, 0x99, 0xbd, 0x79, 0x37, 0x00, - 0xaa, 0xd2, 0x1a, 0x65, 0x1f, 0xd8, 0x1b, 0xcd, 0x24, 0xc8, 0x33, 0x1d, 0xbb, 0xe7, 0x99, 0x16, - 0x16, 0x8f, 0xc0, 0xc6, 0x26, 0xef, 0xb0, 0x6d, 0x06, 0x1d, 0xb6, 0xcd, 0x3b, 0x41, 0x87, 0x6d, - 0x77, 0xfe, 0xd1, 0x93, 0xf5, 0xd2, 0x67, 0xff, 0x5e, 0x2f, 0xa9, 0x8b, 0xd1, 0x62, 0x36, 0x1d, - 0xe7, 0xf8, 0xc0, 0xaf, 0x41, 0x21, 0x83, 0xf2, 0xfd, 0xd0, 0xf5, 0x47, 0x82, 0xe7, 0x4b, 0xd1, - 0xfd, 0x90, 0xa3, 0xf7, 0xf4, 0xf6, 0x9f, 0xe5, 0xfb, 0xe1, 0xcb, 0x6a, 0x97, 0x38, 0x0d, 0x5d, - 0xe9, 0xe6, 0x78, 0x62, 0x4c, 0xfc, 0x9d, 0x33, 0xb1, 0x6f, 0x12, 0xe2, 0x90, 0x17, 0x0a, 0xad, - 0xcb, 0x30, 0x65, 0xea, 0x22, 0x27, 0xe7, 0x1e, 0x3e, 0x65, 0xea, 0xf1, 0x38, 0x9c, 0x2e, 0x8a, - 0xc3, 0xf2, 0x64, 0xd7, 0x6a, 0x59, 0x8d, 0x30, 0x02, 0x7f, 0x2f, 0xab, 0xf8, 0x42, 0xbd, 0xa6, - 0x13, 0x55, 0x31, 0x2f, 0x13, 0x72, 0x0d, 0xc6, 0x32, 0xe1, 0x57, 0xf2, 0x5d, 0x21, 0x9a, 0xff, - 0xd6, 0x3a, 0x09, 0xe3, 0xb5, 0xa0, 0x7c, 0x12, 0xb5, 0x40, 0xb6, 0x61, 0xac, 0xfb, 0xf6, 0x3b, - 0xfe, 0x4e, 0xe0, 0x73, 0x2f, 0x72, 0x31, 0x7e, 0x2e, 0x13, 0x16, 0x5c, 0x1a, 0x52, 0x6f, 0xd1, - 0x92, 0x88, 0xa1, 0xf4, 0x9f, 0x73, 0x0f, 0xe4, 0xb6, 0x3b, 0xf0, 0xdb, 0xf6, 0xca, 0x0d, 0xa8, - 0xa0, 0xa1, 0x77, 0xe8, 0x10, 0x46, 0x5f, 0x91, 0xfc, 0x11, 0x54, 0x79, 0x1b, 0x66, 0x79, 0xe3, - 0x5f, 0x64, 0x9b, 0x46, 0x1a, 0xe7, 0xfc, 0x8c, 0xdd, 0x32, 0x53, 0x50, 0x15, 0xf8, 0xed, 0x45, - 0x26, 0x6e, 0xb4, 0x93, 0xa0, 0x5b, 0x16, 0x2a, 0x14, 0xf8, 0xeb, 0x12, 0x2c, 0xfb, 0xba, 0x18, - 0x04, 0x9d, 0x72, 0xe7, 0x58, 0xb9, 0x08, 0x67, 0x63, 0x1d, 0x06, 0x53, 0xf7, 0xb9, 0x5e, 0x50, - 0x17, 0xe5, 0xf6, 0xc1, 0x9e, 0x9e, 0xd7, 0x8c, 0x28, 0x9f, 0x50, 0x33, 0xa2, 0x01, 0xf5, 0xb8, - 0xe2, 0x21, 0x2b, 0xbf, 0x9c, 0xf2, 0x27, 0x6f, 0x3a, 0x96, 0xcb, 0x72, 0xf0, 0x37, 0xc2, 0xce, - 0x2e, 0x34, 0x53, 0x1b, 0x76, 0xf7, 0x91, 0x65, 0x0e, 0x46, 0x11, 0x55, 0x8d, 0x64, 0xdf, 0xee, - 0x3d, 0x1f, 0xb2, 0xa7, 0x2b, 0x3b, 0x50, 0x33, 0x8e, 0x8c, 0x9e, 0x85, 0x5c, 0xd7, 0xb4, 0x8d, - 0xa0, 0xc2, 0x37, 0xd3, 0x1c, 0xe7, 0xd6, 0xbd, 0x5b, 0xfb, 0x1c, 0xa6, 0x56, 0x8d, 0x23, 0x43, - 0xfc, 0x3f, 0xd1, 0xba, 0x6b, 0x43, 0x2b, 0x8b, 0x88, 0x90, 0xad, 0x9f, 0xf3, 0xc7, 0xb1, 0x7f, - 0x33, 0xfa, 0x26, 0xa8, 0x8a, 0xcb, 0xd8, 0x82, 0x66, 0xfa, 0xf9, 0x81, 0x84, 0x5b, 0x5f, 0xaf, - 0xc0, 0xf4, 0x3e, 0x35, 0x94, 0x8f, 0xa1, 0x36, 0xf6, 0xbb, 0xd9, 0xeb, 0x69, 0xcc, 0xc4, 0x7e, - 0x9c, 0x69, 0x5c, 0x9e, 0x00, 0x14, 0xd6, 0xe7, 0x8f, 0xa1, 0x36, 0xf6, 0x23, 0x4c, 0xd6, 0x09, - 0x32, 0x28, 0xf3, 0x84, 0xb4, 0x5f, 0x55, 0x94, 0x01, 0x2c, 0x27, 0x9e, 0x25, 0x6f, 0x66, 0x6c, - 0x10, 0x07, 0x36, 0x3a, 0x13, 0x02, 0x65, 0x7d, 0xc6, 0xca, 0x69, 0x96, 0x3e, 0x32, 0x28, 0x53, - 0x9f, 0xb4, 0x84, 0xaf, 0x38, 0x70, 0x36, 0xf9, 0x0b, 0xd1, 0x46, 0x16, 0x23, 0x71, 0x64, 0xe3, - 0xda, 0xa4, 0x48, 0x59, 0xa5, 0xb1, 0xf7, 0x45, 0xbe, 0x13, 0x70, 0x50, 0x81, 0x13, 0xc4, 0xda, - 0x99, 0x1f, 0x01, 0x48, 0xcd, 0xec, 0x0b, 0x19, 0x4b, 0x23, 0x48, 0xe3, 0x62, 0x21, 0x44, 0x36, - 0x7f, 0xa2, 0x5d, 0x9e, 0x65, 0xfe, 0x38, 0x30, 0xd3, 0xfc, 0x59, 0x2d, 0x6e, 0xa6, 0x89, 0xd4, - 0xde, 0xce, 0xd2, 0x24, 0x82, 0x64, 0x6a, 0x92, 0xd2, 0xf4, 0x0d, 0x43, 0xa5, 0xc0, 0x0e, 0x32, - 0xa8, 0x20, 0x54, 0x62, 0x27, 0x10, 0x50, 0x52, 0xde, 0x93, 0x99, 0x22, 0x26, 0xa0, 0x8d, 0xb7, - 0x26, 0x86, 0x26, 0x03, 0xa6, 0x40, 0x2b, 0x19, 0x54, 0x10, 0x30, 0xb1, 0x13, 0xc6, 0x03, 0x46, - 0x1c, 0x33, 0x41, 0xc0, 0x88, 0xb3, 0xae, 0x4d, 0x8a, 0x4c, 0x66, 0x1c, 0xe9, 0x32, 0x9a, 0x9f, - 0x71, 0x22, 0x60, 0x41, 0xc6, 0x49, 0x5e, 0x7f, 0x95, 0x1f, 0x43, 0x55, 0x6e, 0x12, 0xb7, 0x73, - 0x03, 0xcf, 0xc7, 0x34, 0x2e, 0x15, 0x63, 0xe4, 0xed, 0xe5, 0xa6, 0x6b, 0x3b, 0xd7, 0x9f, 0xf2, - 0xb7, 0x4f, 0x69, 0xa3, 0x32, 0xe3, 0x24, 0x5b, 0xa8, 0x1b, 0xb9, 0x1c, 0x48, 0xc8, 0x4c, 0xe3, - 0x64, 0x76, 0x16, 0x23, 0xe3, 0x48, 0x5d, 0xc5, 0x37, 0x8b, 0x77, 0xf1, 0x81, 0x05, 0xc6, 0x49, - 0xf6, 0xf6, 0x58, 0x3e, 0x90, 0xfa, 0x7a, 0x59, 0xf9, 0x20, 0x82, 0x64, 0xe6, 0x83, 0x64, 0xcf, - 0x8d, 0x59, 0x46, 0xbe, 0xf5, 0xb7, 0x73, 0x63, 0x22, 0xdf, 0x32, 0x29, 0x57, 0x73, 0xe5, 0x47, - 0x50, 0x89, 0x5a, 0x33, 0xad, 0x8c, 0x85, 0x21, 0xa2, 0xb1, 0x51, 0x84, 0x48, 0xe6, 0x31, 0xb1, - 0x77, 0x7e, 0x1e, 0x13, 0xdb, 0x5f, 0x9e, 0x00, 0x24, 0x9f, 0x30, 0xf6, 0xa2, 0x78, 0x3d, 0xd7, - 0x6c, 0x1c, 0x94, 0x79, 0x42, 0xda, 0x33, 0x40, 0xd1, 0x60, 0x61, 0xfc, 0xe6, 0xf6, 0xff, 0x99, - 0xcc, 0x4a, 0xa8, 0xc6, 0x95, 0x49, 0x50, 0xe1, 0x21, 0x3f, 0x83, 0x57, 0xd2, 0x6f, 0xd4, 0x57, - 0x32, 0x8b, 0x46, 0x0a, 0xba, 0x71, 0xfd, 0x79, 0xd0, 0xe1, 0xe1, 0x43, 0x38, 0x97, 0x76, 0x43, - 0xbd, 0x94, 0x9b, 0xe1, 0xc7, 0x0f, 0xde, 0x9a, 0x1c, 0x1b, 0x1c, 0xbb, 0xbb, 0xf7, 0xe8, 0x69, - 0xb3, 0xf4, 0xf8, 0x69, 0xb3, 0xf4, 0xd5, 0xd3, 0x66, 0xe9, 0xb3, 0x67, 0xcd, 0x33, 0x8f, 0x9f, - 0x35, 0xcf, 0xfc, 0xf3, 0x59, 0xf3, 0xcc, 0x47, 0x1d, 0xc3, 0xf4, 0x0e, 0x87, 0x7d, 0xf6, 0x78, - 0xe9, 0xf4, 0xed, 0xfe, 0x55, 0xed, 0x10, 0x99, 0x76, 0x47, 0xfa, 0xeb, 0xaf, 0x87, 0xd1, 0xdf, - 0xc8, 0x8d, 0x5c, 0x4c, 0xfb, 0xb3, 0x7e, 0x67, 0xed, 0x3b, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, - 0x66, 0x33, 0x60, 0x9d, 0x46, 0x27, 0x00, 0x00, + // 2217 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0x1b, 0xc7, + 0x15, 0x36, 0x25, 0xea, 0x87, 0x8f, 0xd4, 0x8f, 0xd7, 0x72, 0xc4, 0x50, 0x35, 0x45, 0x33, 0x45, + 0x22, 0xff, 0x89, 0x8e, 0xea, 0x1a, 0xa9, 0x50, 0x04, 0x95, 0x9c, 0xc6, 0x10, 0x12, 0xd6, 0xca, + 0xd2, 0x76, 0x81, 0x00, 0x05, 0x33, 0xdc, 0x1d, 0xaf, 0xb6, 0x21, 0x77, 0xb7, 0x33, 0x4b, 0xd9, + 0x4c, 0x81, 0x1e, 0x7a, 0xe9, 0x35, 0x45, 0x7a, 0xe8, 0xa1, 0x28, 0x50, 0xa0, 0x87, 0x9e, 0x8a, + 0xa2, 0xc8, 0xad, 0x40, 0xd1, 0x4b, 0x81, 0xa0, 0x27, 0x23, 0xa7, 0xa2, 0x87, 0x34, 0xb0, 0x5b, + 0xf4, 0xde, 0x4b, 0xaf, 0xc5, 0xec, 0xcc, 0xee, 0x0e, 0xf7, 0x97, 0x96, 0xa5, 0x58, 0x27, 0x69, + 0x67, 0xbf, 0x99, 0x79, 0xef, 0x7b, 0x3f, 0xf3, 0xe6, 0x2d, 0x61, 0xcd, 0x20, 0x18, 0x5b, 0x0f, + 0x4c, 0xdc, 0xd7, 0x5b, 0xd4, 0xb5, 0x09, 0x32, 0x70, 0xcb, 0x7d, 0xb4, 0xe9, 0x10, 0xdb, 0xb5, + 0x15, 0x25, 0x7c, 0xb9, 0x29, 0x5e, 0xd6, 0x56, 0x35, 0x9b, 0x0e, 0x6c, 0xda, 0x1a, 0x50, 0xa3, + 0x75, 0xf8, 0x3a, 0xfb, 0xc3, 0xc1, 0xb5, 0x97, 0xf9, 0x8b, 0xae, 0xf7, 0xd4, 0xe2, 0x0f, 0xe2, + 0xd5, 0x8a, 0x61, 0x1b, 0x36, 0x1f, 0x67, 0xff, 0x89, 0xd1, 0x75, 0xc3, 0xb6, 0x8d, 0x3e, 0x6e, + 0x79, 0x4f, 0xbd, 0xe1, 0x83, 0x96, 0x6b, 0x0e, 0x30, 0x75, 0xd1, 0xc0, 0x11, 0x80, 0x86, 0x24, + 0x9b, 0x66, 0x0f, 0x06, 0xb6, 0xd5, 0x42, 0x8e, 0x43, 0xec, 0x43, 0xd4, 0x0f, 0x96, 0x88, 0x21, + 0x1e, 0x12, 0xe4, 0x38, 0x98, 0x08, 0x40, 0x53, 0x02, 0x38, 0x98, 0x0c, 0x4c, 0x4a, 0x4d, 0xdb, + 0x12, 0xd8, 0x84, 0x45, 0x7c, 0x0a, 0x72, 0x01, 0x0e, 0x22, 0x68, 0x20, 0xf4, 0x6b, 0xfe, 0x79, + 0x1a, 0x96, 0xda, 0xd4, 0xb8, 0x45, 0x30, 0x72, 0xf1, 0xee, 0x50, 0xfb, 0x10, 0xbb, 0xca, 0x16, + 0xcc, 0x69, 0xec, 0xd9, 0x26, 0xd5, 0x42, 0xa3, 0xb0, 0x51, 0xda, 0xad, 0x7e, 0xfe, 0xe9, 0xb5, + 0x15, 0x41, 0xcb, 0x8e, 0xae, 0x13, 0x4c, 0x69, 0xc7, 0x25, 0xa6, 0x65, 0xa8, 0x3e, 0x50, 0x59, + 0x87, 0x72, 0xcf, 0x9b, 0xdd, 0xb5, 0xd0, 0x00, 0x57, 0xa7, 0xd8, 0x3c, 0x15, 0xf8, 0xd0, 0xf7, + 0xd0, 0x00, 0x2b, 0xbb, 0x00, 0x87, 0x26, 0x35, 0x7b, 0x66, 0xdf, 0x74, 0x47, 0xd5, 0xe9, 0x46, + 0x61, 0x63, 0x71, 0xab, 0xb9, 0x19, 0xb7, 0xd2, 0xe6, 0xfd, 0x00, 0x75, 0x77, 0xe4, 0x60, 0x55, + 0x9a, 0xa5, 0xec, 0xc0, 0x92, 0x83, 0x46, 0x03, 0x6c, 0xb9, 0x5d, 0xc4, 0xc5, 0xa8, 0x16, 0x73, + 0x04, 0x5c, 0x14, 0x13, 0xc4, 0xa8, 0xf2, 0x36, 0x28, 0x0e, 0x31, 0x07, 0x88, 0x8c, 0xba, 0xd4, + 0x09, 0x56, 0x99, 0xc9, 0x59, 0x65, 0x59, 0xcc, 0xe9, 0x38, 0xfe, 0x3a, 0xef, 0xc0, 0x39, 0x79, + 0x1d, 0x61, 0xdb, 0xea, 0x6c, 0xa3, 0xb0, 0x51, 0xde, 0x5a, 0x93, 0xf5, 0x12, 0xf6, 0xd8, 0x11, + 0x10, 0xf5, 0x6c, 0xb8, 0x96, 0x18, 0x52, 0xae, 0x82, 0xa2, 0x1d, 0x20, 0x62, 0x60, 0xbd, 0x4b, + 0x30, 0xd2, 0xbb, 0x3f, 0x1a, 0xda, 0x2e, 0xaa, 0xce, 0x35, 0x0a, 0x1b, 0x45, 0x75, 0x59, 0xbc, + 0x51, 0x31, 0xd2, 0xdf, 0x63, 0xe3, 0xdb, 0x95, 0x9f, 0xfe, 0xe7, 0x0f, 0x97, 0x7d, 0xe2, 0x9b, + 0x1d, 0x58, 0x8d, 0xd8, 0x4f, 0xc5, 0xd4, 0xb1, 0x2d, 0x8a, 0x95, 0x37, 0xa0, 0x24, 0x6c, 0x62, + 0xea, 0xc2, 0x92, 0x6b, 0x9f, 0x7d, 0xb1, 0x7e, 0xe6, 0x1f, 0x5f, 0xac, 0x17, 0xef, 0x99, 0x96, + 0xfb, 0xf9, 0xa7, 0xd7, 0xca, 0x42, 0x5d, 0xf6, 0xa8, 0xce, 0x73, 0xf4, 0x9e, 0xde, 0x7c, 0xe8, + 0x39, 0xc5, 0x5b, 0xb8, 0x8f, 0x03, 0xa7, 0xb8, 0x01, 0xf3, 0xb6, 0x83, 0xc9, 0x44, 0x5e, 0x11, + 0x20, 0x73, 0xdd, 0x62, 0x7b, 0x81, 0x29, 0x13, 0xe0, 0x9b, 0x2f, 0x7b, 0xda, 0xc8, 0x1b, 0xfb, + 0xda, 0x34, 0x7f, 0x51, 0x80, 0x15, 0xf6, 0xce, 0xa4, 0x9a, 0x6d, 0xb9, 0xa6, 0x35, 0x3c, 0x59, + 0xc9, 0x94, 0x97, 0x60, 0x96, 0x60, 0x44, 0x6d, 0xcb, 0x73, 0xd6, 0x92, 0x2a, 0x9e, 0xa2, 0x12, + 0xd7, 0xe1, 0x6b, 0x49, 0x52, 0x05, 0x62, 0xff, 0x4b, 0x0e, 0xb0, 0x3b, 0xbd, 0x1f, 0x62, 0xed, + 0x84, 0x02, 0x6c, 0x1d, 0xca, 0xb6, 0xb7, 0x3c, 0x07, 0x70, 0xa1, 0x81, 0x0f, 0x79, 0x80, 0x8b, + 0x50, 0x71, 0xd0, 0xa8, 0x6f, 0x23, 0xbd, 0x4b, 0xcd, 0x8f, 0xb0, 0x17, 0x3a, 0x45, 0xb5, 0x2c, + 0xc6, 0x3a, 0xe6, 0x47, 0xd1, 0x20, 0x9d, 0x39, 0x52, 0x90, 0x5e, 0x84, 0x0a, 0xa3, 0x82, 0x05, + 0xa9, 0x3b, 0x72, 0xb0, 0x17, 0x12, 0x25, 0xb5, 0x2c, 0xc6, 0x18, 0x3c, 0x2d, 0x78, 0xe6, 0x8e, + 0x14, 0x3c, 0x97, 0x60, 0x19, 0x3f, 0x72, 0x98, 0xde, 0xda, 0x01, 0xd6, 0x3e, 0xa4, 0xc3, 0x01, + 0xad, 0xce, 0x37, 0xa6, 0x37, 0x2a, 0xea, 0x12, 0x1f, 0xbf, 0xe5, 0x0f, 0x2b, 0xef, 0xc0, 0x12, + 0xc1, 0xfa, 0xd0, 0xd2, 0x91, 0xa5, 0x8d, 0xb8, 0x74, 0xa5, 0x74, 0x1d, 0xd5, 0x00, 0xea, 0xe9, + 0xb8, 0x48, 0xc6, 0x9e, 0x33, 0xc2, 0x90, 0x5b, 0x59, 0x0e, 0x43, 0x61, 0x98, 0x09, 0xc3, 0x90, + 0xa3, 0xf7, 0xf4, 0xe6, 0x27, 0x53, 0xb0, 0xd0, 0xa6, 0x46, 0x07, 0xa3, 0xbe, 0xf0, 0x9c, 0x13, + 0xf2, 0xf5, 0x5c, 0xdf, 0xf9, 0x26, 0xac, 0x1a, 0x7d, 0xbb, 0x87, 0xfa, 0xdd, 0x43, 0x93, 0xb8, + 0x43, 0xd4, 0xef, 0x1a, 0xc4, 0x1e, 0x3a, 0x4c, 0x23, 0xe6, 0x46, 0x0b, 0xea, 0x0a, 0x7f, 0x7d, + 0x9f, 0xbf, 0xbd, 0xcd, 0x5e, 0xee, 0xe9, 0xca, 0x5b, 0xb0, 0x4e, 0xb1, 0x66, 0x5b, 0xba, 0x30, + 0x75, 0xaf, 0x4f, 0xbb, 0xc8, 0x30, 0xba, 0xd4, 0x34, 0x2c, 0xe4, 0x0e, 0x09, 0xe6, 0xa9, 0xb7, + 0xa2, 0xae, 0x05, 0xb0, 0x8e, 0xb3, 0xdb, 0xa7, 0x3b, 0x86, 0xd1, 0x09, 0x20, 0xd1, 0x88, 0x5b, + 0x85, 0xf3, 0x63, 0xa4, 0x04, 0xa1, 0xf6, 0xab, 0x02, 0x9c, 0x6b, 0x53, 0x43, 0xc5, 0x6c, 0xf4, + 0xc5, 0x93, 0x16, 0x95, 0xfb, 0x02, 0xac, 0x25, 0x48, 0x17, 0x48, 0xff, 0x7b, 0x6e, 0xec, 0x5b, + 0xb6, 0x33, 0x12, 0x72, 0xd7, 0xa2, 0x72, 0x4b, 0xd2, 0xbd, 0x0a, 0x4b, 0x94, 0x68, 0xdd, 0xb8, + 0x84, 0x0b, 0x94, 0x68, 0xbb, 0xa1, 0x90, 0xaf, 0xc2, 0x92, 0x4e, 0xdd, 0x31, 0x1c, 0x17, 0x74, + 0x41, 0xa7, 0xee, 0x38, 0x8e, 0xad, 0x27, 0x2b, 0x54, 0x0c, 0xd6, 0xbb, 0x13, 0x3a, 0x82, 0x58, + 0x4f, 0xc6, 0xcd, 0x04, 0xeb, 0x49, 0x38, 0x15, 0x56, 0x19, 0xee, 0x88, 0x67, 0xe4, 0x8a, 0x4e, + 0xdd, 0xfd, 0x68, 0xa4, 0x47, 0xf9, 0x7c, 0xcf, 0xf3, 0x83, 0x90, 0xaf, 0x63, 0x08, 0xb8, 0x5f, + 0x16, 0xa4, 0x83, 0xef, 0x74, 0x79, 0x8f, 0x7c, 0x32, 0x46, 0x3c, 0xe7, 0x71, 0xec, 0x64, 0x3c, + 0x59, 0xd1, 0xb7, 0x01, 0x02, 0x7e, 0x69, 0x75, 0xba, 0x31, 0x9d, 0x47, 0x70, 0xc9, 0x27, 0x98, + 0x4a, 0xa7, 0x6a, 0xf1, 0x99, 0x4e, 0xd5, 0x88, 0xca, 0x7f, 0x2a, 0xc0, 0x62, 0x90, 0x6f, 0xbd, + 0x6c, 0x73, 0xa4, 0x43, 0xf5, 0x02, 0x00, 0xcf, 0x63, 0x92, 0xa6, 0x25, 0x6f, 0xc4, 0x53, 0x74, + 0x0b, 0xe6, 0x06, 0x78, 0xd0, 0xc3, 0xc4, 0xd7, 0x32, 0x63, 0x49, 0x01, 0x54, 0x56, 0x60, 0x06, + 0x3f, 0x72, 0x09, 0x12, 0xfa, 0xf1, 0x87, 0xc8, 0x61, 0xb1, 0x0f, 0x2f, 0x8d, 0x0b, 0x1f, 0xb8, + 0xee, 0x4d, 0x98, 0x0f, 0x12, 0xeb, 0x04, 0x9e, 0x3b, 0x67, 0xf0, 0x44, 0xdb, 0x74, 0x3d, 0x3a, + 0xb8, 0x77, 0x70, 0x3a, 0x8e, 0x66, 0xfb, 0x6c, 0x42, 0xa2, 0x56, 0xaa, 0x7a, 0x7a, 0x48, 0xbb, + 0x86, 0xf6, 0x99, 0xf2, 0x5c, 0xf2, 0x9e, 0xa3, 0xfb, 0x2a, 0xb6, 0x3d, 0x7e, 0x8e, 0x28, 0xd6, + 0xb7, 0xa0, 0xcc, 0xc5, 0xb2, 0x1f, 0x5a, 0x98, 0x70, 0xb9, 0x32, 0x26, 0x72, 0x1d, 0xee, 0x30, + 0x6c, 0x44, 0xa3, 0xe9, 0xa8, 0x89, 0xdf, 0x84, 0x45, 0x61, 0xb9, 0xae, 0x6b, 0xb3, 0xfb, 0x40, + 0xb5, 0x98, 0x63, 0xe9, 0x8a, 0xc0, 0xdf, 0xb5, 0x77, 0x74, 0x76, 0xc2, 0x9d, 0x95, 0xe6, 0xeb, + 0x1e, 0x15, 0xd5, 0x99, 0x9c, 0x25, 0x96, 0x82, 0x25, 0x38, 0x77, 0xc9, 0xde, 0x1f, 0x23, 0x2f, + 0x60, 0xf7, 0xbf, 0xfe, 0x41, 0x67, 0xe1, 0x87, 0xa7, 0x99, 0xdc, 0x6f, 0x87, 0xf1, 0xc3, 0x58, + 0x2d, 0x27, 0xd7, 0x59, 0x6d, 0x6a, 0xc8, 0x4a, 0xfa, 0x53, 0xd2, 0x8e, 0xcf, 0x71, 0x9d, 0x03, + 0x4e, 0x7e, 0xce, 0x33, 0x82, 0x4c, 0xc7, 0x75, 0x98, 0xe5, 0x6b, 0xe5, 0x92, 0x21, 0x70, 0x4a, + 0x1b, 0x58, 0xcd, 0x68, 0x12, 0xe4, 0x9a, 0xb6, 0xd5, 0x65, 0x97, 0x7a, 0x8f, 0x8e, 0xf2, 0x56, + 0x6d, 0x93, 0xdf, 0xf8, 0x37, 0xfd, 0x1b, 0xff, 0xe6, 0x5d, 0xff, 0xc6, 0xbf, 0x3b, 0xcf, 0x22, + 0xf4, 0xe3, 0x7f, 0xae, 0x17, 0xd4, 0xc5, 0x70, 0x32, 0x7b, 0xdd, 0xfc, 0x1b, 0xb7, 0x93, 0x64, + 0xc8, 0xef, 0xb2, 0x6c, 0x70, 0xea, 0xec, 0x94, 0x9c, 0xb3, 0x12, 0xf9, 0x8f, 0xea, 0x12, 0xf0, + 0xff, 0xbb, 0x82, 0x57, 0xbe, 0xbc, 0x8b, 0xd1, 0xa1, 0xc8, 0x40, 0xcf, 0x4e, 0xff, 0x89, 0x69, + 0xb8, 0x5d, 0x66, 0xba, 0x88, 0x6d, 0x44, 0x01, 0x19, 0x4a, 0x1a, 0x1e, 0xa4, 0x53, 0x92, 0xbd, + 0x78, 0x71, 0xb4, 0x67, 0x3d, 0xb0, 0x4f, 0xea, 0x1c, 0x7d, 0x37, 0xf1, 0xda, 0x3f, 0xed, 0x39, + 0x5c, 0x3d, 0xa1, 0x3c, 0xba, 0xb7, 0x67, 0xb9, 0x37, 0x6f, 0xdc, 0x47, 0xfd, 0x21, 0x8e, 0xb7, + 0x05, 0x8e, 0xa3, 0x39, 0x72, 0x0c, 0xd7, 0xbf, 0x2c, 0xaf, 0x09, 0x19, 0x0d, 0x18, 0xff, 0x75, + 0x81, 0x17, 0x71, 0xc8, 0xd2, 0x70, 0x7f, 0xec, 0x8e, 0x7c, 0x4a, 0xca, 0xae, 0x75, 0xb8, 0x90, + 0x28, 0x5f, 0xa0, 0xc1, 0x5f, 0xa6, 0xa0, 0xd2, 0xa6, 0xc6, 0xfe, 0xd0, 0xdd, 0xb7, 0xfb, 0xa6, + 0x36, 0x3a, 0xa2, 0xe0, 0x6f, 0x42, 0xc9, 0x21, 0xa6, 0xa5, 0x99, 0x0e, 0xea, 0x8b, 0x9c, 0xd3, + 0x90, 0x99, 0x0f, 0x3b, 0x80, 0x9b, 0xfb, 0x3e, 0x4e, 0x0d, 0xa7, 0xb0, 0xbb, 0x02, 0xc1, 0xd4, + 0x1e, 0x12, 0xcd, 0x57, 0x2a, 0x78, 0x56, 0xbe, 0x03, 0x40, 0x5d, 0xe4, 0x62, 0x66, 0x6a, 0x3f, + 0x13, 0xa7, 0x2d, 0xde, 0xf1, 0x81, 0xaa, 0x34, 0x27, 0x29, 0x2f, 0xce, 0x4d, 0x94, 0x17, 0x0b, + 0x49, 0x79, 0x31, 0xca, 0xf1, 0xbe, 0x57, 0x2b, 0x04, 0x0c, 0xca, 0x75, 0xbc, 0xe3, 0x8d, 0xf8, + 0xd7, 0xcc, 0xbc, 0x3a, 0x9e, 0xa3, 0xf7, 0xf4, 0xe6, 0x1f, 0xe5, 0x3a, 0xfe, 0xb4, 0xda, 0x25, + 0x4a, 0x43, 0x47, 0xaa, 0xf0, 0x8f, 0x8d, 0x89, 0xbf, 0x72, 0x26, 0xda, 0x26, 0x21, 0x36, 0x79, + 0xae, 0xd0, 0xba, 0x02, 0x53, 0xa6, 0x2e, 0x72, 0x72, 0xe6, 0xe6, 0x53, 0xa6, 0x1e, 0x8d, 0xc3, + 0xe9, 0xbc, 0x38, 0x2c, 0x4e, 0x76, 0xfd, 0x91, 0xd5, 0x08, 0x22, 0xf0, 0xb7, 0xb2, 0x8a, 0xcf, + 0xd5, 0x13, 0x3c, 0x56, 0x15, 0xb3, 0x32, 0x21, 0xd7, 0x60, 0x2c, 0x13, 0x7e, 0x29, 0xd7, 0x0a, + 0xe1, 0xfb, 0x17, 0xd6, 0xf1, 0x19, 0x3f, 0x0b, 0x8a, 0xc7, 0x71, 0x16, 0xc8, 0x36, 0x8c, 0x74, + 0x49, 0x7f, 0xc3, 0xab, 0x37, 0xfe, 0xee, 0x79, 0x2e, 0x30, 0xcf, 0x64, 0xc2, 0x9c, 0xa2, 0x21, + 0xf1, 0xb6, 0x23, 0x89, 0x18, 0x48, 0xff, 0x09, 0xf7, 0x40, 0x6e, 0xbb, 0x7d, 0xef, 0xf3, 0x8a, + 0x72, 0x13, 0x4a, 0x68, 0xe8, 0x1e, 0xd8, 0x84, 0xd1, 0x97, 0x27, 0x7f, 0x08, 0x55, 0xde, 0x80, + 0x59, 0xfe, 0x81, 0x26, 0xac, 0x3c, 0xe3, 0x9c, 0xf3, 0x3d, 0x76, 0x8b, 0x4c, 0x41, 0x55, 0xe0, + 0xb7, 0x17, 0x99, 0xb8, 0xe1, 0x4a, 0x82, 0x6e, 0x59, 0xa8, 0x40, 0xe0, 0xff, 0x15, 0x60, 0xd9, + 0xd3, 0xc5, 0x20, 0xe8, 0x84, 0x3b, 0xfc, 0xca, 0x25, 0x38, 0x1b, 0xe9, 0x04, 0x99, 0xba, 0xc7, + 0xf5, 0x82, 0xba, 0x28, 0xb7, 0x79, 0xf6, 0xf4, 0xac, 0xa6, 0x51, 0xf1, 0x98, 0x9a, 0x46, 0x35, + 0xa8, 0x46, 0x15, 0x0f, 0x58, 0xf9, 0xd9, 0x94, 0xf7, 0xf2, 0x96, 0x3d, 0x70, 0x58, 0x0e, 0xfe, + 0x4a, 0xd8, 0xd9, 0x85, 0x7a, 0x62, 0x63, 0xf5, 0x01, 0x1a, 0x98, 0xfd, 0x51, 0x48, 0x55, 0x2d, + 0xde, 0x5f, 0x7d, 0xdb, 0x83, 0xec, 0xe9, 0xca, 0x0e, 0x54, 0x8c, 0x43, 0xa3, 0x3b, 0x40, 0x8e, + 0x63, 0x5a, 0x86, 0x7f, 0xc2, 0xd7, 0x93, 0x1c, 0xe7, 0xf6, 0xfd, 0xdb, 0x6d, 0x0e, 0x53, 0xcb, + 0xc6, 0xa1, 0x21, 0xfe, 0x8f, 0xdd, 0xb5, 0x9a, 0xd0, 0x48, 0x23, 0x22, 0x60, 0xeb, 0x27, 0xbc, + 0x89, 0xe1, 0x55, 0x46, 0x5f, 0x05, 0x55, 0x51, 0x19, 0x1b, 0x50, 0x4f, 0xde, 0xdf, 0x97, 0x70, + 0xeb, 0xdf, 0xe7, 0x61, 0xba, 0x4d, 0x0d, 0xe5, 0x03, 0xa8, 0x8c, 0x7d, 0xdf, 0x7c, 0x25, 0xe5, + 0x16, 0x2a, 0x83, 0x6a, 0x57, 0x26, 0x00, 0x05, 0xe7, 0xf3, 0x07, 0x50, 0x19, 0xfb, 0x58, 0x96, + 0xb6, 0x83, 0x0c, 0x4a, 0xdd, 0x21, 0xe9, 0xeb, 0x97, 0xd2, 0x87, 0xe5, 0xd8, 0xb5, 0xe4, 0xb5, + 0x94, 0x05, 0xa2, 0xc0, 0x5a, 0x6b, 0x42, 0xa0, 0xac, 0xcf, 0xd8, 0x71, 0x9a, 0xa6, 0x8f, 0x0c, + 0x4a, 0xd5, 0x27, 0x29, 0xe1, 0x2b, 0x36, 0x9c, 0x8d, 0x7f, 0xc9, 0xdb, 0x48, 0x63, 0x24, 0x8a, + 0xac, 0x5d, 0x9f, 0x14, 0x29, 0xab, 0x34, 0x76, 0xbf, 0xc8, 0x76, 0x02, 0x0e, 0xca, 0x71, 0x82, + 0x48, 0xdb, 0xf9, 0x7d, 0x00, 0xe9, 0xa3, 0xc3, 0xc5, 0x94, 0xa9, 0x21, 0xa4, 0x76, 0x29, 0x17, + 0x22, 0x9b, 0x3f, 0xf6, 0x59, 0x23, 0xcd, 0xfc, 0x51, 0x60, 0xaa, 0xf9, 0xd3, 0x3e, 0x45, 0x30, + 0x4d, 0xa4, 0xcf, 0x10, 0x69, 0x9a, 0x84, 0x90, 0x54, 0x4d, 0x12, 0x9a, 0xf3, 0x41, 0xa8, 0xe4, + 0xd8, 0x41, 0x06, 0xe5, 0x84, 0x4a, 0x64, 0x07, 0x02, 0x4a, 0xc2, 0x7d, 0x32, 0x55, 0xc4, 0x18, + 0xb4, 0xf6, 0xfa, 0xc4, 0xd0, 0x78, 0xc0, 0xe4, 0x68, 0x25, 0x83, 0x72, 0x02, 0x26, 0xb2, 0xc3, + 0x78, 0xc0, 0x88, 0x6d, 0x26, 0x08, 0x18, 0xb1, 0xd7, 0xf5, 0x49, 0x91, 0xf1, 0x8c, 0x23, 0x15, + 0xa3, 0xd9, 0x19, 0x27, 0x04, 0xe6, 0x64, 0x9c, 0x78, 0xf9, 0xab, 0xfc, 0x00, 0xca, 0x72, 0x33, + 0xbf, 0x99, 0x19, 0x78, 0x1e, 0xa6, 0x76, 0x39, 0x1f, 0x23, 0x2f, 0x2f, 0x37, 0xc7, 0x9b, 0x99, + 0xfe, 0x94, 0xbd, 0x7c, 0x42, 0xbb, 0x9b, 0x19, 0x27, 0xde, 0xea, 0xde, 0xc8, 0xe4, 0x40, 0x42, + 0xa6, 0x1a, 0x27, 0xb5, 0x03, 0x1c, 0x1a, 0x47, 0xea, 0x2a, 0xbe, 0x96, 0xbf, 0x8a, 0x07, 0xcc, + 0x31, 0x4e, 0xbc, 0xb7, 0xc7, 0xf2, 0x81, 0xd4, 0xd7, 0x4b, 0xcb, 0x07, 0x21, 0x24, 0x35, 0x1f, + 0xc4, 0x7b, 0x6e, 0xcc, 0x32, 0x72, 0xd5, 0xdf, 0xcc, 0x8c, 0x89, 0x6c, 0xcb, 0x24, 0x94, 0xe6, + 0x3c, 0x71, 0x46, 0xda, 0xe4, 0xe9, 0x89, 0x73, 0x1c, 0x98, 0x91, 0x38, 0x93, 0x9b, 0xd0, 0xca, + 0xf7, 0xa1, 0x14, 0x36, 0x82, 0x1a, 0x29, 0xb3, 0x03, 0x44, 0x6d, 0x23, 0x0f, 0x11, 0xcf, 0x9a, + 0x62, 0xed, 0xec, 0xac, 0x29, 0x96, 0xbf, 0x32, 0x01, 0x48, 0xde, 0x61, 0xec, 0xfe, 0xf2, 0x4a, + 0xa6, 0x93, 0x70, 0x50, 0xea, 0x0e, 0x49, 0x97, 0x0e, 0x45, 0x83, 0x85, 0xf1, 0x3a, 0xf1, 0xeb, + 0xa9, 0x76, 0x94, 0x50, 0xb5, 0xab, 0x93, 0xa0, 0x82, 0x4d, 0x7e, 0x0c, 0xe7, 0x93, 0xeb, 0xf7, + 0xab, 0xa9, 0x47, 0x54, 0x02, 0xba, 0x76, 0xe3, 0x59, 0xd0, 0xc1, 0xe6, 0x43, 0x38, 0x97, 0x54, + 0x0f, 0x5f, 0xce, 0x3c, 0x4f, 0xc6, 0x37, 0xde, 0x9a, 0x1c, 0xeb, 0x6f, 0xbb, 0xbb, 0xf7, 0xd9, + 0x93, 0x7a, 0xe1, 0xf1, 0x93, 0x7a, 0xe1, 0xcb, 0x27, 0xf5, 0xc2, 0xc7, 0x4f, 0xeb, 0x67, 0x1e, + 0x3f, 0xad, 0x9f, 0xf9, 0xfb, 0xd3, 0xfa, 0x99, 0xf7, 0x5b, 0x86, 0xe9, 0x1e, 0x0c, 0x7b, 0xec, + 0xaa, 0xd4, 0xea, 0x59, 0xbd, 0x6b, 0xda, 0x01, 0x32, 0xad, 0x96, 0xf4, 0x9b, 0xc0, 0x47, 0xe1, + 0x2f, 0x27, 0x47, 0x0e, 0xa6, 0xbd, 0x59, 0xaf, 0x8f, 0xf7, 0x8d, 0xff, 0x07, 0x00, 0x00, 0xff, + 0xff, 0xf0, 0x61, 0x4f, 0xd7, 0x5c, 0x29, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3051,6 +3220,7 @@ type MsgClient interface { UpdateGroupExtra(ctx context.Context, in *MsgUpdateGroupExtra, opts ...grpc.CallOption) (*MsgUpdateGroupExtraResponse, error) LeaveGroup(ctx context.Context, in *MsgLeaveGroup, opts ...grpc.CallOption) (*MsgLeaveGroupResponse, error) MirrorGroup(ctx context.Context, in *MsgMirrorGroup, opts ...grpc.CallOption) (*MsgMirrorGroupResponse, error) + RenewGroupMember(ctx context.Context, in *MsgRenewGroupMember, opts ...grpc.CallOption) (*MsgRenewGroupMemberResponse, error) // basic operation of policy PutPolicy(ctx context.Context, in *MsgPutPolicy, opts ...grpc.CallOption) (*MsgPutPolicyResponse, error) DeletePolicy(ctx context.Context, in *MsgDeletePolicy, opts ...grpc.CallOption) (*MsgDeletePolicyResponse, error) @@ -3250,6 +3420,15 @@ func (c *msgClient) MirrorGroup(ctx context.Context, in *MsgMirrorGroup, opts .. return out, nil } +func (c *msgClient) RenewGroupMember(ctx context.Context, in *MsgRenewGroupMember, opts ...grpc.CallOption) (*MsgRenewGroupMemberResponse, error) { + out := new(MsgRenewGroupMemberResponse) + err := c.cc.Invoke(ctx, "/greenfield.storage.Msg/RenewGroupMember", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) PutPolicy(ctx context.Context, in *MsgPutPolicy, opts ...grpc.CallOption) (*MsgPutPolicyResponse, error) { out := new(MsgPutPolicyResponse) err := c.cc.Invoke(ctx, "/greenfield.storage.Msg/PutPolicy", in, out, opts...) @@ -3329,6 +3508,7 @@ type MsgServer interface { UpdateGroupExtra(context.Context, *MsgUpdateGroupExtra) (*MsgUpdateGroupExtraResponse, error) LeaveGroup(context.Context, *MsgLeaveGroup) (*MsgLeaveGroupResponse, error) MirrorGroup(context.Context, *MsgMirrorGroup) (*MsgMirrorGroupResponse, error) + RenewGroupMember(context.Context, *MsgRenewGroupMember) (*MsgRenewGroupMemberResponse, error) // basic operation of policy PutPolicy(context.Context, *MsgPutPolicy) (*MsgPutPolicyResponse, error) DeletePolicy(context.Context, *MsgDeletePolicy) (*MsgDeletePolicyResponse, error) @@ -3404,6 +3584,9 @@ func (*UnimplementedMsgServer) LeaveGroup(ctx context.Context, req *MsgLeaveGrou func (*UnimplementedMsgServer) MirrorGroup(ctx context.Context, req *MsgMirrorGroup) (*MsgMirrorGroupResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method MirrorGroup not implemented") } +func (*UnimplementedMsgServer) RenewGroupMember(ctx context.Context, req *MsgRenewGroupMember) (*MsgRenewGroupMemberResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RenewGroupMember not implemented") +} func (*UnimplementedMsgServer) PutPolicy(ctx context.Context, req *MsgPutPolicy) (*MsgPutPolicyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PutPolicy not implemented") } @@ -3787,6 +3970,24 @@ func _Msg_MirrorGroup_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _Msg_RenewGroupMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRenewGroupMember) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RenewGroupMember(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/greenfield.storage.Msg/RenewGroupMember", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RenewGroupMember(ctx, req.(*MsgRenewGroupMember)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_PutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgPutPolicy) if err := dec(in); err != nil { @@ -3979,6 +4180,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "MirrorGroup", Handler: _Msg_MirrorGroup_Handler, }, + { + MethodName: "RenewGroupMember", + Handler: _Msg_RenewGroupMember_Handler, + }, { MethodName: "PutPolicy", Handler: _Msg_PutPolicy_Handler, @@ -4989,7 +5194,7 @@ func (m *MsgUpdateGroupMemberResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *MsgUpdateGroupExtra) Marshal() (dAtA []byte, err error) { +func (m *MsgRenewGroupMember) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4999,22 +5204,29 @@ func (m *MsgUpdateGroupExtra) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgUpdateGroupExtra) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgRenewGroupMember) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgUpdateGroupExtra) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgRenewGroupMember) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Extra) > 0 { - i -= len(m.Extra) - copy(dAtA[i:], m.Extra) - i = encodeVarintTx(dAtA, i, uint64(len(m.Extra))) - i-- - dAtA[i] = 0x22 + if len(m.Members) > 0 { + for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Members[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } } if len(m.GroupName) > 0 { i -= len(m.GroupName) @@ -5040,7 +5252,7 @@ func (m *MsgUpdateGroupExtra) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgUpdateGroupExtraResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgRenewGroupMemberResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -5050,12 +5262,12 @@ func (m *MsgUpdateGroupExtraResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgUpdateGroupExtraResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgRenewGroupMemberResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgUpdateGroupExtraResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgRenewGroupMemberResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -5063,7 +5275,7 @@ func (m *MsgUpdateGroupExtraResponse) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *MsgLeaveGroup) Marshal() (dAtA []byte, err error) { +func (m *MsgGroupMember) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -5073,30 +5285,24 @@ func (m *MsgLeaveGroup) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgLeaveGroup) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgGroupMember) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgLeaveGroup) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgGroupMember) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.GroupName) > 0 { - i -= len(m.GroupName) - copy(dAtA[i:], m.GroupName) - i = encodeVarintTx(dAtA, i, uint64(len(m.GroupName))) - i-- - dAtA[i] = 0x1a - } - if len(m.GroupOwner) > 0 { - i -= len(m.GroupOwner) - copy(dAtA[i:], m.GroupOwner) - i = encodeVarintTx(dAtA, i, uint64(len(m.GroupOwner))) - i-- - dAtA[i] = 0x12 + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ExpirationTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpirationTime):]) + if err4 != nil { + return 0, err4 } + i -= n4 + i = encodeVarintTx(dAtA, i, uint64(n4)) + i-- + dAtA[i] = 0x12 if len(m.Member) > 0 { i -= len(m.Member) copy(dAtA[i:], m.Member) @@ -5107,7 +5313,7 @@ func (m *MsgLeaveGroup) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgLeaveGroupResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgUpdateGroupExtra) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -5117,36 +5323,154 @@ func (m *MsgLeaveGroupResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgLeaveGroupResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgUpdateGroupExtra) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgLeaveGroupResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgUpdateGroupExtra) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - return len(dAtA) - i, nil -} - -func (m *MsgUpdateBucketInfo) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err + if len(m.Extra) > 0 { + i -= len(m.Extra) + copy(dAtA[i:], m.Extra) + i = encodeVarintTx(dAtA, i, uint64(len(m.Extra))) + i-- + dAtA[i] = 0x22 } - return dAtA[:n], nil -} - -func (m *MsgUpdateBucketInfo) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgUpdateBucketInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) + if len(m.GroupName) > 0 { + i -= len(m.GroupName) + copy(dAtA[i:], m.GroupName) + i = encodeVarintTx(dAtA, i, uint64(len(m.GroupName))) + i-- + dAtA[i] = 0x1a + } + if len(m.GroupOwner) > 0 { + i -= len(m.GroupOwner) + copy(dAtA[i:], m.GroupOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.GroupOwner))) + i-- + dAtA[i] = 0x12 + } + if len(m.Operator) > 0 { + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateGroupExtraResponse) 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 *MsgUpdateGroupExtraResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateGroupExtraResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgLeaveGroup) 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 *MsgLeaveGroup) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgLeaveGroup) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.GroupName) > 0 { + i -= len(m.GroupName) + copy(dAtA[i:], m.GroupName) + i = encodeVarintTx(dAtA, i, uint64(len(m.GroupName))) + i-- + dAtA[i] = 0x1a + } + if len(m.GroupOwner) > 0 { + i -= len(m.GroupOwner) + copy(dAtA[i:], m.GroupOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.GroupOwner))) + i-- + dAtA[i] = 0x12 + } + if len(m.Member) > 0 { + i -= len(m.Member) + copy(dAtA[i:], m.Member) + i = encodeVarintTx(dAtA, i, uint64(len(m.Member))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgLeaveGroupResponse) 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 *MsgLeaveGroupResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgLeaveGroupResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateBucketInfo) 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 *MsgUpdateBucketInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateBucketInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l @@ -5302,12 +5626,12 @@ func (m *MsgPutPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if m.ExpirationTime != nil { - n5, err5 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(*m.ExpirationTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationTime):]) - if err5 != nil { - return 0, err5 + n6, err6 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(*m.ExpirationTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationTime):]) + if err6 != nil { + return 0, err6 } - i -= n5 - i = encodeVarintTx(dAtA, i, uint64(n5)) + i -= n6 + i = encodeVarintTx(dAtA, i, uint64(n6)) i-- dAtA[i] = 0x3a } @@ -6488,6 +6812,57 @@ func (m *MsgUpdateGroupMemberResponse) Size() (n int) { return n } +func (m *MsgRenewGroupMember) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.GroupOwner) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.GroupName) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Members) > 0 { + for _, e := range m.Members { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgRenewGroupMemberResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgGroupMember) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Member) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpirationTime) + n += 1 + l + sovTx(uint64(l)) + return n +} + func (m *MsgUpdateGroupExtra) Size() (n int) { if m == nil { return 0 @@ -9910,6 +10285,351 @@ func (m *MsgUpdateGroupMemberResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgRenewGroupMember) 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 ErrIntOverflowTx + } + 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: MsgRenewGroupMember: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRenewGroupMember: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupOwner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupOwner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Members = append(m.Members, &MsgGroupMember{}) + if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRenewGroupMemberResponse) 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 ErrIntOverflowTx + } + 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: MsgRenewGroupMemberResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRenewGroupMemberResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgGroupMember) 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 ErrIntOverflowTx + } + 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: MsgGroupMember: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgGroupMember: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Member", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Member = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ExpirationTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgUpdateGroupExtra) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0