diff --git a/app/upgrades/types.go b/app/upgrades/types.go index 4f2e4ced9..051cb3b7f 100644 --- a/app/upgrades/types.go +++ b/app/upgrades/types.go @@ -48,6 +48,8 @@ const ( V010602UpgradeName = "v1.6.2" V010603UpgradeName = "v1.6.3" V010604UpgradeName = "v1.6.4" + + V010700UpgradeName = "v1.7.0" ) // Upgrade defines a struct containing necessary fields that a SoftwareUpgradeProposal diff --git a/app/upgrades/upgrades.go b/app/upgrades/upgrades.go index cbeaf19ed..0f8102b50 100644 --- a/app/upgrades/upgrades.go +++ b/app/upgrades/upgrades.go @@ -24,6 +24,7 @@ func Upgrades() []Upgrade { {UpgradeName: V010602UpgradeName, CreateUpgradeHandler: NoOpHandler}, {UpgradeName: V010603UpgradeName, CreateUpgradeHandler: V010603UpgradeHandler}, {UpgradeName: V010604UpgradeName, CreateUpgradeHandler: V010604UpgradeHandler}, + {UpgradeName: V010700UpgradeName, CreateUpgradeHandler: V010700UpgradeHandler}, } } diff --git a/app/upgrades/v1_7.go b/app/upgrades/v1_7.go new file mode 100644 index 000000000..eeeec3e38 --- /dev/null +++ b/app/upgrades/v1_7.go @@ -0,0 +1,50 @@ +package upgrades + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + + "github.com/quicksilver-zone/quicksilver/app/keepers" + icstypes "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" +) + +func V010700UpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + appKeepers *keepers.AppKeepers, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + if isMainnet(ctx) || isTest(ctx) { + + hashes := []struct { + Zone string + Hash string + }{ + {Zone: "cosmoshub-4", Hash: "0c8269f04109a55a152d3cdfd22937b4e5c2746111d579935eef4cd7ffa71f7f"}, + } + for _, hashRecord := range hashes { + // delete duplicate records. + appKeepers.InterchainstakingKeeper.DeleteWithdrawalRecord(ctx, hashRecord.Zone, hashRecord.Hash, icstypes.WithdrawStatusUnbond) + appKeepers.InterchainstakingKeeper.Logger(ctx).Info("delete duplicate withdrawal record", "hash", hashRecord.Hash, "zone", hashRecord.Zone) + } + + err := appKeepers.BankKeeper.MintCoins(ctx, icstypes.ModuleName, sdk.NewCoins(sdk.NewCoin("uqatom", sdk.NewInt(50699994)))) + if err != nil { + panic(err) + } + err = appKeepers.BankKeeper.SendCoinsFromModuleToModule(ctx, icstypes.ModuleName, icstypes.EscrowModuleAccount, sdk.NewCoins(sdk.NewCoin("uqatom", sdk.NewInt(50699994)))) + if err != nil { + panic(err) + } + + appKeepers.InterchainstakingKeeper.IterateZones(ctx, func(index int64, zone *icstypes.Zone) (stop bool) { + appKeepers.InterchainstakingKeeper.OverrideRedemptionRateNoCap(ctx, zone) + return false + }) + + } + + return mm.RunMigrations(ctx, configurator, fromVM) + } +} diff --git a/docs/swagger.yml b/docs/swagger.yml index 339bc4a0f..0425889ef 100644 --- a/docs/swagger.yml +++ b/docs/swagger.yml @@ -4818,6 +4818,9 @@ paths: custom method signatures required by gogoproto. + completion_time: + type: string + format: date-time pagination: type: object properties: diff --git a/proto/quicksilver/interchainstaking/v1/interchainstaking.proto b/proto/quicksilver/interchainstaking/v1/interchainstaking.proto index e8a762fc4..6529a414c 100644 --- a/proto/quicksilver/interchainstaking/v1/interchainstaking.proto +++ b/proto/quicksilver/interchainstaking/v1/interchainstaking.proto @@ -139,6 +139,10 @@ message UnbondingRecord { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin", (gogoproto.nullable) = false ]; + google.protobuf.Timestamp completion_time = 6 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; } message RedelegationRecord { diff --git a/x/interchainstaking/keeper/abci.go b/x/interchainstaking/keeper/abci.go index d99d8f1df..bf3e2c915 100644 --- a/x/interchainstaking/keeper/abci.go +++ b/x/interchainstaking/keeper/abci.go @@ -31,6 +31,8 @@ func (k *Keeper) BeginBlocker(ctx sdk.Context) { if err := k.GCCompletedRedelegations(ctx); err != nil { k.Logger(ctx).Error("error in GCCompletedRedelegations", "error", err) } + + //k.HandleMaturedUnbondings(ctx) } k.IterateZones(ctx, func(index int64, zone *types.Zone) (stop bool) { if ctx.BlockHeight()%30 == 0 { @@ -43,8 +45,8 @@ func (k *Keeper) BeginBlocker(ctx sdk.Context) { if err := k.EnsureWithdrawalAddresses(ctx, zone); err != nil { k.Logger(ctx).Error("error in EnsureWithdrawalAddresses", "error", err.Error()) } - if err := k.HandleMaturedUnbondings(ctx, zone); err != nil { - k.Logger(ctx).Error("error in HandleMaturedUnbondings", "error", err.Error()) + if err := k.HandleMaturedWithdrawals(ctx, zone); err != nil { + k.Logger(ctx).Error("error in HandleMaturedWithdrawals", "error", err.Error()) } if err := k.GCCompletedUnbondings(ctx, zone); err != nil { k.Logger(ctx).Error("error in GCCompletedUnbondings", "error", err.Error()) diff --git a/x/interchainstaking/keeper/hooks.go b/x/interchainstaking/keeper/hooks.go index 807143c74..cbf2a48a0 100644 --- a/x/interchainstaking/keeper/hooks.go +++ b/x/interchainstaking/keeper/hooks.go @@ -66,7 +66,7 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNum return false }) - if err := k.HandleMaturedUnbondings(ctx, zone); err != nil { + if err := k.HandleMaturedWithdrawals(ctx, zone); err != nil { k.Logger(ctx).Error("error in HandleMaturedUnbondings", "error", err.Error()) } diff --git a/x/interchainstaking/keeper/ibc_packet_handlers.go b/x/interchainstaking/keeper/ibc_packet_handlers.go index 7c7ff32d3..57929d6b9 100644 --- a/x/interchainstaking/keeper/ibc_packet_handlers.go +++ b/x/interchainstaking/keeper/ibc_packet_handlers.go @@ -531,7 +531,7 @@ func (k *Keeper) GCCompletedRedelegations(ctx sdk.Context) error { return err } -func (k *Keeper) HandleMaturedUnbondings(ctx sdk.Context, zone *types.Zone) error { +func (k *Keeper) HandleMaturedWithdrawals(ctx sdk.Context, zone *types.Zone) error { k.IterateZoneStatusWithdrawalRecords(ctx, zone.ChainId, types.WithdrawStatusUnbond, func(idx int64, withdrawal types.WithdrawalRecord) bool { if ctx.BlockTime().After(withdrawal.CompletionTime) && withdrawal.Acknowledged { // completion date has passed. k.Logger(ctx).Info("found completed unbonding") @@ -558,6 +558,16 @@ func (k *Keeper) HandleMaturedUnbondings(ctx sdk.Context, zone *types.Zone) erro return nil } +func (k *Keeper) HandleMaturedUnbondings(ctx sdk.Context) { + k.IterateUnbondingRecords(ctx, func(idx int64, record types.UnbondingRecord) bool { + if ctx.BlockTime().After(record.CompletionTime) { + k.Logger(ctx).Info("found matured unbonding", "chain", record.ChainId, "validator", record.Validator, "epoch", record.EpochNumber, "completion", record.CompletionTime) + k.DeleteUnbondingRecord(ctx, record.ChainId, record.Validator, record.EpochNumber) + } + return false + }) +} + func (k *Keeper) GetInflightUnbondingAmount(ctx sdk.Context, zone *types.Zone) sdk.Coin { outCoin := sdk.NewCoin(zone.BaseDenom, sdk.ZeroInt()) k.IterateZoneWithdrawalRecords(ctx, zone.ChainId, func(idx int64, withdrawal types.WithdrawalRecord) bool { @@ -798,6 +808,14 @@ func (k *Keeper) HandleUndelegate(ctx sdk.Context, msg sdk.Msg, completion time. k.UpdateWithdrawalRecordStatus(ctx, &record, types.WithdrawStatusUnbond) } + ur, found := k.GetUnbondingRecord(ctx, zone.ChainId, undelegateMsg.ValidatorAddress, epochNumber) + if !found { + return fmt.Errorf("cannot find unbonding record for %s/%s/%d", zone.ChainId, undelegateMsg.ValidatorAddress, epochNumber) + } + + ur.CompletionTime = completion + k.SetUnbondingRecord(ctx, ur) + delAddr, err := addressutils.AccAddressFromBech32(undelegateMsg.DelegatorAddress, "") if err != nil { return err diff --git a/x/interchainstaking/keeper/ibc_packet_handlers_test.go b/x/interchainstaking/keeper/ibc_packet_handlers_test.go index 3f3434c7f..d419cd77c 100644 --- a/x/interchainstaking/keeper/ibc_packet_handlers_test.go +++ b/x/interchainstaking/keeper/ibc_packet_handlers_test.go @@ -3744,7 +3744,7 @@ func (suite *KeeperTestSuite) TestHandleMaturedUbondings() { _ = quicksilver.InterchainstakingKeeper.SetWithdrawalRecord(ctx, wdr) } - err := quicksilver.InterchainstakingKeeper.HandleMaturedUnbondings(ctx, &zone) + err := quicksilver.InterchainstakingKeeper.HandleMaturedWithdrawals(ctx, &zone) suite.NoError(err) for idx, ewdr := range test.expectedWithdrawalRecords(ctx, quicksilver, zone) { diff --git a/x/interchainstaking/keeper/keeper.go b/x/interchainstaking/keeper/keeper.go index 1dc2e483c..7e190c826 100644 --- a/x/interchainstaking/keeper/keeper.go +++ b/x/interchainstaking/keeper/keeper.go @@ -723,12 +723,16 @@ func (k *Keeper) OverrideRedemptionRateNoCap(ctx sdk.Context, zone *types.Zone) func (k *Keeper) GetRatio(ctx sdk.Context, zone *types.Zone, epochRewards sdkmath.Int) (sdk.Dec, bool) { // native asset amount nativeAssetAmount := k.GetDelegatedAmount(ctx, zone).Amount - nativeAssetUnbonding, _ := k.GetUnbondingTokensAndCount(ctx, zone) - nativeAssetUnbondingAmount := nativeAssetUnbonding.Amount - nativeAssetUnbonded := zone.DelegationAddress.Balance.AmountOf(zone.BaseDenom) + // v1.7.0 - remove unbonding tokens from RR logic on both sides of the equation. + + // nativeAssetUnbonding, _ := k.GetWithdrawnTokensAndCount(ctx, zone) + // nativeAssetUnbondingAmount := nativeAssetUnbonding.Amount + // nativeAssetUnbonded := zone.DelegationAddress.Balance.AmountOf(zone.BaseDenom) // qAsset amount qAssetAmount := k.BankKeeper.GetSupply(ctx, zone.LocalDenom).Amount + escrowAmount := k.BankKeeper.GetBalance(ctx, k.AccountKeeper.GetModuleAddress(types.EscrowModuleAccount), zone.LocalDenom) + qAssetAmount = qAssetAmount.Sub(escrowAmount.Amount) // check if zone is fully withdrawn (no qAssets remain) if qAssetAmount.IsZero() { @@ -737,7 +741,7 @@ func (k *Keeper) GetRatio(ctx sdk.Context, zone *types.Zone, epochRewards sdkmat return sdk.OneDec(), true } - return sdk.NewDecFromInt(nativeAssetAmount.Add(epochRewards).Add(nativeAssetUnbondingAmount).Add(nativeAssetUnbonded)).Quo(sdk.NewDecFromInt(qAssetAmount)), false + return sdk.NewDecFromInt(nativeAssetAmount.Add(epochRewards)).Quo(sdk.NewDecFromInt(qAssetAmount)), false } func (k *Keeper) GetAggregateIntentOrDefault(ctx sdk.Context, zone *types.Zone) (types.ValidatorIntents, error) { diff --git a/x/interchainstaking/keeper/keeper_test.go b/x/interchainstaking/keeper/keeper_test.go index ac41eeb25..5dfcad7b2 100644 --- a/x/interchainstaking/keeper/keeper_test.go +++ b/x/interchainstaking/keeper/keeper_test.go @@ -350,7 +350,7 @@ func (suite *KeeperTestSuite) TestGetUnbondingTokensAndCount() { suite.NoError(err) } - actualAmount, actualCount := icsKeeper.GetUnbondingTokensAndCount(ctx, &zone) + actualAmount, actualCount := icsKeeper.GetWithdrawnTokensAndCount(ctx, &zone) suite.Equal(tt.expectedAmount, actualAmount.Amount) suite.Equal(zone.BaseDenom, actualAmount.Denom) suite.Equal(tt.expectedCount, actualCount) diff --git a/x/interchainstaking/keeper/zones.go b/x/interchainstaking/keeper/zones.go index d26f9ca60..b8a82636b 100644 --- a/x/interchainstaking/keeper/zones.go +++ b/x/interchainstaking/keeper/zones.go @@ -98,8 +98,24 @@ func (k *Keeper) GetDelegatedAmount(ctx sdk.Context, zone *types.Zone) sdk.Coin return out } -// GetUnbondingTokensAndCount return the total amount of unbonding tokens and the count of unbonding for a given zone. -func (k *Keeper) GetUnbondingTokensAndCount(ctx sdk.Context, zone *types.Zone) (sdk.Coin, uint32) { +// GetUnbondingTokensAndCount returns the total amount of unbonding tokens and the count of unbonding for a given zone. +func (k *Keeper) GetUnbondingTokens(ctx sdk.Context, zone *types.Zone) sdk.Coin { + out := sdk.NewCoin(zone.BaseDenom, sdk.ZeroInt()) + k.IterateUnbondingRecords(ctx, func(index int64, wr types.UnbondingRecord) (stop bool) { + if wr.ChainId != zone.ChainId { + return false + } + amount := wr.Amount + if !amount.IsNegative() { + out = out.Add(amount) + } + return false + }) + return out +} + +// GetWithdrawingTokensAndCount return the total amount of unbonding tokens and the count of unbonding for a given zone. +func (k *Keeper) GetWithdrawnTokensAndCount(ctx sdk.Context, zone *types.Zone) (sdk.Coin, uint32) { out := sdk.NewCoin(zone.BaseDenom, sdk.ZeroInt()) var count uint32 k.IterateZoneStatusWithdrawalRecords(ctx, zone.ChainId, types.WithdrawStatusUnbond, func(index int64, wr types.WithdrawalRecord) (stop bool) { @@ -472,7 +488,7 @@ func (k *Keeper) CollectStatsForZone(ctx sdk.Context, zone *types.Zone) (*types. out.DistanceToTarget = fmt.Sprintf("%f", distance) // Unbonding info - out.UnbondingAmount, out.UnbondingCount = k.GetUnbondingTokensAndCount(ctx, zone) + out.UnbondingAmount, out.UnbondingCount = k.GetWithdrawnTokensAndCount(ctx, zone) out.QueuedAmount, out.QueuedCount = k.GetQueuedTokensAndCount(ctx, zone) out.UnbondRecordCount = k.GetUnbondRecordCount(ctx, zone) return out, nil diff --git a/x/interchainstaking/types/interchainstaking.pb.go b/x/interchainstaking/types/interchainstaking.pb.go index c227836db..e84c8a806 100644 --- a/x/interchainstaking/types/interchainstaking.pb.go +++ b/x/interchainstaking/types/interchainstaking.pb.go @@ -642,11 +642,12 @@ func (m *WithdrawalRecord) GetSendErrors() int64 { } type UnbondingRecord struct { - ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - EpochNumber int64 `protobuf:"varint,2,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` - Validator string `protobuf:"bytes,3,opt,name=validator,proto3" json:"validator,omitempty"` - RelatedTxhash []string `protobuf:"bytes,4,rep,name=related_txhash,json=relatedTxhash,proto3" json:"related_txhash,omitempty"` - Amount github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,5,opt,name=amount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"amount"` + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + EpochNumber int64 `protobuf:"varint,2,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` + Validator string `protobuf:"bytes,3,opt,name=validator,proto3" json:"validator,omitempty"` + RelatedTxhash []string `protobuf:"bytes,4,rep,name=related_txhash,json=relatedTxhash,proto3" json:"related_txhash,omitempty"` + Amount github_com_cosmos_cosmos_sdk_types.Coin `protobuf:"bytes,5,opt,name=amount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Coin" json:"amount"` + CompletionTime time.Time `protobuf:"bytes,6,opt,name=completion_time,json=completionTime,proto3,stdtime" json:"completion_time"` } func (m *UnbondingRecord) Reset() { *m = UnbondingRecord{} } @@ -710,6 +711,13 @@ func (m *UnbondingRecord) GetRelatedTxhash() []string { return nil } +func (m *UnbondingRecord) GetCompletionTime() time.Time { + if m != nil { + return m.CompletionTime + } + return time.Time{} +} + type RedelegationRecord struct { ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` EpochNumber int64 `protobuf:"varint,2,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` @@ -1204,140 +1212,141 @@ func init() { } var fileDescriptor_0d755cfd37ef9fee = []byte{ - // 2124 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5b, 0x6f, 0x1b, 0xc7, - 0x15, 0x36, 0x29, 0x89, 0x14, 0x0f, 0x29, 0x51, 0x1a, 0xc9, 0xc9, 0xfa, 0x26, 0x32, 0x6c, 0x92, - 0xb2, 0xb0, 0x45, 0x46, 0x0e, 0x90, 0xba, 0x41, 0x51, 0x40, 0x94, 0xdc, 0x44, 0x68, 0xac, 0x0a, - 0x2b, 0xa5, 0x41, 0x63, 0x14, 0x8b, 0xe1, 0xee, 0x88, 0xdc, 0x78, 0x77, 0x87, 0x9e, 0x19, 0xea, - 0xe2, 0xc7, 0xfc, 0x82, 0xbc, 0xf7, 0xa5, 0x7d, 0x0d, 0xfa, 0xe8, 0xbe, 0x14, 0xfd, 0x01, 0x79, - 0x0c, 0x0c, 0x14, 0x28, 0x8a, 0x42, 0x2e, 0xec, 0x37, 0x3d, 0xf6, 0x17, 0x14, 0x73, 0xd9, 0x8b, - 0x2e, 0x31, 0x25, 0x9b, 0xe9, 0x93, 0x38, 0xe7, 0xf2, 0x9d, 0xd9, 0x99, 0x33, 0xe7, 0x7c, 0x33, - 0x82, 0x7b, 0x8f, 0x87, 0xbe, 0xfb, 0x88, 0xfb, 0xc1, 0x1e, 0x61, 0x6d, 0x3f, 0x12, 0x84, 0xb9, - 0x7d, 0xec, 0x47, 0x5c, 0xe0, 0x47, 0x7e, 0xd4, 0x6b, 0xef, 0xad, 0x9c, 0x15, 0xb6, 0x06, 0x8c, - 0x0a, 0x8a, 0xea, 0x19, 0xcf, 0xd6, 0x59, 0xa3, 0xbd, 0x95, 0xeb, 0x4b, 0x2e, 0xe5, 0x21, 0xe5, - 0xed, 0x2e, 0xe6, 0xa4, 0xbd, 0xb7, 0xd2, 0x25, 0x02, 0xaf, 0xb4, 0x5d, 0xea, 0x47, 0x1a, 0xe1, - 0xfa, 0x35, 0xad, 0x77, 0xd4, 0xa8, 0xad, 0x07, 0x46, 0xb5, 0xd8, 0xa3, 0x3d, 0xaa, 0xe5, 0xf2, - 0x97, 0x91, 0xd6, 0x7a, 0x94, 0xf6, 0x02, 0xd2, 0x56, 0xa3, 0xee, 0x70, 0xb7, 0x2d, 0xfc, 0x90, - 0x70, 0x81, 0xc3, 0x81, 0x36, 0x68, 0xfc, 0x6d, 0x0e, 0x26, 0xbf, 0xa4, 0x11, 0x41, 0x3f, 0x81, - 0x19, 0x97, 0x46, 0x11, 0x71, 0x85, 0x4f, 0x23, 0xc7, 0xf7, 0xac, 0x5c, 0x3d, 0xd7, 0x2c, 0xd9, - 0x95, 0x54, 0xb8, 0xe1, 0xa1, 0x6b, 0x30, 0xad, 0xa6, 0x2c, 0xf5, 0x79, 0xa5, 0x2f, 0xaa, 0xf1, - 0x86, 0x87, 0x3e, 0x87, 0xaa, 0x47, 0x06, 0x94, 0xfb, 0xc2, 0xc1, 0x9e, 0xc7, 0x08, 0xe7, 0xd6, - 0x44, 0x3d, 0xd7, 0x2c, 0xdf, 0xbd, 0xd3, 0x1a, 0xf5, 0xd9, 0xad, 0x8d, 0xb5, 0xd5, 0x55, 0xd7, - 0xa5, 0xc3, 0x48, 0xd8, 0xb3, 0x06, 0x64, 0x55, 0x63, 0xa0, 0x87, 0x80, 0xf6, 0x7d, 0xd1, 0xf7, - 0x18, 0xde, 0xc7, 0x41, 0x82, 0x3c, 0xf9, 0x1a, 0xc8, 0xf3, 0x29, 0x4e, 0x0c, 0xfe, 0x07, 0x58, - 0x18, 0x10, 0xb6, 0x4b, 0x59, 0x88, 0x23, 0x97, 0x24, 0xe8, 0x53, 0xaf, 0x81, 0x8e, 0x32, 0x40, - 0x99, 0xb9, 0x7b, 0x24, 0x20, 0x3d, 0xac, 0x96, 0x34, 0x46, 0x2f, 0xbc, 0xce, 0xdc, 0x53, 0x9c, - 0x18, 0xfc, 0x3d, 0x98, 0xc5, 0x5a, 0xeb, 0x0c, 0x18, 0xd9, 0xf5, 0x0f, 0xac, 0xa2, 0xda, 0x90, - 0x19, 0x23, 0xdd, 0x52, 0x42, 0x54, 0x83, 0x72, 0x40, 0x5d, 0x1c, 0x38, 0x1e, 0x89, 0x68, 0x68, - 0x4d, 0x2b, 0x1b, 0x50, 0xa2, 0x75, 0x29, 0x41, 0xb7, 0x00, 0x64, 0xb6, 0x19, 0x7d, 0x49, 0xe9, - 0x4b, 0x52, 0xa2, 0xd5, 0x04, 0xaa, 0x8c, 0x78, 0x24, 0x1c, 0xa8, 0x6f, 0x60, 0x58, 0x10, 0x0b, - 0xa4, 0x4d, 0xe7, 0x97, 0xdf, 0x1d, 0xd5, 0xae, 0xfc, 0xeb, 0xa8, 0xf6, 0x7e, 0xcf, 0x17, 0xfd, - 0x61, 0xb7, 0xe5, 0xd2, 0xd0, 0x24, 0xa4, 0xf9, 0xb3, 0xcc, 0xbd, 0x47, 0x6d, 0x71, 0x38, 0x20, - 0xbc, 0xb5, 0x4e, 0xdc, 0x67, 0x4f, 0x97, 0xc1, 0xe4, 0xeb, 0x3a, 0x71, 0xed, 0xd9, 0x14, 0xd4, - 0xc6, 0x82, 0xa0, 0x08, 0x16, 0x03, 0xcc, 0x85, 0x73, 0x3a, 0x56, 0x79, 0x0c, 0xb1, 0x90, 0x44, - 0xb6, 0x4f, 0xc6, 0xfb, 0x0d, 0xc0, 0x1e, 0x0e, 0x7c, 0x0f, 0x0b, 0xca, 0xb8, 0x55, 0xa9, 0x4f, - 0x34, 0xcb, 0x77, 0x6f, 0x8f, 0xde, 0x92, 0xdf, 0xc5, 0x3e, 0x76, 0xc6, 0x1d, 0x31, 0x98, 0xc3, - 0xbd, 0x1e, 0x93, 0x1b, 0x44, 0x1c, 0xe9, 0x17, 0x09, 0x6b, 0x46, 0x41, 0xae, 0x5c, 0x02, 0x72, - 0x43, 0x39, 0x76, 0x16, 0xbf, 0x7d, 0x5e, 0x9b, 0x3b, 0x25, 0xe4, 0x76, 0x35, 0x09, 0xa0, 0x25, - 0x72, 0xdb, 0xc2, 0x61, 0x20, 0x7c, 0x87, 0x93, 0xc8, 0xb3, 0x66, 0xeb, 0xb9, 0xe6, 0xb4, 0x5d, - 0x52, 0x92, 0x6d, 0x12, 0x79, 0xe8, 0x67, 0x30, 0x17, 0xf8, 0x8f, 0x87, 0xbe, 0xe7, 0x8b, 0x43, - 0x27, 0xa4, 0xde, 0x30, 0x20, 0x56, 0x55, 0x19, 0x55, 0x13, 0xf9, 0x03, 0x25, 0x46, 0x2b, 0xb0, - 0x98, 0x39, 0x61, 0xfb, 0xd8, 0x17, 0x3d, 0x46, 0x87, 0x03, 0x6b, 0xae, 0x9e, 0x6b, 0xce, 0xd8, - 0x0b, 0xa9, 0xee, 0x8b, 0x58, 0x85, 0x7e, 0x0e, 0x96, 0xdf, 0x75, 0x9d, 0x88, 0x1c, 0x08, 0x27, - 0x5d, 0x07, 0xa7, 0x8f, 0x79, 0xdf, 0x9a, 0xaf, 0xe7, 0x9a, 0x15, 0xfb, 0xaa, 0xdf, 0x75, 0x37, - 0xc9, 0x81, 0x48, 0x3e, 0x84, 0x7f, 0x8a, 0x79, 0x1f, 0x1d, 0xc2, 0x52, 0x62, 0xef, 0x70, 0x12, - 0x98, 0x6a, 0x83, 0x03, 0x99, 0x90, 0xf2, 0xa7, 0x85, 0xea, 0xb9, 0xe6, 0x64, 0xe7, 0xc3, 0xe3, - 0xa3, 0x5a, 0xfb, 0xd5, 0x96, 0x77, 0xb8, 0x60, 0x7e, 0xd4, 0xbb, 0x43, 0x43, 0x5f, 0xc8, 0x9d, - 0x3d, 0xb4, 0x6f, 0x26, 0x0e, 0xdb, 0xb1, 0xfd, 0x6a, 0x62, 0x8e, 0x7e, 0x0f, 0x0b, 0x7d, 0x1a, - 0x78, 0x7e, 0xd4, 0xe3, 0xd9, 0x78, 0x0b, 0x2a, 0x5e, 0xf3, 0xf8, 0xa8, 0xf6, 0xee, 0x39, 0xea, - 0xb3, 0x41, 0x50, 0x6c, 0x95, 0x81, 0xb6, 0x61, 0x5e, 0x25, 0x2f, 0x19, 0x50, 0xb7, 0xef, 0xf4, - 0x89, 0xdf, 0xeb, 0x0b, 0x6b, 0xb1, 0x9e, 0x6b, 0x4e, 0x74, 0xde, 0x3f, 0x3e, 0xaa, 0x35, 0xce, - 0x28, 0xcf, 0xc2, 0x56, 0xa5, 0xcd, 0x7d, 0x69, 0xf2, 0xa9, 0xb2, 0x40, 0x9b, 0x30, 0x21, 0xf6, - 0x02, 0xeb, 0xea, 0x18, 0xf2, 0x5f, 0x02, 0xa1, 0x2d, 0x98, 0x1b, 0x46, 0x5d, 0x1a, 0xc9, 0xb9, - 0x3b, 0x03, 0xc2, 0x7c, 0xea, 0x59, 0x6f, 0xa9, 0x29, 0xbe, 0x77, 0x7c, 0x54, 0x7b, 0xe7, 0xb4, - 0xee, 0x9c, 0x19, 0x26, 0x26, 0x5b, 0xca, 0x02, 0x7d, 0x06, 0xd5, 0x90, 0x70, 0x8e, 0x7b, 0x84, - 0x4b, 0x27, 0x47, 0x1c, 0x58, 0x6f, 0x2b, 0xc0, 0x77, 0x8f, 0x8f, 0x6a, 0xf5, 0x53, 0xaa, 0xb3, - 0x78, 0x33, 0xb1, 0xc5, 0x16, 0x61, 0x3b, 0x07, 0xe8, 0x17, 0x30, 0xed, 0x11, 0xd7, 0x0f, 0x71, - 0xc0, 0x2d, 0x4b, 0xc1, 0xdc, 0x3a, 0x3e, 0xaa, 0x5d, 0x8b, 0x65, 0x67, 0xfd, 0x13, 0x73, 0x74, - 0x1b, 0xe6, 0xd3, 0xe9, 0x93, 0x08, 0x77, 0x03, 0xe2, 0x59, 0xd7, 0x54, 0xb2, 0xa7, 0xdf, 0x7c, - 0x5f, 0xcb, 0xe5, 0xc1, 0x30, 0x1d, 0x86, 0x27, 0xb6, 0xd7, 0xf5, 0xc1, 0x88, 0xe5, 0xb1, 0x69, - 0x13, 0xe6, 0x18, 0x11, 0x43, 0x16, 0x39, 0x82, 0xaa, 0x63, 0x46, 0x98, 0x75, 0x43, 0x99, 0xce, - 0x6a, 0xf9, 0x0e, 0xdd, 0x56, 0x52, 0x74, 0x15, 0x0a, 0x3e, 0x77, 0x56, 0x56, 0xee, 0x59, 0x37, - 0x95, 0x7e, 0xca, 0xe7, 0x2b, 0x2b, 0xf7, 0xd0, 0x6f, 0xa1, 0xcc, 0x87, 0xdd, 0x27, 0x34, 0x22, - 0x1b, 0xd1, 0x2e, 0xb5, 0x6e, 0xa9, 0xc2, 0xbf, 0x3c, 0xba, 0x24, 0x6c, 0xa7, 0x4e, 0x76, 0x16, - 0x01, 0xb9, 0x30, 0xeb, 0x0d, 0xb9, 0x70, 0x44, 0x9f, 0x11, 0x2e, 0x13, 0xd1, 0x5a, 0xba, 0x74, - 0x7e, 0x6c, 0x44, 0x22, 0x93, 0x1f, 0x1b, 0x91, 0xb0, 0x67, 0x24, 0xe6, 0x4e, 0x0c, 0x29, 0x57, - 0x48, 0x30, 0x1c, 0xf1, 0x5d, 0xc2, 0x1c, 0xb7, 0x8f, 0xa3, 0x88, 0x04, 0x56, 0x4d, 0xb5, 0x85, - 0x6a, 0x2c, 0x5f, 0xd3, 0xe2, 0xc6, 0x26, 0x94, 0x33, 0x73, 0x45, 0x37, 0xa1, 0x84, 0x87, 0xa2, - 0x4f, 0x99, 0x2f, 0x0e, 0x0d, 0x7d, 0x48, 0x05, 0xe8, 0x1d, 0xa8, 0xa8, 0x46, 0xa3, 0x09, 0xc3, - 0xba, 0xe1, 0x0f, 0x65, 0x29, 0x5b, 0xd3, 0xa2, 0xc6, 0x5f, 0xf3, 0x50, 0xfc, 0x8c, 0x87, 0x6b, - 0x78, 0xc0, 0x11, 0x86, 0x99, 0xb4, 0x00, 0xb8, 0x78, 0xa0, 0x01, 0xdf, 0xf0, 0x28, 0x54, 0x12, - 0xc8, 0x35, 0x3c, 0x40, 0x5f, 0x01, 0x4a, 0x43, 0xc8, 0x3c, 0x51, 0x71, 0xf2, 0x63, 0x88, 0x33, - 0x97, 0xe0, 0x76, 0x68, 0xe4, 0xc9, 0x58, 0x0f, 0x01, 0x7a, 0x01, 0xed, 0xe2, 0x40, 0xc5, 0x98, - 0x18, 0x43, 0x8c, 0x92, 0xc6, 0x5b, 0xc3, 0x83, 0xc6, 0x9f, 0xf2, 0x00, 0x29, 0x5b, 0x40, 0x77, - 0xa1, 0x18, 0x93, 0x0d, 0xbd, 0x68, 0xd6, 0xb3, 0xa7, 0xcb, 0x8b, 0xc6, 0xd5, 0xf0, 0x87, 0x6d, - 0x75, 0x9e, 0xec, 0xd8, 0x10, 0x11, 0x28, 0x76, 0x71, 0x20, 0xd9, 0x8b, 0x95, 0x57, 0xad, 0xeb, - 0x5a, 0xcb, 0x38, 0xc8, 0x0d, 0x6a, 0x19, 0x2e, 0xda, 0x5a, 0xa3, 0x7e, 0xd4, 0xf9, 0x40, 0xce, - 0xfb, 0xdb, 0xe7, 0xb5, 0xe6, 0x05, 0xe6, 0x2d, 0x1d, 0xb8, 0x1d, 0x63, 0xa3, 0x1b, 0x50, 0x1a, - 0x50, 0x26, 0x9c, 0x08, 0x87, 0x44, 0xaf, 0x82, 0x3d, 0x2d, 0x05, 0x9b, 0x38, 0x24, 0x68, 0xf9, - 0x07, 0xb9, 0x5e, 0xe9, 0x3c, 0xf6, 0x76, 0x1b, 0xe6, 0x0d, 0x6c, 0xa6, 0x6b, 0x4d, 0xa9, 0xae, - 0x35, 0x67, 0x14, 0x49, 0xcb, 0x6a, 0xfc, 0x31, 0x07, 0x95, 0x75, 0x5f, 0x56, 0x91, 0xee, 0x50, - 0x15, 0x6d, 0x0b, 0x8a, 0x7b, 0x38, 0xa0, 0x03, 0xc2, 0x4c, 0xaa, 0xc6, 0x43, 0x74, 0x03, 0x8a, - 0x0e, 0x0e, 0xe5, 0x4a, 0xaa, 0x5c, 0x98, 0xec, 0xe4, 0xad, 0x9c, 0x5d, 0x58, 0x55, 0x12, 0xb4, - 0x03, 0x05, 0xa3, 0x9b, 0x18, 0xc3, 0xd1, 0x33, 0x58, 0x8d, 0x7f, 0x4c, 0xc1, 0xdc, 0x17, 0xc9, - 0x07, 0xda, 0xc4, 0xa5, 0xec, 0x24, 0xd9, 0xce, 0x9d, 0x24, 0xdb, 0x1f, 0x41, 0xc9, 0x30, 0x42, - 0xca, 0x4c, 0xc2, 0xfe, 0xf0, 0x1e, 0xa7, 0xa6, 0xc8, 0x86, 0x8a, 0x97, 0x59, 0x04, 0x6b, 0x42, - 0x6d, 0x75, 0x6b, 0x74, 0x49, 0xca, 0x2e, 0x9d, 0x7d, 0x02, 0x43, 0xce, 0x85, 0x11, 0xd7, 0x1f, - 0xf8, 0x92, 0xf6, 0x4c, 0x8e, 0x9a, 0x4b, 0x62, 0x8a, 0xdc, 0x64, 0x25, 0xa7, 0xc6, 0x9f, 0x70, - 0x06, 0x1a, 0x3d, 0x81, 0x72, 0x57, 0x56, 0x70, 0x13, 0x49, 0x73, 0xef, 0x57, 0x44, 0xfa, 0x95, - 0xd9, 0xce, 0x9f, 0x5e, 0x30, 0xd2, 0xb3, 0xa7, 0xcb, 0x65, 0x03, 0x26, 0x87, 0x36, 0xc8, 0x68, - 0x26, 0x55, 0xde, 0x82, 0x82, 0x38, 0x50, 0x9c, 0x48, 0x33, 0x73, 0x33, 0x92, 0x72, 0x2e, 0xb0, - 0x18, 0x72, 0xc5, 0xc6, 0xa7, 0x6c, 0x33, 0x42, 0x0f, 0xa0, 0xea, 0xd2, 0x70, 0x10, 0x10, 0xc5, - 0x74, 0xe4, 0x45, 0x4d, 0xd1, 0xf1, 0xf2, 0xdd, 0xeb, 0x2d, 0x7d, 0x8b, 0x6b, 0xc5, 0xb7, 0xb8, - 0xd6, 0x4e, 0x7c, 0x8b, 0xeb, 0x4c, 0xcb, 0x09, 0x7f, 0xf3, 0xbc, 0x96, 0xb3, 0x67, 0x53, 0x67, - 0xa9, 0x46, 0xd7, 0x61, 0x9a, 0x91, 0xc7, 0x43, 0x32, 0x24, 0x9e, 0xa2, 0xec, 0xd3, 0x76, 0x32, - 0x46, 0x0d, 0xa8, 0x60, 0xf7, 0x51, 0x44, 0xf7, 0x03, 0xe2, 0xf5, 0x88, 0xa7, 0x68, 0xf6, 0xb4, - 0x7d, 0x42, 0x26, 0xeb, 0xb5, 0xe6, 0x2c, 0xd1, 0x30, 0xec, 0x12, 0x66, 0x55, 0x64, 0x57, 0xb6, - 0xcb, 0x4a, 0xb6, 0xa9, 0x44, 0xf2, 0x72, 0x21, 0xfb, 0xa2, 0x43, 0x18, 0x93, 0x34, 0x7a, 0x46, - 0x59, 0x80, 0x14, 0xdd, 0x57, 0x92, 0xc6, 0x9f, 0xf3, 0x50, 0xfd, 0x3c, 0x6e, 0xc1, 0xa3, 0xd3, - 0xfa, 0x74, 0xc8, 0xfc, 0xd9, 0x90, 0x1f, 0x41, 0x29, 0xa9, 0xad, 0xe6, 0x08, 0xbe, 0x22, 0xdb, - 0x12, 0x53, 0x79, 0x5d, 0x62, 0x24, 0xc0, 0x82, 0x78, 0x8e, 0xd9, 0x94, 0xc9, 0xfa, 0x84, 0xbc, - 0x2e, 0x19, 0xe9, 0x8e, 0xde, 0x9b, 0xc7, 0x99, 0xa4, 0xfc, 0x91, 0x53, 0x25, 0x3e, 0xfb, 0x5f, - 0x4f, 0x00, 0x92, 0xb7, 0x93, 0xf8, 0x82, 0x37, 0x96, 0x65, 0xfa, 0x00, 0x0a, 0x9c, 0x0e, 0x99, - 0x4b, 0x46, 0xae, 0x91, 0xb1, 0x43, 0x1f, 0x43, 0xd9, 0x23, 0x5c, 0xf8, 0x91, 0xe6, 0xc5, 0xa3, - 0x0e, 0x72, 0xd6, 0x38, 0x5b, 0x31, 0xa7, 0x14, 0x77, 0xcb, 0x56, 0xcc, 0x73, 0xd2, 0xba, 0xf0, - 0x06, 0x69, 0x9d, 0x16, 0xe0, 0xe2, 0x18, 0x0b, 0xf0, 0x51, 0x01, 0x4a, 0xc9, 0x5d, 0x05, 0xad, - 0x42, 0xd5, 0x34, 0x03, 0xe7, 0xa2, 0x8d, 0x74, 0xd6, 0x38, 0xac, 0x26, 0xfd, 0x54, 0x7e, 0x75, - 0xe8, 0x73, 0x9e, 0xdc, 0x65, 0xc7, 0x41, 0x2c, 0x66, 0x53, 0x50, 0x75, 0x8f, 0xed, 0x49, 0x3a, - 0x6b, 0xaa, 0xbb, 0xc3, 0xfb, 0x98, 0x11, 0x3e, 0x16, 0x72, 0x51, 0x4d, 0x50, 0xb7, 0x15, 0x28, - 0x72, 0xa0, 0xb2, 0x47, 0x85, 0xba, 0x20, 0xd0, 0x7d, 0xc2, 0x4c, 0x7e, 0xbc, 0xd9, 0xe2, 0x97, - 0x35, 0xe2, 0x96, 0x04, 0x44, 0x36, 0x4c, 0x71, 0x97, 0x32, 0xa2, 0x32, 0xe8, 0x4d, 0xa7, 0xaf, - 0xa1, 0x32, 0x95, 0xb6, 0xa0, 0x2b, 0xb0, 0xa9, 0xb4, 0x6f, 0x41, 0xe1, 0x2b, 0xec, 0x4b, 0xea, - 0x5f, 0x54, 0x85, 0xcf, 0x8c, 0xd0, 0x12, 0x80, 0xa0, 0x61, 0x97, 0x0b, 0x1a, 0x11, 0x4f, 0x55, - 0xe7, 0x69, 0x3b, 0x23, 0x41, 0x9f, 0x40, 0x45, 0x5b, 0x3a, 0xdc, 0x97, 0x4c, 0xe9, 0x32, 0xe5, - 0xb9, 0xac, 0x3d, 0xb7, 0xa5, 0x23, 0xfa, 0x3a, 0x07, 0x57, 0x4f, 0x51, 0x4f, 0xb3, 0x79, 0xfa, - 0x71, 0x65, 0xf3, 0x72, 0x5f, 0xff, 0xdf, 0xa3, 0xda, 0xcd, 0x43, 0x1c, 0x06, 0x1f, 0x37, 0xce, - 0x05, 0x6d, 0xd8, 0x0b, 0x27, 0xf8, 0xa8, 0xd9, 0xd2, 0x47, 0x30, 0xa3, 0xdf, 0x02, 0xe2, 0xd8, - 0xfa, 0xb1, 0xe5, 0xd7, 0x97, 0x8e, 0xbd, 0xa8, 0x63, 0x9f, 0x00, 0x6b, 0xd8, 0x15, 0x3d, 0xd6, - 0xc1, 0x1a, 0x7f, 0xc9, 0x41, 0x75, 0x3d, 0xce, 0x29, 0xf3, 0x86, 0x71, 0x82, 0xc5, 0xe4, 0x2e, - 0xce, 0x62, 0x30, 0x14, 0xf5, 0x2b, 0x0b, 0x37, 0x5c, 0x75, 0x6c, 0xcf, 0x2c, 0x31, 0x6e, 0xe3, - 0xef, 0x39, 0xa8, 0x9e, 0xd2, 0xa2, 0xce, 0xe5, 0xab, 0xc2, 0x69, 0x07, 0x44, 0xa0, 0xb0, 0xaf, - 0xdf, 0x07, 0x74, 0x35, 0x78, 0x70, 0xe9, 0xc5, 0x9e, 0xd1, 0x8b, 0xad, 0x51, 0x1a, 0xa7, 0xf2, - 0xbe, 0x10, 0x8b, 0xf3, 0x00, 0xeb, 0x49, 0x47, 0x41, 0x9f, 0x9c, 0xfb, 0x10, 0x39, 0x6a, 0xf2, - 0xe7, 0x3c, 0x3a, 0xde, 0x87, 0xf9, 0x34, 0xc3, 0x62, 0x9c, 0x51, 0xfc, 0x33, 0xbd, 0x0c, 0xc5, - 0x30, 0x8f, 0x4f, 0x90, 0xe8, 0xff, 0x47, 0x97, 0x95, 0x47, 0xde, 0x3c, 0xcc, 0x4c, 0xaa, 0x6e, - 0x69, 0x46, 0xf2, 0xb6, 0xcb, 0x32, 0xcd, 0xd7, 0x21, 0x91, 0xa7, 0x7b, 0x98, 0x5d, 0xcd, 0xca, - 0xef, 0x47, 0x5e, 0x63, 0x1b, 0x16, 0xb6, 0x28, 0x13, 0x6b, 0xc9, 0x83, 0xf8, 0xce, 0x70, 0x10, - 0x5c, 0xf0, 0xe1, 0xfc, 0x6d, 0x28, 0xaa, 0x7b, 0x4f, 0xf2, 0x6e, 0x5e, 0x90, 0xc3, 0x0d, 0xaf, - 0xf1, 0xef, 0x3c, 0x14, 0x6d, 0xe2, 0x12, 0x7f, 0x20, 0x5e, 0xd5, 0xf2, 0x65, 0x3f, 0xd7, 0x2f, - 0x10, 0xf9, 0x91, 0xfd, 0x5c, 0xbf, 0x49, 0xa4, 0xec, 0x73, 0xe2, 0x04, 0xfb, 0x4c, 0x69, 0xf7, - 0xe4, 0x8f, 0x47, 0xbb, 0xd7, 0x00, 0x76, 0x7d, 0xc6, 0x85, 0xc3, 0x09, 0x89, 0x0c, 0x95, 0x1a, - 0x55, 0x26, 0x73, 0xaa, 0x4c, 0x96, 0x94, 0xdf, 0x36, 0x21, 0x11, 0xea, 0x40, 0xc9, 0xf4, 0x7e, - 0xe2, 0x5d, 0x90, 0x32, 0x18, 0x8c, 0xc4, 0xad, 0xf3, 0xf0, 0xbb, 0x17, 0x4b, 0xb9, 0xef, 0x5f, - 0x2c, 0xe5, 0xfe, 0xf3, 0x62, 0x29, 0xf7, 0xcd, 0xcb, 0xa5, 0x2b, 0xdf, 0xbf, 0x5c, 0xba, 0xf2, - 0xcf, 0x97, 0x4b, 0x57, 0xbe, 0x5c, 0xcd, 0x7c, 0x54, 0xa6, 0x7a, 0x2c, 0x3f, 0xa1, 0x11, 0xc9, - 0x0a, 0xda, 0x07, 0xe7, 0xfc, 0x93, 0x47, 0x7d, 0x73, 0xb7, 0xa0, 0x66, 0xf1, 0xe1, 0xff, 0x02, - 0x00, 0x00, 0xff, 0xff, 0xea, 0x14, 0x88, 0x5a, 0x12, 0x1a, 0x00, 0x00, + // 2129 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0x37, 0x29, 0x89, 0x14, 0x1f, 0x29, 0x51, 0x1a, 0xc9, 0xce, 0xda, 0xb1, 0x45, 0x86, 0x4d, + 0x52, 0x16, 0xb6, 0xc8, 0xc8, 0x01, 0x52, 0x37, 0x28, 0x0a, 0x88, 0x92, 0x9b, 0x08, 0x8d, 0x55, + 0x61, 0xa5, 0x34, 0x68, 0x8c, 0x62, 0x31, 0xdc, 0x1d, 0x91, 0x1b, 0x2f, 0x67, 0xe8, 0x99, 0xa1, + 0x3e, 0x7c, 0xcc, 0x5f, 0x90, 0x7b, 0x2f, 0x3d, 0x07, 0x3d, 0xba, 0x97, 0xa2, 0x7f, 0x40, 0x8e, + 0x81, 0x81, 0x02, 0x45, 0x51, 0xc8, 0x85, 0x7d, 0xd3, 0xa9, 0xe8, 0x5f, 0x50, 0xcc, 0xc7, 0x2e, + 0x57, 0x1f, 0x31, 0x25, 0x9b, 0xe9, 0x49, 0x9c, 0xf7, 0xf1, 0x7b, 0xf3, 0xf1, 0xf6, 0xbd, 0xdf, + 0x8c, 0xe0, 0xde, 0xe3, 0x41, 0xe8, 0x3f, 0x12, 0x61, 0xb4, 0x47, 0x78, 0x33, 0xa4, 0x92, 0x70, + 0xbf, 0x8b, 0x43, 0x2a, 0x24, 0x7e, 0x14, 0xd2, 0x4e, 0x73, 0x6f, 0xe5, 0xac, 0xb0, 0xd1, 0xe7, + 0x4c, 0x32, 0x54, 0x4d, 0x79, 0x36, 0xce, 0x1a, 0xed, 0xad, 0xdc, 0x58, 0xf2, 0x99, 0xe8, 0x31, + 0xd1, 0x6c, 0x63, 0x41, 0x9a, 0x7b, 0x2b, 0x6d, 0x22, 0xf1, 0x4a, 0xd3, 0x67, 0x21, 0x35, 0x08, + 0x37, 0xae, 0x1b, 0xbd, 0xa7, 0x47, 0x4d, 0x33, 0xb0, 0xaa, 0xc5, 0x0e, 0xeb, 0x30, 0x23, 0x57, + 0xbf, 0xac, 0xb4, 0xd2, 0x61, 0xac, 0x13, 0x91, 0xa6, 0x1e, 0xb5, 0x07, 0xbb, 0x4d, 0x19, 0xf6, + 0x88, 0x90, 0xb8, 0xd7, 0x37, 0x06, 0xb5, 0xbf, 0xce, 0xc1, 0xe4, 0x97, 0x8c, 0x12, 0xf4, 0x13, + 0x98, 0xf1, 0x19, 0xa5, 0xc4, 0x97, 0x21, 0xa3, 0x5e, 0x18, 0x38, 0x99, 0x6a, 0xa6, 0x5e, 0x70, + 0x4b, 0x43, 0xe1, 0x46, 0x80, 0xae, 0xc3, 0xb4, 0x9e, 0xb2, 0xd2, 0x67, 0xb5, 0x3e, 0xaf, 0xc7, + 0x1b, 0x01, 0xfa, 0x1c, 0xca, 0x01, 0xe9, 0x33, 0x11, 0x4a, 0x0f, 0x07, 0x01, 0x27, 0x42, 0x38, + 0x13, 0xd5, 0x4c, 0xbd, 0x78, 0xf7, 0x4e, 0x63, 0xd4, 0xb2, 0x1b, 0x1b, 0x6b, 0xab, 0xab, 0xbe, + 0xcf, 0x06, 0x54, 0xba, 0xb3, 0x16, 0x64, 0xd5, 0x60, 0xa0, 0x87, 0x80, 0xf6, 0x43, 0xd9, 0x0d, + 0x38, 0xde, 0xc7, 0x51, 0x82, 0x3c, 0xf9, 0x1a, 0xc8, 0xf3, 0x43, 0x9c, 0x18, 0xfc, 0x0f, 0xb0, + 0xd0, 0x27, 0x7c, 0x97, 0xf1, 0x1e, 0xa6, 0x3e, 0x49, 0xd0, 0xa7, 0x5e, 0x03, 0x1d, 0xa5, 0x80, + 0x52, 0x73, 0x0f, 0x48, 0x44, 0x3a, 0x58, 0x6f, 0x69, 0x8c, 0x9e, 0x7b, 0x9d, 0xb9, 0x0f, 0x71, + 0x62, 0xf0, 0xf7, 0x60, 0x16, 0x1b, 0xad, 0xd7, 0xe7, 0x64, 0x37, 0x3c, 0x70, 0xf2, 0xfa, 0x40, + 0x66, 0xac, 0x74, 0x4b, 0x0b, 0x51, 0x05, 0x8a, 0x11, 0xf3, 0x71, 0xe4, 0x05, 0x84, 0xb2, 0x9e, + 0x33, 0xad, 0x6d, 0x40, 0x8b, 0xd6, 0x95, 0x04, 0xdd, 0x02, 0x50, 0xd9, 0x66, 0xf5, 0x05, 0xad, + 0x2f, 0x28, 0x89, 0x51, 0x13, 0x28, 0x73, 0x12, 0x90, 0x5e, 0x5f, 0xaf, 0x81, 0x63, 0x49, 0x1c, + 0x50, 0x36, 0xad, 0x5f, 0x7e, 0x77, 0x54, 0xb9, 0xf2, 0xcf, 0xa3, 0xca, 0xfb, 0x9d, 0x50, 0x76, + 0x07, 0xed, 0x86, 0xcf, 0x7a, 0x36, 0x21, 0xed, 0x9f, 0x65, 0x11, 0x3c, 0x6a, 0xca, 0xc3, 0x3e, + 0x11, 0x8d, 0x75, 0xe2, 0x3f, 0x7b, 0xba, 0x0c, 0x36, 0x5f, 0xd7, 0x89, 0xef, 0xce, 0x0e, 0x41, + 0x5d, 0x2c, 0x09, 0xa2, 0xb0, 0x18, 0x61, 0x21, 0xbd, 0xd3, 0xb1, 0x8a, 0x63, 0x88, 0x85, 0x14, + 0xb2, 0x7b, 0x32, 0xde, 0x6f, 0x00, 0xf6, 0x70, 0x14, 0x06, 0x58, 0x32, 0x2e, 0x9c, 0x52, 0x75, + 0xa2, 0x5e, 0xbc, 0x7b, 0x7b, 0xf4, 0x91, 0xfc, 0x2e, 0xf6, 0x71, 0x53, 0xee, 0x88, 0xc3, 0x1c, + 0xee, 0x74, 0xb8, 0x3a, 0x20, 0xe2, 0x29, 0x3f, 0x2a, 0x9d, 0x19, 0x0d, 0xb9, 0x72, 0x09, 0xc8, + 0x0d, 0xed, 0xd8, 0x5a, 0xfc, 0xf6, 0x79, 0x65, 0xee, 0x94, 0x50, 0xb8, 0xe5, 0x24, 0x80, 0x91, + 0xa8, 0x63, 0xeb, 0x0d, 0x22, 0x19, 0x7a, 0x82, 0xd0, 0xc0, 0x99, 0xad, 0x66, 0xea, 0xd3, 0x6e, + 0x41, 0x4b, 0xb6, 0x09, 0x0d, 0xd0, 0xcf, 0x60, 0x2e, 0x0a, 0x1f, 0x0f, 0xc2, 0x20, 0x94, 0x87, + 0x5e, 0x8f, 0x05, 0x83, 0x88, 0x38, 0x65, 0x6d, 0x54, 0x4e, 0xe4, 0x0f, 0xb4, 0x18, 0xad, 0xc0, + 0x62, 0xea, 0x0b, 0xdb, 0xc7, 0xa1, 0xec, 0x70, 0x36, 0xe8, 0x3b, 0x73, 0xd5, 0x4c, 0x7d, 0xc6, + 0x5d, 0x18, 0xea, 0xbe, 0x88, 0x55, 0xe8, 0xe7, 0xe0, 0x84, 0x6d, 0xdf, 0xa3, 0xe4, 0x40, 0x7a, + 0xc3, 0x7d, 0xf0, 0xba, 0x58, 0x74, 0x9d, 0xf9, 0x6a, 0xa6, 0x5e, 0x72, 0xaf, 0x86, 0x6d, 0x7f, + 0x93, 0x1c, 0xc8, 0x64, 0x21, 0xe2, 0x53, 0x2c, 0xba, 0xe8, 0x10, 0x96, 0x12, 0x7b, 0x4f, 0x90, + 0xc8, 0x56, 0x1b, 0x1c, 0xa9, 0x84, 0x54, 0x3f, 0x1d, 0x54, 0xcd, 0xd4, 0x27, 0x5b, 0x1f, 0x1e, + 0x1f, 0x55, 0x9a, 0xaf, 0xb6, 0xbc, 0x23, 0x24, 0x0f, 0x69, 0xe7, 0x0e, 0xeb, 0x85, 0x52, 0x9d, + 0xec, 0xa1, 0x7b, 0x33, 0x71, 0xd8, 0x8e, 0xed, 0x57, 0x13, 0x73, 0xf4, 0x7b, 0x58, 0xe8, 0xb2, + 0x28, 0x08, 0x69, 0x47, 0xa4, 0xe3, 0x2d, 0xe8, 0x78, 0xf5, 0xe3, 0xa3, 0xca, 0xbb, 0xe7, 0xa8, + 0xcf, 0x06, 0x41, 0xb1, 0x55, 0x0a, 0xda, 0x85, 0x79, 0x9d, 0xbc, 0xa4, 0xcf, 0xfc, 0xae, 0xd7, + 0x25, 0x61, 0xa7, 0x2b, 0x9d, 0xc5, 0x6a, 0xa6, 0x3e, 0xd1, 0x7a, 0xff, 0xf8, 0xa8, 0x52, 0x3b, + 0xa3, 0x3c, 0x0b, 0x5b, 0x56, 0x36, 0xf7, 0x95, 0xc9, 0xa7, 0xda, 0x02, 0x6d, 0xc2, 0x84, 0xdc, + 0x8b, 0x9c, 0xab, 0x63, 0xc8, 0x7f, 0x05, 0x84, 0xb6, 0x60, 0x6e, 0x40, 0xdb, 0x8c, 0xaa, 0xb9, + 0x7b, 0x7d, 0xc2, 0x43, 0x16, 0x38, 0xd7, 0xf4, 0x14, 0xdf, 0x3b, 0x3e, 0xaa, 0xbc, 0x73, 0x5a, + 0x77, 0xce, 0x0c, 0x13, 0x93, 0x2d, 0x6d, 0x81, 0x3e, 0x83, 0x72, 0x8f, 0x08, 0x81, 0x3b, 0x44, + 0x28, 0x27, 0x4f, 0x1e, 0x38, 0x6f, 0x69, 0xc0, 0x77, 0x8f, 0x8f, 0x2a, 0xd5, 0x53, 0xaa, 0xb3, + 0x78, 0x33, 0xb1, 0xc5, 0x16, 0xe1, 0x3b, 0x07, 0xe8, 0x17, 0x30, 0x1d, 0x10, 0x3f, 0xec, 0xe1, + 0x48, 0x38, 0x8e, 0x86, 0xb9, 0x75, 0x7c, 0x54, 0xb9, 0x1e, 0xcb, 0xce, 0xfa, 0x27, 0xe6, 0xe8, + 0x36, 0xcc, 0x0f, 0xa7, 0x4f, 0x28, 0x6e, 0x47, 0x24, 0x70, 0xae, 0xeb, 0x64, 0x1f, 0xae, 0xf9, + 0xbe, 0x91, 0xab, 0x0f, 0xc3, 0x76, 0x18, 0x91, 0xd8, 0xde, 0x30, 0x1f, 0x46, 0x2c, 0x8f, 0x4d, + 0xeb, 0x30, 0xc7, 0x89, 0x1c, 0x70, 0xea, 0x49, 0xa6, 0x3f, 0x33, 0xc2, 0x9d, 0xb7, 0xb5, 0xe9, + 0xac, 0x91, 0xef, 0xb0, 0x6d, 0x2d, 0x45, 0x57, 0x21, 0x17, 0x0a, 0x6f, 0x65, 0xe5, 0x9e, 0x73, + 0x53, 0xeb, 0xa7, 0x42, 0xb1, 0xb2, 0x72, 0x0f, 0xfd, 0x16, 0x8a, 0x62, 0xd0, 0x7e, 0xc2, 0x28, + 0xd9, 0xa0, 0xbb, 0xcc, 0xb9, 0xa5, 0x0b, 0xff, 0xf2, 0xe8, 0x92, 0xb0, 0x3d, 0x74, 0x72, 0xd3, + 0x08, 0xc8, 0x87, 0xd9, 0x60, 0x20, 0xa4, 0x27, 0xbb, 0x9c, 0x08, 0x95, 0x88, 0xce, 0xd2, 0xa5, + 0xf3, 0x63, 0x83, 0xca, 0x54, 0x7e, 0x6c, 0x50, 0xe9, 0xce, 0x28, 0xcc, 0x9d, 0x18, 0x52, 0xed, + 0x90, 0xe4, 0x98, 0x8a, 0x5d, 0xc2, 0x3d, 0xbf, 0x8b, 0x29, 0x25, 0x91, 0x53, 0xd1, 0x6d, 0xa1, + 0x1c, 0xcb, 0xd7, 0x8c, 0xb8, 0xb6, 0x09, 0xc5, 0xd4, 0x5c, 0xd1, 0x4d, 0x28, 0xe0, 0x81, 0xec, + 0x32, 0x1e, 0xca, 0x43, 0x4b, 0x1f, 0x86, 0x02, 0xf4, 0x0e, 0x94, 0x74, 0xa3, 0x31, 0x84, 0x61, + 0xdd, 0xf2, 0x87, 0xa2, 0x92, 0xad, 0x19, 0x51, 0xed, 0x2f, 0x59, 0xc8, 0x7f, 0x26, 0x7a, 0x6b, + 0xb8, 0x2f, 0x10, 0x86, 0x99, 0x61, 0x01, 0xf0, 0x71, 0xdf, 0x00, 0xbe, 0xe1, 0xa7, 0x50, 0x4a, + 0x20, 0xd7, 0x70, 0x1f, 0x7d, 0x05, 0x68, 0x18, 0x42, 0xe5, 0x89, 0x8e, 0x93, 0x1d, 0x43, 0x9c, + 0xb9, 0x04, 0xb7, 0xc5, 0x68, 0xa0, 0x62, 0x3d, 0x04, 0xe8, 0x44, 0xac, 0x8d, 0x23, 0x1d, 0x63, + 0x62, 0x0c, 0x31, 0x0a, 0x06, 0x6f, 0x0d, 0xf7, 0x6b, 0x7f, 0xca, 0x02, 0x0c, 0xd9, 0x02, 0xba, + 0x0b, 0xf9, 0x98, 0x6c, 0x98, 0x4d, 0x73, 0x9e, 0x3d, 0x5d, 0x5e, 0xb4, 0xae, 0x96, 0x3f, 0x6c, + 0xeb, 0xef, 0xc9, 0x8d, 0x0d, 0x11, 0x81, 0x7c, 0x1b, 0x47, 0x8a, 0xbd, 0x38, 0x59, 0xdd, 0xba, + 0xae, 0x37, 0xac, 0x83, 0x3a, 0xa0, 0x86, 0xe5, 0xa2, 0x8d, 0x35, 0x16, 0xd2, 0xd6, 0x07, 0x6a, + 0xde, 0xdf, 0x3e, 0xaf, 0xd4, 0x2f, 0x30, 0x6f, 0xe5, 0x20, 0xdc, 0x18, 0x1b, 0xbd, 0x0d, 0x85, + 0x3e, 0xe3, 0xd2, 0xa3, 0xb8, 0x47, 0xcc, 0x2e, 0xb8, 0xd3, 0x4a, 0xb0, 0x89, 0x7b, 0x04, 0x2d, + 0xff, 0x20, 0xd7, 0x2b, 0x9c, 0xc7, 0xde, 0x6e, 0xc3, 0xbc, 0x85, 0x4d, 0x75, 0xad, 0x29, 0xdd, + 0xb5, 0xe6, 0xac, 0x22, 0x69, 0x59, 0xb5, 0x3f, 0x66, 0xa0, 0xb4, 0x1e, 0xaa, 0x2a, 0xd2, 0x1e, + 0xe8, 0xa2, 0xed, 0x40, 0x7e, 0x0f, 0x47, 0xac, 0x4f, 0xb8, 0x4d, 0xd5, 0x78, 0x88, 0xde, 0x86, + 0xbc, 0x87, 0x7b, 0x6a, 0x27, 0x75, 0x2e, 0x4c, 0xb6, 0xb2, 0x4e, 0xc6, 0xcd, 0xad, 0x6a, 0x09, + 0xda, 0x81, 0x9c, 0xd5, 0x4d, 0x8c, 0xe1, 0xd3, 0xb3, 0x58, 0xb5, 0xbf, 0x4f, 0xc1, 0xdc, 0x17, + 0xc9, 0x02, 0x5d, 0xe2, 0x33, 0x7e, 0x92, 0x6c, 0x67, 0x4e, 0x92, 0xed, 0x8f, 0xa0, 0x60, 0x19, + 0x21, 0xe3, 0x36, 0x61, 0x7f, 0xf8, 0x8c, 0x87, 0xa6, 0xc8, 0x85, 0x52, 0x90, 0xda, 0x04, 0x67, + 0x42, 0x1f, 0x75, 0x63, 0x74, 0x49, 0x4a, 0x6f, 0x9d, 0x7b, 0x02, 0x43, 0xcd, 0x85, 0x13, 0x3f, + 0xec, 0x87, 0x8a, 0xf6, 0x4c, 0x8e, 0x9a, 0x4b, 0x62, 0x8a, 0xfc, 0x64, 0x27, 0xa7, 0xc6, 0x9f, + 0x70, 0x16, 0x1a, 0x3d, 0x81, 0x62, 0x5b, 0x55, 0x70, 0x1b, 0xc9, 0x70, 0xef, 0x57, 0x44, 0xfa, + 0x95, 0x3d, 0xce, 0x9f, 0x5e, 0x30, 0xd2, 0xb3, 0xa7, 0xcb, 0x45, 0x0b, 0xa6, 0x86, 0x2e, 0xa8, + 0x68, 0x36, 0x55, 0xae, 0x41, 0x4e, 0x1e, 0x68, 0x4e, 0x64, 0x98, 0xb9, 0x1d, 0x29, 0xb9, 0x90, + 0x58, 0x0e, 0x84, 0x66, 0xe3, 0x53, 0xae, 0x1d, 0xa1, 0x07, 0x50, 0xf6, 0x59, 0xaf, 0x1f, 0x11, + 0xcd, 0x74, 0xd4, 0x45, 0x4d, 0xd3, 0xf1, 0xe2, 0xdd, 0x1b, 0x0d, 0x73, 0x8b, 0x6b, 0xc4, 0xb7, + 0xb8, 0xc6, 0x4e, 0x7c, 0x8b, 0x6b, 0x4d, 0xab, 0x09, 0x7f, 0xf3, 0xbc, 0x92, 0x71, 0x67, 0x87, + 0xce, 0x4a, 0x8d, 0x6e, 0xc0, 0x34, 0x27, 0x8f, 0x07, 0x64, 0x40, 0x02, 0x4d, 0xd9, 0xa7, 0xdd, + 0x64, 0x8c, 0x6a, 0x50, 0xc2, 0xfe, 0x23, 0xca, 0xf6, 0x23, 0x12, 0x74, 0x48, 0xa0, 0x69, 0xf6, + 0xb4, 0x7b, 0x42, 0xa6, 0xea, 0xb5, 0xe1, 0x2c, 0x74, 0xd0, 0x6b, 0x13, 0xee, 0x94, 0x54, 0x57, + 0x76, 0x8b, 0x5a, 0xb6, 0xa9, 0x45, 0xea, 0x72, 0xa1, 0xfa, 0xa2, 0x47, 0x38, 0x57, 0x34, 0x7a, + 0x46, 0x5b, 0x80, 0x12, 0xdd, 0xd7, 0x92, 0xda, 0x7f, 0xb2, 0x50, 0xfe, 0x3c, 0x6e, 0xc1, 0xa3, + 0xd3, 0xfa, 0x74, 0xc8, 0xec, 0xd9, 0x90, 0x1f, 0x41, 0x21, 0xa9, 0xad, 0xf6, 0x13, 0x7c, 0x45, + 0xb6, 0x25, 0xa6, 0xea, 0xba, 0xc4, 0x49, 0x84, 0x25, 0x09, 0x3c, 0x7b, 0x28, 0x93, 0xd5, 0x09, + 0x75, 0x5d, 0xb2, 0xd2, 0x1d, 0x73, 0x36, 0x8f, 0x53, 0x49, 0xf9, 0x23, 0xa7, 0x4a, 0x9c, 0xa2, + 0xe7, 0x1c, 0x7b, 0xee, 0xf5, 0x8f, 0xbd, 0xf6, 0xf5, 0x04, 0x20, 0x75, 0xd9, 0x89, 0xef, 0x8b, + 0x63, 0xd9, 0xf5, 0x0f, 0x20, 0x27, 0xd8, 0x80, 0xfb, 0x64, 0xe4, 0x96, 0x5b, 0x3b, 0xf4, 0x31, + 0x14, 0x03, 0x22, 0x64, 0x48, 0x0d, 0xcd, 0x1e, 0x55, 0x17, 0xd2, 0xc6, 0xe9, 0x02, 0x3c, 0xa5, + 0xa9, 0x60, 0xba, 0x00, 0x8f, 0x77, 0xbb, 0x52, 0xf5, 0x3c, 0x3f, 0xc6, 0x7a, 0x7e, 0x94, 0x83, + 0x42, 0x72, 0xf5, 0x41, 0xab, 0x50, 0xb6, 0xbd, 0xc5, 0xbb, 0x68, 0x5f, 0x9e, 0xb5, 0x0e, 0xab, + 0x49, 0x7b, 0x56, 0xab, 0xee, 0x85, 0x42, 0x24, 0x57, 0xe3, 0x71, 0xf0, 0x94, 0xd9, 0x21, 0xa8, + 0xbe, 0x16, 0x77, 0x14, 0x3b, 0xb6, 0xcd, 0xc2, 0x13, 0x5d, 0xcc, 0x89, 0x18, 0x0b, 0x57, 0x29, + 0x27, 0xa8, 0xdb, 0x1a, 0x14, 0x79, 0x50, 0xda, 0x63, 0x52, 0xdf, 0x37, 0xd8, 0x3e, 0xe1, 0x36, + 0x3f, 0xde, 0x6c, 0xf3, 0x8b, 0x06, 0x71, 0x4b, 0x01, 0x22, 0x17, 0xa6, 0x84, 0xcf, 0x38, 0xd1, + 0x19, 0xf4, 0xa6, 0xd3, 0x37, 0x50, 0xa9, 0xc2, 0x9d, 0x33, 0x05, 0xdd, 0x16, 0xee, 0x6b, 0x90, + 0xfb, 0x0a, 0x87, 0xea, 0x26, 0x91, 0xd7, 0x75, 0xd4, 0x8e, 0xd0, 0x12, 0x80, 0x64, 0xbd, 0xb6, + 0x90, 0x8c, 0x92, 0x40, 0x17, 0xfb, 0x69, 0x37, 0x25, 0x41, 0x9f, 0x40, 0xc9, 0x58, 0x7a, 0x22, + 0x54, 0xc4, 0xeb, 0x32, 0xd5, 0xbe, 0x68, 0x3c, 0xb7, 0x95, 0x23, 0xfa, 0x3a, 0x03, 0x57, 0x4f, + 0x31, 0x59, 0x7b, 0x78, 0xe6, 0xad, 0x66, 0xf3, 0x72, 0xab, 0xff, 0xef, 0x51, 0xe5, 0xe6, 0x21, + 0xee, 0x45, 0x1f, 0xd7, 0xce, 0x05, 0xad, 0xb9, 0x0b, 0x27, 0xe8, 0xad, 0x3d, 0xd2, 0x47, 0x30, + 0x63, 0x9e, 0x16, 0xe2, 0xd8, 0xe6, 0xed, 0xe6, 0xd7, 0x97, 0x8e, 0xbd, 0x68, 0x62, 0x9f, 0x00, + 0xab, 0xb9, 0x25, 0x33, 0x36, 0xc1, 0x6a, 0x7f, 0xce, 0x40, 0x79, 0x3d, 0xce, 0x29, 0xfb, 0x24, + 0x72, 0x82, 0x14, 0x65, 0x2e, 0x4e, 0x8a, 0x30, 0xe4, 0xcd, 0xa3, 0x8d, 0xb0, 0xd4, 0x77, 0x6c, + 0xaf, 0x36, 0x31, 0x6e, 0xed, 0x6f, 0x19, 0x28, 0x9f, 0xd2, 0xa2, 0xd6, 0xe5, 0xab, 0xc2, 0x69, + 0x07, 0x44, 0x20, 0xb7, 0x6f, 0x9e, 0x1b, 0x4c, 0x35, 0x78, 0x70, 0xe9, 0xcd, 0x9e, 0x31, 0x9b, + 0x6d, 0x50, 0x6a, 0xa7, 0xf2, 0x3e, 0x17, 0x8b, 0xb3, 0x00, 0xeb, 0x49, 0x47, 0x41, 0x9f, 0x9c, + 0xfb, 0xae, 0x39, 0x6a, 0xf2, 0xe7, 0xbc, 0x61, 0xde, 0x87, 0xf9, 0x61, 0x86, 0xc5, 0x38, 0xa3, + 0xe8, 0xec, 0xf0, 0x6e, 0x15, 0xc3, 0x3c, 0x3e, 0xc1, 0xc9, 0xff, 0x2f, 0x4d, 0xfb, 0x1a, 0xe4, + 0xec, 0x3b, 0xcf, 0xa4, 0xee, 0x96, 0x76, 0xa4, 0x2e, 0xcf, 0x3c, 0xd5, 0x7c, 0x3d, 0x42, 0x03, + 0xd3, 0xc3, 0xdc, 0x72, 0x5a, 0x7e, 0x9f, 0x06, 0xb5, 0x6d, 0x58, 0xd8, 0x62, 0x5c, 0xae, 0x25, + 0xef, 0xeb, 0x3b, 0x83, 0x7e, 0x74, 0xc1, 0x77, 0xf8, 0xb7, 0x20, 0xaf, 0xaf, 0x51, 0xc9, 0x33, + 0x7c, 0x4e, 0x0d, 0x37, 0x82, 0xda, 0xbf, 0xb2, 0x90, 0x77, 0x89, 0x4f, 0xc2, 0xbe, 0x7c, 0x55, + 0xcb, 0x57, 0xfd, 0xdc, 0x3c, 0x68, 0x64, 0x47, 0xf6, 0x73, 0xf3, 0xc4, 0x31, 0x24, 0xb3, 0x13, + 0x27, 0xc8, 0xec, 0x90, 0xc5, 0x4f, 0xfe, 0x78, 0x2c, 0x7e, 0x0d, 0x60, 0x37, 0xe4, 0x42, 0x7a, + 0x82, 0x10, 0x6a, 0x99, 0xd9, 0xa8, 0x32, 0x99, 0xd1, 0x65, 0xb2, 0xa0, 0xfd, 0xb6, 0x09, 0xa1, + 0xa8, 0x05, 0x05, 0xdb, 0xfb, 0x49, 0x70, 0x41, 0xca, 0x60, 0x31, 0x12, 0xb7, 0xd6, 0xc3, 0xef, + 0x5e, 0x2c, 0x65, 0xbe, 0x7f, 0xb1, 0x94, 0xf9, 0xf7, 0x8b, 0xa5, 0xcc, 0x37, 0x2f, 0x97, 0xae, + 0x7c, 0xff, 0x72, 0xe9, 0xca, 0x3f, 0x5e, 0x2e, 0x5d, 0xf9, 0x72, 0x35, 0xb5, 0xa8, 0x54, 0xf5, + 0x58, 0x7e, 0xc2, 0x28, 0x49, 0x0b, 0x9a, 0x07, 0xe7, 0xfc, 0xcf, 0x48, 0xaf, 0xb9, 0x9d, 0xd3, + 0xb3, 0xf8, 0xf0, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x11, 0x5c, 0xfd, 0x49, 0x61, 0x1a, 0x00, + 0x00, } func (m *Zone) Marshal() (dAtA []byte, err error) { @@ -2017,6 +2026,14 @@ func (m *UnbondingRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) + if err8 != nil { + return 0, err8 + } + i -= n8 + i = encodeVarintInterchainstaking(dAtA, i, uint64(n8)) + i-- + dAtA[i] = 0x32 { size := m.Amount.Size() i -= size @@ -2088,12 +2105,12 @@ func (m *RedelegationRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x3a - n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) - if err9 != nil { - return 0, err9 + n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) + if err10 != nil { + return 0, err10 } - i -= n9 - i = encodeVarintInterchainstaking(dAtA, i, uint64(n9)) + i -= n10 + i = encodeVarintInterchainstaking(dAtA, i, uint64(n10)) i-- dAtA[i] = 0x32 if m.XAmount != 0 { @@ -2170,12 +2187,12 @@ func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x52 - n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.JailedSince, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.JailedSince):]) - if err10 != nil { - return 0, err10 + n11, err11 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.JailedSince, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.JailedSince):]) + if err11 != nil { + return 0, err11 } - i -= n10 - i = encodeVarintInterchainstaking(dAtA, i, uint64(n10)) + i -= n11 + i = encodeVarintInterchainstaking(dAtA, i, uint64(n11)) i-- dAtA[i] = 0x4a if m.Tombstoned { @@ -2454,22 +2471,22 @@ func (m *Receipt) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if m.Completed != nil { - n12, err12 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Completed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Completed):]) - if err12 != nil { - return 0, err12 + n13, err13 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Completed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Completed):]) + if err13 != nil { + return 0, err13 } - i -= n12 - i = encodeVarintInterchainstaking(dAtA, i, uint64(n12)) + i -= n13 + i = encodeVarintInterchainstaking(dAtA, i, uint64(n13)) i-- dAtA[i] = 0x32 } if m.FirstSeen != nil { - n13, err13 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.FirstSeen, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.FirstSeen):]) - if err13 != nil { - return 0, err13 + n14, err14 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.FirstSeen, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.FirstSeen):]) + if err14 != nil { + return 0, err14 } - i -= n13 - i = encodeVarintInterchainstaking(dAtA, i, uint64(n13)) + i -= n14 + i = encodeVarintInterchainstaking(dAtA, i, uint64(n14)) i-- dAtA[i] = 0x2a } @@ -2799,6 +2816,8 @@ func (m *UnbondingRecord) Size() (n int) { } l = m.Amount.Size() n += 1 + l + sovInterchainstaking(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime) + n += 1 + l + sovInterchainstaking(uint64(l)) return n } @@ -5086,6 +5105,39 @@ func (m *UnbondingRecord) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInterchainstaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthInterchainstaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthInterchainstaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipInterchainstaking(dAtA[iNdEx:])