From 118df6baf0b78c2afa9b2bfebdd55b3e5569285d Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Fri, 14 Oct 2022 18:09:45 +0100 Subject: [PATCH 1/3] Update swap fees propsal --- docs/proposals/min_swap_fees.md | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/docs/proposals/min_swap_fees.md b/docs/proposals/min_swap_fees.md index 3103ab6ab8..5280767140 100644 --- a/docs/proposals/min_swap_fees.md +++ b/docs/proposals/min_swap_fees.md @@ -15,6 +15,7 @@ x - input amount y - output amount r - current ratio shifting running rate f - swap fee rate, this must satisfy 0 =< f =< 1 +min_fee - minimum fee for a swap ``` ### Swapping to Rowan: @@ -61,12 +62,24 @@ The fee calculation in equation (1) and (2) becomes: fee = min(max(f * adjusted_output, min_fee), adjusted_output) ``` -Where `min_fee` is a minimum fee parameter for the token being bought, which is set via an admin key. See CLI -section for more details. - The min function is required to ensure that the fee is not greater than the adjusted output. -If a `min-fee` has not been set for a token then it defaults to zero. +### Parameters + +The `min_fee` must be in the same denomination as the buy token, in which case a single value for `min_fee` (greater than zero) +cannot be defined across all tokens. Consequently a default `min_fee` of zero must be applied and an admin account +must be able to specify override `min_fee` values for specific tokens. The admin account must +not be able to change the default `min_fee` value since zero is the only reasonable value. + +The same `min_fee` must be used when buying a token +regardless of the sell token e.g. it will not be possible to set one `min_fee` for swapping atom to Rowan +and another `min_fee` for swapping usdc to Rowan. + +Unlike the `min_fee` it is possible to define a swap fee rate, `f`, which can be applied on all swaps. +The admin account must be able to specify a default swap fee rate and specify override values for specific tokens. +As with the `min_fee` the same swap fee rate must be used regardless of the sell token. + +See the CLI section for commands for setting and querying the swap fee params. ## Events @@ -94,17 +107,20 @@ sifnoded tx clp set-swap-fee-params \ ```json { - "swap_fee_rate": "0.003", + "default_swap_fee_rate": "0.003", "token_params": [{ "asset": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", + "swap_fee_rate": "0.002", "min_swap_fee": "12" }, { "asset": "cusdc", + "swap_fee_rate": "0.002", "min_swap_fee": "800" }, { "asset": "rowan", + "swap_fee_rate": "0.001", "min_swap_fee": "12" } ] @@ -119,17 +135,20 @@ sifnoded q clp swap-fee-params --output json ```json { - "swap_fee_rate": "0.003000000000000000", + "default_swap_fee_rate": "0.003", "token_params": [{ "asset": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", + "swap_fee_rate": "0.002", "min_swap_fee": "12" }, { "asset": "cusdc", + "swap_fee_rate": "0.002", "min_swap_fee": "800" }, { "asset": "rowan", + "swap_fee_rate": "0.001", "min_swap_fee": "12" } ] From f326f9b61e586ac827f5cc191aa6ae23da49ac54 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sat, 15 Oct 2022 10:43:25 +0100 Subject: [PATCH 2/3] Enable swap fee rate for each token --- proto/sifnode/clp/v1/params.proto | 6 +- proto/sifnode/clp/v1/querier.proto | 2 +- proto/sifnode/clp/v1/tx.proto | 2 +- x/clp/client/cli/tx.go | 6 +- x/clp/handler_test.go | 4 +- x/clp/keeper/calculations.go | 13 +- x/clp/keeper/calculations_test.go | 50 ++++-- x/clp/keeper/grpc_query.go | 2 +- x/clp/keeper/msg_server.go | 2 +- x/clp/keeper/swap.go | 3 +- x/clp/keeper/swap_fee_params.go | 10 +- x/clp/keeper/swap_fee_params_test.go | 68 ++++++-- x/clp/types/msgs.go | 14 +- x/clp/types/params.pb.go | 210 +++++++++++++++--------- x/clp/types/querier.pb.go | 192 +++++++++++----------- x/clp/types/tx.pb.go | 237 ++++++++++++++------------- 16 files changed, 467 insertions(+), 354 deletions(-) diff --git a/proto/sifnode/clp/v1/params.proto b/proto/sifnode/clp/v1/params.proto index 038fbb7b49..5a87f63db2 100644 --- a/proto/sifnode/clp/v1/params.proto +++ b/proto/sifnode/clp/v1/params.proto @@ -97,7 +97,7 @@ message ProviderDistributionParams { } message SwapFeeParams { - string swap_fee_rate = 1 [ + string default_swap_fee_rate = 1 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; @@ -110,4 +110,8 @@ message SwapFeeTokenParams { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Uint", (gogoproto.nullable) = false ]; + string swap_fee_rate = 3 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; } \ No newline at end of file diff --git a/proto/sifnode/clp/v1/querier.proto b/proto/sifnode/clp/v1/querier.proto index dce8aaa75c..8cf4106d3b 100644 --- a/proto/sifnode/clp/v1/querier.proto +++ b/proto/sifnode/clp/v1/querier.proto @@ -196,7 +196,7 @@ message ProviderDistributionParamsRes { message SwapFeeParamsReq {} message SwapFeeParamsRes { - string swap_fee_rate = 1 [ + string default_swap_fee_rate = 1 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; diff --git a/proto/sifnode/clp/v1/tx.proto b/proto/sifnode/clp/v1/tx.proto index 35410a0ee6..4f6c47bf08 100644 --- a/proto/sifnode/clp/v1/tx.proto +++ b/proto/sifnode/clp/v1/tx.proto @@ -273,7 +273,7 @@ message MsgAddProviderDistributionPeriodResponse {} message MsgUpdateSwapFeeParamsRequest { string signer = 1 [ (gogoproto.moretags) = "yaml:\"signer\"" ]; - string swap_fee_rate = 2 [ + string default_swap_fee_rate = 2 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; diff --git a/x/clp/client/cli/tx.go b/x/clp/client/cli/tx.go index 46d4ffc099..95db077ba8 100644 --- a/x/clp/client/cli/tx.go +++ b/x/clp/client/cli/tx.go @@ -187,9 +187,9 @@ func GetCmdSetSwapFeeParams() *cobra.Command { return err } msg := types.MsgUpdateSwapFeeParamsRequest{ - Signer: signer.String(), - SwapFeeRate: swapFeeParams.SwapFeeRate, - TokenParams: swapFeeParams.TokenParams, + Signer: signer.String(), + DefaultSwapFeeRate: swapFeeParams.DefaultSwapFeeRate, + TokenParams: swapFeeParams.TokenParams, } if err := msg.ValidateBasic(); err != nil { return err diff --git a/x/clp/handler_test.go b/x/clp/handler_test.go index c66bc4d6c4..6a9dc1524c 100644 --- a/x/clp/handler_test.go +++ b/x/clp/handler_test.go @@ -396,7 +396,7 @@ func CalculateWithdraw(t *testing.T, keeper clpkeeper.Keeper, ctx sdk.Context, a ctx, app := test.CreateTestAppClp(false) registry := app.TokenRegistryKeeper.GetRegistry(ctx) _, err = app.TokenRegistryKeeper.GetEntry(registry, pool.ExternalAsset.Symbol) - swapFeeParams := clptypes.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)} + swapFeeParams := clptypes.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)} assert.NoError(t, err) if asymmetry.IsPositive() { swapResult, _, _, _, err := clpkeeper.SwapOne(clptypes.GetSettlementAsset(), swapAmount, asset, pool, sdk.OneDec(), swapFeeParams) @@ -418,7 +418,7 @@ func CalculateWithdraw(t *testing.T, keeper clpkeeper.Keeper, ctx sdk.Context, a } func CalculateSwapReceived(t *testing.T, keeper clpkeeper.Keeper, tokenRegistryKeeper tokenregistrytypes.Keeper, ctx sdk.Context, assetSent clptypes.Asset, assetReceived clptypes.Asset, swapAmount sdk.Uint) sdk.Uint { - swapFeeParams := clptypes.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)} + swapFeeParams := clptypes.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)} inPool, err := keeper.GetPool(ctx, assetSent.Symbol) assert.NoError(t, err) outPool, err := keeper.GetPool(ctx, assetReceived.Symbol) diff --git a/x/clp/keeper/calculations.go b/x/clp/keeper/calculations.go index c6d0eb1d34..6b7543e949 100644 --- a/x/clp/keeper/calculations.go +++ b/x/clp/keeper/calculations.go @@ -415,13 +415,13 @@ func CalculateWithdrawalRowanValue( pool types.Pool, pmtpCurrentRunningRate sdk.Dec, swapFeeParams types.SwapFeeParams) sdk.Uint { - minSwapFee := GetMinSwapFee(to, swapFeeParams.TokenParams) + swapFeeRate, minSwapFee := GetAssetSwapFeeParams(to, &swapFeeParams) X, Y, toRowan := pool.ExtractValues(to) X, Y = pool.ExtractDebt(X, Y, toRowan) - value, _ := CalcSwapResult(toRowan, X, sentAmount, Y, pmtpCurrentRunningRate, swapFeeParams.SwapFeeRate, minSwapFee) + value, _ := CalcSwapResult(toRowan, X, sentAmount, Y, pmtpCurrentRunningRate, swapFeeRate, minSwapFee) return value } @@ -432,7 +432,7 @@ func SwapOne(from types.Asset, pool types.Pool, pmtpCurrentRunningRate sdk.Dec, swapFeeParams types.SwapFeeParams) (sdk.Uint, sdk.Uint, sdk.Uint, types.Pool, error) { - minSwapFee := GetMinSwapFee(to, swapFeeParams.TokenParams) + swapFeeRate, minSwapFee := GetAssetSwapFeeParams(to, &swapFeeParams) X, Y, toRowan := pool.ExtractValues(to) @@ -441,7 +441,7 @@ func SwapOne(from types.Asset, Xincl, Yincl = pool.ExtractDebt(X, Y, toRowan) priceImpact := calcPriceImpact(Xincl, sentAmount) - swapResult, liquidityFee := CalcSwapResult(toRowan, Xincl, sentAmount, Yincl, pmtpCurrentRunningRate, swapFeeParams.SwapFeeRate, minSwapFee) + swapResult, liquidityFee := CalcSwapResult(toRowan, Xincl, sentAmount, Yincl, pmtpCurrentRunningRate, swapFeeRate, minSwapFee) // NOTE: impossible... pre-pmtp at least if swapResult.GTE(Y) { @@ -457,13 +457,14 @@ func GetSwapFee(sentAmount sdk.Uint, to types.Asset, pool types.Pool, pmtpCurrentRunningRate sdk.Dec, swapFeeParams types.SwapFeeParams) sdk.Uint { - minSwapFee := GetMinSwapFee(to, swapFeeParams.TokenParams) + + swapFeeRate, minSwapFee := GetAssetSwapFeeParams(to, &swapFeeParams) X, Y, toRowan := pool.ExtractValues(to) X, Y = pool.ExtractDebt(X, Y, toRowan) - swapResult, _ := CalcSwapResult(toRowan, X, sentAmount, Y, pmtpCurrentRunningRate, swapFeeParams.SwapFeeRate, minSwapFee) + swapResult, _ := CalcSwapResult(toRowan, X, sentAmount, Y, pmtpCurrentRunningRate, swapFeeRate, minSwapFee) if swapResult.GTE(Y) { return sdk.ZeroUint() diff --git a/x/clp/keeper/calculations_test.go b/x/clp/keeper/calculations_test.go index 5d56ce7db4..cc304c2c31 100644 --- a/x/clp/keeper/calculations_test.go +++ b/x/clp/keeper/calculations_test.go @@ -93,7 +93,7 @@ func TestKeeper_SwapOne(t *testing.T) { fromAsset: types.GetSettlementAsset(), toAsset: types.NewAsset("eth"), pmtpCurrentRunningRate: sdk.NewDec(0), - swapFeeParams: types.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)}, + swapFeeParams: types.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)}, expectedSwapResult: sdk.NewUint(43501), expectedLiquidityFee: sdk.NewUint(130), expectedPriceImpact: sdk.ZeroUint(), @@ -112,7 +112,7 @@ func TestKeeper_SwapOne(t *testing.T) { toAsset: types.GetSettlementAsset(), fromAsset: types.NewAsset("cusdt"), pmtpCurrentRunningRate: sdk.NewDec(0), - swapFeeParams: types.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)}, + swapFeeParams: types.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)}, expectedSwapResult: sdk.NewUintFromString("11704434254784015637542"), expectedLiquidityFee: sdk.NewUintFromString("35218959643281892590"), expectedPriceImpact: sdk.ZeroUint(), @@ -131,7 +131,7 @@ func TestKeeper_SwapOne(t *testing.T) { fromAsset: types.GetSettlementAsset(), toAsset: types.NewAsset("eth"), pmtpCurrentRunningRate: sdk.NewDec(0), - swapFeeParams: types.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)}, + swapFeeParams: types.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)}, expectedSwapResult: sdk.NewUint(43550), expectedLiquidityFee: sdk.NewUint(131), expectedPriceImpact: sdk.ZeroUint(), @@ -139,18 +139,32 @@ func TestKeeper_SwapOne(t *testing.T) { expectedNativeAssetBalance: sdk.NewUint(10050000), }, { - name: "real world numbers - fee < minSwapFee", - nativeAssetBalance: sdk.NewUint(10000000), - externalAssetBalance: sdk.NewUint(8770000), - nativeCustody: sdk.ZeroUint(), - externalCustody: sdk.ZeroUint(), - nativeLiabilities: sdk.ZeroUint(), - externalLiabilities: sdk.ZeroUint(), - sentAmount: sdk.NewUint(50000), - fromAsset: types.GetSettlementAsset(), - toAsset: types.NewAsset("eth"), - pmtpCurrentRunningRate: sdk.NewDec(0), - swapFeeParams: types.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3), TokenParams: []*types.SwapFeeTokenParams{{Asset: "eth", MinSwapFee: sdk.NewUint(300)}, {Asset: types.GetSettlementAsset().Symbol, MinSwapFee: sdk.NewUint(100)}}}, + name: "real world numbers - fee < minSwapFee", + nativeAssetBalance: sdk.NewUint(10000000), + externalAssetBalance: sdk.NewUint(8770000), + nativeCustody: sdk.ZeroUint(), + externalCustody: sdk.ZeroUint(), + nativeLiabilities: sdk.ZeroUint(), + externalLiabilities: sdk.ZeroUint(), + sentAmount: sdk.NewUint(50000), + fromAsset: types.GetSettlementAsset(), + toAsset: types.NewAsset("eth"), + pmtpCurrentRunningRate: sdk.NewDec(0), + swapFeeParams: types.SwapFeeParams{ + DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3), + TokenParams: []*types.SwapFeeTokenParams{ + { + Asset: "eth", + SwapFeeRate: sdk.NewDecWithPrec(3, 3), + MinSwapFee: sdk.NewUint(300), + }, + { + Asset: types.GetSettlementAsset().Symbol, + SwapFeeRate: sdk.NewDecWithPrec(3, 3), + MinSwapFee: sdk.NewUint(100), + }, + }, + }, expectedSwapResult: sdk.NewUint(43331), expectedLiquidityFee: sdk.NewUint(300), expectedPriceImpact: sdk.ZeroUint(), @@ -223,7 +237,7 @@ func TestKeeper_GetSwapFee(t *testing.T) { msgCreatePool := types.NewMsgCreatePool(signer, asset, nativeAssetAmount, externalAssetAmount) // Create Pool pool, _ := app.ClpKeeper.CreatePool(ctx, sdk.NewUint(1), &msgCreatePool) - swapFeeParams := types.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)} + swapFeeParams := types.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)} swapResult := clpkeeper.GetSwapFee(sdk.NewUint(1), asset, *pool, sdk.OneDec(), swapFeeParams) assert.Equal(t, "1", swapResult.String()) } @@ -239,7 +253,7 @@ func TestKeeper_GetSwapFee_PmtpParams(t *testing.T) { } asset := types.Asset{} - swapFeeParams := types.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)} + swapFeeParams := types.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)} swapResult := clpkeeper.GetSwapFee(sdk.NewUint(1), asset, pool, sdk.NewDec(100), swapFeeParams) @@ -2220,7 +2234,7 @@ func TestKeeper_SwapOneFromGenesis(t *testing.T) { to = types.Asset{Symbol: tc.poolAsset} } - swapFeeParams := types.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)} + swapFeeParams := types.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)} swapResult, liquidityFee, priceImpact, newPool, err := clpkeeper.SwapOne(from, swapAmount, to, pool, tc.pmtpCurrentRunningRate, swapFeeParams) diff --git a/x/clp/keeper/grpc_query.go b/x/clp/keeper/grpc_query.go index 75b401f79c..3818f60a04 100755 --- a/x/clp/keeper/grpc_query.go +++ b/x/clp/keeper/grpc_query.go @@ -272,5 +272,5 @@ func (k Querier) GetSwapFeeParams(c context.Context, _ *types.SwapFeeParamsReq) ctx := sdk.UnwrapSDKContext(c) swapFeeParams := k.Keeper.GetSwapFeeParams(ctx) - return &types.SwapFeeParamsRes{SwapFeeRate: swapFeeParams.SwapFeeRate, TokenParams: swapFeeParams.TokenParams}, nil + return &types.SwapFeeParamsRes{DefaultSwapFeeRate: swapFeeParams.DefaultSwapFeeRate, TokenParams: swapFeeParams.TokenParams}, nil } diff --git a/x/clp/keeper/msg_server.go b/x/clp/keeper/msg_server.go index fb006748d5..51bcde2a9f 100644 --- a/x/clp/keeper/msg_server.go +++ b/x/clp/keeper/msg_server.go @@ -1097,7 +1097,7 @@ func (k msgServer) UpdateSwapFeeParams(goCtx context.Context, msg *types.MsgUpda return response, errors.Wrap(types.ErrNotEnoughPermissions, fmt.Sprintf("Sending Account : %s", msg.Signer)) } - k.SetSwapFeeParams(ctx, &types.SwapFeeParams{SwapFeeRate: msg.SwapFeeRate, TokenParams: msg.TokenParams}) + k.SetSwapFeeParams(ctx, &types.SwapFeeParams{DefaultSwapFeeRate: msg.DefaultSwapFeeRate, TokenParams: msg.TokenParams}) return response, nil } diff --git a/x/clp/keeper/swap.go b/x/clp/keeper/swap.go index 5479dd5512..13ad8cb89d 100644 --- a/x/clp/keeper/swap.go +++ b/x/clp/keeper/swap.go @@ -14,8 +14,7 @@ func (k Keeper) CLPCalcSwap(ctx sdk.Context, sentAmount sdk.Uint, to types.Asset pmtpCurrentRunningRate := k.GetPmtpRateParams(ctx).PmtpCurrentRunningRate swapFeeParams := k.GetSwapFeeParams(ctx) - swapFeeRate := swapFeeParams.SwapFeeRate - minSwapFee := GetMinSwapFee(to, swapFeeParams.TokenParams) + swapFeeRate, minSwapFee := GetAssetSwapFeeParams(to, &swapFeeParams) swapResult, _ := CalcSwapResult(toRowan, Xincl, sentAmount, Yincl, pmtpCurrentRunningRate, swapFeeRate, minSwapFee) diff --git a/x/clp/keeper/swap_fee_params.go b/x/clp/keeper/swap_fee_params.go index 84699bd28d..2aeb50c3bc 100644 --- a/x/clp/keeper/swap_fee_params.go +++ b/x/clp/keeper/swap_fee_params.go @@ -15,18 +15,20 @@ func (k Keeper) GetSwapFeeParams(ctx sdk.Context) types.SwapFeeParams { store := ctx.KVStore(k.storeKey) bz := store.Get(types.SwapFeeParamsPrefix) if bz == nil { - return types.SwapFeeParams{SwapFeeRate: sdk.NewDecWithPrec(3, 3)} //0.003 + return types.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)} //0.003 } k.cdc.MustUnmarshal(bz, ¶ms) return params } -func GetMinSwapFee(asset types.Asset, tokenParams []*types.SwapFeeTokenParams) sdk.Uint { +func GetAssetSwapFeeParams(asset types.Asset, swapFeeParams *types.SwapFeeParams) (sdk.Dec, sdk.Uint) { + + tokenParams := swapFeeParams.TokenParams for _, p := range tokenParams { if types.StringCompare(asset.Symbol, p.Asset) { - return p.MinSwapFee + return p.SwapFeeRate, p.MinSwapFee } } - return sdk.ZeroUint() + return swapFeeParams.DefaultSwapFeeRate, sdk.ZeroUint() } diff --git a/x/clp/keeper/swap_fee_params_test.go b/x/clp/keeper/swap_fee_params_test.go index 01b8069b86..3fe4dc8efa 100644 --- a/x/clp/keeper/swap_fee_params_test.go +++ b/x/clp/keeper/swap_fee_params_test.go @@ -9,30 +9,63 @@ import ( "github.com/stretchr/testify/require" ) -func TestKeeper_GetMinSwapFee(t *testing.T) { +func TestKeeper_GetAssetSwapFeeParams(t *testing.T) { testcases := []struct { - name string - asset types.Asset - tokenParams []*types.SwapFeeTokenParams - expectedMinSwapFee sdk.Uint + name string + asset types.Asset + swapFeeParams types.SwapFeeParams + expectedSwapFeeRate sdk.Dec + expectedMinSwapFee sdk.Uint }{ { - name: "empty token params", - asset: types.NewAsset("ceth"), - expectedMinSwapFee: sdk.ZeroUint(), + name: "empty token params", + asset: types.NewAsset("ceth"), + swapFeeParams: types.SwapFeeParams{DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3)}, + expectedSwapFeeRate: sdk.NewDecWithPrec(3, 3), + expectedMinSwapFee: sdk.ZeroUint(), }, { - name: "match", - asset: types.NewAsset("ceth"), - tokenParams: []*types.SwapFeeTokenParams{{Asset: "ceth", MinSwapFee: sdk.NewUint(100)}, {Asset: "cusdc", MinSwapFee: sdk.NewUint(300)}}, - expectedMinSwapFee: sdk.NewUint(100), + name: "match", + asset: types.NewAsset("ceth"), + swapFeeParams: types.SwapFeeParams{ + DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3), + TokenParams: []*types.SwapFeeTokenParams{ + { + Asset: "ceth", + SwapFeeRate: sdk.NewDecWithPrec(1, 3), + MinSwapFee: sdk.NewUint(100), + }, + { + Asset: "cusdc", + SwapFeeRate: sdk.NewDecWithPrec(2, 3), + MinSwapFee: sdk.NewUint(300), + }, + }, + }, + expectedSwapFeeRate: sdk.NewDecWithPrec(1, 3), + expectedMinSwapFee: sdk.NewUint(100), }, { - name: "no match", - asset: types.NewAsset("rowan"), - tokenParams: []*types.SwapFeeTokenParams{{Asset: "ceth", MinSwapFee: sdk.NewUint(100)}, {Asset: "cusdc", MinSwapFee: sdk.NewUint(300)}}, - expectedMinSwapFee: sdk.ZeroUint(), + name: "no match", + asset: types.NewAsset("rowan"), + swapFeeParams: types.SwapFeeParams{ + DefaultSwapFeeRate: sdk.NewDecWithPrec(3, 3), + TokenParams: []*types.SwapFeeTokenParams{ + { + Asset: "ceth", + SwapFeeRate: sdk.NewDecWithPrec(1, 3), + MinSwapFee: sdk.NewUint(100), + }, + { + Asset: "cusdc", + SwapFeeRate: sdk.NewDecWithPrec(2, 3), + MinSwapFee: sdk.NewUint(300), + }, + }, + }, + expectedSwapFeeRate: sdk.NewDecWithPrec(3, 3), + expectedMinSwapFee: sdk.ZeroUint(), }, } @@ -40,8 +73,9 @@ func TestKeeper_GetMinSwapFee(t *testing.T) { tc := tc t.Run(tc.name, func(t *testing.T) { - minSwapFee := keeper.GetMinSwapFee(tc.asset, tc.tokenParams) + swapFeeRate, minSwapFee := keeper.GetAssetSwapFeeParams(tc.asset, &tc.swapFeeParams) + require.Equal(t, tc.expectedSwapFeeRate.String(), swapFeeRate.String()) require.Equal(t, tc.expectedMinSwapFee.String(), minSwapFee.String()) }) } diff --git a/x/clp/types/msgs.go b/x/clp/types/msgs.go index 8b0907f4c2..78d320d65b 100644 --- a/x/clp/types/msgs.go +++ b/x/clp/types/msgs.go @@ -659,14 +659,24 @@ func (m MsgUpdateSwapFeeParamsRequest) ValidateBasic() error { return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, m.Signer) } - if m.SwapFeeRate.LT(sdk.ZeroDec()) { + if m.DefaultSwapFeeRate.LT(sdk.ZeroDec()) { return fmt.Errorf("swap rate fee must be greater than or equal to zero") } - if m.SwapFeeRate.GT(sdk.OneDec()) { + if m.DefaultSwapFeeRate.GT(sdk.OneDec()) { return fmt.Errorf("swap rate fee must be less than or equal to one") } + for _, p := range m.TokenParams { + if p.SwapFeeRate.LT(sdk.ZeroDec()) { + return fmt.Errorf("swap rate fee must be greater than or equal to zero") + } + + if p.SwapFeeRate.GT(sdk.OneDec()) { + return fmt.Errorf("swap rate fee must be less than or equal to one") + } + } + return nil } diff --git a/x/clp/types/params.pb.go b/x/clp/types/params.pb.go index 907f936486..75e3722603 100644 --- a/x/clp/types/params.pb.go +++ b/x/clp/types/params.pb.go @@ -581,8 +581,8 @@ func (m *ProviderDistributionParams) GetDistributionPeriods() []*ProviderDistrib } type SwapFeeParams struct { - SwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=swap_fee_rate,json=swapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"swap_fee_rate"` - TokenParams []*SwapFeeTokenParams `protobuf:"bytes,2,rep,name=token_params,json=tokenParams,proto3" json:"token_params,omitempty"` + DefaultSwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=default_swap_fee_rate,json=defaultSwapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"default_swap_fee_rate"` + TokenParams []*SwapFeeTokenParams `protobuf:"bytes,2,rep,name=token_params,json=tokenParams,proto3" json:"token_params,omitempty"` } func (m *SwapFeeParams) Reset() { *m = SwapFeeParams{} } @@ -626,8 +626,9 @@ func (m *SwapFeeParams) GetTokenParams() []*SwapFeeTokenParams { } type SwapFeeTokenParams struct { - Asset string `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"` - MinSwapFee github_com_cosmos_cosmos_sdk_types.Uint `protobuf:"bytes,2,opt,name=min_swap_fee,json=minSwapFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Uint" json:"min_swap_fee"` + Asset string `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"` + MinSwapFee github_com_cosmos_cosmos_sdk_types.Uint `protobuf:"bytes,2,opt,name=min_swap_fee,json=minSwapFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Uint" json:"min_swap_fee"` + SwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=swap_fee_rate,json=swapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"swap_fee_rate"` } func (m *SwapFeeTokenParams) Reset() { *m = SwapFeeTokenParams{} } @@ -688,78 +689,79 @@ func init() { func init() { proto.RegisterFile("sifnode/clp/v1/params.proto", fileDescriptor_61de66e331088d04) } var fileDescriptor_61de66e331088d04 = []byte{ - // 1121 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdd, 0x6e, 0xe3, 0x44, - 0x14, 0xae, 0x93, 0xb6, 0xb4, 0xa7, 0x3f, 0x80, 0x9b, 0xb6, 0xee, 0x5f, 0xd2, 0x35, 0x12, 0x54, - 0x45, 0x24, 0x74, 0xd1, 0xb2, 0x70, 0x99, 0xfe, 0x80, 0x16, 0x75, 0xa5, 0xac, 0x5b, 0x6e, 0x90, - 0x90, 0xe5, 0xda, 0xd3, 0x64, 0x54, 0xdb, 0xe3, 0x9d, 0x99, 0xa4, 0x2d, 0x88, 0x77, 0xd8, 0x2b, - 0x6e, 0x10, 0x3c, 0x00, 0xef, 0x81, 0xb4, 0x97, 0x8b, 0xb8, 0x41, 0x7b, 0x51, 0xa1, 0xf6, 0x45, - 0xd0, 0xcc, 0x38, 0xce, 0x38, 0x4e, 0xd1, 0xb6, 0xec, 0x55, 0xeb, 0x9c, 0x39, 0xdf, 0x77, 0xe6, - 0x3b, 0x67, 0xbe, 0xb1, 0x61, 0x8d, 0xe1, 0xd3, 0x98, 0x04, 0xa8, 0xe1, 0x87, 0x49, 0xa3, 0xb7, - 0xd3, 0x48, 0x3c, 0xea, 0x45, 0xac, 0x9e, 0x50, 0xc2, 0x89, 0x39, 0x9f, 0x06, 0xeb, 0x7e, 0x98, - 0xd4, 0x7b, 0x3b, 0xab, 0x95, 0x36, 0x69, 0x13, 0x19, 0x6a, 0x88, 0xff, 0xd4, 0x2a, 0xbb, 0x0b, - 0x93, 0x2d, 0x99, 0x65, 0x7e, 0x09, 0x2b, 0x11, 0x8e, 0x5d, 0x9f, 0x22, 0x8f, 0x23, 0x37, 0x21, - 0x24, 0x74, 0x79, 0x87, 0x22, 0xd6, 0x21, 0x61, 0x60, 0x19, 0x9b, 0xc6, 0xd6, 0xb8, 0xb3, 0x14, - 0xe1, 0x78, 0x4f, 0xc6, 0x5b, 0x84, 0x84, 0xc7, 0xfd, 0xa8, 0xf9, 0x29, 0x54, 0x50, 0xec, 0x9d, - 0x84, 0xc8, 0xa5, 0x28, 0x22, 0x3d, 0x2f, 0x74, 0x9f, 0x77, 0x51, 0x17, 0x59, 0xa5, 0x4d, 0x63, - 0x6b, 0xca, 0x31, 0x55, 0xcc, 0x51, 0xa1, 0x67, 0x22, 0x62, 0xff, 0x5c, 0x82, 0x59, 0x07, 0x9d, - 0x7b, 0x34, 0x48, 0xd9, 0x9b, 0xb0, 0x11, 0xe2, 0xe7, 0x5d, 0x1c, 0x60, 0x7e, 0x99, 0xa1, 0x84, - 0xc4, 0x3f, 0x73, 0x13, 0x44, 0x31, 0xe9, 0x57, 0xb0, 0x9a, 0x2d, 0x4a, 0xe1, 0x0e, 0x89, 0x7f, - 0xd6, 0x92, 0x2b, 0xcc, 0x03, 0xa8, 0x15, 0x21, 0x7c, 0x2f, 0xf6, 0x51, 0xd8, 0x07, 0x29, 0x49, - 0x90, 0xf5, 0x61, 0x90, 0x3d, 0xb9, 0x28, 0x85, 0xd9, 0x83, 0x79, 0x2a, 0x2b, 0x4b, 0x93, 0x98, - 0x35, 0xbe, 0x59, 0xde, 0x9a, 0x79, 0xb8, 0x5e, 0xcf, 0x0b, 0x5a, 0x4f, 0xeb, 0x97, 0x8b, 0x9c, - 0x39, 0xaa, 0x3d, 0x31, 0xf3, 0x31, 0x58, 0x39, 0x10, 0x97, 0x71, 0x8f, 0x72, 0x97, 0xe3, 0x08, - 0x59, 0x13, 0x9b, 0xc6, 0xd6, 0xb4, 0xb3, 0xa8, 0x27, 0x1c, 0x89, 0xe8, 0x31, 0x8e, 0x90, 0xfd, - 0x47, 0x09, 0xe6, 0x5b, 0x11, 0x4f, 0x1c, 0x21, 0xb2, 0x92, 0xc6, 0x87, 0xa5, 0x24, 0xe2, 0x49, - 0x1f, 0xe9, 0x44, 0xaa, 0x42, 0x3d, 0xae, 0xf4, 0x9d, 0xde, 0xad, 0xbf, 0xbc, 0xaa, 0x8d, 0xbd, - 0xbe, 0xaa, 0x7d, 0xd8, 0xc6, 0xbc, 0xd3, 0x3d, 0xa9, 0xfb, 0x24, 0x6a, 0xf8, 0x84, 0x45, 0x84, - 0xa5, 0x7f, 0x3e, 0x61, 0xc1, 0x59, 0x83, 0x5f, 0x26, 0x88, 0xd5, 0xf7, 0x91, 0xef, 0x2c, 0x08, - 0x34, 0xc5, 0xbb, 0x2b, 0xb0, 0x04, 0x95, 0x89, 0x61, 0x45, 0x92, 0xf8, 0x5d, 0x4a, 0x51, 0xcc, - 0x5d, 0xda, 0x8d, 0x63, 0x1c, 0xb7, 0x15, 0x4f, 0xf9, 0x5e, 0x3c, 0xb2, 0xea, 0x3d, 0x85, 0xe7, - 0x28, 0x38, 0x49, 0xd5, 0xdf, 0x0f, 0x8e, 0x39, 0xa2, 0x6e, 0x42, 0x42, 0xec, 0x5f, 0x2a, 0x9e, - 0xf1, 0xfb, 0xef, 0xe7, 0x89, 0x00, 0x6b, 0x49, 0x2c, 0x41, 0x62, 0xff, 0x56, 0x02, 0x10, 0x3a, - 0xa6, 0x1a, 0x46, 0xb0, 0xa6, 0x6b, 0xd8, 0x26, 0x3d, 0x44, 0x63, 0xd1, 0x75, 0x45, 0x6c, 0xdc, - 0x8b, 0xd8, 0x1a, 0x08, 0xf9, 0x75, 0x06, 0x28, 0xb7, 0xf8, 0x18, 0x2c, 0x9d, 0x0e, 0x25, 0xc4, - 0xef, 0xb8, 0x21, 0x8a, 0xdb, 0xbc, 0x23, 0x9b, 0x56, 0x76, 0x16, 0x07, 0xb9, 0x07, 0x22, 0x7a, - 0x28, 0x83, 0xe6, 0x23, 0x58, 0xd6, 0x13, 0xd5, 0xd4, 0xc8, 0x8e, 0xcb, 0x26, 0x94, 0x9d, 0xca, - 0x20, 0x4f, 0x0e, 0x8d, 0xec, 0xa0, 0xb9, 0x03, 0x8b, 0x39, 0xbe, 0x38, 0x1d, 0x13, 0xa9, 0x68, - 0xd9, 0x31, 0x35, 0xb2, 0x58, 0x35, 0xdd, 0xfe, 0x73, 0x3c, 0x3b, 0x81, 0x6a, 0xee, 0xb7, 0xe0, - 0xbd, 0xfc, 0xc8, 0x62, 0x75, 0xe8, 0xa6, 0x9d, 0x79, 0x7d, 0x54, 0x9f, 0x04, 0xc2, 0x29, 0x46, - 0x0d, 0xb7, 0x62, 0x54, 0x47, 0x6c, 0xa9, 0x30, 0xdd, 0xaa, 0xd0, 0x47, 0xb0, 0x9c, 0x4f, 0x1d, - 0x94, 0x5a, 0x96, 0x89, 0x15, 0x3d, 0xb1, 0x5f, 0xac, 0x89, 0x86, 0x8f, 0x93, 0x17, 0x86, 0xc4, - 0xf7, 0x38, 0x26, 0x71, 0x3a, 0x34, 0x1f, 0xbf, 0xbe, 0xaa, 0x7d, 0xf4, 0x06, 0x7d, 0xfb, 0x16, - 0xc7, 0x3c, 0x5f, 0x5d, 0x33, 0x83, 0x32, 0x7d, 0xa8, 0xe6, 0x69, 0xa4, 0x0b, 0x46, 0xdd, 0x90, - 0xe3, 0x24, 0xc4, 0x88, 0x32, 0x6b, 0x42, 0x5a, 0x41, 0x75, 0xd8, 0x0a, 0x84, 0x1d, 0x3e, 0xcd, - 0x96, 0x39, 0x6b, 0x3a, 0x7e, 0x3e, 0xc6, 0x4c, 0x06, 0x9b, 0x79, 0x92, 0x00, 0x9d, 0x7a, 0xdd, - 0x90, 0x6b, 0x3c, 0xd6, 0xa4, 0xdc, 0xd3, 0xf6, 0x1d, 0x66, 0x71, 0x43, 0xa7, 0xdc, 0x57, 0x88, - 0x03, 0x56, 0xf3, 0x8b, 0x61, 0x01, 0x03, 0xcc, 0x38, 0xc5, 0x27, 0x5d, 0x8e, 0xac, 0x77, 0xa4, - 0x4b, 0xe7, 0x34, 0xd9, 0xcf, 0xa2, 0xe6, 0x36, 0xbc, 0x9f, 0xcf, 0x8c, 0x48, 0x60, 0x4d, 0xc9, - 0x5e, 0xbd, 0xab, 0xa7, 0x3c, 0x25, 0x81, 0xfd, 0xc2, 0x80, 0xf9, 0xfc, 0x76, 0xcd, 0x87, 0xb0, - 0x38, 0x24, 0xa2, 0xeb, 0x31, 0x86, 0x78, 0x3a, 0x5a, 0x0b, 0x49, 0x6e, 0x79, 0x53, 0x84, 0xcc, - 0x6f, 0x00, 0x34, 0x2d, 0x4a, 0x77, 0xd6, 0x42, 0xcb, 0xb6, 0x7f, 0x2d, 0xc1, 0xca, 0x61, 0xdf, - 0xee, 0x5b, 0x94, 0x70, 0xe4, 0x8b, 0x56, 0xa7, 0xb6, 0x40, 0x61, 0x23, 0xf2, 0x2e, 0x5c, 0x4a, - 0xce, 0xbd, 0xd8, 0x1d, 0x5c, 0x1e, 0xf9, 0x7b, 0x6f, 0x7a, 0xb7, 0x91, 0x1a, 0xc3, 0x1b, 0x0f, - 0xd8, 0x6a, 0xe4, 0x5d, 0x38, 0x02, 0x34, 0xa3, 0x1e, 0x5c, 0x96, 0x87, 0xf0, 0xc1, 0x7f, 0x72, - 0xa6, 0xfa, 0xc8, 0x6d, 0x3b, 0xb5, 0xdb, 0x81, 0x94, 0x56, 0x0f, 0x60, 0x36, 0xe7, 0x2e, 0xea, - 0x14, 0xcd, 0x20, 0xcd, 0x53, 0xd6, 0x60, 0x1a, 0x33, 0xd7, 0xf3, 0x39, 0xee, 0x29, 0x8b, 0x9d, - 0x72, 0xa6, 0x30, 0x6b, 0xca, 0x67, 0xfb, 0x17, 0x03, 0x36, 0x46, 0xe8, 0xa3, 0x5d, 0x3f, 0x3f, - 0xc0, 0x83, 0xec, 0x52, 0x78, 0xdb, 0x3a, 0x55, 0x53, 0xe4, 0x5b, 0xb6, 0x68, 0xff, 0x55, 0x82, - 0xd5, 0x16, 0x25, 0x3d, 0x1c, 0x20, 0x9a, 0xcd, 0xa4, 0x68, 0x9f, 0xb2, 0x2c, 0x06, 0xd5, 0x40, - 0xfb, 0x75, 0xc4, 0x0d, 0x79, 0x3f, 0x63, 0x5f, 0x0b, 0x0a, 0x5c, 0x83, 0x9b, 0xf2, 0x00, 0x6a, - 0xa3, 0x48, 0x8b, 0x1e, 0xb8, 0x5e, 0x44, 0xd1, 0x9c, 0xb0, 0x09, 0x1b, 0xa3, 0x60, 0x86, 0xfd, - 0x70, 0xb5, 0x08, 0x92, 0xb9, 0xe2, 0xe7, 0xb0, 0x3c, 0x0a, 0x42, 0x1c, 0xd0, 0x71, 0x99, 0xbc, - 0x58, 0x4c, 0x16, 0xc7, 0xf4, 0xc7, 0x5b, 0x44, 0x55, 0xfd, 0xfe, 0x1e, 0x2a, 0x23, 0x50, 0x99, - 0x65, 0x48, 0xeb, 0xdb, 0x2e, 0x58, 0xdf, 0xad, 0xed, 0x71, 0x16, 0x8a, 0xf4, 0xcc, 0xfe, 0xdd, - 0x80, 0xb9, 0xa3, 0x73, 0x2f, 0xf9, 0x0a, 0xf5, 0x07, 0xcc, 0x81, 0x39, 0x76, 0xee, 0x25, 0xee, - 0x29, 0xfa, 0x5f, 0xb7, 0xf1, 0x0c, 0x53, 0xa8, 0x69, 0x93, 0x66, 0x39, 0x39, 0x43, 0xb1, 0xab, - 0x5e, 0x89, 0xad, 0x92, 0x2c, 0xde, 0x1e, 0x2e, 0x3e, 0x2d, 0xe4, 0x58, 0x2c, 0x55, 0xd5, 0x38, - 0x33, 0x7c, 0xf0, 0x60, 0xff, 0x04, 0x66, 0x71, 0x89, 0x59, 0x81, 0x09, 0xdd, 0xc3, 0xd4, 0x83, - 0xf9, 0x0c, 0x66, 0xc5, 0xfb, 0x73, 0x7f, 0x2b, 0xa9, 0x6f, 0xdd, 0xf9, 0x48, 0x40, 0x84, 0xe3, - 0x94, 0x73, 0xb7, 0xf9, 0xf2, 0xba, 0x6a, 0xbc, 0xba, 0xae, 0x1a, 0xff, 0x5c, 0x57, 0x8d, 0x17, - 0x37, 0xd5, 0xb1, 0x57, 0x37, 0xd5, 0xb1, 0xbf, 0x6f, 0xaa, 0x63, 0xdf, 0xe9, 0x70, 0x47, 0xf8, - 0xd4, 0xef, 0x78, 0x38, 0x6e, 0xf4, 0xbf, 0x06, 0x2e, 0xe4, 0xf7, 0x80, 0xc4, 0x3c, 0x99, 0x94, - 0xaf, 0xf9, 0x9f, 0xfd, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x80, 0x27, 0xe7, 0x26, 0x2b, 0x0c, 0x00, - 0x00, + // 1138 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x5d, 0x6f, 0xe3, 0x44, + 0x17, 0xae, 0x93, 0x6e, 0xdf, 0xf6, 0xf4, 0xe3, 0x85, 0x69, 0xd2, 0xba, 0x5f, 0x49, 0xd7, 0x48, + 0x50, 0x15, 0x91, 0xd0, 0x45, 0xcb, 0xc2, 0x65, 0xfa, 0x01, 0x5a, 0xd4, 0x95, 0xb2, 0x6e, 0xb9, + 0x41, 0x42, 0x96, 0x6b, 0x4f, 0x93, 0x51, 0x6d, 0x8f, 0x77, 0x66, 0x92, 0xb6, 0xf0, 0x27, 0xf6, + 0x8a, 0x1b, 0x04, 0xff, 0x83, 0x1f, 0x80, 0xb4, 0x97, 0xbb, 0xe2, 0x06, 0xed, 0x45, 0x85, 0xda, + 0x3f, 0x82, 0x66, 0xc6, 0x76, 0xec, 0x24, 0x45, 0xdb, 0xc2, 0x55, 0xeb, 0x9c, 0x39, 0xcf, 0x33, + 0xe7, 0x39, 0x67, 0x9e, 0xb1, 0x61, 0x8d, 0x93, 0xd3, 0x88, 0xfa, 0xb8, 0xe9, 0x05, 0x71, 0xb3, + 0xbf, 0xd3, 0x8c, 0x5d, 0xe6, 0x86, 0xbc, 0x11, 0x33, 0x2a, 0x28, 0x5a, 0x48, 0x82, 0x0d, 0x2f, + 0x88, 0x1b, 0xfd, 0x9d, 0xd5, 0x4a, 0x87, 0x76, 0xa8, 0x0a, 0x35, 0xe5, 0x7f, 0x7a, 0x95, 0xd5, + 0x83, 0xa9, 0xb6, 0xca, 0x42, 0x5f, 0xc2, 0x4a, 0x48, 0x22, 0xc7, 0x63, 0xd8, 0x15, 0xd8, 0x89, + 0x29, 0x0d, 0x1c, 0xd1, 0x65, 0x98, 0x77, 0x69, 0xe0, 0x9b, 0xc6, 0xa6, 0xb1, 0x35, 0x69, 0x2f, + 0x85, 0x24, 0xda, 0x53, 0xf1, 0x36, 0xa5, 0xc1, 0x71, 0x1a, 0x45, 0x9f, 0x42, 0x05, 0x47, 0xee, + 0x49, 0x80, 0x1d, 0x86, 0x43, 0xda, 0x77, 0x03, 0xe7, 0x45, 0x0f, 0xf7, 0xb0, 0x59, 0xda, 0x34, + 0xb6, 0xa6, 0x6d, 0xa4, 0x63, 0xb6, 0x0e, 0x3d, 0x97, 0x11, 0xeb, 0xa7, 0x12, 0xcc, 0xd9, 0xf8, + 0xdc, 0x65, 0x7e, 0xc2, 0xde, 0x82, 0x8d, 0x80, 0xbc, 0xe8, 0x11, 0x9f, 0x88, 0xcb, 0x0c, 0x25, + 0xa0, 0xde, 0x99, 0x13, 0x63, 0x46, 0x68, 0xba, 0x83, 0xd5, 0x6c, 0x51, 0x02, 0x77, 0x48, 0xbd, + 0xb3, 0xb6, 0x5a, 0x81, 0x0e, 0xa0, 0x3e, 0x0a, 0xe1, 0xb9, 0x91, 0x87, 0x83, 0x14, 0xa4, 0xa4, + 0x40, 0xd6, 0x87, 0x41, 0xf6, 0xd4, 0xa2, 0x04, 0x66, 0x0f, 0x16, 0x98, 0xda, 0x59, 0x92, 0xc4, + 0xcd, 0xc9, 0xcd, 0xf2, 0xd6, 0xec, 0xa3, 0xf5, 0x46, 0x51, 0xd0, 0x46, 0xb2, 0x7f, 0xb5, 0xc8, + 0x9e, 0x67, 0xb9, 0x27, 0x8e, 0x9e, 0x80, 0x59, 0x00, 0x71, 0xb8, 0x70, 0x99, 0x70, 0x04, 0x09, + 0xb1, 0xf9, 0x60, 0xd3, 0xd8, 0x9a, 0xb1, 0xab, 0xf9, 0x84, 0x23, 0x19, 0x3d, 0x26, 0x21, 0xb6, + 0x7e, 0x2f, 0xc1, 0x42, 0x3b, 0x14, 0xb1, 0x2d, 0x45, 0xd6, 0xd2, 0x78, 0xb0, 0x14, 0x87, 0x22, + 0x4e, 0x91, 0x4e, 0x94, 0x2a, 0xcc, 0x15, 0x5a, 0xdf, 0x99, 0xdd, 0xc6, 0xab, 0xab, 0xfa, 0xc4, + 0xdb, 0xab, 0xfa, 0x87, 0x1d, 0x22, 0xba, 0xbd, 0x93, 0x86, 0x47, 0xc3, 0xa6, 0x47, 0x79, 0x48, + 0x79, 0xf2, 0xe7, 0x13, 0xee, 0x9f, 0x35, 0xc5, 0x65, 0x8c, 0x79, 0x63, 0x1f, 0x7b, 0xf6, 0xa2, + 0x44, 0xd3, 0xbc, 0xbb, 0x12, 0x4b, 0x52, 0x21, 0x02, 0x2b, 0x8a, 0xc4, 0xeb, 0x31, 0x86, 0x23, + 0xe1, 0xb0, 0x5e, 0x14, 0x91, 0xa8, 0xa3, 0x79, 0xca, 0xf7, 0xe2, 0x51, 0xbb, 0xde, 0xd3, 0x78, + 0xb6, 0x86, 0x53, 0x54, 0x69, 0x3d, 0x24, 0x12, 0x98, 0x39, 0x31, 0x0d, 0x88, 0x77, 0xa9, 0x79, + 0x26, 0xef, 0x5f, 0xcf, 0x53, 0x09, 0xd6, 0x56, 0x58, 0x92, 0xc4, 0xfa, 0xb5, 0x04, 0x20, 0x75, + 0x4c, 0x34, 0x0c, 0x61, 0x2d, 0xaf, 0x61, 0x87, 0xf6, 0x31, 0x8b, 0x64, 0xd7, 0x35, 0xb1, 0x71, + 0x2f, 0x62, 0x73, 0x20, 0xe4, 0xd7, 0x19, 0xa0, 0x2a, 0xf1, 0x09, 0x98, 0x79, 0x3a, 0x1c, 0x53, + 0xaf, 0xeb, 0x04, 0x38, 0xea, 0x88, 0xae, 0x6a, 0x5a, 0xd9, 0xae, 0x0e, 0x72, 0x0f, 0x64, 0xf4, + 0x50, 0x05, 0xd1, 0x63, 0x58, 0xce, 0x27, 0xea, 0xa9, 0x51, 0x1d, 0x57, 0x4d, 0x28, 0xdb, 0x95, + 0x41, 0x9e, 0x1a, 0x1a, 0xd5, 0x41, 0xb4, 0x03, 0xd5, 0x02, 0x5f, 0x94, 0x8c, 0x89, 0x52, 0xb4, + 0x6c, 0xa3, 0x1c, 0x59, 0xa4, 0x9b, 0x6e, 0xbd, 0x99, 0xcc, 0x4e, 0xa0, 0x9e, 0xfb, 0x2d, 0x78, + 0xaf, 0x38, 0xb2, 0x44, 0x1f, 0xba, 0x19, 0x7b, 0x21, 0x3f, 0xaa, 0x4f, 0x7d, 0xe9, 0x14, 0xe3, + 0x86, 0x5b, 0x33, 0xea, 0x23, 0xb6, 0x34, 0x32, 0xdd, 0x7a, 0xa3, 0x8f, 0x61, 0xb9, 0x98, 0x3a, + 0xd8, 0x6a, 0x59, 0x25, 0x56, 0xf2, 0x89, 0xe9, 0x66, 0x11, 0x1e, 0x3e, 0x4e, 0x6e, 0x10, 0x50, + 0xcf, 0x15, 0x84, 0x46, 0xc9, 0xd0, 0x7c, 0xfc, 0xf6, 0xaa, 0xfe, 0xd1, 0x3b, 0xf4, 0xed, 0x5b, + 0x12, 0x89, 0xe2, 0xee, 0x5a, 0x19, 0x14, 0xf2, 0xa0, 0x56, 0xa4, 0x51, 0x2e, 0x18, 0xf6, 0x02, + 0x41, 0xe2, 0x80, 0x60, 0xc6, 0xcd, 0x07, 0xca, 0x0a, 0x6a, 0xc3, 0x56, 0x20, 0xed, 0xf0, 0x59, + 0xb6, 0xcc, 0x5e, 0xcb, 0xe3, 0x17, 0x63, 0x1c, 0x71, 0xd8, 0x2c, 0x92, 0xf8, 0xf8, 0xd4, 0xed, + 0x05, 0x22, 0xc7, 0x63, 0x4e, 0xa9, 0x9a, 0xb6, 0xef, 0x30, 0x8b, 0x1b, 0x79, 0xca, 0x7d, 0x8d, + 0x38, 0x60, 0x45, 0x5f, 0x0c, 0x0b, 0xe8, 0x13, 0x2e, 0x18, 0x39, 0xe9, 0x09, 0x6c, 0xfe, 0x4f, + 0xb9, 0x74, 0x41, 0x93, 0xfd, 0x2c, 0x8a, 0xb6, 0xe1, 0xfd, 0x62, 0x66, 0x48, 0x7d, 0x73, 0x5a, + 0xf5, 0xea, 0xff, 0xf9, 0x94, 0x67, 0xd4, 0xb7, 0x5e, 0x1a, 0xb0, 0x50, 0x2c, 0x17, 0x3d, 0x82, + 0xea, 0x90, 0x88, 0x8e, 0xcb, 0x39, 0x16, 0xc9, 0x68, 0x2d, 0xc6, 0x85, 0xe5, 0x2d, 0x19, 0x42, + 0xdf, 0x00, 0xe4, 0xb4, 0x28, 0xdd, 0x59, 0x8b, 0x5c, 0xb6, 0xf5, 0x4b, 0x09, 0x56, 0x0e, 0x53, + 0xbb, 0x6f, 0x33, 0x2a, 0xb0, 0x27, 0x5b, 0x9d, 0xd8, 0x02, 0x83, 0x8d, 0xd0, 0xbd, 0x70, 0x18, + 0x3d, 0x77, 0x23, 0x67, 0x70, 0x79, 0x14, 0xef, 0xbd, 0x99, 0xdd, 0x66, 0x62, 0x0c, 0xef, 0x3c, + 0x60, 0xab, 0xa1, 0x7b, 0x61, 0x4b, 0xd0, 0x8c, 0x7a, 0x70, 0x59, 0x1e, 0xc2, 0x07, 0xff, 0xc8, + 0x99, 0xe8, 0xa3, 0xca, 0xb6, 0xeb, 0xb7, 0x03, 0x69, 0xad, 0x1e, 0xc2, 0x5c, 0xc1, 0x5d, 0xf4, + 0x29, 0x9a, 0xc5, 0x39, 0x4f, 0x59, 0x83, 0x19, 0xc2, 0x1d, 0xd7, 0x13, 0xa4, 0xaf, 0x2d, 0x76, + 0xda, 0x9e, 0x26, 0xbc, 0xa5, 0x9e, 0xad, 0x9f, 0x0d, 0xd8, 0x18, 0xa3, 0x4f, 0xee, 0xfa, 0xf9, + 0x01, 0x1e, 0x66, 0x97, 0xc2, 0x7f, 0xad, 0x53, 0x2d, 0x41, 0xbe, 0xa5, 0x44, 0xeb, 0x8f, 0x12, + 0xac, 0xb6, 0x19, 0xed, 0x13, 0x1f, 0xb3, 0x6c, 0x26, 0x65, 0xfb, 0xb4, 0x65, 0x71, 0xa8, 0xf9, + 0xb9, 0x5f, 0xc7, 0xdc, 0x90, 0xf7, 0x33, 0xf6, 0x35, 0x7f, 0x84, 0x6b, 0x70, 0x53, 0x1e, 0x40, + 0x7d, 0x1c, 0xe9, 0xa8, 0x07, 0xae, 0x8f, 0xa2, 0xe4, 0x9c, 0xb0, 0x05, 0x1b, 0xe3, 0x60, 0x86, + 0xfd, 0x70, 0x75, 0x14, 0x24, 0x73, 0xc5, 0xcf, 0x61, 0x79, 0x1c, 0x84, 0x3c, 0xa0, 0x93, 0x2a, + 0xb9, 0x3a, 0x9a, 0x2c, 0x8f, 0xe9, 0x8f, 0xb7, 0x88, 0xaa, 0xfb, 0xfd, 0x3d, 0x54, 0xc6, 0xa0, + 0x72, 0xd3, 0x50, 0xd6, 0xb7, 0x3d, 0x62, 0x7d, 0xb7, 0xb6, 0xc7, 0x5e, 0x1c, 0xa5, 0xe7, 0xd6, + 0x6f, 0x06, 0xcc, 0x1f, 0x9d, 0xbb, 0xf1, 0x57, 0x38, 0x1d, 0x30, 0x17, 0xaa, 0xa9, 0x05, 0xf2, + 0x73, 0x37, 0x76, 0x4e, 0xf1, 0xbf, 0xba, 0x95, 0x51, 0x02, 0x96, 0x90, 0x24, 0x3d, 0x9b, 0x13, + 0xf4, 0x0c, 0x47, 0x8e, 0x7e, 0x43, 0x36, 0x4b, 0xaa, 0x16, 0x6b, 0xb8, 0x96, 0x24, 0xe5, 0x58, + 0x2e, 0xd5, 0x9b, 0xb3, 0x67, 0xc5, 0xe0, 0xc1, 0x7a, 0x63, 0x00, 0x1a, 0x5d, 0x83, 0x2a, 0xf0, + 0x20, 0xef, 0x69, 0xfa, 0x01, 0x3d, 0x87, 0x39, 0xf9, 0x3e, 0x9d, 0x96, 0x94, 0xf8, 0xd8, 0x9d, + 0x8f, 0x08, 0x84, 0x24, 0x4a, 0x38, 0x91, 0x0d, 0xf3, 0x45, 0x85, 0xee, 0xf7, 0x62, 0x36, 0xcb, + 0x07, 0xd2, 0xec, 0xb6, 0x5e, 0x5d, 0xd7, 0x8c, 0xd7, 0xd7, 0x35, 0xe3, 0xaf, 0xeb, 0x9a, 0xf1, + 0xf2, 0xa6, 0x36, 0xf1, 0xfa, 0xa6, 0x36, 0xf1, 0xe7, 0x4d, 0x6d, 0xe2, 0xbb, 0xfc, 0x16, 0x8f, + 0xc8, 0xa9, 0xd7, 0x75, 0x49, 0xd4, 0x4c, 0xbf, 0x38, 0x2e, 0xd4, 0x37, 0x87, 0xc2, 0x3c, 0x99, + 0x52, 0x9f, 0x12, 0x9f, 0xfd, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x42, 0x83, 0x11, 0x3a, 0x8f, 0x0c, + 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -1298,9 +1300,9 @@ func (m *SwapFeeParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } { - size := m.SwapFeeRate.Size() + size := m.DefaultSwapFeeRate.Size() i -= size - if _, err := m.SwapFeeRate.MarshalTo(dAtA[i:]); err != nil { + if _, err := m.DefaultSwapFeeRate.MarshalTo(dAtA[i:]); err != nil { return 0, err } i = encodeVarintParams(dAtA, i, uint64(size)) @@ -1330,6 +1332,16 @@ func (m *SwapFeeTokenParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size := m.SwapFeeRate.Size() + i -= size + if _, err := m.SwapFeeRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintParams(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a { size := m.MinSwapFee.Size() i -= size @@ -1565,7 +1577,7 @@ func (m *SwapFeeParams) Size() (n int) { } var l int _ = l - l = m.SwapFeeRate.Size() + l = m.DefaultSwapFeeRate.Size() n += 1 + l + sovParams(uint64(l)) if len(m.TokenParams) > 0 { for _, e := range m.TokenParams { @@ -1588,6 +1600,8 @@ func (m *SwapFeeTokenParams) Size() (n int) { } l = m.MinSwapFee.Size() n += 1 + l + sovParams(uint64(l)) + l = m.SwapFeeRate.Size() + n += 1 + l + sovParams(uint64(l)) return n } @@ -3011,7 +3025,7 @@ func (m *SwapFeeParams) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SwapFeeRate", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DefaultSwapFeeRate", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3039,7 +3053,7 @@ func (m *SwapFeeParams) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SwapFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.DefaultSwapFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3193,6 +3207,40 @@ func (m *SwapFeeTokenParams) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SwapFeeRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + 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 ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SwapFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) diff --git a/x/clp/types/querier.pb.go b/x/clp/types/querier.pb.go index 800edbb962..61d5550ebb 100644 --- a/x/clp/types/querier.pb.go +++ b/x/clp/types/querier.pb.go @@ -1218,8 +1218,8 @@ func (m *SwapFeeParamsReq) XXX_DiscardUnknown() { var xxx_messageInfo_SwapFeeParamsReq proto.InternalMessageInfo type SwapFeeParamsRes struct { - SwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=swap_fee_rate,json=swapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"swap_fee_rate"` - TokenParams []*SwapFeeTokenParams `protobuf:"bytes,2,rep,name=token_params,json=tokenParams,proto3" json:"token_params,omitempty"` + DefaultSwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=default_swap_fee_rate,json=defaultSwapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"default_swap_fee_rate"` + TokenParams []*SwapFeeTokenParams `protobuf:"bytes,2,rep,name=token_params,json=tokenParams,proto3" json:"token_params,omitempty"` } func (m *SwapFeeParamsRes) Reset() { *m = SwapFeeParamsRes{} } @@ -1294,97 +1294,97 @@ func init() { func init() { proto.RegisterFile("sifnode/clp/v1/querier.proto", fileDescriptor_5f4edede314ca3fd) } var fileDescriptor_5f4edede314ca3fd = []byte{ - // 1428 bytes of a gzipped FileDescriptorProto + // 1435 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xcd, 0x6f, 0x1b, 0x45, 0x14, 0xcf, 0x26, 0x6d, 0xda, 0x4c, 0xfa, 0x91, 0x3e, 0x92, 0xd4, 0x5d, 0x1c, 0x3b, 0xac, 0x4a, - 0x1a, 0x42, 0xb2, 0x6e, 0xfa, 0x21, 0x28, 0x88, 0x43, 0xa2, 0xb6, 0xe6, 0x50, 0x50, 0xd8, 0x56, - 0x42, 0x42, 0x2a, 0xd6, 0xda, 0x9e, 0xda, 0xab, 0xae, 0xbd, 0xeb, 0x7d, 0x93, 0xb4, 0x56, 0x29, - 0x48, 0xa8, 0x07, 0x24, 0x2e, 0x48, 0xbd, 0xa3, 0x1e, 0xe0, 0xc0, 0xa1, 0x12, 0x07, 0xfe, 0x05, - 0xa4, 0x22, 0x21, 0x51, 0x89, 0x0b, 0x70, 0x28, 0xa8, 0xe5, 0xd0, 0x3f, 0x03, 0xcd, 0xec, 0xac, - 0xd7, 0xfb, 0x65, 0x3b, 0x51, 0x05, 0xe2, 0x64, 0xef, 0xbc, 0xdf, 0xbc, 0xf7, 0x7b, 0xbf, 0x79, - 0x3b, 0xef, 0xd9, 0x24, 0x8f, 0xd6, 0x8d, 0xb6, 0x53, 0xa7, 0xa5, 0x9a, 0xed, 0x96, 0x76, 0xd6, - 0x4b, 0x9d, 0x6d, 0xea, 0x59, 0xd4, 0xd3, 0x5d, 0xcf, 0x61, 0x0e, 0x1c, 0x91, 0x56, 0xbd, 0x66, - 0xbb, 0xfa, 0xce, 0xba, 0x3a, 0xdb, 0x70, 0x1a, 0x8e, 0x30, 0x95, 0xf8, 0x37, 0x1f, 0xa5, 0xaa, - 0x31, 0x1f, 0xac, 0xeb, 0x52, 0x94, 0xb6, 0x97, 0x63, 0x36, 0xd7, 0xf4, 0xcc, 0x56, 0x60, 0x5c, - 0xa9, 0x39, 0xd8, 0x72, 0xb0, 0x54, 0x35, 0x91, 0x8a, 0xc8, 0xdd, 0xd2, 0xce, 0x7a, 0x95, 0x32, - 0x93, 0xe3, 0x1a, 0x56, 0xdb, 0x64, 0x96, 0xd3, 0x96, 0xd8, 0x7c, 0xc3, 0x71, 0x1a, 0x36, 0x2d, - 0x99, 0xae, 0x55, 0x32, 0xdb, 0x6d, 0x87, 0x09, 0xa3, 0xf4, 0xa4, 0xbd, 0x4e, 0x0e, 0x6c, 0x39, - 0x8e, 0x6d, 0xd0, 0x0e, 0xcc, 0x93, 0x49, 0xec, 0xb6, 0xaa, 0x8e, 0x9d, 0x53, 0x16, 0x95, 0xe5, - 0x29, 0x43, 0x3e, 0xbd, 0x75, 0xf0, 0x8b, 0x07, 0xc5, 0xb1, 0xe7, 0x0f, 0x8a, 0x63, 0x5a, 0x37, - 0x00, 0x23, 0x2c, 0x93, 0x7d, 0xae, 0x23, 0xa1, 0xd3, 0x67, 0x66, 0xf5, 0x68, 0xbe, 0xba, 0x80, - 0x09, 0x04, 0xac, 0x12, 0xa8, 0xd9, 0x6e, 0xa5, 0xe5, 0xd4, 0xb7, 0x6d, 0x5a, 0x31, 0xeb, 0x75, - 0x8f, 0x22, 0xe6, 0xc6, 0x45, 0x88, 0x99, 0x9a, 0xed, 0xbe, 0x27, 0x0c, 0x1b, 0xfe, 0x3a, 0x27, - 0xd1, 0xa4, 0x56, 0xa3, 0xc9, 0x72, 0x13, 0x8b, 0xca, 0xf2, 0x84, 0x21, 0x9f, 0x34, 0x83, 0x1c, - 0xe4, 0x3e, 0x91, 0x13, 0xbd, 0x4c, 0x48, 0x98, 0xa5, 0x64, 0xb0, 0xa4, 0xfb, 0x92, 0xe8, 0x5c, - 0x12, 0x5d, 0x48, 0xa2, 0x4b, 0x49, 0xf4, 0x2d, 0xb3, 0x41, 0x0d, 0xda, 0xd9, 0xa6, 0xc8, 0x8c, - 0xbe, 0x9d, 0xda, 0x8f, 0x4a, 0xcf, 0x29, 0xc2, 0x0a, 0xd9, 0xcf, 0xe9, 0x62, 0x4e, 0x59, 0x9c, - 0xc8, 0xcc, 0xc8, 0x87, 0xbc, 0x98, 0x94, 0xa0, 0x1c, 0x49, 0x63, 0x9f, 0x48, 0xe3, 0xd4, 0xd0, - 0x34, 0xd0, 0x75, 0xda, 0x48, 0x23, 0x79, 0x7c, 0x48, 0x66, 0xaf, 0x58, 0x9d, 0x6d, 0xab, 0x6e, - 0xb1, 0xee, 0x96, 0xe7, 0xec, 0x58, 0x75, 0xea, 0x0d, 0x38, 0x50, 0x58, 0x20, 0xc4, 0x76, 0x63, - 0xb4, 0xa7, 0x6c, 0x57, 0xf2, 0xed, 0x3b, 0xef, 0xe7, 0x4a, 0xaa, 0x67, 0x84, 0x2d, 0x02, 0x76, - 0xb0, 0x5e, 0x71, 0xa5, 0x41, 0x9e, 0xc4, 0x2b, 0x71, 0xe5, 0x92, 0x1e, 0x8e, 0xd9, 0xf1, 0x25, - 0x38, 0x4d, 0x66, 0x79, 0x36, 0x3b, 0xb4, 0x62, 0x22, 0x52, 0x56, 0xa9, 0x9a, 0xb6, 0xd9, 0xae, - 0x51, 0xc9, 0x0e, 0x7c, 0xdb, 0x06, 0x37, 0x6d, 0xfa, 0x16, 0x38, 0x47, 0xe6, 0xe9, 0x6d, 0x46, - 0xbd, 0xb6, 0x69, 0xc7, 0xf6, 0x4c, 0x88, 0x3d, 0xb3, 0x81, 0x35, 0xb2, 0x2b, 0x3c, 0x8c, 0x7d, - 0x91, 0xfa, 0xfa, 0x8c, 0x1c, 0x12, 0xb8, 0x2b, 0x16, 0x32, 0xae, 0x5d, 0x54, 0x23, 0x25, 0xa6, - 0x51, 0xac, 0x04, 0xc7, 0xf7, 0x5a, 0x82, 0x7d, 0x5a, 0x7f, 0xad, 0x44, 0x18, 0x20, 0xac, 0x91, - 0x49, 0x91, 0x56, 0x50, 0x91, 0x73, 0x71, 0x5d, 0x05, 0xda, 0x90, 0xa0, 0xbe, 0xc4, 0xc6, 0x07, - 0x54, 0xd9, 0xc4, 0xde, 0xab, 0xec, 0x4b, 0x85, 0xe4, 0x12, 0x47, 0x79, 0xd1, 0x64, 0xe6, 0x7f, - 0x22, 0xd7, 0xef, 0xd9, 0x6c, 0x10, 0xae, 0x93, 0xe3, 0xc9, 0xf2, 0xac, 0xd4, 0x4d, 0x66, 0x4a, - 0x2d, 0x5f, 0x1d, 0x5a, 0xa3, 0xc2, 0xd5, 0x9c, 0x9d, 0xb6, 0x9c, 0x29, 0xf5, 0xe5, 0x14, 0xa9, - 0xf7, 0x72, 0x2f, 0xdd, 0x4b, 0xcb, 0x2d, 0x28, 0xcc, 0xac, 0x97, 0xfa, 0xc5, 0x4b, 0xfc, 0x4b, - 0x36, 0x0d, 0x04, 0x83, 0xbc, 0x94, 0x94, 0x38, 0x28, 0xd5, 0x11, 0xae, 0x00, 0x48, 0x48, 0xfb, - 0x2f, 0x94, 0xb0, 0x45, 0xe6, 0x12, 0x4c, 0x52, 0x3a, 0xca, 0x8b, 0x10, 0xef, 0x67, 0x25, 0x3d, - 0xd6, 0xff, 0x54, 0xb9, 0x69, 0x32, 0xb5, 0x25, 0x06, 0x10, 0x83, 0x76, 0xb4, 0x7b, 0xe3, 0xe1, - 0x13, 0x82, 0x4e, 0x26, 0xfd, 0xd9, 0x44, 0xde, 0xff, 0xf3, 0x89, 0xce, 0xe9, 0x43, 0x25, 0x0a, - 0xae, 0x13, 0xc0, 0x6e, 0xab, 0x45, 0x99, 0xd7, 0xad, 0xb0, 0xa6, 0x47, 0xb1, 0xe9, 0xd8, 0x75, - 0xff, 0x9e, 0xdf, 0xd4, 0x1f, 0x3d, 0x29, 0x8e, 0xfd, 0xf1, 0xa4, 0xb8, 0xd4, 0xb0, 0x58, 0x73, - 0xbb, 0xaa, 0xd7, 0x9c, 0x56, 0x49, 0x8e, 0x3a, 0xfe, 0xc7, 0x1a, 0xd6, 0x6f, 0xca, 0x31, 0xe9, - 0x22, 0xad, 0x19, 0xc7, 0x02, 0x4f, 0xd7, 0x02, 0x47, 0xd0, 0x24, 0xb9, 0x9e, 0x7b, 0x8f, 0x93, - 0xef, 0x0b, 0x32, 0xb1, 0xa7, 0x20, 0xf3, 0x81, 0x3f, 0x83, 0xbb, 0xeb, 0x45, 0xd2, 0x8e, 0x91, - 0xa3, 0x06, 0xbd, 0x65, 0x7a, 0xf5, 0x50, 0x99, 0x72, 0x7c, 0x09, 0xe1, 0x5c, 0x4c, 0x9e, 0x7c, - 0x5c, 0x9e, 0xc8, 0x06, 0x89, 0xd5, 0x8e, 0x92, 0xc3, 0x5b, 0x2d, 0xe6, 0x86, 0x9e, 0xff, 0x54, - 0xa2, 0x2b, 0x08, 0x67, 0x62, 0x8e, 0xd5, 0x84, 0xee, 0x21, 0x3c, 0xd0, 0xfe, 0x5d, 0x32, 0xe3, - 0xb6, 0x98, 0xcb, 0x85, 0xa1, 0x15, 0xb9, 0xdb, 0xaf, 0xf6, 0x42, 0xda, 0x6e, 0xc3, 0x64, 0x54, - 0x7a, 0x38, 0xe2, 0x46, 0x9e, 0xe1, 0x4d, 0x42, 0x84, 0x27, 0xea, 0x3a, 0xb5, 0xa6, 0xac, 0xac, - 0x13, 0x69, 0x3e, 0x2e, 0x71, 0x80, 0x31, 0xe5, 0x06, 0x5f, 0x33, 0x3b, 0x70, 0x81, 0xe4, 0xfb, - 0x8b, 0x9d, 0xd1, 0x1a, 0xaf, 0xbc, 0x50, 0x81, 0x9f, 0x94, 0x81, 0x00, 0x84, 0x8d, 0x98, 0x20, - 0xaf, 0x0d, 0x7a, 0x97, 0xa2, 0xbb, 0x03, 0x7d, 0xde, 0x27, 0xd3, 0x49, 0x69, 0xd6, 0x46, 0xf0, - 0xd3, 0xa7, 0x14, 0xf1, 0x42, 0x95, 0xb2, 0xa6, 0xd9, 0x22, 0x59, 0xe8, 0x75, 0x14, 0x0b, 0x99, - 0x67, 0x55, 0xb7, 0xa3, 0xc9, 0xd6, 0x06, 0x03, 0x10, 0x36, 0x63, 0xc9, 0xae, 0x24, 0xb4, 0xcf, - 0xde, 0x1e, 0x14, 0x19, 0x90, 0x99, 0xab, 0xb7, 0x4c, 0xf7, 0x32, 0xa5, 0x61, 0xe0, 0x87, 0x4a, - 0x62, 0x91, 0x5f, 0x59, 0x87, 0xf1, 0x96, 0xe9, 0x56, 0x6e, 0x50, 0x2a, 0x4a, 0xc7, 0x6f, 0x3d, - 0xbb, 0x7e, 0x91, 0xa6, 0xd1, 0x77, 0xcc, 0xc5, 0x82, 0x4b, 0xe4, 0x10, 0x73, 0x6e, 0xd2, 0x76, - 0xa8, 0x35, 0xbf, 0xff, 0xb4, 0x78, 0x1a, 0x92, 0xcb, 0x35, 0x0e, 0x95, 0x84, 0xa6, 0x59, 0xf8, - 0x70, 0xe6, 0x9b, 0x23, 0x64, 0xff, 0x07, 0xfc, 0x0e, 0x83, 0x1a, 0x39, 0x50, 0xa6, 0x8c, 0x8f, - 0xe9, 0x70, 0x3c, 0x75, 0x78, 0xa7, 0x1d, 0x35, 0xc3, 0x80, 0xda, 0xd2, 0xe7, 0xbf, 0xfe, 0x7d, - 0x7f, 0x7c, 0x11, 0x0a, 0x25, 0xb4, 0x6e, 0xd4, 0x9a, 0xa6, 0xd5, 0xee, 0xfd, 0xee, 0x72, 0x1c, - 0xbb, 0x74, 0xc7, 0x6f, 0xb2, 0x77, 0xe1, 0x63, 0x72, 0x50, 0x06, 0x41, 0xc8, 0xa5, 0x39, 0xe3, - 0x22, 0xaa, 0x59, 0x16, 0xd4, 0x0a, 0x22, 0x4e, 0x0e, 0xe6, 0x53, 0xe3, 0x20, 0x7c, 0xab, 0x90, - 0xd9, 0x32, 0x9f, 0x01, 0xe3, 0xf3, 0xf1, 0xc9, 0xe1, 0x8d, 0x81, 0x76, 0xd4, 0x51, 0x50, 0xa8, - 0x6d, 0x08, 0x12, 0x6f, 0xc3, 0x85, 0x04, 0x89, 0x64, 0x63, 0xea, 0xa5, 0x5e, 0xba, 0x13, 0x0e, - 0x78, 0x77, 0xe1, 0xa1, 0x42, 0x72, 0x69, 0x3c, 0xc5, 0x7c, 0xb4, 0x3c, 0xda, 0x74, 0x45, 0x3b, - 0xea, 0xa8, 0x48, 0xd4, 0xde, 0x11, 0x9c, 0xdf, 0x80, 0xf3, 0x23, 0x70, 0x16, 0x93, 0x5e, 0x94, - 0xef, 0x27, 0xe4, 0x50, 0x99, 0xb2, 0xde, 0x7c, 0x0d, 0xf9, 0xd4, 0x61, 0x5a, 0xce, 0x58, 0xea, - 0x20, 0x2b, 0x6a, 0xa7, 0x05, 0x95, 0x15, 0x58, 0x4e, 0x50, 0xf1, 0x7f, 0x86, 0xd8, 0x16, 0xb2, - 0x68, 0xf4, 0xfb, 0x0a, 0x99, 0x4b, 0x53, 0x0b, 0x61, 0xf8, 0x20, 0x2a, 0x0a, 0x6a, 0x24, 0x18, - 0x6a, 0xab, 0x82, 0xd9, 0x12, 0x9c, 0x1c, 0x41, 0x24, 0x84, 0xef, 0x32, 0xce, 0x50, 0x08, 0x34, - 0xfc, 0x64, 0x02, 0xb1, 0x46, 0x45, 0xa2, 0x76, 0x41, 0xd0, 0x3b, 0x0b, 0xeb, 0xa3, 0x9c, 0xa1, - 0xaf, 0x62, 0xf0, 0xde, 0x55, 0xc9, 0x14, 0x7f, 0xef, 0xfc, 0x5b, 0xf5, 0x44, 0xc6, 0x84, 0x41, - 0x3b, 0x6a, 0xa6, 0x09, 0xb5, 0xa2, 0x88, 0x7e, 0x02, 0x8e, 0x27, 0x5f, 0x3d, 0xdf, 0xed, 0x1d, - 0x72, 0xb4, 0x4c, 0x59, 0x7f, 0x3b, 0x86, 0xe2, 0xc0, 0x66, 0x4d, 0x3b, 0xea, 0x10, 0xc0, 0xa0, - 0x8b, 0xc5, 0x13, 0x48, 0x79, 0xfd, 0x01, 0x92, 0xc3, 0x3c, 0xc1, 0x5e, 0xcb, 0x86, 0x85, 0x01, - 0xed, 0x9c, 0x76, 0xd4, 0x81, 0x66, 0xd4, 0x4e, 0x8a, 0xb0, 0x05, 0xc8, 0x27, 0x93, 0xe5, 0x5d, - 0x5b, 0x06, 0xfd, 0x5e, 0x21, 0xf9, 0x58, 0x05, 0x44, 0xfa, 0x22, 0xac, 0x8e, 0xde, 0x42, 0x69, - 0x47, 0xdd, 0x0d, 0x1a, 0xb5, 0x73, 0x82, 0xa2, 0x0e, 0xab, 0x83, 0xab, 0x41, 0xee, 0x0b, 0x28, - 0xff, 0xa0, 0x90, 0x05, 0x2e, 0x54, 0x66, 0x77, 0x83, 0xb5, 0x5d, 0x74, 0x42, 0xda, 0x51, 0x77, - 0x05, 0x47, 0xed, 0xbc, 0x60, 0x5d, 0x82, 0xb5, 0xa4, 0xb0, 0xbd, 0xdb, 0xa7, 0x6f, 0x63, 0x40, - 0xfb, 0x53, 0x32, 0x53, 0xa6, 0x2c, 0xd2, 0x58, 0x61, 0x31, 0xa3, 0xd7, 0x85, 0xdc, 0x86, 0x21, - 0x06, 0x95, 0x57, 0xa4, 0x61, 0x6f, 0x6e, 0x3c, 0x7a, 0x5a, 0x50, 0x1e, 0x3f, 0x2d, 0x28, 0x7f, - 0x3d, 0x2d, 0x28, 0x5f, 0x3d, 0x2b, 0x8c, 0x3d, 0x7e, 0x56, 0x18, 0xfb, 0xed, 0x59, 0x61, 0xec, - 0xa3, 0x53, 0x7d, 0xcd, 0xfb, 0x6a, 0xe0, 0x23, 0xf8, 0xef, 0xf1, 0xb6, 0xf0, 0x26, 0x3a, 0x78, - 0x75, 0x52, 0xfc, 0x61, 0x78, 0xf6, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x5b, 0x92, 0xf0, - 0xf9, 0x14, 0x00, 0x00, + 0x1a, 0x42, 0xb2, 0xdb, 0xf4, 0x43, 0x50, 0x10, 0x87, 0x44, 0x6d, 0xcd, 0xa1, 0xa0, 0xb0, 0xad, + 0x84, 0x84, 0x54, 0xac, 0xf5, 0x7a, 0x62, 0xaf, 0xba, 0xf6, 0x7e, 0xcc, 0x38, 0xad, 0x55, 0x0a, + 0x12, 0xea, 0x01, 0x89, 0x0b, 0x52, 0xef, 0xa8, 0x07, 0x38, 0x70, 0x40, 0xe2, 0xc0, 0x91, 0x2b, + 0x52, 0x91, 0x90, 0xa8, 0xc4, 0x05, 0x38, 0x14, 0xd4, 0x72, 0xe8, 0x9f, 0x81, 0x66, 0x76, 0xd6, + 0xeb, 0xfd, 0xb2, 0x9d, 0x28, 0x02, 0x71, 0xb2, 0x77, 0xde, 0x6f, 0xde, 0xfb, 0xbd, 0xdf, 0xbc, + 0x9d, 0xf7, 0x6c, 0x54, 0x24, 0xd6, 0x76, 0xdb, 0xa9, 0x63, 0xcd, 0xb4, 0x5d, 0x6d, 0x67, 0x5d, + 0xf3, 0x3a, 0xd8, 0xb7, 0xb0, 0xaf, 0xba, 0xbe, 0x43, 0x1d, 0x38, 0x26, 0xac, 0xaa, 0x69, 0xbb, + 0xea, 0xce, 0xba, 0x3c, 0xdb, 0x70, 0x1a, 0x0e, 0x37, 0x69, 0xec, 0x5b, 0x80, 0x92, 0xe5, 0x84, + 0x0f, 0xda, 0x75, 0x31, 0x11, 0xb6, 0x17, 0x13, 0x36, 0xd7, 0xf0, 0x8d, 0x56, 0x68, 0x5c, 0x31, + 0x1d, 0xd2, 0x72, 0x88, 0x56, 0x33, 0x08, 0xe6, 0x91, 0xbb, 0xda, 0xce, 0x7a, 0x0d, 0x53, 0x83, + 0xe1, 0x1a, 0x56, 0xdb, 0xa0, 0x96, 0xd3, 0x16, 0xd8, 0x62, 0xc3, 0x71, 0x1a, 0x36, 0xd6, 0x0c, + 0xd7, 0xd2, 0x8c, 0x76, 0xdb, 0xa1, 0xdc, 0x28, 0x3c, 0x29, 0xaf, 0xa2, 0x43, 0x5b, 0x8e, 0x63, + 0xeb, 0xd8, 0x83, 0x79, 0x34, 0x49, 0xba, 0xad, 0x9a, 0x63, 0x17, 0xa4, 0x45, 0x69, 0x79, 0x4a, + 0x17, 0x4f, 0x6f, 0x1c, 0xfe, 0xec, 0x61, 0x79, 0xec, 0xf9, 0xc3, 0xf2, 0x98, 0xd2, 0x0d, 0xc1, + 0x04, 0x96, 0xd1, 0x01, 0xd7, 0x11, 0xd0, 0xe9, 0x73, 0xb3, 0x6a, 0x3c, 0x5f, 0x95, 0xc3, 0x38, + 0x02, 0x56, 0x11, 0x98, 0xb6, 0x5b, 0x6d, 0x39, 0xf5, 0x8e, 0x8d, 0xab, 0x46, 0xbd, 0xee, 0x63, + 0x42, 0x0a, 0xe3, 0x3c, 0xc4, 0x8c, 0x69, 0xbb, 0xef, 0x70, 0xc3, 0x46, 0xb0, 0xce, 0x48, 0x34, + 0xb1, 0xd5, 0x68, 0xd2, 0xc2, 0xc4, 0xa2, 0xb4, 0x3c, 0xa1, 0x8b, 0x27, 0x45, 0x47, 0x87, 0x99, + 0x4f, 0xc2, 0x88, 0x5e, 0x45, 0x28, 0xca, 0x52, 0x30, 0x58, 0x52, 0x03, 0x49, 0x54, 0x26, 0x89, + 0xca, 0x25, 0x51, 0x85, 0x24, 0xea, 0x96, 0xd1, 0xc0, 0x3a, 0xf6, 0x3a, 0x98, 0x50, 0xbd, 0x6f, + 0xa7, 0xf2, 0xa3, 0xd4, 0x73, 0x4a, 0x60, 0x05, 0x1d, 0x64, 0x74, 0x49, 0x41, 0x5a, 0x9c, 0xc8, + 0xcd, 0x28, 0x80, 0xec, 0x4f, 0x4a, 0x50, 0x89, 0xa5, 0x71, 0x80, 0xa7, 0x71, 0x66, 0x68, 0x1a, + 0xc4, 0x75, 0xda, 0x04, 0xc7, 0xf2, 0x78, 0x1f, 0xcd, 0x5e, 0xb3, 0xbc, 0x8e, 0x55, 0xb7, 0x68, + 0x77, 0xcb, 0x77, 0x76, 0xac, 0x3a, 0xf6, 0x07, 0x1c, 0x28, 0x2c, 0x20, 0x64, 0xbb, 0x09, 0xda, + 0x53, 0xb6, 0x2b, 0xf8, 0xf6, 0x9d, 0xf7, 0x73, 0x29, 0xd3, 0x33, 0x81, 0x2d, 0x04, 0x76, 0xb8, + 0x5e, 0x75, 0x85, 0x41, 0x9c, 0xc4, 0x4b, 0x49, 0xe5, 0xd2, 0x1e, 0x4e, 0xd8, 0xc9, 0x25, 0x38, + 0x8b, 0x66, 0x59, 0x36, 0x3b, 0xb8, 0x6a, 0x10, 0x82, 0x69, 0xb5, 0x66, 0xd8, 0x46, 0xdb, 0xc4, + 0x82, 0x1d, 0x04, 0xb6, 0x0d, 0x66, 0xda, 0x0c, 0x2c, 0x70, 0x01, 0xcd, 0xe3, 0x3b, 0x14, 0xfb, + 0x6d, 0xc3, 0x4e, 0xec, 0x99, 0xe0, 0x7b, 0x66, 0x43, 0x6b, 0x6c, 0x57, 0x74, 0x18, 0x07, 0x62, + 0xf5, 0xf5, 0x09, 0x3a, 0xc2, 0x71, 0xd7, 0x2c, 0x42, 0x99, 0x76, 0x71, 0x8d, 0xa4, 0x84, 0x46, + 0x89, 0x12, 0x1c, 0xdf, 0x6b, 0x09, 0xf6, 0x69, 0xfd, 0xa5, 0x14, 0x63, 0x40, 0x60, 0x0d, 0x4d, + 0xf2, 0xb4, 0xc2, 0x8a, 0x9c, 0x4b, 0xea, 0xca, 0xd1, 0xba, 0x00, 0xf5, 0x25, 0x36, 0x3e, 0xa0, + 0xca, 0x26, 0xf6, 0x5e, 0x65, 0x9f, 0x4b, 0xa8, 0x90, 0x3a, 0xca, 0xcb, 0x06, 0x35, 0xfe, 0x13, + 0xb9, 0x7e, 0xcf, 0x67, 0x43, 0xe0, 0x26, 0x3a, 0x99, 0x2e, 0xcf, 0x6a, 0xdd, 0xa0, 0x86, 0xd0, + 0xf2, 0xe5, 0xa1, 0x35, 0xca, 0x5d, 0xcd, 0xd9, 0x59, 0xcb, 0xb9, 0x52, 0x5f, 0xcd, 0x90, 0x7a, + 0x2f, 0xf7, 0xd2, 0xfd, 0xac, 0xdc, 0xc2, 0xc2, 0xcc, 0x7b, 0xa9, 0xf7, 0x5f, 0xe2, 0x5f, 0xf2, + 0x69, 0x10, 0xd0, 0xd1, 0x0b, 0x69, 0x89, 0xc3, 0x52, 0x1d, 0xe1, 0x0a, 0x80, 0x94, 0xb4, 0xff, + 0x42, 0x09, 0x5b, 0x68, 0x2e, 0xc5, 0x24, 0xa3, 0xa3, 0xec, 0x87, 0x78, 0x3f, 0x4b, 0xd9, 0xb1, + 0xfe, 0xa7, 0xca, 0x4d, 0xa3, 0xa9, 0x2d, 0x3e, 0x80, 0xe8, 0xd8, 0x53, 0xee, 0x8f, 0x47, 0x4f, + 0x04, 0x54, 0x34, 0x19, 0xcc, 0x26, 0xe2, 0xfe, 0x9f, 0x4f, 0x75, 0xce, 0x00, 0x2a, 0x50, 0x70, + 0x13, 0x01, 0xe9, 0xb6, 0x5a, 0x98, 0xfa, 0xdd, 0x2a, 0x6d, 0xfa, 0x98, 0x34, 0x1d, 0xbb, 0x1e, + 0xdc, 0xf3, 0x9b, 0xea, 0xa3, 0x27, 0xe5, 0xb1, 0x3f, 0x9e, 0x94, 0x97, 0x1a, 0x16, 0x6d, 0x76, + 0x6a, 0xaa, 0xe9, 0xb4, 0x34, 0x31, 0xea, 0x04, 0x1f, 0x6b, 0xa4, 0x7e, 0x4b, 0x8c, 0x49, 0x97, + 0xb1, 0xa9, 0x9f, 0x08, 0x3d, 0xdd, 0x08, 0x1d, 0x41, 0x13, 0x15, 0x7a, 0xee, 0x7d, 0x46, 0xbe, + 0x2f, 0xc8, 0xc4, 0x9e, 0x82, 0xcc, 0x87, 0xfe, 0x74, 0xe6, 0xae, 0x17, 0x49, 0x39, 0x81, 0x8e, + 0xeb, 0xf8, 0xb6, 0xe1, 0xd7, 0x23, 0x65, 0x2a, 0xc9, 0x25, 0x02, 0x17, 0x12, 0xf2, 0x14, 0x93, + 0xf2, 0xc4, 0x36, 0x08, 0xac, 0x72, 0x1c, 0x1d, 0xdd, 0x6a, 0x51, 0x37, 0xf2, 0xfc, 0xa7, 0x14, + 0x5f, 0x21, 0x70, 0x2e, 0xe1, 0x58, 0x4e, 0xe9, 0x1e, 0xc1, 0x43, 0xed, 0xdf, 0x46, 0x33, 0x6e, + 0x8b, 0xba, 0x4c, 0x18, 0x5c, 0x15, 0xbb, 0x83, 0x6a, 0x2f, 0x65, 0xed, 0xd6, 0x0d, 0x8a, 0x85, + 0x87, 0x63, 0x6e, 0xec, 0x19, 0x5e, 0x47, 0x88, 0x7b, 0xc2, 0xae, 0x63, 0x36, 0x45, 0x65, 0x9d, + 0xca, 0xf2, 0x71, 0x85, 0x01, 0xf4, 0x29, 0x37, 0xfc, 0x9a, 0xdb, 0x81, 0x4b, 0xa8, 0xd8, 0x5f, + 0xec, 0x14, 0x9b, 0xac, 0xf2, 0x22, 0x05, 0x7e, 0x92, 0x06, 0x02, 0x08, 0x6c, 0x24, 0x04, 0x79, + 0x65, 0xd0, 0xbb, 0x14, 0xdf, 0x1d, 0xea, 0xf3, 0x2e, 0x9a, 0x4e, 0x4b, 0xb3, 0x36, 0x82, 0x9f, + 0x3e, 0xa5, 0x90, 0x1f, 0xa9, 0x94, 0x37, 0xcd, 0x96, 0xd1, 0x42, 0xaf, 0xa3, 0x58, 0x84, 0xfa, + 0x56, 0xad, 0x13, 0x4f, 0xd6, 0x1c, 0x0c, 0x20, 0xb0, 0x99, 0x48, 0x76, 0x25, 0xa5, 0x7d, 0xfe, + 0xf6, 0xb0, 0xc8, 0x00, 0xcd, 0x5c, 0xbf, 0x6d, 0xb8, 0x57, 0x31, 0x8e, 0x02, 0xff, 0x20, 0xa5, + 0x16, 0x09, 0x18, 0x68, 0xae, 0x8e, 0xb7, 0x8d, 0x8e, 0x4d, 0xab, 0xe4, 0xb6, 0xe1, 0x56, 0xb7, + 0x31, 0xe6, 0x25, 0x14, 0xb4, 0xa0, 0x5d, 0xbf, 0x50, 0x20, 0x9c, 0x89, 0x38, 0x4c, 0x3b, 0xb8, + 0x82, 0x8e, 0x50, 0xe7, 0x16, 0x6e, 0x47, 0xd2, 0xb3, 0xeb, 0x50, 0x49, 0x66, 0x25, 0xb6, 0xdc, + 0x60, 0x50, 0xc1, 0x6f, 0x9a, 0x46, 0x0f, 0xe7, 0xbe, 0x3a, 0x86, 0x0e, 0xbe, 0xc7, 0xae, 0x34, + 0x30, 0xd1, 0xa1, 0x0a, 0xa6, 0x6c, 0x6a, 0x87, 0x93, 0x99, 0xb3, 0x3c, 0xf6, 0xe4, 0x1c, 0x03, + 0x51, 0x96, 0x3e, 0xfd, 0xf5, 0xef, 0x07, 0xe3, 0x8b, 0x50, 0xd2, 0x88, 0xb5, 0x6d, 0x36, 0x0d, + 0xab, 0xdd, 0xfb, 0x19, 0xe6, 0x38, 0xb6, 0x76, 0x37, 0xe8, 0xb9, 0xf7, 0xe0, 0x43, 0x74, 0x58, + 0x04, 0x21, 0x50, 0xc8, 0x72, 0xc6, 0x34, 0x95, 0xf3, 0x2c, 0x44, 0x29, 0xf1, 0x38, 0x05, 0x98, + 0xcf, 0x8c, 0x43, 0xe0, 0x6b, 0x09, 0xcd, 0x56, 0xd8, 0x48, 0x98, 0x1c, 0x97, 0x4f, 0x0f, 0xef, + 0x13, 0xd8, 0x93, 0x47, 0x41, 0x11, 0x65, 0x83, 0x93, 0x78, 0x13, 0x2e, 0xa5, 0x48, 0xa4, 0xfb, + 0x54, 0x2f, 0x75, 0xed, 0x6e, 0x34, 0xef, 0xdd, 0x83, 0x6f, 0x25, 0x54, 0xc8, 0xe2, 0xc9, 0xc7, + 0xa5, 0xe5, 0xd1, 0x86, 0x2d, 0xec, 0xc9, 0xa3, 0x22, 0x89, 0xf2, 0x16, 0xe7, 0xfc, 0x1a, 0x5c, + 0x1c, 0x81, 0x33, 0x1f, 0xfc, 0xe2, 0x7c, 0x3f, 0x42, 0x47, 0x2a, 0x98, 0xf6, 0xc6, 0x6d, 0x28, + 0x66, 0xce, 0xd6, 0x62, 0xe4, 0x92, 0x07, 0x59, 0x89, 0x72, 0x96, 0x53, 0x59, 0x81, 0xe5, 0x14, + 0x95, 0xe0, 0x57, 0x89, 0x6d, 0x11, 0x1a, 0x8f, 0xfe, 0x40, 0x42, 0x73, 0x59, 0x6a, 0x11, 0x18, + 0x3e, 0x97, 0xf2, 0x82, 0x1a, 0x09, 0x46, 0x94, 0x55, 0xce, 0x6c, 0x09, 0x4e, 0x8f, 0x20, 0x12, + 0x81, 0x6f, 0x72, 0xce, 0x90, 0x0b, 0x34, 0xfc, 0x64, 0x42, 0xb1, 0x46, 0x45, 0x12, 0xe5, 0x12, + 0xa7, 0x77, 0x1e, 0xd6, 0x47, 0x39, 0xc3, 0x40, 0xc5, 0xf0, 0xbd, 0xab, 0xa1, 0x29, 0xf6, 0xde, + 0x05, 0x97, 0xec, 0xa9, 0x9c, 0x81, 0x03, 0x7b, 0x72, 0xae, 0x89, 0x28, 0x65, 0x1e, 0xfd, 0x14, + 0x9c, 0x4c, 0xbf, 0x7a, 0x81, 0xdb, 0xbb, 0xe8, 0x78, 0x05, 0xd3, 0xfe, 0xee, 0x0c, 0xe5, 0x81, + 0xbd, 0x1b, 0x7b, 0xf2, 0x10, 0xc0, 0xa0, 0x8b, 0xc5, 0xe7, 0x48, 0x71, 0xfd, 0x01, 0x41, 0x47, + 0x59, 0x82, 0xbd, 0x0e, 0x0e, 0x0b, 0x03, 0xba, 0x3b, 0xf6, 0xe4, 0x81, 0x66, 0xa2, 0x9c, 0xe6, + 0x61, 0x4b, 0x50, 0x4c, 0x27, 0xcb, 0x9a, 0xb8, 0x08, 0xfa, 0x9d, 0x84, 0x8a, 0x89, 0x0a, 0x88, + 0xb5, 0x49, 0x58, 0x1d, 0xbd, 0xa3, 0x62, 0x4f, 0xde, 0x0d, 0x9a, 0x28, 0x17, 0x38, 0x45, 0x15, + 0x56, 0x07, 0x57, 0x83, 0xd8, 0x17, 0x52, 0xfe, 0x5e, 0x42, 0x0b, 0x4c, 0xa8, 0xdc, 0x66, 0x07, + 0x6b, 0xbb, 0x68, 0x8c, 0xd8, 0x93, 0x77, 0x05, 0x27, 0xca, 0x45, 0xce, 0x5a, 0x83, 0xb5, 0xb4, + 0xb0, 0xbd, 0xdb, 0xa7, 0x6f, 0x63, 0x48, 0xfb, 0x63, 0x34, 0x53, 0xc1, 0x34, 0xd6, 0x67, 0x61, + 0x31, 0xa7, 0xd7, 0x45, 0xdc, 0x86, 0x21, 0x06, 0x95, 0x57, 0xac, 0x6f, 0x6f, 0x6e, 0x3c, 0x7a, + 0x5a, 0x92, 0x1e, 0x3f, 0x2d, 0x49, 0x7f, 0x3d, 0x2d, 0x49, 0x5f, 0x3c, 0x2b, 0x8d, 0x3d, 0x7e, + 0x56, 0x1a, 0xfb, 0xed, 0x59, 0x69, 0xec, 0x83, 0x33, 0x7d, 0x3d, 0xfc, 0x7a, 0xe8, 0x23, 0xfc, + 0x2b, 0xf2, 0x0e, 0xf7, 0xc6, 0x1b, 0x79, 0x6d, 0x92, 0xff, 0x7f, 0x78, 0xfe, 0x9f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x9e, 0xf8, 0x43, 0x25, 0x08, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2954,9 +2954,9 @@ func (m *SwapFeeParamsRes) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } { - size := m.SwapFeeRate.Size() + size := m.DefaultSwapFeeRate.Size() i -= size - if _, err := m.SwapFeeRate.MarshalTo(dAtA[i:]); err != nil { + if _, err := m.DefaultSwapFeeRate.MarshalTo(dAtA[i:]); err != nil { return 0, err } i = encodeVarintQuerier(dAtA, i, uint64(size)) @@ -3389,7 +3389,7 @@ func (m *SwapFeeParamsRes) Size() (n int) { } var l int _ = l - l = m.SwapFeeRate.Size() + l = m.DefaultSwapFeeRate.Size() n += 1 + l + sovQuerier(uint64(l)) if len(m.TokenParams) > 0 { for _, e := range m.TokenParams { @@ -6136,7 +6136,7 @@ func (m *SwapFeeParamsRes) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SwapFeeRate", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DefaultSwapFeeRate", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -6164,7 +6164,7 @@ func (m *SwapFeeParamsRes) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SwapFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.DefaultSwapFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/clp/types/tx.pb.go b/x/clp/types/tx.pb.go index 2fabe73069..bc7aaa4da0 100644 --- a/x/clp/types/tx.pb.go +++ b/x/clp/types/tx.pb.go @@ -1657,9 +1657,9 @@ func (m *MsgAddProviderDistributionPeriodResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgAddProviderDistributionPeriodResponse proto.InternalMessageInfo type MsgUpdateSwapFeeParamsRequest struct { - Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty" yaml:"signer"` - SwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=swap_fee_rate,json=swapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"swap_fee_rate"` - TokenParams []*SwapFeeTokenParams `protobuf:"bytes,3,rep,name=token_params,json=tokenParams,proto3" json:"token_params,omitempty"` + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty" yaml:"signer"` + DefaultSwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=default_swap_fee_rate,json=defaultSwapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"default_swap_fee_rate"` + TokenParams []*SwapFeeTokenParams `protobuf:"bytes,3,rep,name=token_params,json=tokenParams,proto3" json:"token_params,omitempty"` } func (m *MsgUpdateSwapFeeParamsRequest) Reset() { *m = MsgUpdateSwapFeeParamsRequest{} } @@ -1788,121 +1788,122 @@ func init() { func init() { proto.RegisterFile("sifnode/clp/v1/tx.proto", fileDescriptor_a3bff5b30808c4f3) } var fileDescriptor_a3bff5b30808c4f3 = []byte{ - // 1822 bytes of a gzipped FileDescriptorProto + // 1830 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0xe4, 0x48, 0x15, 0x1f, 0xa7, 0x27, 0xc3, 0xe4, 0xe5, 0x63, 0x76, 0x9c, 0x84, 0x64, 0x9c, 0xa4, 0x7b, 0xe2, 0x81, 0x9d, 0x8f, 0xdd, 0x4d, 0x33, 0xc3, 0xa2, 0x5d, 0x56, 0x42, 0x22, 0x99, 0x09, 0x0b, 0x22, 0x0d, 0x2d, 0x67, 0x47, 0x8b, 0x90, 0x90, 0x71, 0xec, 0x4a, 0xa7, 0x94, 0xb6, 0xcb, 0xeb, 0xaa, 0xce, 0x07, 0x12, 0x02, 0x89, 0x23, 0xd2, 0x0a, 0x38, 0x21, 0x24, 0x24, 0xc4, 0xbf, 0xc0, 0xdf, - 0x80, 0xb4, 0xcb, 0x69, 0x91, 0x38, 0x20, 0x0e, 0x11, 0x9a, 0x11, 0x48, 0x1c, 0xb8, 0xcc, 0x5f, - 0x80, 0xea, 0xa3, 0xab, 0xdd, 0xee, 0x72, 0x27, 0x8e, 0x38, 0xe4, 0xb0, 0xa7, 0xc4, 0xf5, 0xbe, - 0xdf, 0xab, 0xf7, 0xde, 0xcf, 0x6e, 0x58, 0xa2, 0x78, 0x3f, 0x21, 0x11, 0x6a, 0x86, 0xdd, 0xb4, - 0x79, 0xf4, 0xb8, 0xc9, 0x4e, 0x36, 0xd2, 0x8c, 0x30, 0x62, 0xcf, 0x29, 0xc2, 0x46, 0xd8, 0x4d, - 0x37, 0x8e, 0x1e, 0x3b, 0x0b, 0x1d, 0xd2, 0x21, 0x82, 0xd4, 0xe4, 0xff, 0x49, 0x2e, 0xc7, 0x29, - 0x8a, 0x9f, 0xa6, 0x88, 0x2a, 0xda, 0x4a, 0x81, 0x96, 0x06, 0x59, 0x10, 0x2b, 0xa2, 0xfb, 0x5f, - 0x0b, 0x56, 0x5b, 0xb4, 0xf3, 0x3c, 0x8d, 0x02, 0x86, 0x76, 0x59, 0x70, 0x88, 0x93, 0x8e, 0x87, - 0x8e, 0x83, 0x2c, 0x6a, 0x0b, 0x36, 0xfb, 0x21, 0xdc, 0xa0, 0xb8, 0x93, 0xa0, 0x6c, 0xd9, 0xba, - 0x6b, 0x3d, 0x98, 0xda, 0xba, 0xfd, 0xea, 0xac, 0x31, 0x7b, 0x1a, 0xc4, 0xdd, 0xf7, 0x5c, 0x79, - 0xee, 0x7a, 0x8a, 0xc1, 0x6e, 0xc3, 0x8d, 0x18, 0x27, 0x0c, 0x65, 0xcb, 0x13, 0x82, 0xf5, 0xdd, - 0x4f, 0xce, 0x1a, 0xd7, 0xfe, 0x71, 0xd6, 0xf8, 0x4a, 0x07, 0xb3, 0x83, 0xde, 0xde, 0x46, 0x48, - 0xe2, 0x66, 0x48, 0x68, 0x4c, 0xa8, 0xfa, 0xf3, 0x16, 0x8d, 0x0e, 0x9b, 0x27, 0x4d, 0x2e, 0xa4, - 0x3c, 0x6e, 0x09, 0x79, 0x4f, 0xe9, 0xe1, 0x1a, 0xa5, 0xb7, 0xcb, 0xb5, 0xcb, 0x6a, 0x94, 0x61, - 0x78, 0x4a, 0x8f, 0xfb, 0x3a, 0x7c, 0x69, 0x5c, 0xb8, 0x1e, 0xa2, 0x29, 0x49, 0x28, 0x72, 0xff, - 0x33, 0x01, 0x76, 0x8b, 0x76, 0x3c, 0x14, 0x93, 0x23, 0xb4, 0x83, 0x3f, 0xea, 0xe1, 0x08, 0xb3, - 0xd3, 0x2a, 0xd9, 0xf8, 0x10, 0xe6, 0xd0, 0x09, 0x43, 0x59, 0x12, 0x74, 0xfd, 0x80, 0x52, 0xc4, - 0x44, 0x56, 0xa6, 0x9f, 0x2c, 0x6e, 0x0c, 0x57, 0x74, 0x63, 0x93, 0x13, 0xb7, 0xee, 0xbc, 0x3a, - 0x6b, 0x2c, 0x4a, 0x4d, 0xc3, 0x62, 0xae, 0x37, 0xdb, 0x3f, 0x10, 0x9c, 0x76, 0x0c, 0x73, 0xc7, - 0xfe, 0x5e, 0x40, 0x31, 0xf5, 0x53, 0x82, 0x13, 0xd6, 0x4f, 0xce, 0xfb, 0x2a, 0x39, 0xaf, 0x8f, - 0x4d, 0x8e, 0xcc, 0xca, 0x77, 0x12, 0x36, 0xb0, 0x37, 0xac, 0xcd, 0xf5, 0x66, 0x8e, 0xb7, 0xf8, - 0x73, 0x5b, 0x3c, 0xda, 0x3f, 0x86, 0xa9, 0x80, 0x9e, 0xc6, 0x31, 0x62, 0xd9, 0xe9, 0xf2, 0x75, - 0x61, 0x69, 0xab, 0xb2, 0xa5, 0xd7, 0xa4, 0x25, 0xad, 0xc8, 0xf5, 0x06, 0x4a, 0xdd, 0x55, 0x70, - 0x46, 0x53, 0xad, 0x2b, 0xf1, 0xf1, 0x04, 0x2c, 0x8d, 0x92, 0x9f, 0x27, 0x98, 0xd1, 0x2b, 0x51, - 0x0e, 0x02, 0x73, 0xc7, 0x98, 0x1d, 0x44, 0x59, 0x70, 0xec, 0xf7, 0xb8, 0x57, 0xaa, 0x1c, 0xdf, - 0x56, 0x49, 0xba, 0x7f, 0x81, 0x24, 0x3d, 0xc7, 0x43, 0xf5, 0x18, 0x52, 0xe7, 0x7a, 0xb3, 0xfd, - 0x03, 0x11, 0xb4, 0xbb, 0x0e, 0x8d, 0x92, 0x7c, 0xe8, 0x9c, 0xfd, 0xb6, 0x06, 0xb3, 0x2d, 0xda, - 0x79, 0x9a, 0xa1, 0x80, 0xa1, 0x36, 0x21, 0xdd, 0x2b, 0x91, 0xa9, 0x9f, 0xc2, 0x7c, 0x12, 0x30, - 0x7c, 0x84, 0x24, 0xdd, 0x0f, 0x62, 0xd2, 0x4b, 0x98, 0x4a, 0x57, 0xab, 0x7a, 0xba, 0x1c, 0x69, - 0xd5, 0xa0, 0xd3, 0xf5, 0x6e, 0xcb, 0x53, 0x61, 0x78, 0x53, 0x9c, 0xd9, 0xbf, 0xb0, 0x60, 0x71, - 0xd8, 0xc3, 0xbe, 0x07, 0xf2, 0x56, 0x7f, 0xbf, 0xba, 0x07, 0xab, 0xa6, 0xb8, 0xb5, 0x0f, 0xf3, - 0x43, 0xe1, 0x4b, 0x2f, 0xdc, 0x25, 0x58, 0x1c, 0xaa, 0x8c, 0xae, 0xd9, 0xef, 0x6a, 0x70, 0xab, - 0x45, 0x3b, 0x9b, 0x51, 0x74, 0xb5, 0xc6, 0xcd, 0xe7, 0x55, 0x4b, 0x98, 0x7b, 0x47, 0xcc, 0xa0, - 0x7c, 0x6d, 0x74, 0xdd, 0xfe, 0x60, 0x89, 0x4d, 0xd1, 0x22, 0x11, 0xde, 0x3f, 0x6d, 0xc7, 0x2c, - 0xf5, 0x02, 0x86, 0x2a, 0x8d, 0xa6, 0x35, 0x80, 0xbd, 0x2e, 0x09, 0x0f, 0xfd, 0x2c, 0x60, 0x48, - 0xee, 0x4e, 0x6f, 0x4a, 0x9c, 0x70, 0x55, 0xf6, 0x3a, 0xcc, 0x64, 0xbd, 0x24, 0xc1, 0x49, 0x47, - 0x32, 0x88, 0xcc, 0x7b, 0xd3, 0xea, 0x4c, 0xb0, 0xac, 0x01, 0xa0, 0x24, 0xf2, 0x53, 0xd2, 0xc5, - 0xa1, 0x1c, 0xd2, 0x37, 0xbd, 0x29, 0x94, 0x44, 0x6d, 0x71, 0xa0, 0x06, 0x6c, 0xc1, 0x43, 0x1d, - 0xc0, 0x1f, 0x27, 0x60, 0x5e, 0xef, 0x44, 0x4e, 0xae, 0xbe, 0xf9, 0xbf, 0x01, 0x2b, 0x69, 0xcc, - 0x52, 0x3f, 0x45, 0x19, 0x26, 0x91, 0xdf, 0x21, 0x47, 0x3c, 0x83, 0x49, 0x88, 0xf2, 0x21, 0x2d, - 0x73, 0x96, 0xb6, 0xe0, 0x78, 0x5f, 0x33, 0x08, 0xf7, 0xdf, 0x81, 0xe5, 0xbc, 0x38, 0x4a, 0x49, - 0x78, 0xe0, 0x77, 0x51, 0xd2, 0x61, 0x07, 0x22, 0xda, 0x9a, 0xb7, 0x38, 0x90, 0xdd, 0xe6, 0xd4, - 0x1d, 0x41, 0xb4, 0xbf, 0x06, 0x4b, 0x79, 0x41, 0xca, 0x82, 0x8c, 0xf9, 0x22, 0x73, 0x22, 0x09, - 0x35, 0x6f, 0x61, 0x20, 0xb7, 0xcb, 0x89, 0x5b, 0x9c, 0x66, 0x3f, 0x86, 0xc5, 0x21, 0x7b, 0x49, - 0xa4, 0x84, 0x26, 0x85, 0x90, 0x9d, 0x33, 0x96, 0x44, 0x42, 0xc4, 0x5d, 0x83, 0x15, 0x43, 0x8e, - 0x74, 0x0e, 0xff, 0x5c, 0x83, 0x2f, 0xb4, 0x68, 0x67, 0xf7, 0x38, 0x48, 0xab, 0xe4, 0xed, 0xbb, - 0x00, 0x14, 0x25, 0xec, 0x22, 0x0d, 0xbb, 0xf8, 0xea, 0xac, 0x71, 0x5b, 0x69, 0xd1, 0x22, 0xae, - 0x37, 0xc5, 0x1f, 0x64, 0xa3, 0x7e, 0x08, 0x73, 0x19, 0x0a, 0x11, 0x3e, 0x42, 0x91, 0x52, 0x58, - 0xbb, 0xe0, 0x04, 0x18, 0x16, 0x73, 0xbd, 0xd9, 0xfe, 0x81, 0x54, 0xbc, 0x0f, 0xd3, 0xd2, 0x64, - 0xbe, 0xef, 0xb6, 0xab, 0xf7, 0x9d, 0x9d, 0x77, 0x5f, 0x75, 0x9b, 0x88, 0x5f, 0xb5, 0xfa, 0xcf, - 0x2d, 0x58, 0x88, 0x71, 0xe2, 0x4b, 0xeb, 0xfc, 0xbe, 0x2b, 0x8b, 0x93, 0xc2, 0xe2, 0xf7, 0xaa, - 0x5b, 0x5c, 0x91, 0x16, 0x4d, 0x4a, 0x5d, 0xcf, 0x8e, 0x71, 0xe2, 0xf5, 0x4f, 0x55, 0x9f, 0xdf, - 0x16, 0x33, 0x98, 0x97, 0x51, 0x97, 0xf6, 0x50, 0x74, 0xc7, 0x33, 0x14, 0x92, 0x38, 0xc6, 0x94, - 0x62, 0x92, 0x54, 0x5d, 0xa8, 0x9c, 0xf5, 0x34, 0xde, 0x23, 0x5d, 0x85, 0x8b, 0xf3, 0xac, 0xe2, - 0x9c, 0xb3, 0xca, 0x7f, 0xe4, 0x35, 0x2b, 0x1a, 0xd3, 0xbe, 0xfc, 0xdb, 0x82, 0x3b, 0xfc, 0x1a, - 0x26, 0xfc, 0x4e, 0xe6, 0x46, 0xd1, 0x47, 0x3d, 0x44, 0xd9, 0x95, 0xd8, 0x16, 0xdb, 0x30, 0x99, - 0x07, 0x41, 0xcd, 0x8a, 0x35, 0xf3, 0xa4, 0xb4, 0x9a, 0x58, 0x23, 0x71, 0xaa, 0x34, 0xfc, 0xcd, - 0x82, 0x35, 0xdd, 0x8d, 0x12, 0xbe, 0xd3, 0x7e, 0x43, 0x56, 0x4e, 0xc5, 0x26, 0xac, 0x75, 0xfb, - 0x16, 0xfc, 0x8c, 0xa3, 0xaa, 0xa0, 0xeb, 0x8b, 0x71, 0x2c, 0xc7, 0x83, 0xc8, 0xcc, 0x75, 0xcf, - 0xe9, 0x0e, 0xdc, 0x10, 0x3c, 0x3b, 0x24, 0x3c, 0x94, 0x43, 0xc2, 0xde, 0x86, 0xc6, 0xa8, 0x8a, - 0x90, 0x8f, 0xb7, 0x6e, 0x5f, 0x49, 0x4d, 0x28, 0x59, 0x2d, 0x2a, 0x79, 0x2a, 0x98, 0xa4, 0x1a, - 0xf7, 0x2e, 0xd4, 0xcb, 0xa2, 0x52, 0x81, 0xff, 0x52, 0xd6, 0x7f, 0x33, 0x8a, 0xd4, 0x4b, 0x8b, - 0x10, 0xbc, 0x44, 0xd0, 0x4f, 0xf9, 0xac, 0xe0, 0x1a, 0x94, 0x7f, 0x74, 0x79, 0xe2, 0x6e, 0xed, - 0xc1, 0xf4, 0x93, 0xd5, 0x62, 0xfd, 0x87, 0xec, 0xcc, 0x66, 0xb9, 0xa7, 0x7e, 0x91, 0x46, 0x9c, - 0xe9, 0x8f, 0x44, 0x4b, 0xec, 0xcc, 0x5d, 0xc4, 0x76, 0x15, 0xd0, 0xff, 0xe0, 0x20, 0x43, 0xf4, - 0x80, 0x74, 0x23, 0xfb, 0x8b, 0xc3, 0x9e, 0x6a, 0xb7, 0x76, 0x60, 0x8a, 0xf5, 0x99, 0x54, 0xb3, - 0x6c, 0x54, 0x78, 0xd7, 0x78, 0x86, 0x42, 0x6f, 0xa0, 0xc0, 0x7e, 0x06, 0x93, 0x59, 0xc0, 0x30, - 0x51, 0x77, 0xb1, 0xaa, 0x26, 0x29, 0xac, 0xe0, 0xb6, 0x29, 0x0c, 0x1d, 0xea, 0xa7, 0x96, 0x18, - 0x1b, 0xb2, 0x98, 0xf2, 0xd2, 0x96, 0x86, 0x78, 0xd5, 0x3b, 0x4f, 0x22, 0x9d, 0x7c, 0x28, 0x3a, - 0xcc, 0xdf, 0x5b, 0x30, 0xa7, 0xee, 0x6d, 0xff, 0xca, 0xcd, 0xc1, 0x04, 0x8e, 0x44, 0x84, 0x35, - 0x6f, 0x02, 0xf3, 0x4e, 0x98, 0x3c, 0x0a, 0xba, 0x3d, 0xb5, 0xf2, 0x2f, 0xe1, 0x84, 0x90, 0xb6, - 0xdf, 0x86, 0x5a, 0x4c, 0x3b, 0x6a, 0x7f, 0xb9, 0xc5, 0xcc, 0x18, 0x5e, 0x16, 0x39, 0xbb, 0xfb, - 0x17, 0x0b, 0xd6, 0x35, 0xce, 0xd1, 0xb4, 0x76, 0x46, 0x18, 0x0a, 0x19, 0x26, 0x49, 0x65, 0x60, - 0xf6, 0x13, 0x58, 0x0f, 0x7b, 0x59, 0xc6, 0xf7, 0x55, 0x46, 0x8e, 0x83, 0xc4, 0x1f, 0x74, 0x79, - 0xf1, 0x9a, 0x56, 0x8e, 0xb4, 0xae, 0x34, 0x7b, 0x5c, 0xb1, 0x76, 0x56, 0xdf, 0x2d, 0xf7, 0x0d, - 0x78, 0x78, 0x6e, 0x2c, 0xba, 0x32, 0x7f, 0x9d, 0x00, 0x57, 0x8f, 0x0e, 0x03, 0x77, 0x75, 0x44, - 0x97, 0xc1, 0x5a, 0x1c, 0x9c, 0xfc, 0xff, 0xc3, 0x76, 0xe2, 0xe0, 0xa4, 0x24, 0x64, 0x7b, 0x07, - 0xee, 0x8d, 0xb5, 0xa9, 0xfa, 0x45, 0xe0, 0x0f, 0xaf, 0x51, 0xae, 0x48, 0xf6, 0xc3, 0x3a, 0xcc, - 0x8c, 0x00, 0xc9, 0xeb, 0xde, 0x34, 0xca, 0xc1, 0xc7, 0x15, 0x98, 0xc2, 0xd4, 0x0f, 0x42, 0xfe, - 0xce, 0x21, 0x40, 0xc6, 0x4d, 0xef, 0x26, 0xa6, 0x9b, 0xe2, 0xd9, 0x7d, 0x13, 0x1e, 0x9d, 0x9f, - 0x52, 0x5d, 0x81, 0x3f, 0x59, 0x70, 0x5f, 0x0e, 0xc3, 0x76, 0x46, 0x8e, 0x70, 0x84, 0xb2, 0x67, - 0x98, 0xb2, 0x0c, 0xef, 0xf5, 0x04, 0xf3, 0x65, 0xe7, 0xf4, 0x8f, 0x60, 0x21, 0xca, 0xe9, 0x29, - 0x4c, 0xeb, 0x47, 0xc5, 0xce, 0x18, 0x63, 0x7b, 0x3e, 0x1a, 0x39, 0xa3, 0xee, 0x23, 0x78, 0x70, - 0xbe, 0xd3, 0x2a, 0xc2, 0x7f, 0xe5, 0x97, 0x2e, 0x47, 0x48, 0xdf, 0x42, 0xe8, 0xd2, 0x4b, 0xd7, - 0x83, 0x59, 0x7a, 0x1c, 0xa4, 0xfe, 0x3e, 0xca, 0xbf, 0x22, 0x54, 0x1e, 0xd1, 0xd3, 0x54, 0xfa, - 0x21, 0xde, 0x22, 0xb6, 0x61, 0x86, 0x91, 0x43, 0x94, 0xf8, 0xfa, 0x93, 0x61, 0xcd, 0x34, 0x3d, - 0x94, 0xeb, 0x1f, 0x70, 0x56, 0xe5, 0xff, 0x34, 0x1b, 0x3c, 0x0c, 0x6d, 0xe1, 0x42, 0x98, 0x32, - 0x13, 0x4f, 0x3e, 0xbd, 0x05, 0xb5, 0x16, 0xed, 0xd8, 0x01, 0xdc, 0x2a, 0x7e, 0x1f, 0xbc, 0xc0, - 0xac, 0x72, 0x1e, 0x5d, 0x60, 0x9e, 0x29, 0x53, 0x76, 0x0a, 0x0b, 0xc6, 0x0f, 0x5f, 0xf7, 0xcf, - 0xd7, 0x21, 0x18, 0x9d, 0xe6, 0x05, 0x19, 0xb5, 0x45, 0x0f, 0x20, 0xf7, 0xd9, 0x68, 0xcd, 0x20, - 0x3e, 0x20, 0x3b, 0x5f, 0x1e, 0x4b, 0xd6, 0x3a, 0x7f, 0x00, 0x33, 0x43, 0x9f, 0x35, 0x1a, 0x06, - 0xb1, 0x3c, 0x83, 0x73, 0xff, 0x1c, 0x06, 0xad, 0xf9, 0x9b, 0x70, 0x5d, 0xbc, 0x73, 0x2d, 0x19, - 0x04, 0x38, 0xc1, 0x69, 0x94, 0x10, 0xb4, 0x86, 0x08, 0x5e, 0x1b, 0xc1, 0xf6, 0xf7, 0x0c, 0x42, - 0x45, 0x26, 0xe7, 0x8d, 0x0b, 0x30, 0x69, 0x2b, 0x07, 0x70, 0xab, 0x00, 0x66, 0xed, 0x87, 0x06, - 0x79, 0x33, 0xb0, 0x37, 0xde, 0x98, 0x12, 0x6c, 0x6c, 0x33, 0x98, 0x37, 0x20, 0x48, 0xfb, 0x2d, - 0x93, 0x8a, 0x52, 0xfc, 0xec, 0x6c, 0x5c, 0x94, 0x7d, 0x10, 0x5f, 0x01, 0x07, 0x1a, 0xe3, 0x33, - 0x03, 0x57, 0x63, 0x7c, 0x25, 0xb0, 0x92, 0x37, 0x5d, 0xf1, 0x53, 0x8b, 0xa9, 0xe9, 0x0a, 0x3c, - 0x46, 0x13, 0x25, 0x1f, 0x44, 0xf8, 0x95, 0x18, 0xf9, 0x18, 0x72, 0xaf, 0x34, 0x21, 0x03, 0x26, - 0xe3, 0x95, 0x28, 0xfb, 0x64, 0x60, 0xff, 0x0c, 0xee, 0x94, 0xff, 0xea, 0xf2, 0x66, 0xa9, 0x26, - 0x03, 0xb7, 0xf3, 0x76, 0x15, 0xee, 0xfc, 0x6c, 0x31, 0x82, 0x73, 0x53, 0xf3, 0x99, 0x18, 0x8d, - 0xb3, 0x65, 0x1c, 0x4e, 0xb6, 0x03, 0x58, 0xcc, 0x03, 0xcb, 0xf1, 0x03, 0x21, 0xcf, 0x69, 0x1c, - 0x08, 0x26, 0x8c, 0x6a, 0xff, 0xda, 0x82, 0xc6, 0x79, 0x30, 0xe8, 0x49, 0x69, 0xba, 0x4a, 0x65, - 0x9c, 0xf7, 0xaa, 0xcb, 0x68, 0x9f, 0x3e, 0xb6, 0xa0, 0x7e, 0x0e, 0x28, 0x7d, 0x5c, 0x7a, 0x3d, - 0xcb, 0x44, 0x9c, 0xaf, 0x57, 0x16, 0xd1, 0x0e, 0xfd, 0xc6, 0x82, 0xb5, 0xb1, 0x4b, 0xdf, 0x7e, - 0xc7, 0xdc, 0x91, 0xe7, 0x62, 0x1b, 0xe7, 0xdd, 0xea, 0x82, 0xc5, 0xc1, 0x35, 0xb4, 0x74, 0xc7, - 0x0c, 0x2e, 0x13, 0x06, 0x19, 0x33, 0xb8, 0x8c, 0xbb, 0x7c, 0x6b, 0xf3, 0x93, 0x17, 0x75, 0xeb, - 0xb3, 0x17, 0x75, 0xeb, 0x9f, 0x2f, 0xea, 0xd6, 0xaf, 0x5e, 0xd6, 0xaf, 0x7d, 0xf6, 0xb2, 0x7e, - 0xed, 0xef, 0x2f, 0xeb, 0xd7, 0x7e, 0x98, 0x87, 0xb4, 0xbb, 0x78, 0x3f, 0x3c, 0x08, 0x70, 0xd2, - 0xec, 0xff, 0x94, 0x7a, 0x22, 0x7e, 0x4c, 0x15, 0x40, 0x64, 0xef, 0x86, 0xf8, 0x25, 0xf5, 0xab, - 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x84, 0xf2, 0x48, 0xda, 0xc3, 0x1d, 0x00, 0x00, + 0x80, 0xb4, 0xcb, 0x69, 0x91, 0x38, 0x20, 0x0e, 0x11, 0x9a, 0x91, 0x90, 0x38, 0x70, 0x19, 0xf1, + 0x07, 0xa0, 0xfa, 0xe8, 0x6a, 0xb7, 0xbb, 0xdc, 0x89, 0x23, 0x0e, 0x39, 0xec, 0x29, 0x71, 0xd5, + 0x7b, 0xbf, 0xf7, 0x55, 0xef, 0xd5, 0xcf, 0x6e, 0x58, 0xa2, 0x78, 0x3f, 0x21, 0x11, 0x6a, 0x86, + 0xdd, 0xb4, 0x79, 0xf4, 0xb8, 0xc9, 0x4e, 0x36, 0xd2, 0x8c, 0x30, 0x62, 0xcf, 0xa9, 0x8d, 0x8d, + 0xb0, 0x9b, 0x6e, 0x1c, 0x3d, 0x76, 0x16, 0x3a, 0xa4, 0x43, 0xc4, 0x56, 0x93, 0xff, 0x27, 0xa5, + 0x1c, 0xa7, 0xa8, 0x7e, 0x9a, 0x22, 0xaa, 0xf6, 0x56, 0x0a, 0x7b, 0x69, 0x90, 0x05, 0xb1, 0xda, + 0x74, 0xff, 0x63, 0xc1, 0x6a, 0x8b, 0x76, 0x9e, 0xa7, 0x51, 0xc0, 0xd0, 0x2e, 0x0b, 0x0e, 0x71, + 0xd2, 0xf1, 0xd0, 0x71, 0x90, 0x45, 0x6d, 0x21, 0x66, 0x3f, 0x84, 0x1b, 0x14, 0x77, 0x12, 0x94, + 0x2d, 0x5b, 0x77, 0xad, 0x07, 0x53, 0x5b, 0xb7, 0x5f, 0x9d, 0x35, 0x66, 0x4f, 0x83, 0xb8, 0xfb, + 0x9e, 0x2b, 0xd7, 0x5d, 0x4f, 0x09, 0xd8, 0x6d, 0xb8, 0x11, 0xe3, 0x84, 0xa1, 0x6c, 0x79, 0x42, + 0x88, 0xbe, 0xfb, 0xc9, 0x59, 0xe3, 0xda, 0x3f, 0xce, 0x1a, 0x5f, 0xe9, 0x60, 0x76, 0xd0, 0xdb, + 0xdb, 0x08, 0x49, 0xdc, 0x0c, 0x09, 0x8d, 0x09, 0x55, 0x7f, 0xde, 0xa2, 0xd1, 0x61, 0xf3, 0xa4, + 0xc9, 0x95, 0x94, 0xc7, 0x2d, 0xa1, 0xef, 0x29, 0x1c, 0x8e, 0x28, 0xbd, 0x5d, 0xae, 0x5d, 0x16, + 0x51, 0x86, 0xe1, 0x29, 0x1c, 0xf7, 0x75, 0xf8, 0xd2, 0xb8, 0x70, 0x3d, 0x44, 0x53, 0x92, 0x50, + 0xe4, 0xfe, 0x7b, 0x02, 0xec, 0x16, 0xed, 0x78, 0x28, 0x26, 0x47, 0x68, 0x07, 0x7f, 0xd4, 0xc3, + 0x11, 0x66, 0xa7, 0x55, 0xb2, 0xf1, 0x21, 0xcc, 0xa1, 0x13, 0x86, 0xb2, 0x24, 0xe8, 0xfa, 0x01, + 0xa5, 0x88, 0x89, 0xac, 0x4c, 0x3f, 0x59, 0xdc, 0x18, 0xae, 0xe8, 0xc6, 0x26, 0xdf, 0xdc, 0xba, + 0xf3, 0xea, 0xac, 0xb1, 0x28, 0x91, 0x86, 0xd5, 0x5c, 0x6f, 0xb6, 0xbf, 0x20, 0x24, 0xed, 0x18, + 0xe6, 0x8e, 0xfd, 0xbd, 0x80, 0x62, 0xea, 0xa7, 0x04, 0x27, 0xac, 0x9f, 0x9c, 0xf7, 0x55, 0x72, + 0x5e, 0x1f, 0x9b, 0x1c, 0x99, 0x95, 0xef, 0x24, 0x6c, 0x60, 0x6f, 0x18, 0xcd, 0xf5, 0x66, 0x8e, + 0xb7, 0xf8, 0x73, 0x5b, 0x3c, 0xda, 0x3f, 0x86, 0xa9, 0x80, 0x9e, 0xc6, 0x31, 0x62, 0xd9, 0xe9, + 0xf2, 0x75, 0x61, 0x69, 0xab, 0xb2, 0xa5, 0xd7, 0xa4, 0x25, 0x0d, 0xe4, 0x7a, 0x03, 0x50, 0x77, + 0x15, 0x9c, 0xd1, 0x54, 0xeb, 0x4a, 0x7c, 0x3c, 0x01, 0x4b, 0xa3, 0xdb, 0xcf, 0x13, 0xcc, 0xe8, + 0x95, 0x28, 0x07, 0x81, 0xb9, 0x63, 0xcc, 0x0e, 0xa2, 0x2c, 0x38, 0xf6, 0x7b, 0xdc, 0x2b, 0x55, + 0x8e, 0x6f, 0xab, 0x24, 0xdd, 0xbf, 0x40, 0x92, 0x9e, 0xe3, 0xa1, 0x7a, 0x0c, 0xc1, 0xb9, 0xde, + 0x6c, 0x7f, 0x41, 0x04, 0xed, 0xae, 0x43, 0xa3, 0x24, 0x1f, 0x3a, 0x67, 0xbf, 0xad, 0xc1, 0x6c, + 0x8b, 0x76, 0x9e, 0x66, 0x28, 0x60, 0xa8, 0x4d, 0x48, 0xf7, 0x4a, 0x64, 0xea, 0xa7, 0x30, 0x9f, + 0x04, 0x0c, 0x1f, 0x21, 0xb9, 0xef, 0x07, 0x31, 0xe9, 0x25, 0x4c, 0xa5, 0xab, 0x55, 0x3d, 0x5d, + 0x8e, 0xb4, 0x6a, 0xc0, 0x74, 0xbd, 0xdb, 0x72, 0x55, 0x18, 0xde, 0x14, 0x6b, 0xf6, 0x2f, 0x2c, + 0x58, 0x1c, 0xf6, 0xb0, 0xef, 0x81, 0x3c, 0xd5, 0xdf, 0xaf, 0xee, 0xc1, 0xaa, 0x29, 0x6e, 0xed, + 0xc3, 0xfc, 0x50, 0xf8, 0xd2, 0x0b, 0x77, 0x09, 0x16, 0x87, 0x2a, 0xa3, 0x6b, 0xf6, 0xbb, 0x1a, + 0xdc, 0x6a, 0xd1, 0xce, 0x66, 0x14, 0x5d, 0xad, 0x71, 0xf3, 0x79, 0xd5, 0x12, 0xe6, 0xde, 0x11, + 0x33, 0x28, 0x5f, 0x1b, 0x5d, 0xb7, 0x3f, 0x58, 0xe2, 0xa6, 0x68, 0x91, 0x08, 0xef, 0x9f, 0xb6, + 0x63, 0x96, 0x7a, 0x01, 0x43, 0x95, 0x46, 0xd3, 0x1a, 0xc0, 0x5e, 0x97, 0x84, 0x87, 0x7e, 0x16, + 0x30, 0x24, 0xef, 0x4e, 0x6f, 0x4a, 0xac, 0x70, 0x28, 0x7b, 0x1d, 0x66, 0xb2, 0x5e, 0x92, 0xe0, + 0xa4, 0x23, 0x05, 0x44, 0xe6, 0xbd, 0x69, 0xb5, 0x26, 0x44, 0xd6, 0x00, 0x50, 0x12, 0xf9, 0x29, + 0xe9, 0xe2, 0x50, 0x0e, 0xe9, 0x9b, 0xde, 0x14, 0x4a, 0xa2, 0xb6, 0x58, 0x50, 0x03, 0xb6, 0xe0, + 0xa1, 0x0e, 0xe0, 0x8f, 0x13, 0x30, 0xaf, 0xef, 0x44, 0xbe, 0x5d, 0xfd, 0xe6, 0xff, 0x06, 0xac, + 0xa4, 0x31, 0x4b, 0xfd, 0x14, 0x65, 0x98, 0x44, 0x7e, 0x87, 0x1c, 0xf1, 0x0c, 0x26, 0x21, 0xca, + 0x87, 0xb4, 0xcc, 0x45, 0xda, 0x42, 0xe2, 0x7d, 0x2d, 0x20, 0xdc, 0x7f, 0x07, 0x96, 0xf3, 0xea, + 0x28, 0x25, 0xe1, 0x81, 0xdf, 0x45, 0x49, 0x87, 0x1d, 0x88, 0x68, 0x6b, 0xde, 0xe2, 0x40, 0x77, + 0x9b, 0xef, 0xee, 0x88, 0x4d, 0xfb, 0x6b, 0xb0, 0x94, 0x57, 0xa4, 0x2c, 0xc8, 0x98, 0x2f, 0x32, + 0x27, 0x92, 0x50, 0xf3, 0x16, 0x06, 0x7a, 0xbb, 0x7c, 0x73, 0x8b, 0xef, 0xd9, 0x8f, 0x61, 0x71, + 0xc8, 0x5e, 0x12, 0x29, 0xa5, 0x49, 0xa1, 0x64, 0xe7, 0x8c, 0x25, 0x91, 0x50, 0x71, 0xd7, 0x60, + 0xc5, 0x90, 0x23, 0x9d, 0xc3, 0x3f, 0xd7, 0xe0, 0x0b, 0x2d, 0xda, 0xd9, 0x3d, 0x0e, 0xd2, 0x2a, + 0x79, 0xfb, 0x2e, 0x00, 0x45, 0x09, 0xbb, 0x48, 0xc3, 0x2e, 0xbe, 0x3a, 0x6b, 0xdc, 0x56, 0x28, + 0x5a, 0xc5, 0xf5, 0xa6, 0xf8, 0x83, 0x6c, 0xd4, 0x0f, 0x61, 0x2e, 0x43, 0x21, 0xc2, 0x47, 0x28, + 0x52, 0x80, 0xb5, 0x0b, 0x4e, 0x80, 0x61, 0x35, 0xd7, 0x9b, 0xed, 0x2f, 0x48, 0xe0, 0x7d, 0x98, + 0x96, 0x26, 0xf3, 0x7d, 0xb7, 0x5d, 0xbd, 0xef, 0xec, 0xbc, 0xfb, 0xaa, 0xdb, 0x44, 0xfc, 0xaa, + 0xd5, 0x7f, 0x6e, 0xc1, 0x42, 0x8c, 0x13, 0x5f, 0x5a, 0xe7, 0xe7, 0x5d, 0x59, 0x9c, 0x14, 0x16, + 0xbf, 0x57, 0xdd, 0xe2, 0x8a, 0xb4, 0x68, 0x02, 0x75, 0x3d, 0x3b, 0xc6, 0x89, 0xd7, 0x5f, 0x55, + 0x7d, 0x7e, 0x5b, 0xcc, 0x60, 0x5e, 0x46, 0x5d, 0xda, 0x43, 0xd1, 0x1d, 0xcf, 0x50, 0x48, 0xe2, + 0x18, 0x53, 0x8a, 0x49, 0x52, 0xf5, 0x42, 0xe5, 0xa2, 0xa7, 0xf1, 0x1e, 0xe9, 0x2a, 0x5e, 0x9c, + 0x17, 0x15, 0xeb, 0x5c, 0x54, 0xfe, 0x23, 0x8f, 0x59, 0xd1, 0x98, 0xf6, 0xe5, 0x5f, 0x16, 0xdc, + 0xe1, 0xc7, 0x30, 0xe1, 0x67, 0x32, 0x37, 0x8a, 0x3e, 0xea, 0x21, 0xca, 0xae, 0xc4, 0x6d, 0xb1, + 0x0d, 0x93, 0x79, 0x12, 0xd4, 0xac, 0x58, 0x33, 0x4f, 0x6a, 0xab, 0x89, 0x35, 0x12, 0xa7, 0x4a, + 0xc3, 0xdf, 0x2c, 0x58, 0xd3, 0xdd, 0x28, 0xe9, 0x3b, 0xed, 0x37, 0x64, 0xe5, 0x54, 0x6c, 0xc2, + 0x5a, 0xb7, 0x6f, 0xc1, 0xcf, 0x38, 0xab, 0x0a, 0xba, 0xbe, 0x18, 0xc7, 0x72, 0x3c, 0x88, 0xcc, + 0x5c, 0xf7, 0x9c, 0xee, 0xc0, 0x0d, 0x21, 0xb3, 0x43, 0xc2, 0x43, 0x39, 0x24, 0xec, 0x6d, 0x68, + 0x8c, 0x42, 0x84, 0x7c, 0xbc, 0x75, 0xfb, 0x20, 0x35, 0x01, 0xb2, 0x5a, 0x04, 0x79, 0x2a, 0x84, + 0x24, 0x8c, 0x7b, 0x17, 0xea, 0x65, 0x51, 0xa9, 0xc0, 0x7f, 0x29, 0xeb, 0xbf, 0x19, 0x45, 0xea, + 0xa5, 0x45, 0x28, 0x5e, 0x22, 0xe8, 0xa7, 0x7c, 0x56, 0x70, 0x04, 0xe5, 0x1f, 0x5d, 0x9e, 0xb8, + 0x5b, 0x7b, 0x30, 0xfd, 0x64, 0xb5, 0x58, 0xff, 0x21, 0x3b, 0xb3, 0x59, 0xee, 0xa9, 0x5f, 0xa4, + 0x11, 0x67, 0xfa, 0x23, 0xd1, 0x12, 0x77, 0xe6, 0x2e, 0x62, 0xbb, 0x8a, 0xe8, 0x7f, 0x70, 0x90, + 0x21, 0x7a, 0x40, 0xba, 0x91, 0xfd, 0xc5, 0x61, 0x4f, 0xb5, 0x5b, 0x3b, 0x30, 0xc5, 0xfa, 0x42, + 0xaa, 0x59, 0x36, 0x2a, 0xbc, 0x6b, 0x3c, 0x43, 0xa1, 0x37, 0x00, 0xb0, 0x9f, 0xc1, 0x64, 0x16, + 0x30, 0x4c, 0xd4, 0x59, 0xac, 0x8a, 0x24, 0x95, 0x15, 0xdd, 0x36, 0x85, 0xa1, 0x43, 0xfd, 0xd4, + 0x12, 0x63, 0x43, 0x16, 0x53, 0x1e, 0xda, 0xd2, 0x10, 0xaf, 0x7a, 0xe7, 0x49, 0xa6, 0x93, 0x0f, + 0x45, 0x87, 0xf9, 0x7b, 0x0b, 0xe6, 0xd4, 0xb9, 0xed, 0x1f, 0xb9, 0x39, 0x98, 0xc0, 0x91, 0x88, + 0xb0, 0xe6, 0x4d, 0x60, 0xde, 0x09, 0x93, 0x47, 0x41, 0xb7, 0xa7, 0xae, 0xfc, 0x4b, 0x38, 0x21, + 0xb4, 0xed, 0xb7, 0xa1, 0x16, 0xd3, 0x8e, 0xba, 0xbf, 0xdc, 0x62, 0x66, 0x0c, 0x2f, 0x8b, 0x5c, + 0xdc, 0xfd, 0x8b, 0x05, 0xeb, 0x9a, 0xe7, 0xe8, 0xbd, 0x76, 0x46, 0x18, 0x0a, 0x19, 0x26, 0x49, + 0x65, 0x62, 0xf6, 0x13, 0x58, 0x0f, 0x7b, 0x59, 0xc6, 0xef, 0xab, 0x8c, 0x1c, 0x07, 0x89, 0x3f, + 0xe8, 0xf2, 0xe2, 0x31, 0xad, 0x1c, 0x69, 0x5d, 0x21, 0x7b, 0x1c, 0x58, 0x3b, 0xab, 0xcf, 0x96, + 0xfb, 0x06, 0x3c, 0x3c, 0x37, 0x16, 0x5d, 0x99, 0xbf, 0x4e, 0x80, 0xab, 0x47, 0x87, 0x41, 0xba, + 0x3a, 0xa3, 0xcb, 0x60, 0x2d, 0x0e, 0x4e, 0xfe, 0xff, 0x61, 0x3b, 0x71, 0x70, 0x52, 0x12, 0xb2, + 0xbd, 0x03, 0xf7, 0xc6, 0xda, 0x54, 0xfd, 0x22, 0xf8, 0x87, 0xd7, 0x28, 0x07, 0x92, 0xfd, 0xb0, + 0x0e, 0x33, 0x23, 0x44, 0xf2, 0xba, 0x37, 0x8d, 0x72, 0xf4, 0x71, 0x05, 0xa6, 0x30, 0xf5, 0x83, + 0x90, 0xbf, 0x73, 0x08, 0x92, 0x71, 0xd3, 0xbb, 0x89, 0xe9, 0xa6, 0x78, 0x76, 0xdf, 0x84, 0x47, + 0xe7, 0xa7, 0x54, 0x57, 0xe0, 0x4f, 0x16, 0xdc, 0x97, 0xc3, 0xb0, 0x9d, 0x91, 0x23, 0x1c, 0xa1, + 0xec, 0x19, 0xa6, 0x2c, 0xc3, 0x7b, 0x3d, 0x21, 0x7c, 0xd9, 0x39, 0xfd, 0x23, 0x58, 0x88, 0x72, + 0x38, 0x85, 0x69, 0xfd, 0xa8, 0xd8, 0x19, 0x63, 0x6c, 0xcf, 0x47, 0x23, 0x6b, 0xd4, 0x7d, 0x04, + 0x0f, 0xce, 0x77, 0x5a, 0x45, 0xf8, 0xdf, 0xfc, 0xa5, 0xcb, 0x19, 0xd2, 0xb7, 0x10, 0xba, 0xf4, + 0xa5, 0x1b, 0xc0, 0x62, 0x84, 0xf6, 0x83, 0x5e, 0x97, 0xf9, 0xf4, 0x38, 0x48, 0xfd, 0x7d, 0x94, + 0x7f, 0x55, 0xa8, 0x3c, 0xaa, 0x6d, 0x05, 0xa6, 0xdc, 0x12, 0x2f, 0x15, 0xdb, 0x30, 0xc3, 0xc8, + 0x21, 0x4a, 0x7c, 0xfd, 0x05, 0xb1, 0x66, 0x1a, 0x26, 0x4a, 0xe5, 0x03, 0x2e, 0xaa, 0xc2, 0x99, + 0x66, 0x83, 0x87, 0xa1, 0x4b, 0xb9, 0x10, 0xb5, 0x4c, 0xcc, 0x93, 0x4f, 0x6f, 0x41, 0xad, 0x45, + 0x3b, 0x76, 0x00, 0xb7, 0x8a, 0x9f, 0x0b, 0x2f, 0x30, 0xba, 0x9c, 0x47, 0x17, 0x18, 0x6f, 0xca, + 0x94, 0x9d, 0xc2, 0x82, 0xf1, 0x3b, 0xd8, 0xfd, 0xf3, 0x31, 0x84, 0xa0, 0xd3, 0xbc, 0xa0, 0xa0, + 0xb6, 0xe8, 0x01, 0xe4, 0xbe, 0x22, 0xad, 0x19, 0xd4, 0x07, 0xdb, 0xce, 0x97, 0xc7, 0x6e, 0x6b, + 0xcc, 0x1f, 0xc0, 0xcc, 0xd0, 0x57, 0x8e, 0x86, 0x41, 0x2d, 0x2f, 0xe0, 0xdc, 0x3f, 0x47, 0x40, + 0x23, 0x7f, 0x13, 0xae, 0x8b, 0x57, 0xb0, 0x25, 0x83, 0x02, 0xdf, 0x70, 0x1a, 0x25, 0x1b, 0x1a, + 0x21, 0x82, 0xd7, 0x46, 0xa8, 0xfe, 0x3d, 0x83, 0x52, 0x51, 0xc8, 0x79, 0xe3, 0x02, 0x42, 0xda, + 0xca, 0x01, 0xdc, 0x2a, 0x70, 0x5b, 0xfb, 0xa1, 0x41, 0xdf, 0xcc, 0xf3, 0x8d, 0x27, 0xa6, 0x84, + 0x2a, 0xdb, 0x0c, 0xe6, 0x0d, 0x84, 0xd2, 0x7e, 0xcb, 0x04, 0x51, 0x4a, 0xa7, 0x9d, 0x8d, 0x8b, + 0x8a, 0x0f, 0xe2, 0x2b, 0xd0, 0x42, 0x63, 0x7c, 0x66, 0x1e, 0x6b, 0x8c, 0xaf, 0x84, 0x65, 0xf2, + 0xa6, 0x2b, 0x7e, 0x79, 0x31, 0x35, 0x5d, 0x41, 0xc6, 0x68, 0xa2, 0xe4, 0xfb, 0x08, 0x3f, 0x12, + 0x23, 0xdf, 0x46, 0xee, 0x95, 0x26, 0x64, 0x20, 0x64, 0x3c, 0x12, 0x65, 0x5f, 0x10, 0xec, 0x9f, + 0xc1, 0x9d, 0xf2, 0x1f, 0x61, 0xde, 0x2c, 0x45, 0x32, 0x48, 0x3b, 0x6f, 0x57, 0x91, 0xce, 0xcf, + 0x16, 0x23, 0x57, 0x37, 0x35, 0x9f, 0x49, 0xd0, 0x38, 0x5b, 0xc6, 0xd1, 0x66, 0x7e, 0x09, 0xe4, + 0x79, 0xe6, 0xf8, 0x81, 0x90, 0x97, 0x34, 0x0e, 0x04, 0x13, 0x65, 0xb5, 0x7f, 0x6d, 0x41, 0xe3, + 0x3c, 0x56, 0xf4, 0xa4, 0x34, 0x5d, 0xa5, 0x3a, 0xce, 0x7b, 0xd5, 0x75, 0xb4, 0x4f, 0x1f, 0x5b, + 0x50, 0x3f, 0x87, 0xa3, 0x3e, 0x2e, 0x3d, 0x9e, 0x65, 0x2a, 0xce, 0xd7, 0x2b, 0xab, 0x68, 0x87, + 0x7e, 0x63, 0xc1, 0xda, 0x58, 0x0e, 0x60, 0xbf, 0x63, 0xee, 0xc8, 0x73, 0xa9, 0x8e, 0xf3, 0x6e, + 0x75, 0xc5, 0xe2, 0xe0, 0x1a, 0xba, 0x74, 0xc7, 0x0c, 0x2e, 0x13, 0x25, 0x19, 0x33, 0xb8, 0x8c, + 0x77, 0xf9, 0xd6, 0xe6, 0x27, 0x2f, 0xea, 0xd6, 0x67, 0x2f, 0xea, 0xd6, 0x3f, 0x5f, 0xd4, 0xad, + 0x5f, 0xbd, 0xac, 0x5f, 0xfb, 0xec, 0x65, 0xfd, 0xda, 0xdf, 0x5f, 0xd6, 0xaf, 0xfd, 0x30, 0xcf, + 0x70, 0x77, 0xf1, 0x7e, 0x78, 0x10, 0xe0, 0xa4, 0xd9, 0xff, 0x65, 0xf5, 0x44, 0xfc, 0xb6, 0x2a, + 0xf8, 0xc8, 0xde, 0x0d, 0xf1, 0xc3, 0xea, 0x57, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x02, 0xb9, + 0xb5, 0x24, 0xd2, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3962,9 +3963,9 @@ func (m *MsgUpdateSwapFeeParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, } } { - size := m.SwapFeeRate.Size() + size := m.DefaultSwapFeeRate.Size() i -= size - if _, err := m.SwapFeeRate.MarshalTo(dAtA[i:]); err != nil { + if _, err := m.DefaultSwapFeeRate.MarshalTo(dAtA[i:]); err != nil { return 0, err } i = encodeVarintTx(dAtA, i, uint64(size)) @@ -4539,7 +4540,7 @@ func (m *MsgUpdateSwapFeeParamsRequest) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = m.SwapFeeRate.Size() + l = m.DefaultSwapFeeRate.Size() n += 1 + l + sovTx(uint64(l)) if len(m.TokenParams) > 0 { for _, e := range m.TokenParams { @@ -8259,7 +8260,7 @@ func (m *MsgUpdateSwapFeeParamsRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SwapFeeRate", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DefaultSwapFeeRate", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -8287,7 +8288,7 @@ func (m *MsgUpdateSwapFeeParamsRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SwapFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.DefaultSwapFeeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex From 8c0338c0915d051052aa67ab756d86312ae78e75 Mon Sep 17 00:00:00 2001 From: Kevin Jones Date: Sat, 15 Oct 2022 10:44:12 +0100 Subject: [PATCH 3/3] Update min swap fees tutorial --- docs/tutorials/min_swap_fees.md | 52 ++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/docs/tutorials/min_swap_fees.md b/docs/tutorials/min_swap_fees.md index 66849ea556..3a2655cbb0 100644 --- a/docs/tutorials/min_swap_fees.md +++ b/docs/tutorials/min_swap_fees.md @@ -1,6 +1,6 @@ # Minimum swap fees -This tutorial demonstrates the behaviour of the min swap fee functionality +This tutorial demonstrates the behaviour of the min swap fee functionality. 1. Start and run the chain: @@ -75,7 +75,7 @@ sifnoded q clp swap-fee-params --output json | jq ```json { - "swap_fee_rate": "0.003000000000000000", + "default_swap_fee_rate": "0.003000000000000000", "token_params": [] } ``` @@ -91,13 +91,15 @@ sifnoded tx clp set-swap-fee-params \ --fees 100000000000000000rowan \ -y \ --path <( echo '{ - "swap_fee_rate": "0.003", + "default_swap_fee_rate": "0.003", "token_params": [{ "asset": "ceth", + "swap_fee_rate": "0.004", "min_swap_fee": "0" }, { "asset": "rowan", + "swap_fee_rate": "0.002", "min_swap_fee": "600000000000" } ] @@ -105,7 +107,7 @@ sifnoded tx clp set-swap-fee-params \ ``` -4. Check swap fee params have been updated: +6. Check swap fee params have been updated: ```bash sifnoded q clp swap-fee-params --output json | jq @@ -113,21 +115,23 @@ sifnoded q clp swap-fee-params --output json | jq ```json { - "swap_fee_rate": "0.003000000000000000", + "default_swap_fee_rate": "0.003000000000000000", "token_params": [ { "asset": "ceth", - "min_swap_fee": "0" + "min_swap_fee": "0", + "swap_fee_rate": "0.004000000000000000" }, { "asset": "rowan", - "min_swap_fee": "600000000000" + "min_swap_fee": "600000000000", + "swap_fee_rate": "0.002000000000000000" } ] } ``` -6. Do a swap: +7. Do a swap: ```bash sifnoded tx clp swap \ @@ -164,11 +168,37 @@ adjusted_output = x * Y / ((x + X)(1 + r)) = 199980001999800 fee = min(max(f * adjusted_output, min_swap_fee), adjusted_output) - = min(max(0.003 * 199980001999800, 600000000000), adjusted_output) - = min(max(599940005999, 600000000000), 199980001999800) - = 600000000000 + = min(max(0.002 * 199980001999800, 600000000000), adjusted_output) + = min(max(399960003999, 600000000000), 199980001999800) + = 600000000000 y = adjusted_amount - fee = 199980001999800 - 600000000000 = 199380001999800 ``` + +8. Confirm that setting swap fee rate greater than one fails: + +```bash +sifnoded tx clp set-swap-fee-params \ + --from sif \ + --keyring-backend test \ + --chain-id localnet \ + --broadcast-mode block \ + --fees 100000000000000000rowan \ + -y \ + --path <( echo '{ + "default_swap_fee_rate": "0.003", + "token_params": [{ + "asset": "ceth", + "swap_fee_rate": "1.2", + "min_swap_fee": "0" + }, + { + "asset": "rowan", + "swap_fee_rate": "0.002", + "min_swap_fee": "600000000000" + } + ] + }' ) +``` \ No newline at end of file