From e1e9f69c5b4955b50288ec253dd59bb8b06d2a6f Mon Sep 17 00:00:00 2001 From: Ehsan-saradar Date: Mon, 27 Jun 2022 12:02:48 +0430 Subject: [PATCH 1/7] Add ShareOutAmount and TokenIn fields to MsgJoinPoolResponse --- go.mod | 7 +- go.sum | 5 + proto/osmosis/gamm/v1beta1/tx.proto | 24 +- x/gamm/keeper/gas_test.go | 6 +- x/gamm/keeper/msg_server.go | 7 +- x/gamm/keeper/pool_service.go | 14 +- x/gamm/keeper/pool_service_test.go | 16 +- x/gamm/types/tx.pb.go | 355 ++++++++++++++++++++++------ 8 files changed, 344 insertions(+), 90 deletions(-) diff --git a/go.mod b/go.mod index ebb3a6fce75..33d52f3574c 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,11 @@ require ( mvdan.cc/gofumpt v0.3.1 ) +require ( + github.com/ghodss/yaml v1.0.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.3 // indirect +) + require ( 4d63.com/gochecknoglobals v0.1.0 // indirect filippo.io/edwards25519 v1.0.0-beta.2 // indirect @@ -111,7 +116,7 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect + github.com/golang/glog v1.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.3 // indirect github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect diff --git a/go.sum b/go.sum index 8467c20b791..e500c75f4bf 100644 --- a/go.sum +++ b/go.sum @@ -408,6 +408,7 @@ github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3n github.com/fzipp/gocyclo v0.5.1 h1:L66amyuYogbxl0j2U+vGqJXusPF2IkduvXLnYD5TFgw= github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -489,6 +490,8 @@ github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -666,6 +669,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.3 h1:BGNSrTRW4rwfhJiFwvwF4XQ0Y72Jj9YEgxVrtovbD5o= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.3/go.mod h1:VHn7KgNsRriXa4mcgtkpR00OXyQY6g67JWMvn+R27A4= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= diff --git a/proto/osmosis/gamm/v1beta1/tx.proto b/proto/osmosis/gamm/v1beta1/tx.proto index 069b0d9d0ff..aa992343962 100644 --- a/proto/osmosis/gamm/v1beta1/tx.proto +++ b/proto/osmosis/gamm/v1beta1/tx.proto @@ -39,7 +39,17 @@ message MsgJoinPool { ]; } -message MsgJoinPoolResponse {} +message MsgJoinPoolResponse { + string share_out_amount = 1 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.moretags) = "yaml:\"pool_amount_out\"", + (gogoproto.nullable) = false + ]; + repeated cosmos.base.v1beta1.Coin token_in = 2 [ + (gogoproto.moretags) = "yaml:\"token_in_max_amounts\"", + (gogoproto.nullable) = false + ]; +} // ===================== MsgExitPool message MsgExitPool { @@ -57,7 +67,17 @@ message MsgExitPool { ]; } -message MsgExitPoolResponse {} +message MsgExitPoolResponse { + string share_in_amount = 1 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.moretags) = "yaml:\"pool_amount_out\"", + (gogoproto.nullable) = false + ]; + repeated cosmos.base.v1beta1.Coin token_out = 2 [ + (gogoproto.moretags) = "yaml:\"token_in_max_amounts\"", + (gogoproto.nullable) = false + ]; +} // ===================== MsgSwapExactAmountIn message SwapAmountInRoute { diff --git a/x/gamm/keeper/gas_test.go b/x/gamm/keeper/gas_test.go index 6e6c11fd585..b5dd575306f 100644 --- a/x/gamm/keeper/gas_test.go +++ b/x/gamm/keeper/gas_test.go @@ -23,7 +23,7 @@ func (suite *KeeperTestSuite) measureJoinPoolGas( shareOutAmountMax sdk.Int, maxCoins sdk.Coins, ) uint64 { alreadySpent := suite.Ctx.GasMeter().GasConsumed() - err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, addr, poolID, shareOutAmountMax, maxCoins) + _, _, err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, addr, poolID, shareOutAmountMax, maxCoins) suite.Require().NoError(err) newSpent := suite.Ctx.GasMeter().GasConsumed() spentNow := newSpent - alreadySpent @@ -76,7 +76,7 @@ func (suite *KeeperTestSuite) TestJoinPoolGas() { suite.Assert().LessOrEqual(int(firstJoinGas), 100000) for i := 1; i < startAveragingAt; i++ { - err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, defaultAddr, poolId, minShareOutAmount, sdk.Coins{}) + _, _, err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, defaultAddr, poolId, minShareOutAmount, sdk.Coins{}) suite.Require().NoError(err) } @@ -133,7 +133,7 @@ func (suite *KeeperTestSuite) TestRepeatedJoinPoolDistinctDenom() { firstJoinGas := suite.measureJoinPoolGas(defaultAddr, initialPoolId, minShareOutAmount, defaultCoins) for i := 2; i < denomNumber; i++ { - err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, defaultAddr, uint64(i), minShareOutAmount, sdk.Coins{}) + _, _, err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, defaultAddr, uint64(i), minShareOutAmount, sdk.Coins{}) suite.Require().NoError(err) } diff --git a/x/gamm/keeper/msg_server.go b/x/gamm/keeper/msg_server.go index 3a856ee8e32..9c8d5a40647 100644 --- a/x/gamm/keeper/msg_server.go +++ b/x/gamm/keeper/msg_server.go @@ -108,7 +108,7 @@ func (server msgServer) JoinPool(goCtx context.Context, msg *types.MsgJoinPool) return nil, err } - err = server.keeper.JoinPoolNoSwap(ctx, sender, msg.PoolId, msg.ShareOutAmount, msg.TokenInMaxs) + neededLp, sharesOut, err := server.keeper.JoinPoolNoSwap(ctx, sender, msg.PoolId, msg.ShareOutAmount, msg.TokenInMaxs) if err != nil { return nil, err } @@ -125,7 +125,10 @@ func (server msgServer) JoinPool(goCtx context.Context, msg *types.MsgJoinPool) ), }) - return &types.MsgJoinPoolResponse{}, nil + return &types.MsgJoinPoolResponse{ + ShareOutAmount: sharesOut, + TokenIn: neededLp, + }, nil } func (server msgServer) ExitPool(goCtx context.Context, msg *types.MsgExitPool) (*types.MsgExitPoolResponse, error) { diff --git a/x/gamm/keeper/pool_service.go b/x/gamm/keeper/pool_service.go index 5247868a76e..2c4bf4deffe 100644 --- a/x/gamm/keeper/pool_service.go +++ b/x/gamm/keeper/pool_service.go @@ -183,32 +183,32 @@ func (k Keeper) JoinPoolNoSwap( poolId uint64, shareOutAmount sdk.Int, tokenInMaxs sdk.Coins, -) (err error) { +) (tokenIn sdk.Coins, sharesOut sdk.Int, err error) { // all pools handled within this method are pointer references, `JoinPool` directly updates the pools pool, err := k.GetPoolAndPoke(ctx, poolId) if err != nil { - return err + return nil, sdk.ZeroInt(), err } // we do an abstract calculation on the lp liquidity coins needed to have // the designated amount of given shares of the pool without performing swap neededLpLiquidity, err := getMaximalNoSwapLPAmount(ctx, pool, shareOutAmount) if err != nil { - return err + return nil, sdk.ZeroInt(), err } // check that needed lp liquidity does not exceed the given `tokenInMaxs` parameter. Return error if so. // if tokenInMaxs == 0, don't do this check. if tokenInMaxs.Len() != 0 { if !(neededLpLiquidity.DenomsSubsetOf(tokenInMaxs) && tokenInMaxs.IsAllGTE(neededLpLiquidity)) { - return sdkerrors.Wrapf(types.ErrLimitMaxAmount, "TokenInMaxs is less than the needed LP liquidity to this JoinPoolNoSwap,"+ + return nil, sdk.ZeroInt(), sdkerrors.Wrapf(types.ErrLimitMaxAmount, "TokenInMaxs is less than the needed LP liquidity to this JoinPoolNoSwap,"+ " upperbound: %v, needed %v", tokenInMaxs, neededLpLiquidity) } } - sharesOut, err := pool.JoinPool(ctx, neededLpLiquidity, pool.GetSwapFee(ctx)) + sharesOut, err = pool.JoinPool(ctx, neededLpLiquidity, pool.GetSwapFee(ctx)) if err != nil { - return err + return nil, sdk.ZeroInt(), err } // sanity check, don't return error as not worth halting the LP. We know its not too much. if sharesOut.LT(shareOutAmount) { @@ -217,7 +217,7 @@ func (k Keeper) JoinPoolNoSwap( } err = k.applyJoinPoolStateChange(ctx, pool, sender, sharesOut, neededLpLiquidity) - return err + return neededLpLiquidity, sharesOut, err } // getMaximalNoSwapLPAmount returns the coins(lp liquidity) needed to get the specified amount of share of the pool. diff --git a/x/gamm/keeper/pool_service_test.go b/x/gamm/keeper/pool_service_test.go index e556754314f..d32b3fcd0a9 100644 --- a/x/gamm/keeper/pool_service_test.go +++ b/x/gamm/keeper/pool_service_test.go @@ -262,14 +262,16 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { fn: func(poolId uint64) { keeper := suite.App.GAMMKeeper balancesBefore := suite.App.BankKeeper.GetAllBalances(suite.Ctx, suite.TestAccs[1]) - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{}) + neededLp, sharesOut, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{}) suite.Require().NoError(err) + suite.Require().Equal(types.OneShare.MulRaw(50).String(), sharesOut.String()) suite.Require().Equal(types.OneShare.MulRaw(50).String(), suite.App.BankKeeper.GetBalance(suite.Ctx, suite.TestAccs[1], "gamm/pool/1").Amount.String()) balancesAfter := suite.App.BankKeeper.GetAllBalances(suite.Ctx, suite.TestAccs[1]) deltaBalances, _ := balancesBefore.SafeSub(balancesAfter) // The pool was created with the 10000foo, 10000bar, and the pool share was minted as 100000000gamm/pool/1. // Thus, to get the 50*OneShare gamm/pool/1, (10000foo, 10000bar) * (1 / 2) balances should be provided. + suite.Require().Equal(deltaBalances.FilterDenoms([]string{"foo", "bar"}).Sort().String(), neededLp.Sort().String()) suite.Require().Equal("5000", deltaBalances.AmountOf("foo").String()) suite.Require().Equal("5000", deltaBalances.AmountOf("bar").String()) @@ -280,14 +282,14 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { { fn: func(poolId uint64) { keeper := suite.App.GAMMKeeper - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, sdk.NewInt(0), sdk.Coins{}) + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, sdk.NewInt(0), sdk.Coins{}) suite.Require().Error(err, "can't join the pool with requesting 0 share amount") }, }, { fn: func(poolId uint64) { keeper := suite.App.GAMMKeeper - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, sdk.NewInt(-1), sdk.Coins{}) + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, sdk.NewInt(-1), sdk.Coins{}) suite.Require().Error(err, "can't join the pool with requesting negative share amount") }, }, @@ -296,7 +298,7 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { keeper := suite.App.GAMMKeeper // Test the "tokenInMaxs" // In this case, to get the 50 * OneShare amount of share token, the foo, bar token are expected to be provided as 5000 amounts. - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ sdk.NewCoin("bar", sdk.NewInt(4999)), sdk.NewCoin("foo", sdk.NewInt(4999)), }) suite.Require().Error(err) @@ -307,7 +309,7 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { keeper := suite.App.GAMMKeeper // Test the "tokenInMaxs" // In this case, to get the 50 * OneShare amount of share token, the foo, bar token are expected to be provided as 5000 amounts. - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000)), }) suite.Require().NoError(err) @@ -493,7 +495,7 @@ func (suite *KeeperTestSuite) TestJoinPoolExitPool_InverseRelationship() { balanceBeforeJoin := suite.App.BankKeeper.GetAllBalances(suite.Ctx, joinPoolAcc) fmt.Println(balanceBeforeJoin.String()) - err = suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, joinPoolAcc, poolId, tc.joinPoolShareAmt, sdk.Coins{}) + _, _, err = suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, joinPoolAcc, poolId, tc.joinPoolShareAmt, sdk.Coins{}) suite.Require().NoError(err) _, err = suite.App.GAMMKeeper.ExitPool(suite.Ctx, joinPoolAcc, poolId, tc.joinPoolShareAmt, sdk.Coins{}) @@ -535,7 +537,7 @@ func (suite *KeeperTestSuite) TestActiveBalancerPool() { suite.Ctx = suite.Ctx.WithBlockTime(tc.blockTime) // uneffected by start time - err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[0], poolId, types.OneShare.MulRaw(50), sdk.Coins{}) + _, _, err := suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[0], poolId, types.OneShare.MulRaw(50), sdk.Coins{}) suite.Require().NoError(err) _, err = suite.App.GAMMKeeper.ExitPool(suite.Ctx, suite.TestAccs[0], poolId, types.InitPoolSharesSupply.QuoRaw(2), sdk.Coins{}) suite.Require().NoError(err) diff --git a/x/gamm/types/tx.pb.go b/x/gamm/types/tx.pb.go index d2391a299b5..8f7d964e9e4 100644 --- a/x/gamm/types/tx.pb.go +++ b/x/gamm/types/tx.pb.go @@ -94,6 +94,8 @@ func (m *MsgJoinPool) GetTokenInMaxs() []types.Coin { } type MsgJoinPoolResponse struct { + ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"pool_amount_out"` + TokenIn []types.Coin `protobuf:"bytes,2,rep,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in_max_amounts"` } func (m *MsgJoinPoolResponse) Reset() { *m = MsgJoinPoolResponse{} } @@ -129,6 +131,13 @@ func (m *MsgJoinPoolResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgJoinPoolResponse proto.InternalMessageInfo +func (m *MsgJoinPoolResponse) GetTokenIn() []types.Coin { + if m != nil { + return m.TokenIn + } + return nil +} + // ===================== MsgExitPool type MsgExitPool struct { Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` @@ -192,6 +201,8 @@ func (m *MsgExitPool) GetTokenOutMins() []types.Coin { } type MsgExitPoolResponse struct { + ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"pool_amount_out"` + TokenOut []types.Coin `protobuf:"bytes,2,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_in_max_amounts"` } func (m *MsgExitPoolResponse) Reset() { *m = MsgExitPoolResponse{} } @@ -227,6 +238,13 @@ func (m *MsgExitPoolResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgExitPoolResponse proto.InternalMessageInfo +func (m *MsgExitPoolResponse) GetTokenOut() []types.Coin { + if m != nil { + return m.TokenOut + } + return nil +} + // ===================== MsgSwapExactAmountIn type SwapAmountInRoute struct { PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` @@ -952,77 +970,78 @@ func init() { func init() { proto.RegisterFile("osmosis/gamm/v1beta1/tx.proto", fileDescriptor_cfc8fd3ac7df3247) } var fileDescriptor_cfc8fd3ac7df3247 = []byte{ - // 1108 bytes of a gzipped FileDescriptorProto + // 1128 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4d, 0x6f, 0x1b, 0x45, 0x18, 0xce, 0xd8, 0x6e, 0x3e, 0x26, 0x4d, 0xe2, 0x6c, 0x93, 0xc6, 0xd9, 0xb6, 0x76, 0x3a, 0x20, 0x48, 0xa9, 0xba, 0x4b, 0x53, 0x89, 0x22, 0x2e, 0x80, 0x21, 0x08, 0x23, 0x2c, 0x57, 0xdb, 0x4b, - 0xc5, 0xc5, 0x5a, 0xc7, 0x2b, 0x77, 0xd5, 0x78, 0xc6, 0xf2, 0xcc, 0x06, 0x57, 0x48, 0x20, 0xf1, - 0x71, 0x07, 0x21, 0x3e, 0x7e, 0x01, 0xe2, 0x2f, 0x70, 0x80, 0x03, 0x5c, 0x7a, 0xec, 0x8d, 0x8f, - 0x83, 0x85, 0x92, 0x7f, 0xe0, 0x5f, 0x50, 0xed, 0xce, 0xcc, 0xee, 0x7a, 0xbd, 0x6b, 0x7b, 0x93, - 0xb8, 0x3d, 0xd9, 0xde, 0x79, 0xe7, 0x9d, 0x67, 0x9f, 0xf7, 0x99, 0x67, 0xde, 0x31, 0xbc, 0x46, - 0x68, 0x9b, 0x50, 0x9b, 0xea, 0x2d, 0xb3, 0xdd, 0xd6, 0x8f, 0x6e, 0x37, 0x2c, 0x66, 0xde, 0xd6, - 0x59, 0x4f, 0xeb, 0x74, 0x09, 0x23, 0xca, 0x86, 0x18, 0xd6, 0xdc, 0x61, 0x4d, 0x0c, 0xab, 0x1b, - 0x2d, 0xd2, 0x22, 0x5e, 0x80, 0xee, 0x7e, 0xe3, 0xb1, 0x6a, 0xf1, 0xc0, 0x0b, 0xd6, 0x1b, 0x26, - 0xb5, 0xfc, 0x4c, 0x07, 0xc4, 0xc6, 0x7c, 0x1c, 0xfd, 0x9e, 0x81, 0xcb, 0x55, 0xda, 0xfa, 0x88, - 0xd8, 0xf8, 0x1e, 0x21, 0x87, 0xca, 0x0d, 0x38, 0x4f, 0x2d, 0xdc, 0xb4, 0xba, 0x05, 0xb0, 0x03, - 0x76, 0x97, 0xca, 0xeb, 0x83, 0x7e, 0x69, 0xe5, 0xb1, 0xd9, 0x3e, 0x7c, 0x0b, 0xf1, 0xe7, 0xc8, - 0x10, 0x01, 0xca, 0x4d, 0xb8, 0xd0, 0x21, 0xe4, 0xb0, 0x6e, 0x37, 0x0b, 0x99, 0x1d, 0xb0, 0x9b, - 0x2b, 0x2b, 0x83, 0x7e, 0x69, 0x95, 0xc7, 0x8a, 0x01, 0x64, 0xcc, 0xbb, 0xdf, 0x2a, 0x4d, 0xa5, - 0x0b, 0xf3, 0xf4, 0xa1, 0xd9, 0xb5, 0xea, 0xc4, 0x61, 0x75, 0xb3, 0x4d, 0x1c, 0xcc, 0x0a, 0x59, - 0x6f, 0x85, 0x0f, 0x9f, 0xf4, 0x4b, 0x73, 0xff, 0xf5, 0x4b, 0xaf, 0xb4, 0x6c, 0xf6, 0xd0, 0x69, - 0x68, 0x07, 0xa4, 0xad, 0x0b, 0xd0, 0xfc, 0xe3, 0x16, 0x6d, 0x3e, 0xd2, 0xd9, 0xe3, 0x8e, 0x45, - 0xb5, 0x0a, 0x66, 0x83, 0x7e, 0xe9, 0x72, 0x68, 0x0d, 0x9e, 0xca, 0xcd, 0x8a, 0x8c, 0x55, 0x6f, - 0x85, 0x9a, 0xc3, 0xde, 0xf5, 0x1e, 0x2a, 0x0d, 0xb8, 0xc2, 0xc8, 0x23, 0x0b, 0xd7, 0x6d, 0x5c, - 0x6f, 0x9b, 0x3d, 0x5a, 0xc8, 0xed, 0x64, 0x77, 0x97, 0xf7, 0xb6, 0x35, 0x9e, 0x57, 0x73, 0x39, - 0x91, 0xf4, 0x69, 0xef, 0x11, 0x1b, 0x97, 0x5f, 0x72, 0xb1, 0x0c, 0xfa, 0xa5, 0x2b, 0x7c, 0x85, - 0xf0, 0x6c, 0xb1, 0x12, 0x45, 0xc6, 0xb2, 0xf7, 0xb8, 0x82, 0xab, 0x66, 0x8f, 0xa2, 0x4d, 0x78, - 0x29, 0x44, 0x9f, 0x61, 0xd1, 0x0e, 0xc1, 0xd4, 0x42, 0x7f, 0x70, 0x5a, 0xf7, 0x7b, 0x36, 0x9b, - 0x29, 0xad, 0x1d, 0xb8, 0xc6, 0x69, 0xb5, 0xf1, 0x39, 0xb1, 0x1a, 0x49, 0x87, 0x8c, 0x15, 0xef, - 0x49, 0x05, 0x0b, 0x52, 0x2d, 0xb8, 0xca, 0x69, 0x71, 0x0b, 0xd9, 0xb6, 0xf1, 0x14, 0xac, 0xbe, - 0x2c, 0x58, 0xbd, 0x1a, 0x66, 0x55, 0x4c, 0x0f, 0x68, 0xbd, 0xe8, 0x3d, 0xaf, 0x39, 0xac, 0x6a, - 0x63, 0xc9, 0xab, 0xe4, 0xcf, 0xe7, 0xf5, 0x6b, 0x00, 0xd7, 0xef, 0x7f, 0x6a, 0x76, 0x38, 0x98, - 0x0a, 0x36, 0x88, 0xc3, 0xac, 0x30, 0x65, 0x60, 0x22, 0x65, 0x65, 0xb8, 0x16, 0x20, 0x68, 0x5a, - 0x98, 0xb4, 0x3d, 0x9e, 0x97, 0xca, 0x6a, 0x40, 0x42, 0x24, 0x00, 0x19, 0x2b, 0x12, 0xdc, 0xfb, - 0xde, 0xef, 0xbf, 0x33, 0x70, 0xa3, 0x4a, 0x5b, 0x2e, 0x92, 0xfd, 0x9e, 0x79, 0xc0, 0x24, 0x9c, - 0x34, 0x75, 0xde, 0x87, 0xf3, 0x5d, 0x17, 0x3d, 0x2d, 0x64, 0x3c, 0x02, 0x5f, 0xd5, 0xe2, 0xb6, - 0xb5, 0x36, 0xf2, 0xb6, 0xe5, 0x9c, 0x4b, 0xa7, 0x21, 0x26, 0x2b, 0x55, 0xb8, 0x28, 0x65, 0xea, - 0x95, 0x7e, 0x6c, 0x25, 0xb6, 0x44, 0x25, 0xd6, 0x86, 0xf5, 0x8d, 0x8c, 0x05, 0xa1, 0x69, 0xe5, - 0x73, 0xb8, 0x11, 0x57, 0x9f, 0x42, 0xce, 0x7b, 0x9d, 0x6a, 0x6a, 0x55, 0x5d, 0x49, 0xae, 0x39, - 0x32, 0xd6, 0x43, 0x25, 0xe7, 0xef, 0x88, 0xbe, 0x07, 0xf0, 0x6a, 0x1c, 0xb3, 0x52, 0x01, 0x0a, - 0x85, 0xf9, 0x20, 0x99, 0x00, 0xc7, 0xb9, 0xae, 0xa4, 0x06, 0xb7, 0x15, 0x05, 0x27, 0x81, 0xad, - 0x4a, 0x60, 0x02, 0xd5, 0x57, 0x00, 0x2a, 0x41, 0x21, 0x6a, 0x0e, 0x3b, 0x85, 0xee, 0xde, 0x91, - 0x1b, 0xc7, 0xc6, 0x53, 0xcb, 0xee, 0xa2, 0x28, 0x0b, 0x57, 0xdd, 0xbf, 0x19, 0xb8, 0x39, 0xca, - 0x4d, 0xcd, 0x61, 0x69, 0x64, 0xf7, 0x41, 0x44, 0x76, 0xbb, 0x93, 0x64, 0x27, 0xdf, 0x36, 0xa2, - 0xbb, 0xcf, 0xe0, 0xa5, 0x18, 0x7b, 0x14, 0xee, 0xf3, 0x71, 0xea, 0x52, 0xa8, 0x89, 0x8e, 0x8b, - 0x8c, 0x7c, 0x60, 0xb8, 0xc2, 0x84, 0xee, 0xc1, 0x25, 0x9f, 0x2b, 0x4f, 0x9a, 0x63, 0x55, 0x5f, - 0x10, 0xaa, 0xcf, 0x47, 0x58, 0x46, 0xc6, 0xa2, 0xac, 0x33, 0xfa, 0x0e, 0xc0, 0x6b, 0xb1, 0xdc, - 0xfa, 0xc2, 0xeb, 0x48, 0xdf, 0x08, 0x36, 0x05, 0x38, 0x9b, 0xd5, 0x46, 0xd2, 0x49, 0x97, 0x91, - 0x56, 0x8b, 0xfe, 0xcc, 0xc0, 0x6d, 0x71, 0xb8, 0x70, 0x5c, 0xcc, 0xea, 0xe2, 0xd3, 0x58, 0x4d, - 0xaa, 0x23, 0xe5, 0xfc, 0x0d, 0x25, 0x38, 0xf8, 0xcf, 0xcf, 0x50, 0xe2, 0x72, 0x22, 0x63, 0x5d, - 0x76, 0x00, 0x81, 0xa1, 0xfc, 0x0c, 0xe0, 0xf5, 0x44, 0x12, 0xc3, 0xae, 0x32, 0xd2, 0x9e, 0x9c, - 0xd1, 0x55, 0xa2, 0xf9, 0x46, 0xfa, 0x13, 0xf4, 0x4b, 0x76, 0xa8, 0xbe, 0xf7, 0xdd, 0xd1, 0x53, - 0xed, 0xe9, 0x54, 0xf5, 0x7d, 0x7b, 0xc4, 0x87, 0xf8, 0x9e, 0xdd, 0x1e, 0xf4, 0x4b, 0x9b, 0x11, - 0x61, 0xc6, 0xd9, 0x50, 0x2c, 0x57, 0xb9, 0x19, 0x73, 0x95, 0x64, 0x37, 0x17, 0x9e, 0x87, 0xdd, - 0xa0, 0x1f, 0x86, 0x35, 0x34, 0x5c, 0xa8, 0x17, 0x68, 0x10, 0xbf, 0x66, 0x61, 0x41, 0x74, 0x49, - 0x11, 0x5c, 0x33, 0xf4, 0x87, 0x98, 0xfe, 0x29, 0x9b, 0xb2, 0x7f, 0x8a, 0x6b, 0x5b, 0x73, 0xb3, - 0x6d, 0x5b, 0x93, 0xfa, 0x9a, 0x0b, 0xcf, 0xa9, 0xaf, 0xf9, 0x09, 0xc0, 0x9d, 0xa4, 0x52, 0xbd, - 0xd8, 0xde, 0xe6, 0xaf, 0x0c, 0x54, 0x43, 0xc8, 0xc2, 0x06, 0x39, 0x4b, 0x1b, 0x1a, 0x3a, 0xc2, - 0xb3, 0xe7, 0x70, 0x84, 0xbb, 0x16, 0xe1, 0xab, 0x20, 0x64, 0x11, 0xb9, 0xb3, 0x59, 0x44, 0x4c, - 0x4a, 0x64, 0xe4, 0x85, 0xb8, 0x02, 0x8b, 0xf8, 0x11, 0x40, 0x94, 0xcc, 0x62, 0xd8, 0x23, 0xa2, - 0xc2, 0x07, 0x33, 0x15, 0xfe, 0xde, 0x6f, 0x0b, 0x30, 0x5b, 0xa5, 0x2d, 0xe5, 0x01, 0x5c, 0xf4, - 0x2f, 0xf9, 0xd7, 0xe3, 0x7b, 0xbe, 0xd0, 0x45, 0x56, 0xbd, 0x31, 0x31, 0xc4, 0x7f, 0xa7, 0x07, - 0x70, 0xd1, 0xbf, 0xe7, 0x26, 0x67, 0x96, 0x21, 0x63, 0x32, 0x47, 0x6f, 0x7b, 0x0a, 0xe5, 0x97, - 0xbd, 0xe1, 0x2b, 0xd6, 0x6b, 0x89, 0xf3, 0x47, 0x62, 0xd5, 0xbd, 0xe9, 0x63, 0xfd, 0x45, 0x8f, - 0x78, 0xab, 0x1f, 0xe9, 0xb0, 0x6f, 0x4e, 0x9b, 0xa9, 0xe6, 0x30, 0xf5, 0x4e, 0x8a, 0x60, 0x7f, - 0xdd, 0x2f, 0x01, 0xbc, 0x9c, 0xd0, 0xea, 0xe9, 0x63, 0x8b, 0x31, 0x3a, 0x41, 0xbd, 0x9b, 0x72, - 0x42, 0x2c, 0x88, 0x48, 0x3f, 0x32, 0x19, 0xc4, 0xf0, 0x84, 0x29, 0x40, 0x24, 0x1c, 0xa4, 0xdf, - 0x00, 0xb8, 0x95, 0x64, 0x47, 0xaf, 0x8f, 0x55, 0x4f, 0xcc, 0x0c, 0xf5, 0xcd, 0xb4, 0x33, 0x7c, - 0x1c, 0x5f, 0xc0, 0xcd, 0xf8, 0xa3, 0x55, 0x9b, 0x98, 0x72, 0x28, 0x5e, 0x7d, 0x23, 0x5d, 0xbc, - 0x04, 0x50, 0xae, 0x3c, 0x39, 0x2e, 0x82, 0xa7, 0xc7, 0x45, 0xf0, 0xff, 0x71, 0x11, 0x7c, 0x7b, - 0x52, 0x9c, 0x7b, 0x7a, 0x52, 0x9c, 0xfb, 0xe7, 0xa4, 0x38, 0xf7, 0x89, 0x1e, 0xb2, 0x09, 0x91, - 0xfb, 0xd6, 0xa1, 0xd9, 0xa0, 0xf2, 0x87, 0x7e, 0x74, 0x57, 0xef, 0xf1, 0xbf, 0x0f, 0x3d, 0xcf, - 0x68, 0xcc, 0x7b, 0x7f, 0xf7, 0xdd, 0x79, 0x16, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xdb, 0x47, 0x35, - 0x5b, 0x14, 0x00, 0x00, + 0x81, 0x83, 0xb5, 0x8e, 0x57, 0xee, 0xaa, 0xd9, 0x19, 0xcb, 0x33, 0x1b, 0x5c, 0x21, 0x81, 0xc4, + 0xc7, 0x1d, 0x84, 0xf8, 0xf8, 0x05, 0x88, 0xbf, 0xc0, 0x01, 0x0e, 0x70, 0xe9, 0xb1, 0x37, 0x3e, + 0x0e, 0x16, 0x4a, 0xf8, 0x05, 0xfe, 0x05, 0x68, 0x77, 0x66, 0x3f, 0xbd, 0x1b, 0x7b, 0x53, 0xbb, + 0x3d, 0x25, 0xde, 0x79, 0xe7, 0x9d, 0xe7, 0x7d, 0xe6, 0x99, 0x67, 0xde, 0x5d, 0x78, 0x85, 0x50, + 0x8b, 0x50, 0x93, 0xaa, 0x1d, 0xdd, 0xb2, 0xd4, 0xa3, 0x9b, 0x2d, 0x83, 0xe9, 0x37, 0x55, 0xd6, + 0x57, 0xba, 0x3d, 0xc2, 0x88, 0xb4, 0x21, 0x86, 0x15, 0x67, 0x58, 0x11, 0xc3, 0xf2, 0x46, 0x87, + 0x74, 0x88, 0x1b, 0xa0, 0x3a, 0xff, 0xf1, 0x58, 0xb9, 0x7c, 0xe0, 0x06, 0xab, 0x2d, 0x9d, 0x1a, + 0x7e, 0xa6, 0x03, 0x62, 0x62, 0x3e, 0x8e, 0x7e, 0xcd, 0xc1, 0xe5, 0x3a, 0xed, 0xbc, 0x47, 0x4c, + 0x7c, 0x87, 0x90, 0x43, 0xe9, 0x1a, 0x9c, 0xa7, 0x06, 0x6e, 0x1b, 0xbd, 0x12, 0xd8, 0x01, 0xbb, + 0x4b, 0xd5, 0xf5, 0xe1, 0xa0, 0xb2, 0xf2, 0x50, 0xb7, 0x0e, 0x5f, 0x43, 0xfc, 0x39, 0xd2, 0x44, + 0x80, 0x74, 0x1d, 0x2e, 0x74, 0x09, 0x39, 0x6c, 0x9a, 0xed, 0x52, 0x6e, 0x07, 0xec, 0x16, 0xaa, + 0xd2, 0x70, 0x50, 0x59, 0xe5, 0xb1, 0x62, 0x00, 0x69, 0xf3, 0xce, 0x7f, 0xb5, 0xb6, 0xd4, 0x83, + 0x45, 0x7a, 0x5f, 0xef, 0x19, 0x4d, 0x62, 0xb3, 0xa6, 0x6e, 0x11, 0x1b, 0xb3, 0x52, 0xde, 0x5d, + 0xe1, 0xdd, 0x47, 0x83, 0xca, 0xdc, 0x3f, 0x83, 0xca, 0x0b, 0x1d, 0x93, 0xdd, 0xb7, 0x5b, 0xca, + 0x01, 0xb1, 0x54, 0x01, 0x9a, 0xff, 0xb9, 0x41, 0xdb, 0x0f, 0x54, 0xf6, 0xb0, 0x6b, 0x50, 0xa5, + 0x86, 0xd9, 0x70, 0x50, 0xb9, 0x18, 0x5a, 0x83, 0xa7, 0x72, 0xb2, 0x22, 0x6d, 0xd5, 0x5d, 0xa1, + 0x61, 0xb3, 0x37, 0xdd, 0x87, 0x52, 0x0b, 0xae, 0x30, 0xf2, 0xc0, 0xc0, 0x4d, 0x13, 0x37, 0x2d, + 0xbd, 0x4f, 0x4b, 0x85, 0x9d, 0xfc, 0xee, 0xf2, 0xde, 0xb6, 0xc2, 0xf3, 0x2a, 0x0e, 0x27, 0x1e, + 0x7d, 0xca, 0x5b, 0xc4, 0xc4, 0xd5, 0xe7, 0x1c, 0x2c, 0xc3, 0x41, 0xe5, 0x12, 0x5f, 0x21, 0x3c, + 0x5b, 0xac, 0x44, 0x91, 0xb6, 0xec, 0x3e, 0xae, 0xe1, 0xba, 0xde, 0xa7, 0xe8, 0x3f, 0x00, 0x2f, + 0x84, 0xf8, 0xd3, 0x0c, 0xda, 0x25, 0x98, 0x1a, 0x89, 0xf5, 0x82, 0x19, 0xd7, 0xfb, 0x01, 0x5c, + 0xf4, 0x10, 0x97, 0x72, 0x53, 0x29, 0x75, 0x41, 0x94, 0x8a, 0x7e, 0xe3, 0x32, 0xd9, 0xef, 0x9b, + 0x6c, 0xa6, 0x32, 0xe9, 0xc2, 0x35, 0x4e, 0x9b, 0x89, 0xa7, 0xa4, 0x92, 0x58, 0x3a, 0xa4, 0xad, + 0xb8, 0x4f, 0x6a, 0x58, 0x90, 0x66, 0xc0, 0x55, 0x5e, 0xbb, 0xb3, 0x51, 0x96, 0x89, 0x27, 0x50, + 0xc9, 0xf3, 0x82, 0xba, 0xcb, 0x61, 0xea, 0xc4, 0xf4, 0x80, 0xbb, 0xf3, 0xee, 0xf3, 0x86, 0xcd, + 0xea, 0x26, 0xf6, 0x75, 0xe2, 0x11, 0xe8, 0xeb, 0x24, 0xa1, 0xe0, 0x69, 0xcb, 0x24, 0x56, 0xf0, + 0x47, 0x70, 0xc9, 0x47, 0x3c, 0x25, 0x99, 0x2c, 0x7a, 0xa5, 0xa2, 0x2f, 0x01, 0x5c, 0xbf, 0xfb, + 0xb1, 0xde, 0xe5, 0x6b, 0xd5, 0xb0, 0x46, 0x6c, 0x66, 0x84, 0x25, 0x00, 0xc6, 0x4a, 0xa0, 0x0a, + 0xd7, 0x02, 0x46, 0xdb, 0x06, 0x26, 0x96, 0xab, 0x9b, 0xa5, 0xaa, 0x1c, 0xd4, 0x18, 0x0b, 0x40, + 0xda, 0x8a, 0x87, 0xe0, 0x6d, 0xf7, 0xf7, 0x9f, 0x39, 0xb8, 0x51, 0xa7, 0x1d, 0x07, 0xc9, 0x7e, + 0x5f, 0x3f, 0x60, 0x1e, 0x9c, 0x2c, 0xba, 0xdd, 0x87, 0xf3, 0x3d, 0x07, 0x3d, 0x15, 0x24, 0xbd, + 0xa8, 0x24, 0xd9, 0xae, 0x32, 0x52, 0x6d, 0xb5, 0xe0, 0x50, 0xa6, 0x89, 0xc9, 0x52, 0x3d, 0x74, + 0x28, 0x1d, 0x29, 0x9f, 0xca, 0xf6, 0x96, 0x60, 0x7b, 0x2d, 0xca, 0x76, 0x70, 0x10, 0xa5, 0x4f, + 0xe1, 0x46, 0x92, 0xde, 0x4a, 0x05, 0xb7, 0x9c, 0x7a, 0x66, 0xd1, 0x5c, 0x4a, 0xd7, 0x30, 0xd2, + 0xd6, 0x43, 0x12, 0xe6, 0x35, 0xa2, 0x6f, 0x01, 0xbc, 0x9c, 0xc4, 0xac, 0x2f, 0x68, 0x0a, 0x8b, + 0x41, 0xb2, 0x88, 0xa2, 0x6b, 0x99, 0xc1, 0x6d, 0xc5, 0xc1, 0x79, 0xc0, 0x56, 0x3d, 0x60, 0x02, + 0xd5, 0x17, 0x00, 0x4a, 0xc1, 0x46, 0x34, 0x6c, 0x76, 0x06, 0xdd, 0xbd, 0xe1, 0x19, 0x81, 0x89, + 0x27, 0x96, 0xdd, 0x79, 0xb1, 0x2d, 0x5c, 0x75, 0x7f, 0xe7, 0xe0, 0xe6, 0x28, 0x37, 0x0d, 0x9b, + 0x65, 0x91, 0xdd, 0x3b, 0x31, 0xd9, 0xed, 0x8e, 0x93, 0x9d, 0x57, 0x6d, 0x4c, 0x77, 0x9f, 0xc0, + 0x0b, 0x09, 0x87, 0x55, 0xb8, 0xe9, 0xfb, 0x99, 0xb7, 0x42, 0x4e, 0x3d, 0xff, 0x48, 0x2b, 0x06, + 0x17, 0xa2, 0xf0, 0x98, 0x3b, 0x61, 0x8f, 0x29, 0x8c, 0x53, 0x7d, 0x49, 0xa8, 0xbe, 0x18, 0x63, + 0x39, 0x6c, 0x2c, 0xdf, 0x00, 0x78, 0x25, 0x91, 0xdb, 0xb0, 0x93, 0xfa, 0xe8, 0xa6, 0xe3, 0xa4, + 0xb1, 0x74, 0x9e, 0xcb, 0x78, 0x4e, 0x8a, 0x7e, 0xcf, 0xc1, 0x6d, 0x71, 0xf7, 0x73, 0x5c, 0xcc, + 0xe8, 0xe1, 0xb3, 0x58, 0x4d, 0xa6, 0x2b, 0x72, 0xfa, 0x86, 0x12, 0x34, 0x2a, 0xd3, 0x33, 0x94, + 0xa4, 0x9c, 0x48, 0x5b, 0xf7, 0x3a, 0x96, 0xc0, 0x50, 0x7e, 0x04, 0xf0, 0x6a, 0x2a, 0x89, 0x61, + 0x57, 0x49, 0x69, 0xa7, 0xce, 0xec, 0x2a, 0xf1, 0x7c, 0x23, 0xfd, 0x14, 0xfa, 0x29, 0x1f, 0xd9, + 0xdf, 0xbb, 0xce, 0xe8, 0x99, 0xce, 0x74, 0xa6, 0xfd, 0x7d, 0x7d, 0xc4, 0x87, 0xf8, 0x99, 0xdd, + 0x1e, 0x0e, 0x2a, 0x9b, 0x31, 0x61, 0x26, 0xd9, 0x50, 0x22, 0x57, 0x85, 0x19, 0x73, 0x95, 0x66, + 0x37, 0xe7, 0x9e, 0x86, 0xdd, 0xa0, 0xef, 0xa2, 0x1a, 0x8a, 0x6e, 0xd4, 0x33, 0x34, 0x88, 0x9f, + 0xf3, 0xb0, 0x24, 0x9a, 0xbe, 0x18, 0xae, 0x19, 0xfa, 0x43, 0x42, 0xff, 0x94, 0xcf, 0xd8, 0x3f, + 0x25, 0x75, 0xa5, 0x85, 0xd9, 0xb6, 0xe1, 0x69, 0x7d, 0xcd, 0xb9, 0xa7, 0xd4, 0xd7, 0xfc, 0x00, + 0xe0, 0x4e, 0xda, 0x56, 0x3d, 0xdb, 0xde, 0xe6, 0x8f, 0x1c, 0x94, 0x43, 0xc8, 0xc2, 0x06, 0x39, + 0x4b, 0x1b, 0x8a, 0x5c, 0xe1, 0xf9, 0x29, 0x5c, 0xe1, 0x8e, 0x45, 0xf8, 0x2a, 0x08, 0x59, 0x44, + 0xe1, 0xc9, 0x2c, 0x22, 0x21, 0x25, 0xd2, 0x8a, 0x42, 0x5c, 0x81, 0x45, 0x7c, 0x0f, 0x20, 0x4a, + 0x67, 0x71, 0x86, 0xaf, 0x63, 0x63, 0x84, 0xbf, 0xf7, 0xcb, 0x02, 0xcc, 0xd7, 0x69, 0x47, 0xba, + 0x07, 0x17, 0xfd, 0x8f, 0x30, 0x57, 0x93, 0x7b, 0xbe, 0xd0, 0x77, 0x06, 0xf9, 0xda, 0xd8, 0x10, + 0xbf, 0xa6, 0x7b, 0x70, 0xd1, 0x7f, 0x6f, 0x4f, 0xcf, 0xec, 0x85, 0x9c, 0x92, 0x79, 0xe4, 0xe5, + 0x95, 0xf2, 0x97, 0xbd, 0xe8, 0x2b, 0xd6, 0x4b, 0xa9, 0xf3, 0x47, 0x62, 0xe5, 0xbd, 0xc9, 0x63, + 0xfd, 0x45, 0x8f, 0x78, 0xab, 0x1f, 0xeb, 0xb0, 0xaf, 0x4f, 0x9a, 0xa9, 0x61, 0x33, 0xf9, 0x56, + 0x86, 0x60, 0x7f, 0xdd, 0xcf, 0x01, 0xbc, 0x98, 0xd2, 0xea, 0xa9, 0xa7, 0x6e, 0xc6, 0xe8, 0x04, + 0xf9, 0x76, 0xc6, 0x09, 0x89, 0x20, 0x62, 0xfd, 0xc8, 0x78, 0x10, 0xd1, 0x09, 0x13, 0x80, 0x48, + 0xb9, 0x48, 0xbf, 0x02, 0x70, 0x2b, 0xcd, 0x8e, 0x5e, 0x3e, 0x55, 0x3d, 0x09, 0x33, 0xe4, 0x57, + 0xb3, 0xce, 0xf0, 0x71, 0x7c, 0x06, 0x37, 0x93, 0xaf, 0x56, 0x65, 0x6c, 0xca, 0x48, 0xbc, 0xfc, + 0x4a, 0xb6, 0x78, 0x0f, 0x40, 0xb5, 0xf6, 0xe8, 0xb8, 0x0c, 0x1e, 0x1f, 0x97, 0xc1, 0xbf, 0xc7, + 0x65, 0xf0, 0xf5, 0x49, 0x79, 0xee, 0xf1, 0x49, 0x79, 0xee, 0xaf, 0x93, 0xf2, 0xdc, 0x87, 0x6a, + 0xc8, 0x26, 0x44, 0xee, 0x1b, 0x87, 0x7a, 0x8b, 0x7a, 0x3f, 0xd4, 0xa3, 0xdb, 0x6a, 0x9f, 0x7f, + 0xde, 0x75, 0x3d, 0xa3, 0x35, 0xef, 0x7e, 0x8e, 0xbd, 0xf5, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x06, 0xae, 0x89, 0x86, 0xfb, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1436,6 +1455,30 @@ func (m *MsgJoinPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.TokenIn) > 0 { + for iNdEx := len(m.TokenIn) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size := m.ShareOutAmount.Size() + i -= size + if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -1518,6 +1561,30 @@ func (m *MsgExitPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.TokenOut) > 0 { + for iNdEx := len(m.TokenOut) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size := m.ShareInAmount.Size() + i -= size + if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -2192,6 +2259,14 @@ func (m *MsgJoinPoolResponse) Size() (n int) { } var l int _ = l + l = m.ShareOutAmount.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.TokenIn) > 0 { + for _, e := range m.TokenIn { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -2225,6 +2300,14 @@ func (m *MsgExitPoolResponse) Size() (n int) { } var l int _ = l + l = m.ShareInAmount.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.TokenOut) > 0 { + for _, e := range m.TokenOut { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -2664,6 +2747,74 @@ func (m *MsgJoinPoolResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgJoinPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenIn = append(m.TokenIn, types.Coin{}) + if err := m.TokenIn[len(m.TokenIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -2883,6 +3034,74 @@ func (m *MsgExitPoolResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgExitPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenOut = append(m.TokenOut, types.Coin{}) + if err := m.TokenOut[len(m.TokenOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) From a3045b0cba8d9310f478054a4adac9ea6d2c10c4 Mon Sep 17 00:00:00 2001 From: Ehsan-saradar Date: Mon, 27 Jun 2022 12:21:35 +0430 Subject: [PATCH 2/7] Fix yaml tags --- proto/osmosis/gamm/v1beta1/tx.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/proto/osmosis/gamm/v1beta1/tx.proto b/proto/osmosis/gamm/v1beta1/tx.proto index aa992343962..ceb8019b6ae 100644 --- a/proto/osmosis/gamm/v1beta1/tx.proto +++ b/proto/osmosis/gamm/v1beta1/tx.proto @@ -42,11 +42,11 @@ message MsgJoinPool { message MsgJoinPoolResponse { string share_out_amount = 1 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (gogoproto.moretags) = "yaml:\"pool_amount_out\"", + (gogoproto.moretags) = "yaml:\"share_out_amount\"", (gogoproto.nullable) = false ]; repeated cosmos.base.v1beta1.Coin token_in = 2 [ - (gogoproto.moretags) = "yaml:\"token_in_max_amounts\"", + (gogoproto.moretags) = "yaml:\"token_in\"", (gogoproto.nullable) = false ]; } From 8f9b40c0efe1ed9dce979f7f593917284fc4c7c9 Mon Sep 17 00:00:00 2001 From: Ehsan-saradar Date: Mon, 27 Jun 2022 12:24:49 +0430 Subject: [PATCH 3/7] Fix yaml tags of MsgExitPoolResponse --- go.mod | 5 - go.sum | 4 - proto/osmosis/gamm/v1beta1/tx.proto | 4 +- x/gamm/types/tx.pb.go | 149 ++++++++++++++-------------- 4 files changed, 76 insertions(+), 86 deletions(-) diff --git a/go.mod b/go.mod index 33d52f3574c..5e376ba6bfd 100644 --- a/go.mod +++ b/go.mod @@ -31,11 +31,6 @@ require ( mvdan.cc/gofumpt v0.3.1 ) -require ( - github.com/ghodss/yaml v1.0.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.3 // indirect -) - require ( 4d63.com/gochecknoglobals v0.1.0 // indirect filippo.io/edwards25519 v1.0.0-beta.2 // indirect diff --git a/go.sum b/go.sum index e500c75f4bf..0f030ae4b7d 100644 --- a/go.sum +++ b/go.sum @@ -408,7 +408,6 @@ github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3n github.com/fzipp/gocyclo v0.5.1 h1:L66amyuYogbxl0j2U+vGqJXusPF2IkduvXLnYD5TFgw= github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -488,7 +487,6 @@ github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= @@ -669,8 +667,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.3 h1:BGNSrTRW4rwfhJiFwvwF4XQ0Y72Jj9YEgxVrtovbD5o= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.3/go.mod h1:VHn7KgNsRriXa4mcgtkpR00OXyQY6g67JWMvn+R27A4= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= diff --git a/proto/osmosis/gamm/v1beta1/tx.proto b/proto/osmosis/gamm/v1beta1/tx.proto index ceb8019b6ae..32f344d1623 100644 --- a/proto/osmosis/gamm/v1beta1/tx.proto +++ b/proto/osmosis/gamm/v1beta1/tx.proto @@ -70,11 +70,11 @@ message MsgExitPool { message MsgExitPoolResponse { string share_in_amount = 1 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (gogoproto.moretags) = "yaml:\"pool_amount_out\"", + (gogoproto.moretags) = "yaml:\"share_in_amount\"", (gogoproto.nullable) = false ]; repeated cosmos.base.v1beta1.Coin token_out = 2 [ - (gogoproto.moretags) = "yaml:\"token_in_max_amounts\"", + (gogoproto.moretags) = "yaml:\"token_out\"", (gogoproto.nullable) = false ]; } diff --git a/x/gamm/types/tx.pb.go b/x/gamm/types/tx.pb.go index 8f7d964e9e4..aa62af6f2ca 100644 --- a/x/gamm/types/tx.pb.go +++ b/x/gamm/types/tx.pb.go @@ -94,8 +94,8 @@ func (m *MsgJoinPool) GetTokenInMaxs() []types.Coin { } type MsgJoinPoolResponse struct { - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"pool_amount_out"` - TokenIn []types.Coin `protobuf:"bytes,2,rep,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in_max_amounts"` + ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` + TokenIn []types.Coin `protobuf:"bytes,2,rep,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` } func (m *MsgJoinPoolResponse) Reset() { *m = MsgJoinPoolResponse{} } @@ -201,8 +201,8 @@ func (m *MsgExitPool) GetTokenOutMins() []types.Coin { } type MsgExitPoolResponse struct { - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"pool_amount_out"` - TokenOut []types.Coin `protobuf:"bytes,2,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_in_max_amounts"` + ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` + TokenOut []types.Coin `protobuf:"bytes,2,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` } func (m *MsgExitPoolResponse) Reset() { *m = MsgExitPoolResponse{} } @@ -970,78 +970,77 @@ func init() { func init() { proto.RegisterFile("osmosis/gamm/v1beta1/tx.proto", fileDescriptor_cfc8fd3ac7df3247) } var fileDescriptor_cfc8fd3ac7df3247 = []byte{ - // 1128 bytes of a gzipped FileDescriptorProto + // 1113 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xd8, 0x6e, 0x3e, 0x26, 0x4d, 0xe2, 0x6c, 0x93, 0xc6, 0xd9, 0xb6, 0x76, 0x3a, 0x20, - 0x48, 0xa9, 0xba, 0x4b, 0x53, 0x89, 0x22, 0x2e, 0x80, 0x21, 0x08, 0x23, 0x2c, 0x57, 0xdb, 0x4b, - 0x81, 0x83, 0xb5, 0x8e, 0x57, 0xee, 0xaa, 0xd9, 0x19, 0xcb, 0x33, 0x1b, 0x5c, 0x21, 0x81, 0xc4, - 0xc7, 0x1d, 0x84, 0xf8, 0xf8, 0x05, 0x88, 0xbf, 0xc0, 0x01, 0x0e, 0x70, 0xe9, 0xb1, 0x37, 0x3e, - 0x0e, 0x16, 0x4a, 0xf8, 0x05, 0xfe, 0x05, 0x68, 0x77, 0x66, 0x3f, 0xbd, 0x1b, 0x7b, 0x53, 0xbb, - 0x3d, 0x25, 0xde, 0x79, 0xe7, 0x9d, 0xe7, 0x7d, 0xe6, 0x99, 0x67, 0xde, 0x5d, 0x78, 0x85, 0x50, - 0x8b, 0x50, 0x93, 0xaa, 0x1d, 0xdd, 0xb2, 0xd4, 0xa3, 0x9b, 0x2d, 0x83, 0xe9, 0x37, 0x55, 0xd6, - 0x57, 0xba, 0x3d, 0xc2, 0x88, 0xb4, 0x21, 0x86, 0x15, 0x67, 0x58, 0x11, 0xc3, 0xf2, 0x46, 0x87, - 0x74, 0x88, 0x1b, 0xa0, 0x3a, 0xff, 0xf1, 0x58, 0xb9, 0x7c, 0xe0, 0x06, 0xab, 0x2d, 0x9d, 0x1a, - 0x7e, 0xa6, 0x03, 0x62, 0x62, 0x3e, 0x8e, 0x7e, 0xcd, 0xc1, 0xe5, 0x3a, 0xed, 0xbc, 0x47, 0x4c, - 0x7c, 0x87, 0x90, 0x43, 0xe9, 0x1a, 0x9c, 0xa7, 0x06, 0x6e, 0x1b, 0xbd, 0x12, 0xd8, 0x01, 0xbb, - 0x4b, 0xd5, 0xf5, 0xe1, 0xa0, 0xb2, 0xf2, 0x50, 0xb7, 0x0e, 0x5f, 0x43, 0xfc, 0x39, 0xd2, 0x44, - 0x80, 0x74, 0x1d, 0x2e, 0x74, 0x09, 0x39, 0x6c, 0x9a, 0xed, 0x52, 0x6e, 0x07, 0xec, 0x16, 0xaa, - 0xd2, 0x70, 0x50, 0x59, 0xe5, 0xb1, 0x62, 0x00, 0x69, 0xf3, 0xce, 0x7f, 0xb5, 0xb6, 0xd4, 0x83, - 0x45, 0x7a, 0x5f, 0xef, 0x19, 0x4d, 0x62, 0xb3, 0xa6, 0x6e, 0x11, 0x1b, 0xb3, 0x52, 0xde, 0x5d, - 0xe1, 0xdd, 0x47, 0x83, 0xca, 0xdc, 0x3f, 0x83, 0xca, 0x0b, 0x1d, 0x93, 0xdd, 0xb7, 0x5b, 0xca, - 0x01, 0xb1, 0x54, 0x01, 0x9a, 0xff, 0xb9, 0x41, 0xdb, 0x0f, 0x54, 0xf6, 0xb0, 0x6b, 0x50, 0xa5, - 0x86, 0xd9, 0x70, 0x50, 0xb9, 0x18, 0x5a, 0x83, 0xa7, 0x72, 0xb2, 0x22, 0x6d, 0xd5, 0x5d, 0xa1, - 0x61, 0xb3, 0x37, 0xdd, 0x87, 0x52, 0x0b, 0xae, 0x30, 0xf2, 0xc0, 0xc0, 0x4d, 0x13, 0x37, 0x2d, - 0xbd, 0x4f, 0x4b, 0x85, 0x9d, 0xfc, 0xee, 0xf2, 0xde, 0xb6, 0xc2, 0xf3, 0x2a, 0x0e, 0x27, 0x1e, - 0x7d, 0xca, 0x5b, 0xc4, 0xc4, 0xd5, 0xe7, 0x1c, 0x2c, 0xc3, 0x41, 0xe5, 0x12, 0x5f, 0x21, 0x3c, - 0x5b, 0xac, 0x44, 0x91, 0xb6, 0xec, 0x3e, 0xae, 0xe1, 0xba, 0xde, 0xa7, 0xe8, 0x3f, 0x00, 0x2f, - 0x84, 0xf8, 0xd3, 0x0c, 0xda, 0x25, 0x98, 0x1a, 0x89, 0xf5, 0x82, 0x19, 0xd7, 0xfb, 0x01, 0x5c, - 0xf4, 0x10, 0x97, 0x72, 0x53, 0x29, 0x75, 0x41, 0x94, 0x8a, 0x7e, 0xe3, 0x32, 0xd9, 0xef, 0x9b, - 0x6c, 0xa6, 0x32, 0xe9, 0xc2, 0x35, 0x4e, 0x9b, 0x89, 0xa7, 0xa4, 0x92, 0x58, 0x3a, 0xa4, 0xad, - 0xb8, 0x4f, 0x6a, 0x58, 0x90, 0x66, 0xc0, 0x55, 0x5e, 0xbb, 0xb3, 0x51, 0x96, 0x89, 0x27, 0x50, - 0xc9, 0xf3, 0x82, 0xba, 0xcb, 0x61, 0xea, 0xc4, 0xf4, 0x80, 0xbb, 0xf3, 0xee, 0xf3, 0x86, 0xcd, - 0xea, 0x26, 0xf6, 0x75, 0xe2, 0x11, 0xe8, 0xeb, 0x24, 0xa1, 0xe0, 0x69, 0xcb, 0x24, 0x56, 0xf0, - 0x47, 0x70, 0xc9, 0x47, 0x3c, 0x25, 0x99, 0x2c, 0x7a, 0xa5, 0xa2, 0x2f, 0x01, 0x5c, 0xbf, 0xfb, - 0xb1, 0xde, 0xe5, 0x6b, 0xd5, 0xb0, 0x46, 0x6c, 0x66, 0x84, 0x25, 0x00, 0xc6, 0x4a, 0xa0, 0x0a, - 0xd7, 0x02, 0x46, 0xdb, 0x06, 0x26, 0x96, 0xab, 0x9b, 0xa5, 0xaa, 0x1c, 0xd4, 0x18, 0x0b, 0x40, - 0xda, 0x8a, 0x87, 0xe0, 0x6d, 0xf7, 0xf7, 0x9f, 0x39, 0xb8, 0x51, 0xa7, 0x1d, 0x07, 0xc9, 0x7e, - 0x5f, 0x3f, 0x60, 0x1e, 0x9c, 0x2c, 0xba, 0xdd, 0x87, 0xf3, 0x3d, 0x07, 0x3d, 0x15, 0x24, 0xbd, - 0xa8, 0x24, 0xd9, 0xae, 0x32, 0x52, 0x6d, 0xb5, 0xe0, 0x50, 0xa6, 0x89, 0xc9, 0x52, 0x3d, 0x74, - 0x28, 0x1d, 0x29, 0x9f, 0xca, 0xf6, 0x96, 0x60, 0x7b, 0x2d, 0xca, 0x76, 0x70, 0x10, 0xa5, 0x4f, - 0xe1, 0x46, 0x92, 0xde, 0x4a, 0x05, 0xb7, 0x9c, 0x7a, 0x66, 0xd1, 0x5c, 0x4a, 0xd7, 0x30, 0xd2, - 0xd6, 0x43, 0x12, 0xe6, 0x35, 0xa2, 0x6f, 0x01, 0xbc, 0x9c, 0xc4, 0xac, 0x2f, 0x68, 0x0a, 0x8b, - 0x41, 0xb2, 0x88, 0xa2, 0x6b, 0x99, 0xc1, 0x6d, 0xc5, 0xc1, 0x79, 0xc0, 0x56, 0x3d, 0x60, 0x02, - 0xd5, 0x17, 0x00, 0x4a, 0xc1, 0x46, 0x34, 0x6c, 0x76, 0x06, 0xdd, 0xbd, 0xe1, 0x19, 0x81, 0x89, - 0x27, 0x96, 0xdd, 0x79, 0xb1, 0x2d, 0x5c, 0x75, 0x7f, 0xe7, 0xe0, 0xe6, 0x28, 0x37, 0x0d, 0x9b, - 0x65, 0x91, 0xdd, 0x3b, 0x31, 0xd9, 0xed, 0x8e, 0x93, 0x9d, 0x57, 0x6d, 0x4c, 0x77, 0x9f, 0xc0, - 0x0b, 0x09, 0x87, 0x55, 0xb8, 0xe9, 0xfb, 0x99, 0xb7, 0x42, 0x4e, 0x3d, 0xff, 0x48, 0x2b, 0x06, - 0x17, 0xa2, 0xf0, 0x98, 0x3b, 0x61, 0x8f, 0x29, 0x8c, 0x53, 0x7d, 0x49, 0xa8, 0xbe, 0x18, 0x63, - 0x39, 0x6c, 0x2c, 0xdf, 0x00, 0x78, 0x25, 0x91, 0xdb, 0xb0, 0x93, 0xfa, 0xe8, 0xa6, 0xe3, 0xa4, - 0xb1, 0x74, 0x9e, 0xcb, 0x78, 0x4e, 0x8a, 0x7e, 0xcf, 0xc1, 0x6d, 0x71, 0xf7, 0x73, 0x5c, 0xcc, - 0xe8, 0xe1, 0xb3, 0x58, 0x4d, 0xa6, 0x2b, 0x72, 0xfa, 0x86, 0x12, 0x34, 0x2a, 0xd3, 0x33, 0x94, - 0xa4, 0x9c, 0x48, 0x5b, 0xf7, 0x3a, 0x96, 0xc0, 0x50, 0x7e, 0x04, 0xf0, 0x6a, 0x2a, 0x89, 0x61, - 0x57, 0x49, 0x69, 0xa7, 0xce, 0xec, 0x2a, 0xf1, 0x7c, 0x23, 0xfd, 0x14, 0xfa, 0x29, 0x1f, 0xd9, - 0xdf, 0xbb, 0xce, 0xe8, 0x99, 0xce, 0x74, 0xa6, 0xfd, 0x7d, 0x7d, 0xc4, 0x87, 0xf8, 0x99, 0xdd, - 0x1e, 0x0e, 0x2a, 0x9b, 0x31, 0x61, 0x26, 0xd9, 0x50, 0x22, 0x57, 0x85, 0x19, 0x73, 0x95, 0x66, - 0x37, 0xe7, 0x9e, 0x86, 0xdd, 0xa0, 0xef, 0xa2, 0x1a, 0x8a, 0x6e, 0xd4, 0x33, 0x34, 0x88, 0x9f, - 0xf3, 0xb0, 0x24, 0x9a, 0xbe, 0x18, 0xae, 0x19, 0xfa, 0x43, 0x42, 0xff, 0x94, 0xcf, 0xd8, 0x3f, - 0x25, 0x75, 0xa5, 0x85, 0xd9, 0xb6, 0xe1, 0x69, 0x7d, 0xcd, 0xb9, 0xa7, 0xd4, 0xd7, 0xfc, 0x00, - 0xe0, 0x4e, 0xda, 0x56, 0x3d, 0xdb, 0xde, 0xe6, 0x8f, 0x1c, 0x94, 0x43, 0xc8, 0xc2, 0x06, 0x39, - 0x4b, 0x1b, 0x8a, 0x5c, 0xe1, 0xf9, 0x29, 0x5c, 0xe1, 0x8e, 0x45, 0xf8, 0x2a, 0x08, 0x59, 0x44, - 0xe1, 0xc9, 0x2c, 0x22, 0x21, 0x25, 0xd2, 0x8a, 0x42, 0x5c, 0x81, 0x45, 0x7c, 0x0f, 0x20, 0x4a, - 0x67, 0x71, 0x86, 0xaf, 0x63, 0x63, 0x84, 0xbf, 0xf7, 0xcb, 0x02, 0xcc, 0xd7, 0x69, 0x47, 0xba, - 0x07, 0x17, 0xfd, 0x8f, 0x30, 0x57, 0x93, 0x7b, 0xbe, 0xd0, 0x77, 0x06, 0xf9, 0xda, 0xd8, 0x10, - 0xbf, 0xa6, 0x7b, 0x70, 0xd1, 0x7f, 0x6f, 0x4f, 0xcf, 0xec, 0x85, 0x9c, 0x92, 0x79, 0xe4, 0xe5, - 0x95, 0xf2, 0x97, 0xbd, 0xe8, 0x2b, 0xd6, 0x4b, 0xa9, 0xf3, 0x47, 0x62, 0xe5, 0xbd, 0xc9, 0x63, - 0xfd, 0x45, 0x8f, 0x78, 0xab, 0x1f, 0xeb, 0xb0, 0xaf, 0x4f, 0x9a, 0xa9, 0x61, 0x33, 0xf9, 0x56, - 0x86, 0x60, 0x7f, 0xdd, 0xcf, 0x01, 0xbc, 0x98, 0xd2, 0xea, 0xa9, 0xa7, 0x6e, 0xc6, 0xe8, 0x04, - 0xf9, 0x76, 0xc6, 0x09, 0x89, 0x20, 0x62, 0xfd, 0xc8, 0x78, 0x10, 0xd1, 0x09, 0x13, 0x80, 0x48, - 0xb9, 0x48, 0xbf, 0x02, 0x70, 0x2b, 0xcd, 0x8e, 0x5e, 0x3e, 0x55, 0x3d, 0x09, 0x33, 0xe4, 0x57, - 0xb3, 0xce, 0xf0, 0x71, 0x7c, 0x06, 0x37, 0x93, 0xaf, 0x56, 0x65, 0x6c, 0xca, 0x48, 0xbc, 0xfc, - 0x4a, 0xb6, 0x78, 0x0f, 0x40, 0xb5, 0xf6, 0xe8, 0xb8, 0x0c, 0x1e, 0x1f, 0x97, 0xc1, 0xbf, 0xc7, - 0x65, 0xf0, 0xf5, 0x49, 0x79, 0xee, 0xf1, 0x49, 0x79, 0xee, 0xaf, 0x93, 0xf2, 0xdc, 0x87, 0x6a, - 0xc8, 0x26, 0x44, 0xee, 0x1b, 0x87, 0x7a, 0x8b, 0x7a, 0x3f, 0xd4, 0xa3, 0xdb, 0x6a, 0x9f, 0x7f, - 0xde, 0x75, 0x3d, 0xa3, 0x35, 0xef, 0x7e, 0x8e, 0xbd, 0xf5, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x06, 0xae, 0x89, 0x86, 0xfb, 0x15, 0x00, 0x00, + 0x18, 0xce, 0xd8, 0x6e, 0x3e, 0x26, 0xcd, 0xd7, 0x36, 0x69, 0x9c, 0x6d, 0x6b, 0xa7, 0x03, 0x82, + 0x94, 0xaa, 0xbb, 0x34, 0x95, 0x28, 0xe2, 0x02, 0x18, 0x82, 0x30, 0xc2, 0x4a, 0xb5, 0xbd, 0x54, + 0x5c, 0xac, 0x75, 0xbc, 0x72, 0x57, 0x8d, 0x67, 0x2c, 0xcf, 0x6c, 0x70, 0x85, 0x04, 0x12, 0x1f, + 0x77, 0x10, 0xe2, 0xe3, 0x17, 0x20, 0xfe, 0x02, 0x07, 0x38, 0xc0, 0xa5, 0xc7, 0xde, 0xa0, 0x1c, + 0x2c, 0x94, 0xfc, 0x03, 0xff, 0x02, 0xb4, 0x3b, 0xb3, 0x9f, 0x9e, 0x8d, 0xbd, 0xa9, 0xdd, 0x9c, + 0x12, 0xcf, 0xbc, 0xf3, 0xce, 0xfb, 0xbc, 0xef, 0x33, 0xcf, 0xbc, 0xb3, 0xf0, 0x1a, 0xa1, 0x6d, + 0x42, 0x6d, 0xaa, 0xb7, 0xcc, 0x76, 0x5b, 0x3f, 0xba, 0xdd, 0xb0, 0x98, 0x79, 0x5b, 0x67, 0x3d, + 0xad, 0xd3, 0x25, 0x8c, 0x28, 0xeb, 0x62, 0x5a, 0x73, 0xa7, 0x35, 0x31, 0xad, 0xae, 0xb7, 0x48, + 0x8b, 0x78, 0x06, 0xba, 0xfb, 0x1f, 0xb7, 0x55, 0x4b, 0x07, 0x9e, 0xb1, 0xde, 0x30, 0xa9, 0x15, + 0x78, 0x3a, 0x20, 0x36, 0xe6, 0xf3, 0xe8, 0xf7, 0x1c, 0x5c, 0xac, 0xd1, 0xd6, 0x47, 0xc4, 0xc6, + 0xf7, 0x08, 0x39, 0x54, 0x6e, 0xc0, 0x59, 0x6a, 0xe1, 0xa6, 0xd5, 0x2d, 0x82, 0x6d, 0xb0, 0xb3, + 0x50, 0x59, 0x1b, 0xf4, 0xcb, 0x4b, 0x8f, 0xcd, 0xf6, 0xe1, 0x5b, 0x88, 0x8f, 0x23, 0x43, 0x18, + 0x28, 0x37, 0xe1, 0x5c, 0x87, 0x90, 0xc3, 0xba, 0xdd, 0x2c, 0xe6, 0xb6, 0xc1, 0x4e, 0xa1, 0xa2, + 0x0c, 0xfa, 0xe5, 0x65, 0x6e, 0x2b, 0x26, 0x90, 0x31, 0xeb, 0xfe, 0x57, 0x6d, 0x2a, 0x5d, 0xb8, + 0x4a, 0x1f, 0x9a, 0x5d, 0xab, 0x4e, 0x1c, 0x56, 0x37, 0xdb, 0xc4, 0xc1, 0xac, 0x98, 0xf7, 0x76, + 0xf8, 0xf0, 0x49, 0xbf, 0x3c, 0xf3, 0x6f, 0xbf, 0xfc, 0x4a, 0xcb, 0x66, 0x0f, 0x9d, 0x86, 0x76, + 0x40, 0xda, 0xba, 0x08, 0x9a, 0xff, 0xb9, 0x45, 0x9b, 0x8f, 0x74, 0xf6, 0xb8, 0x63, 0x51, 0xad, + 0x8a, 0xd9, 0xa0, 0x5f, 0xbe, 0x1c, 0xd9, 0x83, 0xbb, 0x72, 0xbd, 0x22, 0x63, 0xd9, 0xdb, 0x61, + 0xdf, 0x61, 0xef, 0x7a, 0x83, 0x4a, 0x03, 0x2e, 0x31, 0xf2, 0xc8, 0xc2, 0x75, 0x1b, 0xd7, 0xdb, + 0x66, 0x8f, 0x16, 0x0b, 0xdb, 0xf9, 0x9d, 0xc5, 0xdd, 0x2d, 0x8d, 0xfb, 0xd5, 0xdc, 0x9c, 0xf8, + 0xe9, 0xd3, 0xde, 0x23, 0x36, 0xae, 0xbc, 0xe4, 0xc6, 0x32, 0xe8, 0x97, 0xaf, 0xf0, 0x1d, 0xa2, + 0xab, 0xc5, 0x4e, 0x14, 0x19, 0x8b, 0xde, 0x70, 0x15, 0xd7, 0xcc, 0x1e, 0x45, 0xcf, 0x00, 0xbc, + 0x14, 0xc9, 0x9f, 0x61, 0xd1, 0x0e, 0xc1, 0xd4, 0x52, 0xa8, 0x04, 0x2f, 0xcf, 0x68, 0x35, 0x33, + 0xde, 0x4d, 0x91, 0xff, 0x84, 0xbf, 0x61, 0xc0, 0x35, 0x38, 0xef, 0x87, 0x5c, 0xcc, 0x8d, 0xc2, + 0xba, 0x29, 0xb0, 0xae, 0xc4, 0xb1, 0x22, 0x63, 0x4e, 0xe0, 0x43, 0x7f, 0x70, 0x6e, 0xec, 0xf5, + 0x6c, 0x36, 0x55, 0x6e, 0x74, 0xe0, 0x0a, 0xc7, 0x66, 0xe3, 0x09, 0x51, 0x23, 0xe1, 0x0e, 0x19, + 0x4b, 0xde, 0x48, 0x15, 0x8b, 0x44, 0x59, 0x70, 0x99, 0xe3, 0x75, 0xb3, 0xd9, 0xb6, 0xf1, 0x18, + 0xd4, 0x78, 0x59, 0xa4, 0xeb, 0x6a, 0x34, 0x5d, 0x62, 0x79, 0xc8, 0x8d, 0x8b, 0xde, 0xf8, 0xbe, + 0xc3, 0x6a, 0x36, 0x0e, 0xc8, 0xe1, 0x27, 0x30, 0x20, 0x87, 0x04, 0x30, 0x98, 0x2e, 0xe0, 0x7b, + 0x70, 0x21, 0x88, 0x78, 0x34, 0x35, 0x8a, 0x02, 0xeb, 0x6a, 0x02, 0x2b, 0x32, 0xe6, 0x7d, 0x7c, + 0xe8, 0x6b, 0x00, 0xd7, 0xee, 0x7f, 0x6a, 0x76, 0xf8, 0x06, 0x55, 0x6c, 0x10, 0x87, 0x59, 0xd1, + 0xba, 0x83, 0x91, 0x75, 0xaf, 0xc0, 0x95, 0x30, 0x8d, 0x4d, 0x0b, 0x93, 0xb6, 0x47, 0x96, 0x85, + 0x8a, 0x1a, 0x02, 0x4b, 0x18, 0x20, 0x63, 0xc9, 0x8f, 0xe0, 0x7d, 0xef, 0xf7, 0xdf, 0x39, 0xb8, + 0x5e, 0xa3, 0x2d, 0x37, 0x92, 0xbd, 0x9e, 0x79, 0xc0, 0xfc, 0x70, 0xb2, 0x90, 0x75, 0x0f, 0xce, + 0x76, 0xdd, 0xe8, 0xa9, 0xc8, 0xcc, 0xab, 0x9a, 0x4c, 0x60, 0xb5, 0x21, 0xb4, 0x95, 0x82, 0x9b, + 0x27, 0x43, 0x2c, 0x8e, 0x9d, 0x3e, 0x97, 0xbf, 0xcf, 0x77, 0xfa, 0x94, 0xcf, 0xe1, 0xba, 0x8c, + 0x64, 0xc5, 0x82, 0x07, 0xa7, 0x96, 0x99, 0x29, 0x57, 0xd2, 0x89, 0x8b, 0x8c, 0xb5, 0x08, 0x6f, + 0x39, 0x46, 0xf4, 0x3d, 0x80, 0x57, 0x65, 0x99, 0x8d, 0x4a, 0x5c, 0xe8, 0x6c, 0x32, 0x12, 0x97, + 0xf4, 0x87, 0x8c, 0x65, 0x3f, 0x30, 0x11, 0xd5, 0x57, 0x00, 0x2a, 0x61, 0x21, 0xf6, 0x1d, 0x76, + 0x06, 0xde, 0xbd, 0xe3, 0x9f, 0x7e, 0x1b, 0x8f, 0x4d, 0xbb, 0x8b, 0xa2, 0x2c, 0x9c, 0x75, 0xcf, + 0x72, 0x70, 0x63, 0x38, 0x37, 0xfb, 0x0e, 0xcb, 0x42, 0xbb, 0x0f, 0x12, 0xb4, 0xdb, 0x19, 0x45, + 0x3b, 0x1f, 0x6d, 0x82, 0x77, 0x9f, 0xc1, 0x4b, 0x92, 0x8b, 0x4a, 0x48, 0xe8, 0xc7, 0x99, 0x4b, + 0xa1, 0xa6, 0xde, 0x7d, 0xc8, 0x58, 0x0d, 0xaf, 0x3e, 0x99, 0xb0, 0x14, 0x46, 0xb1, 0x7e, 0x1c, + 0x61, 0xf9, 0x0e, 0xc0, 0x6b, 0xd2, 0xdc, 0x46, 0xe5, 0x33, 0x88, 0x6e, 0x32, 0xf2, 0x99, 0x70, + 0xe7, 0xab, 0x8c, 0x2f, 0x9f, 0xe8, 0xcf, 0x1c, 0xdc, 0x12, 0xb7, 0x3c, 0x8f, 0x8b, 0x59, 0x5d, + 0x7c, 0x16, 0xa9, 0xc9, 0x74, 0x2f, 0x4e, 0x5e, 0x50, 0xc2, 0x16, 0x62, 0x72, 0x82, 0x22, 0xf3, + 0x89, 0x8c, 0x35, 0xbf, 0x35, 0x09, 0x05, 0xe5, 0x67, 0x00, 0xaf, 0xa7, 0x26, 0xf1, 0x5c, 0x1b, + 0x27, 0xf4, 0x4b, 0x3e, 0x56, 0xdf, 0xfb, 0xee, 0xec, 0x99, 0xce, 0x74, 0xa6, 0xfa, 0xbe, 0x3d, + 0xa4, 0x43, 0xfc, 0xcc, 0x6e, 0x0d, 0xfa, 0xe5, 0x8d, 0x04, 0x31, 0x65, 0x32, 0x24, 0xcd, 0x55, + 0x61, 0xda, 0x4d, 0x66, 0x8a, 0xdc, 0x5c, 0x78, 0x11, 0x72, 0x83, 0x7e, 0x88, 0x73, 0x28, 0x5e, + 0xa8, 0x73, 0x14, 0x88, 0x5f, 0xf3, 0xb0, 0x28, 0x3a, 0xbd, 0x44, 0x5c, 0x53, 0xd4, 0x07, 0x49, + 0xff, 0x94, 0xcf, 0xd8, 0x3f, 0xc9, 0x5a, 0xd1, 0xc2, 0x74, 0x5b, 0xd1, 0xb4, 0xbe, 0xe6, 0xc2, + 0x0b, 0xea, 0x6b, 0x7e, 0x02, 0x70, 0x3b, 0xad, 0x54, 0xe7, 0xdb, 0xdb, 0xfc, 0x95, 0x83, 0x6a, + 0x24, 0xb2, 0xa8, 0x40, 0x4e, 0x53, 0x86, 0x62, 0x57, 0x78, 0x7e, 0x02, 0x57, 0xb8, 0x2b, 0x11, + 0x01, 0x0b, 0x22, 0x12, 0x51, 0x78, 0x3e, 0x89, 0x90, 0xb8, 0x44, 0xc6, 0xaa, 0x20, 0x57, 0x28, + 0x11, 0x3f, 0x02, 0x88, 0xd2, 0xb3, 0x78, 0x7e, 0x6f, 0xb0, 0xdd, 0xdf, 0xe6, 0x60, 0xbe, 0x46, + 0x5b, 0xca, 0x03, 0x38, 0x1f, 0x7c, 0x6e, 0xb9, 0x2e, 0xef, 0xf9, 0x22, 0x5f, 0x14, 0xd4, 0x1b, + 0x23, 0x4d, 0x02, 0x4c, 0x0f, 0xe0, 0x7c, 0xf0, 0x58, 0x4f, 0xf7, 0xec, 0x9b, 0x9c, 0xe2, 0x79, + 0xe8, 0xc5, 0x4a, 0xf9, 0x63, 0x2f, 0xfe, 0xc4, 0x7a, 0x2d, 0x75, 0xfd, 0x90, 0xad, 0xba, 0x3b, + 0xbe, 0x6d, 0xb0, 0xe9, 0x11, 0x6f, 0xf5, 0x13, 0x1d, 0xf6, 0xcd, 0x71, 0x3d, 0xed, 0x3b, 0x4c, + 0xbd, 0x93, 0xc1, 0x38, 0xd8, 0xf7, 0x4b, 0x00, 0x2f, 0xa7, 0xb4, 0x7a, 0xfa, 0xa9, 0xc5, 0x18, + 0x5e, 0xa0, 0xde, 0xcd, 0xb8, 0x40, 0x1a, 0x44, 0xa2, 0x1f, 0x19, 0x1d, 0x44, 0x7c, 0xc1, 0x18, + 0x41, 0xa4, 0x5c, 0xa4, 0xdf, 0x00, 0xb8, 0x99, 0x26, 0x47, 0xaf, 0x9f, 0xca, 0x1e, 0xc9, 0x0a, + 0xf5, 0xcd, 0xac, 0x2b, 0x82, 0x38, 0xbe, 0x80, 0x1b, 0xf2, 0xab, 0x55, 0x1b, 0xe9, 0x32, 0x66, + 0xaf, 0xbe, 0x91, 0xcd, 0xde, 0x0f, 0xa0, 0x52, 0x7d, 0x72, 0x5c, 0x02, 0x4f, 0x8f, 0x4b, 0xe0, + 0xbf, 0xe3, 0x12, 0xf8, 0xf6, 0xa4, 0x34, 0xf3, 0xf4, 0xa4, 0x34, 0xf3, 0xcf, 0x49, 0x69, 0xe6, + 0x13, 0x3d, 0x22, 0x13, 0xc2, 0xf7, 0xad, 0x43, 0xb3, 0x41, 0xfd, 0x1f, 0xfa, 0xd1, 0x5d, 0xbd, + 0xc7, 0x3f, 0xe4, 0x7a, 0x9a, 0xd1, 0x98, 0xf5, 0x3e, 0xbc, 0xde, 0xf9, 0x3f, 0x00, 0x00, 0xff, + 0xff, 0xa7, 0xc2, 0x2d, 0xca, 0xe5, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From 35a342aeccddcfc731d2282cbc3c3b00cd1b6af3 Mon Sep 17 00:00:00 2001 From: Ehsan-saradar Date: Mon, 27 Jun 2022 12:36:44 +0430 Subject: [PATCH 4/7] Set TokenOut as exitCoins --- proto/osmosis/gamm/v1beta1/tx.proto | 7 +- x/gamm/keeper/msg_server.go | 6 +- x/gamm/types/tx.pb.go | 193 +++++++++++----------------- 3 files changed, 78 insertions(+), 128 deletions(-) diff --git a/proto/osmosis/gamm/v1beta1/tx.proto b/proto/osmosis/gamm/v1beta1/tx.proto index 32f344d1623..950357b920f 100644 --- a/proto/osmosis/gamm/v1beta1/tx.proto +++ b/proto/osmosis/gamm/v1beta1/tx.proto @@ -68,12 +68,7 @@ message MsgExitPool { } message MsgExitPoolResponse { - string share_in_amount = 1 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (gogoproto.moretags) = "yaml:\"share_in_amount\"", - (gogoproto.nullable) = false - ]; - repeated cosmos.base.v1beta1.Coin token_out = 2 [ + repeated cosmos.base.v1beta1.Coin token_out = 1 [ (gogoproto.moretags) = "yaml:\"token_out\"", (gogoproto.nullable) = false ]; diff --git a/x/gamm/keeper/msg_server.go b/x/gamm/keeper/msg_server.go index 9c8d5a40647..357a4da60aa 100644 --- a/x/gamm/keeper/msg_server.go +++ b/x/gamm/keeper/msg_server.go @@ -139,7 +139,7 @@ func (server msgServer) ExitPool(goCtx context.Context, msg *types.MsgExitPool) return nil, err } - _, err = server.keeper.ExitPool(ctx, sender, msg.PoolId, msg.ShareInAmount, msg.TokenOutMins) + exitCoins, err := server.keeper.ExitPool(ctx, sender, msg.PoolId, msg.ShareInAmount, msg.TokenOutMins) if err != nil { return nil, err } @@ -156,7 +156,9 @@ func (server msgServer) ExitPool(goCtx context.Context, msg *types.MsgExitPool) ), }) - return &types.MsgExitPoolResponse{}, nil + return &types.MsgExitPoolResponse{ + TokenOut: exitCoins, + }, nil } func (server msgServer) SwapExactAmountIn(goCtx context.Context, msg *types.MsgSwapExactAmountIn) (*types.MsgSwapExactAmountInResponse, error) { diff --git a/x/gamm/types/tx.pb.go b/x/gamm/types/tx.pb.go index aa62af6f2ca..75e649d559d 100644 --- a/x/gamm/types/tx.pb.go +++ b/x/gamm/types/tx.pb.go @@ -201,8 +201,7 @@ func (m *MsgExitPool) GetTokenOutMins() []types.Coin { } type MsgExitPoolResponse struct { - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` - TokenOut []types.Coin `protobuf:"bytes,2,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` + TokenOut []types.Coin `protobuf:"bytes,1,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` } func (m *MsgExitPoolResponse) Reset() { *m = MsgExitPoolResponse{} } @@ -970,77 +969,77 @@ func init() { func init() { proto.RegisterFile("osmosis/gamm/v1beta1/tx.proto", fileDescriptor_cfc8fd3ac7df3247) } var fileDescriptor_cfc8fd3ac7df3247 = []byte{ - // 1113 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xd8, 0x6e, 0x3e, 0x26, 0xcd, 0xd7, 0x36, 0x69, 0x9c, 0x6d, 0x6b, 0xa7, 0x03, 0x82, - 0x94, 0xaa, 0xbb, 0x34, 0x95, 0x28, 0xe2, 0x02, 0x18, 0x82, 0x30, 0xc2, 0x4a, 0xb5, 0xbd, 0x54, - 0x5c, 0xac, 0x75, 0xbc, 0x72, 0x57, 0x8d, 0x67, 0x2c, 0xcf, 0x6c, 0x70, 0x85, 0x04, 0x12, 0x1f, - 0x77, 0x10, 0xe2, 0xe3, 0x17, 0x20, 0xfe, 0x02, 0x07, 0x38, 0xc0, 0xa5, 0xc7, 0xde, 0xa0, 0x1c, - 0x2c, 0x94, 0xfc, 0x03, 0xff, 0x02, 0xb4, 0x3b, 0xb3, 0x9f, 0x9e, 0x8d, 0xbd, 0xa9, 0xdd, 0x9c, - 0x12, 0xcf, 0xbc, 0xf3, 0xce, 0xfb, 0xbc, 0xef, 0x33, 0xcf, 0xbc, 0xb3, 0xf0, 0x1a, 0xa1, 0x6d, - 0x42, 0x6d, 0xaa, 0xb7, 0xcc, 0x76, 0x5b, 0x3f, 0xba, 0xdd, 0xb0, 0x98, 0x79, 0x5b, 0x67, 0x3d, - 0xad, 0xd3, 0x25, 0x8c, 0x28, 0xeb, 0x62, 0x5a, 0x73, 0xa7, 0x35, 0x31, 0xad, 0xae, 0xb7, 0x48, - 0x8b, 0x78, 0x06, 0xba, 0xfb, 0x1f, 0xb7, 0x55, 0x4b, 0x07, 0x9e, 0xb1, 0xde, 0x30, 0xa9, 0x15, - 0x78, 0x3a, 0x20, 0x36, 0xe6, 0xf3, 0xe8, 0xf7, 0x1c, 0x5c, 0xac, 0xd1, 0xd6, 0x47, 0xc4, 0xc6, - 0xf7, 0x08, 0x39, 0x54, 0x6e, 0xc0, 0x59, 0x6a, 0xe1, 0xa6, 0xd5, 0x2d, 0x82, 0x6d, 0xb0, 0xb3, - 0x50, 0x59, 0x1b, 0xf4, 0xcb, 0x4b, 0x8f, 0xcd, 0xf6, 0xe1, 0x5b, 0x88, 0x8f, 0x23, 0x43, 0x18, - 0x28, 0x37, 0xe1, 0x5c, 0x87, 0x90, 0xc3, 0xba, 0xdd, 0x2c, 0xe6, 0xb6, 0xc1, 0x4e, 0xa1, 0xa2, - 0x0c, 0xfa, 0xe5, 0x65, 0x6e, 0x2b, 0x26, 0x90, 0x31, 0xeb, 0xfe, 0x57, 0x6d, 0x2a, 0x5d, 0xb8, - 0x4a, 0x1f, 0x9a, 0x5d, 0xab, 0x4e, 0x1c, 0x56, 0x37, 0xdb, 0xc4, 0xc1, 0xac, 0x98, 0xf7, 0x76, - 0xf8, 0xf0, 0x49, 0xbf, 0x3c, 0xf3, 0x6f, 0xbf, 0xfc, 0x4a, 0xcb, 0x66, 0x0f, 0x9d, 0x86, 0x76, - 0x40, 0xda, 0xba, 0x08, 0x9a, 0xff, 0xb9, 0x45, 0x9b, 0x8f, 0x74, 0xf6, 0xb8, 0x63, 0x51, 0xad, - 0x8a, 0xd9, 0xa0, 0x5f, 0xbe, 0x1c, 0xd9, 0x83, 0xbb, 0x72, 0xbd, 0x22, 0x63, 0xd9, 0xdb, 0x61, - 0xdf, 0x61, 0xef, 0x7a, 0x83, 0x4a, 0x03, 0x2e, 0x31, 0xf2, 0xc8, 0xc2, 0x75, 0x1b, 0xd7, 0xdb, - 0x66, 0x8f, 0x16, 0x0b, 0xdb, 0xf9, 0x9d, 0xc5, 0xdd, 0x2d, 0x8d, 0xfb, 0xd5, 0xdc, 0x9c, 0xf8, - 0xe9, 0xd3, 0xde, 0x23, 0x36, 0xae, 0xbc, 0xe4, 0xc6, 0x32, 0xe8, 0x97, 0xaf, 0xf0, 0x1d, 0xa2, - 0xab, 0xc5, 0x4e, 0x14, 0x19, 0x8b, 0xde, 0x70, 0x15, 0xd7, 0xcc, 0x1e, 0x45, 0xcf, 0x00, 0xbc, - 0x14, 0xc9, 0x9f, 0x61, 0xd1, 0x0e, 0xc1, 0xd4, 0x52, 0xa8, 0x04, 0x2f, 0xcf, 0x68, 0x35, 0x33, - 0xde, 0x4d, 0x91, 0xff, 0x84, 0xbf, 0x61, 0xc0, 0x35, 0x38, 0xef, 0x87, 0x5c, 0xcc, 0x8d, 0xc2, - 0xba, 0x29, 0xb0, 0xae, 0xc4, 0xb1, 0x22, 0x63, 0x4e, 0xe0, 0x43, 0x7f, 0x70, 0x6e, 0xec, 0xf5, - 0x6c, 0x36, 0x55, 0x6e, 0x74, 0xe0, 0x0a, 0xc7, 0x66, 0xe3, 0x09, 0x51, 0x23, 0xe1, 0x0e, 0x19, - 0x4b, 0xde, 0x48, 0x15, 0x8b, 0x44, 0x59, 0x70, 0x99, 0xe3, 0x75, 0xb3, 0xd9, 0xb6, 0xf1, 0x18, - 0xd4, 0x78, 0x59, 0xa4, 0xeb, 0x6a, 0x34, 0x5d, 0x62, 0x79, 0xc8, 0x8d, 0x8b, 0xde, 0xf8, 0xbe, - 0xc3, 0x6a, 0x36, 0x0e, 0xc8, 0xe1, 0x27, 0x30, 0x20, 0x87, 0x04, 0x30, 0x98, 0x2e, 0xe0, 0x7b, - 0x70, 0x21, 0x88, 0x78, 0x34, 0x35, 0x8a, 0x02, 0xeb, 0x6a, 0x02, 0x2b, 0x32, 0xe6, 0x7d, 0x7c, - 0xe8, 0x6b, 0x00, 0xd7, 0xee, 0x7f, 0x6a, 0x76, 0xf8, 0x06, 0x55, 0x6c, 0x10, 0x87, 0x59, 0xd1, - 0xba, 0x83, 0x91, 0x75, 0xaf, 0xc0, 0x95, 0x30, 0x8d, 0x4d, 0x0b, 0x93, 0xb6, 0x47, 0x96, 0x85, - 0x8a, 0x1a, 0x02, 0x4b, 0x18, 0x20, 0x63, 0xc9, 0x8f, 0xe0, 0x7d, 0xef, 0xf7, 0xdf, 0x39, 0xb8, - 0x5e, 0xa3, 0x2d, 0x37, 0x92, 0xbd, 0x9e, 0x79, 0xc0, 0xfc, 0x70, 0xb2, 0x90, 0x75, 0x0f, 0xce, - 0x76, 0xdd, 0xe8, 0xa9, 0xc8, 0xcc, 0xab, 0x9a, 0x4c, 0x60, 0xb5, 0x21, 0xb4, 0x95, 0x82, 0x9b, - 0x27, 0x43, 0x2c, 0x8e, 0x9d, 0x3e, 0x97, 0xbf, 0xcf, 0x77, 0xfa, 0x94, 0xcf, 0xe1, 0xba, 0x8c, - 0x64, 0xc5, 0x82, 0x07, 0xa7, 0x96, 0x99, 0x29, 0x57, 0xd2, 0x89, 0x8b, 0x8c, 0xb5, 0x08, 0x6f, - 0x39, 0x46, 0xf4, 0x3d, 0x80, 0x57, 0x65, 0x99, 0x8d, 0x4a, 0x5c, 0xe8, 0x6c, 0x32, 0x12, 0x97, - 0xf4, 0x87, 0x8c, 0x65, 0x3f, 0x30, 0x11, 0xd5, 0x57, 0x00, 0x2a, 0x61, 0x21, 0xf6, 0x1d, 0x76, - 0x06, 0xde, 0xbd, 0xe3, 0x9f, 0x7e, 0x1b, 0x8f, 0x4d, 0xbb, 0x8b, 0xa2, 0x2c, 0x9c, 0x75, 0xcf, - 0x72, 0x70, 0x63, 0x38, 0x37, 0xfb, 0x0e, 0xcb, 0x42, 0xbb, 0x0f, 0x12, 0xb4, 0xdb, 0x19, 0x45, - 0x3b, 0x1f, 0x6d, 0x82, 0x77, 0x9f, 0xc1, 0x4b, 0x92, 0x8b, 0x4a, 0x48, 0xe8, 0xc7, 0x99, 0x4b, - 0xa1, 0xa6, 0xde, 0x7d, 0xc8, 0x58, 0x0d, 0xaf, 0x3e, 0x99, 0xb0, 0x14, 0x46, 0xb1, 0x7e, 0x1c, - 0x61, 0xf9, 0x0e, 0xc0, 0x6b, 0xd2, 0xdc, 0x46, 0xe5, 0x33, 0x88, 0x6e, 0x32, 0xf2, 0x99, 0x70, - 0xe7, 0xab, 0x8c, 0x2f, 0x9f, 0xe8, 0xcf, 0x1c, 0xdc, 0x12, 0xb7, 0x3c, 0x8f, 0x8b, 0x59, 0x5d, - 0x7c, 0x16, 0xa9, 0xc9, 0x74, 0x2f, 0x4e, 0x5e, 0x50, 0xc2, 0x16, 0x62, 0x72, 0x82, 0x22, 0xf3, - 0x89, 0x8c, 0x35, 0xbf, 0x35, 0x09, 0x05, 0xe5, 0x67, 0x00, 0xaf, 0xa7, 0x26, 0xf1, 0x5c, 0x1b, - 0x27, 0xf4, 0x4b, 0x3e, 0x56, 0xdf, 0xfb, 0xee, 0xec, 0x99, 0xce, 0x74, 0xa6, 0xfa, 0xbe, 0x3d, - 0xa4, 0x43, 0xfc, 0xcc, 0x6e, 0x0d, 0xfa, 0xe5, 0x8d, 0x04, 0x31, 0x65, 0x32, 0x24, 0xcd, 0x55, - 0x61, 0xda, 0x4d, 0x66, 0x8a, 0xdc, 0x5c, 0x78, 0x11, 0x72, 0x83, 0x7e, 0x88, 0x73, 0x28, 0x5e, - 0xa8, 0x73, 0x14, 0x88, 0x5f, 0xf3, 0xb0, 0x28, 0x3a, 0xbd, 0x44, 0x5c, 0x53, 0xd4, 0x07, 0x49, - 0xff, 0x94, 0xcf, 0xd8, 0x3f, 0xc9, 0x5a, 0xd1, 0xc2, 0x74, 0x5b, 0xd1, 0xb4, 0xbe, 0xe6, 0xc2, - 0x0b, 0xea, 0x6b, 0x7e, 0x02, 0x70, 0x3b, 0xad, 0x54, 0xe7, 0xdb, 0xdb, 0xfc, 0x95, 0x83, 0x6a, - 0x24, 0xb2, 0xa8, 0x40, 0x4e, 0x53, 0x86, 0x62, 0x57, 0x78, 0x7e, 0x02, 0x57, 0xb8, 0x2b, 0x11, - 0x01, 0x0b, 0x22, 0x12, 0x51, 0x78, 0x3e, 0x89, 0x90, 0xb8, 0x44, 0xc6, 0xaa, 0x20, 0x57, 0x28, - 0x11, 0x3f, 0x02, 0x88, 0xd2, 0xb3, 0x78, 0x7e, 0x6f, 0xb0, 0xdd, 0xdf, 0xe6, 0x60, 0xbe, 0x46, - 0x5b, 0xca, 0x03, 0x38, 0x1f, 0x7c, 0x6e, 0xb9, 0x2e, 0xef, 0xf9, 0x22, 0x5f, 0x14, 0xd4, 0x1b, - 0x23, 0x4d, 0x02, 0x4c, 0x0f, 0xe0, 0x7c, 0xf0, 0x58, 0x4f, 0xf7, 0xec, 0x9b, 0x9c, 0xe2, 0x79, - 0xe8, 0xc5, 0x4a, 0xf9, 0x63, 0x2f, 0xfe, 0xc4, 0x7a, 0x2d, 0x75, 0xfd, 0x90, 0xad, 0xba, 0x3b, - 0xbe, 0x6d, 0xb0, 0xe9, 0x11, 0x6f, 0xf5, 0x13, 0x1d, 0xf6, 0xcd, 0x71, 0x3d, 0xed, 0x3b, 0x4c, - 0xbd, 0x93, 0xc1, 0x38, 0xd8, 0xf7, 0x4b, 0x00, 0x2f, 0xa7, 0xb4, 0x7a, 0xfa, 0xa9, 0xc5, 0x18, - 0x5e, 0xa0, 0xde, 0xcd, 0xb8, 0x40, 0x1a, 0x44, 0xa2, 0x1f, 0x19, 0x1d, 0x44, 0x7c, 0xc1, 0x18, - 0x41, 0xa4, 0x5c, 0xa4, 0xdf, 0x00, 0xb8, 0x99, 0x26, 0x47, 0xaf, 0x9f, 0xca, 0x1e, 0xc9, 0x0a, - 0xf5, 0xcd, 0xac, 0x2b, 0x82, 0x38, 0xbe, 0x80, 0x1b, 0xf2, 0xab, 0x55, 0x1b, 0xe9, 0x32, 0x66, - 0xaf, 0xbe, 0x91, 0xcd, 0xde, 0x0f, 0xa0, 0x52, 0x7d, 0x72, 0x5c, 0x02, 0x4f, 0x8f, 0x4b, 0xe0, - 0xbf, 0xe3, 0x12, 0xf8, 0xf6, 0xa4, 0x34, 0xf3, 0xf4, 0xa4, 0x34, 0xf3, 0xcf, 0x49, 0x69, 0xe6, - 0x13, 0x3d, 0x22, 0x13, 0xc2, 0xf7, 0xad, 0x43, 0xb3, 0x41, 0xfd, 0x1f, 0xfa, 0xd1, 0x5d, 0xbd, - 0xc7, 0x3f, 0xe4, 0x7a, 0x9a, 0xd1, 0x98, 0xf5, 0x3e, 0xbc, 0xde, 0xf9, 0x3f, 0x00, 0x00, 0xff, - 0xff, 0xa7, 0xc2, 0x2d, 0xca, 0xe5, 0x15, 0x00, 0x00, + // 1119 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4b, 0x6f, 0x1b, 0x45, + 0x1c, 0xcf, 0xd8, 0x6e, 0x1e, 0x93, 0xe6, 0xb5, 0x4d, 0x1a, 0x67, 0xdb, 0xda, 0xe9, 0x80, 0x20, + 0xa5, 0xea, 0x2e, 0x4d, 0x25, 0x8a, 0xb8, 0x00, 0x86, 0x20, 0x8c, 0xb0, 0x5c, 0x6d, 0x2f, 0x15, + 0x17, 0x6b, 0x1d, 0xaf, 0xdc, 0x55, 0xb3, 0x33, 0x96, 0x67, 0x36, 0xb8, 0x42, 0x02, 0x89, 0xc7, + 0x1d, 0x84, 0x78, 0x7c, 0x02, 0xc4, 0x57, 0xe0, 0x00, 0x07, 0xb8, 0xf4, 0xd8, 0x1b, 0x94, 0x83, + 0x85, 0x92, 0x6f, 0xe0, 0x4f, 0x80, 0x76, 0x67, 0xf6, 0xe9, 0xdd, 0xd8, 0x9b, 0xd8, 0xc9, 0x29, + 0xf1, 0xce, 0xff, 0xfd, 0xff, 0xcd, 0xef, 0xff, 0xdf, 0x85, 0x37, 0x08, 0xb5, 0x08, 0x35, 0xa9, + 0xda, 0xd6, 0x2d, 0x4b, 0x3d, 0xbc, 0xdb, 0x34, 0x98, 0x7e, 0x57, 0x65, 0x3d, 0xa5, 0xd3, 0x25, + 0x8c, 0x48, 0xeb, 0xe2, 0x58, 0x71, 0x8e, 0x15, 0x71, 0x2c, 0xaf, 0xb7, 0x49, 0x9b, 0xb8, 0x02, + 0xaa, 0xf3, 0x1f, 0x97, 0x95, 0x4b, 0xfb, 0xae, 0xb0, 0xda, 0xd4, 0xa9, 0xe1, 0x5b, 0xda, 0x27, + 0x26, 0xe6, 0xe7, 0xe8, 0xf7, 0x1c, 0x5c, 0xac, 0xd1, 0xf6, 0x47, 0xc4, 0xc4, 0x0f, 0x08, 0x39, + 0x90, 0x6e, 0xc1, 0x59, 0x6a, 0xe0, 0x96, 0xd1, 0x2d, 0x82, 0x6d, 0xb0, 0xb3, 0x50, 0x59, 0x1b, + 0xf4, 0xcb, 0x4b, 0x4f, 0x75, 0xeb, 0xe0, 0x2d, 0xc4, 0x9f, 0x23, 0x4d, 0x08, 0x48, 0xb7, 0xe1, + 0x5c, 0x87, 0x90, 0x83, 0x86, 0xd9, 0x2a, 0xe6, 0xb6, 0xc1, 0x4e, 0xa1, 0x22, 0x0d, 0xfa, 0xe5, + 0x65, 0x2e, 0x2b, 0x0e, 0x90, 0x36, 0xeb, 0xfc, 0x57, 0x6d, 0x49, 0x5d, 0xb8, 0x4a, 0x1f, 0xeb, + 0x5d, 0xa3, 0x41, 0x6c, 0xd6, 0xd0, 0x2d, 0x62, 0x63, 0x56, 0xcc, 0xbb, 0x1e, 0x3e, 0x7c, 0xd6, + 0x2f, 0xcf, 0xfc, 0xdb, 0x2f, 0xbf, 0xd2, 0x36, 0xd9, 0x63, 0xbb, 0xa9, 0xec, 0x13, 0x4b, 0x15, + 0x41, 0xf3, 0x3f, 0x77, 0x68, 0xeb, 0x89, 0xca, 0x9e, 0x76, 0x0c, 0xaa, 0x54, 0x31, 0x1b, 0xf4, + 0xcb, 0x57, 0x43, 0x3e, 0xb8, 0x29, 0xc7, 0x2a, 0xd2, 0x96, 0x5d, 0x0f, 0x75, 0x9b, 0xbd, 0xeb, + 0x3e, 0x94, 0x9a, 0x70, 0x89, 0x91, 0x27, 0x06, 0x6e, 0x98, 0xb8, 0x61, 0xe9, 0x3d, 0x5a, 0x2c, + 0x6c, 0xe7, 0x77, 0x16, 0x77, 0xb7, 0x14, 0x6e, 0x57, 0x71, 0x6a, 0xe2, 0x95, 0x4f, 0x79, 0x8f, + 0x98, 0xb8, 0xf2, 0x92, 0x13, 0xcb, 0xa0, 0x5f, 0xbe, 0xc6, 0x3d, 0x84, 0xb5, 0x85, 0x27, 0x8a, + 0xb4, 0x45, 0xf7, 0x71, 0x15, 0xd7, 0xf4, 0x1e, 0x45, 0x2f, 0x00, 0xbc, 0x12, 0xaa, 0x9f, 0x66, + 0xd0, 0x0e, 0xc1, 0xd4, 0x90, 0x68, 0x42, 0xbe, 0xbc, 0xa2, 0xd5, 0xcc, 0xf9, 0x6e, 0x8a, 0xfa, + 0xc7, 0xec, 0x0d, 0x27, 0x5c, 0x83, 0xf3, 0x5e, 0xc8, 0xc5, 0xdc, 0xa8, 0x5c, 0x37, 0x45, 0xae, + 0x2b, 0xd1, 0x5c, 0x91, 0x36, 0x27, 0xf2, 0x43, 0x7f, 0x70, 0x6c, 0xec, 0xf5, 0x4c, 0x36, 0x55, + 0x6c, 0x74, 0xe0, 0x0a, 0xcf, 0xcd, 0xc4, 0x13, 0x82, 0x46, 0xcc, 0x1c, 0xd2, 0x96, 0xdc, 0x27, + 0x55, 0x2c, 0x0a, 0x65, 0xc0, 0x65, 0x9e, 0xaf, 0x53, 0x4d, 0xcb, 0xc4, 0x63, 0x40, 0xe3, 0x65, + 0x51, 0xae, 0xeb, 0xe1, 0x72, 0x09, 0xf5, 0x00, 0x1b, 0x97, 0xdd, 0xe7, 0x75, 0x9b, 0xd5, 0x4c, + 0x4c, 0x51, 0xdb, 0xc5, 0x86, 0x57, 0x3f, 0x1f, 0x1b, 0x0f, 0xe0, 0x82, 0xaf, 0x5e, 0x04, 0xa3, + 0x1c, 0x17, 0x85, 0xe3, 0xd5, 0x98, 0x63, 0xa4, 0xcd, 0x7b, 0xce, 0xd0, 0xd7, 0x00, 0xae, 0x3d, + 0xfc, 0x54, 0xef, 0xf0, 0xf4, 0xaa, 0x58, 0x23, 0x36, 0x33, 0xc2, 0x4d, 0x00, 0x23, 0x9b, 0x50, + 0x81, 0x2b, 0x41, 0x4e, 0x2d, 0x03, 0x13, 0xcb, 0xed, 0xdc, 0x42, 0x45, 0x0e, 0xca, 0x1a, 0x13, + 0x40, 0xda, 0x92, 0x17, 0xc1, 0xfb, 0xee, 0xef, 0xbf, 0x73, 0x70, 0xbd, 0x46, 0xdb, 0x4e, 0x24, + 0x7b, 0x3d, 0x7d, 0x9f, 0x79, 0xe1, 0x64, 0x41, 0xce, 0x1e, 0x9c, 0xed, 0x3a, 0xd1, 0x53, 0x81, + 0xe0, 0x57, 0x95, 0x24, 0xb6, 0x53, 0x86, 0xb2, 0xad, 0x14, 0x9c, 0x3a, 0x69, 0x42, 0x39, 0x72, + 0x15, 0x1c, 0x30, 0x9d, 0xed, 0x2a, 0x48, 0x9f, 0xc3, 0xf5, 0xa4, 0x8e, 0x17, 0x0b, 0x6e, 0x3a, + 0xb5, 0xcc, 0x38, 0xbd, 0x96, 0x8e, 0x22, 0xa4, 0xad, 0x85, 0x40, 0xc4, 0x73, 0x44, 0xdf, 0x03, + 0x78, 0x3d, 0xa9, 0xb2, 0x61, 0xbe, 0x09, 0x8c, 0x4d, 0x86, 0x6f, 0xe2, 0xf6, 0x90, 0xb6, 0xec, + 0x05, 0x26, 0xa2, 0xfa, 0x0a, 0x40, 0x29, 0x68, 0x44, 0xdd, 0x66, 0xa7, 0xc0, 0xdd, 0x3b, 0xde, + 0x55, 0x34, 0xf1, 0xd8, 0xb0, 0xbb, 0x2c, 0xda, 0xc2, 0x51, 0xf7, 0x22, 0x07, 0x37, 0x86, 0x6b, + 0x53, 0xb7, 0x59, 0x16, 0xd8, 0x7d, 0x10, 0x83, 0xdd, 0xce, 0x28, 0xd8, 0x79, 0xd9, 0xc6, 0x70, + 0xf7, 0x19, 0xbc, 0x92, 0x30, 0x35, 0x04, 0x9f, 0x7d, 0x9c, 0xb9, 0x15, 0x72, 0xea, 0x20, 0x42, + 0xda, 0x6a, 0x30, 0x87, 0x04, 0xad, 0x45, 0x88, 0xa5, 0x30, 0x0a, 0xf5, 0xe3, 0x10, 0xcb, 0x77, + 0x00, 0xde, 0x48, 0xac, 0xad, 0x0f, 0xbc, 0x8e, 0xc7, 0x1b, 0xc1, 0xa5, 0x00, 0x67, 0x23, 0xef, + 0x98, 0x39, 0x8f, 0x65, 0x3c, 0xf2, 0x46, 0x7f, 0xe6, 0xe0, 0x96, 0x18, 0xb9, 0x3c, 0x2e, 0x66, + 0x74, 0xf1, 0x69, 0xa8, 0x26, 0xd3, 0x90, 0x9a, 0x3c, 0xa1, 0x04, 0xf3, 0x7c, 0x72, 0x84, 0x92, + 0x64, 0x13, 0x69, 0x6b, 0xde, 0x9e, 0x10, 0x10, 0xca, 0xcf, 0x00, 0xde, 0x4c, 0x2d, 0xe2, 0x85, + 0x6e, 0x31, 0xe8, 0x97, 0x7c, 0xa4, 0xbf, 0x0f, 0x9d, 0xd3, 0x53, 0xdd, 0xe9, 0x4c, 0xfd, 0x7d, + 0x7b, 0x88, 0x87, 0xf8, 0x9d, 0xdd, 0x1a, 0xf4, 0xcb, 0x1b, 0x31, 0x60, 0x26, 0xd1, 0x50, 0x62, + 0xad, 0x0a, 0xd3, 0xde, 0xf8, 0x52, 0xe8, 0xe6, 0xd2, 0x79, 0xd0, 0x0d, 0xfa, 0x21, 0x8a, 0xa1, + 0x68, 0xa3, 0x2e, 0x90, 0x20, 0x7e, 0xcd, 0xc3, 0xa2, 0xd8, 0xbb, 0x62, 0x71, 0x4d, 0x91, 0x1f, + 0x12, 0xf6, 0xa7, 0x7c, 0xc6, 0xfd, 0x29, 0x69, 0x11, 0x2e, 0x4c, 0x77, 0x11, 0x4e, 0xdb, 0x6b, + 0x2e, 0x9d, 0xd3, 0x5e, 0xf3, 0x13, 0x80, 0xdb, 0x69, 0xad, 0xba, 0xd8, 0xdd, 0xe6, 0xaf, 0x1c, + 0x94, 0x43, 0x91, 0x85, 0x09, 0x72, 0x9a, 0x34, 0x14, 0x19, 0xe1, 0xf9, 0x09, 0x8c, 0x70, 0x87, + 0x22, 0x7c, 0x14, 0x84, 0x28, 0xa2, 0x70, 0x36, 0x8a, 0x48, 0x30, 0x89, 0xb4, 0x55, 0x01, 0xae, + 0x80, 0x22, 0x7e, 0x04, 0x10, 0xa5, 0x57, 0x31, 0xcc, 0x11, 0x71, 0xe0, 0x83, 0xa9, 0x02, 0x7f, + 0xf7, 0xb7, 0x39, 0x98, 0xaf, 0xd1, 0xb6, 0xf4, 0x08, 0xce, 0xfb, 0xdf, 0x3e, 0x6e, 0x26, 0xef, + 0x7c, 0xa1, 0xd7, 0x7b, 0xf9, 0xd6, 0x48, 0x11, 0x3f, 0xa7, 0x47, 0x70, 0xde, 0x7f, 0x73, 0x4e, + 0xb7, 0xec, 0x89, 0x9c, 0x60, 0x79, 0xe8, 0xfd, 0x91, 0xf2, 0x97, 0xbd, 0xe8, 0x2b, 0xd6, 0x6b, + 0xa9, 0xfa, 0x43, 0xb2, 0xf2, 0xee, 0xf8, 0xb2, 0xbe, 0xd3, 0x43, 0xbe, 0xea, 0xc7, 0x36, 0xec, + 0xdb, 0xe3, 0x5a, 0xaa, 0xdb, 0x4c, 0xbe, 0x97, 0x41, 0xd8, 0xf7, 0xfb, 0x25, 0x80, 0x57, 0x53, + 0x56, 0x3d, 0xf5, 0xc4, 0x66, 0x0c, 0x2b, 0xc8, 0xf7, 0x33, 0x2a, 0x24, 0x06, 0x11, 0xdb, 0x47, + 0x46, 0x07, 0x11, 0x55, 0x18, 0x23, 0x88, 0x94, 0x41, 0xfa, 0x0d, 0x80, 0x9b, 0x69, 0x74, 0xf4, + 0xfa, 0x89, 0xe8, 0x49, 0xd0, 0x90, 0xdf, 0xcc, 0xaa, 0xe1, 0xc7, 0xf1, 0x05, 0xdc, 0x48, 0x1e, + 0xad, 0xca, 0x48, 0x93, 0x11, 0x79, 0xf9, 0x8d, 0x6c, 0xf2, 0x5e, 0x00, 0x95, 0xea, 0xb3, 0xa3, + 0x12, 0x78, 0x7e, 0x54, 0x02, 0xff, 0x1d, 0x95, 0xc0, 0xb7, 0xc7, 0xa5, 0x99, 0xe7, 0xc7, 0xa5, + 0x99, 0x7f, 0x8e, 0x4b, 0x33, 0x9f, 0xa8, 0x21, 0x9a, 0x10, 0xb6, 0xef, 0x1c, 0xe8, 0x4d, 0xea, + 0xfd, 0x50, 0x0f, 0xef, 0xab, 0x3d, 0xfe, 0x55, 0xd5, 0xe5, 0x8c, 0xe6, 0xac, 0xfb, 0x15, 0xf4, + 0xde, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x67, 0xe6, 0x5e, 0x56, 0x72, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1571,19 +1570,9 @@ func (m *MsgExitPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintTx(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 - } - } - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err + dAtA[i] = 0xa } - i = encodeVarintTx(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -2299,8 +2288,6 @@ func (m *MsgExitPoolResponse) Size() (n int) { } var l int _ = l - l = m.ShareInAmount.Size() - n += 1 + l + sovTx(uint64(l)) if len(m.TokenOut) > 0 { for _, e := range m.TokenOut { l = e.Size() @@ -3034,40 +3021,6 @@ func (m *MsgExitPoolResponse) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", wireType) } From bb0bb73284c35f8faea9e588fca89ae29d29874c Mon Sep 17 00:00:00 2001 From: Ehsan-saradar Date: Mon, 27 Jun 2022 12:37:31 +0430 Subject: [PATCH 5/7] Fix tests --- x/superfluid/keeper/unpool_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/superfluid/keeper/unpool_test.go b/x/superfluid/keeper/unpool_test.go index 0a247960f97..a919f5bc52b 100644 --- a/x/superfluid/keeper/unpool_test.go +++ b/x/superfluid/keeper/unpool_test.go @@ -115,7 +115,7 @@ func (suite *KeeperTestSuite) TestUnpool() { // join pool balanceBeforeJoin := suite.App.BankKeeper.GetAllBalances(suite.Ctx, poolJoinAcc) - err = suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, poolJoinAcc, poolId, gammtypes.OneShare.MulRaw(50), sdk.Coins{}) + _, _, err = suite.App.GAMMKeeper.JoinPoolNoSwap(suite.Ctx, poolJoinAcc, poolId, gammtypes.OneShare.MulRaw(50), sdk.Coins{}) suite.Require().NoError(err) balanceAfterJoin := suite.App.BankKeeper.GetAllBalances(suite.Ctx, poolJoinAcc) From 920b74e5f4c29ca91ef23b888eeaa7c7f4e6dfbf Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Wed, 6 Jul 2022 20:42:18 -0500 Subject: [PATCH 6/7] Add Changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b8b3207a9a0..cbcf16d076b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes + +* [#1889](https://github.com/osmosis-labs/osmosis/pull/1825) Add proto responses to gamm LP messages: + * MsgJoinPoolResponse: share_out_amount and token_in fields + * MsgExitPoolResponse: token_out field * [#1825](https://github.com/osmosis-labs/osmosis/pull/1825) Fixes Interchain Accounts (host side) by adding it to AppModuleBasics * [#1699](https://github.com/osmosis-labs/osmosis/pull/1699) Fixes bug in sig fig rounding on spot price queries for small values From 63e976b17c4a985c15f831ba8e45c9d9f9518e36 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Wed, 6 Jul 2022 20:52:26 -0500 Subject: [PATCH 7/7] Add requested test updates --- x/gamm/keeper/pool_service.go | 2 +- x/gamm/keeper/pool_service_test.go | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/x/gamm/keeper/pool_service.go b/x/gamm/keeper/pool_service.go index cc02e652feb..504616c5e81 100644 --- a/x/gamm/keeper/pool_service.go +++ b/x/gamm/keeper/pool_service.go @@ -204,7 +204,7 @@ func (k Keeper) JoinPoolNoSwap( return nil, sdk.ZeroInt(), sdkerrors.Wrapf(types.ErrLimitMaxAmount, "TokenInMaxs is less than the needed LP liquidity to this JoinPoolNoSwap,"+ " upperbound: %v, needed %v", tokenInMaxs, neededLpLiquidity) } else if !(tokenInMaxs.DenomsSubsetOf(neededLpLiquidity)) { - return sdkerrors.Wrapf(types.ErrDenomNotFoundInPool, "TokenInMaxs includes tokens that are not part of the target pool,"+ + return nil, sdk.ZeroInt(), sdkerrors.Wrapf(types.ErrDenomNotFoundInPool, "TokenInMaxs includes tokens that are not part of the target pool,"+ " input tokens: %v, pool tokens %v", tokenInMaxs, neededLpLiquidity) } } diff --git a/x/gamm/keeper/pool_service_test.go b/x/gamm/keeper/pool_service_test.go index f21dcf81b10..e3929d9c43d 100644 --- a/x/gamm/keeper/pool_service_test.go +++ b/x/gamm/keeper/pool_service_test.go @@ -255,6 +255,7 @@ func (suite *KeeperTestSuite) TestCreateBalancerPool() { // TODO: Add more edge cases around TokenInMaxs not containing every token in pool. func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { + fiveKFooAndBar := sdk.NewCoins(sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000))) tests := []struct { fn func(poolId uint64) }{ @@ -309,13 +310,17 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { keeper := suite.App.GAMMKeeper // Test the "tokenInMaxs" // In this case, to get the 50 * OneShare amount of share token, the foo, bar token are expected to be provided as 5000 amounts. - _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ - sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000)), - }) + actualTokenIn, actualSharesOut, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + fiveKFooAndBar[0], fiveKFooAndBar[1]}) suite.Require().NoError(err) liquidity := suite.App.GAMMKeeper.GetTotalLiquidity(suite.Ctx) suite.Require().Equal("15000bar,15000foo", liquidity.String()) + // TODO: Add these tests to more cases, as part of improving this test structure. + // 100% add, so actualTokenIn = max provided + suite.Require().Equal(fiveKFooAndBar, actualTokenIn) + // shares out was estimated perfectly + suite.Require().Equal(types.OneShare.MulRaw(50), actualSharesOut) }, }, { @@ -324,7 +329,7 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { // Test the "tokenInMaxs" with an additional invalid denom // In this case, to get the 50 * OneShare amount of share token, the foo, bar token are expected to be provided as 5000 amounts. // The test input has the correct amount for each, but also includes an incorrect denom that should cause an error - err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + _, _, err := keeper.JoinPoolNoSwap(suite.Ctx, suite.TestAccs[1], poolId, types.OneShare.MulRaw(50), sdk.Coins{ sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000)), sdk.NewCoin("baz", sdk.NewInt(5000)), }) suite.Require().Error(err) @@ -353,6 +358,7 @@ func (suite *KeeperTestSuite) TestJoinPoolNoSwap() { } func (suite *KeeperTestSuite) TestExitPool() { + fiveKFooAndBar := sdk.NewCoins(sdk.NewCoin("bar", sdk.NewInt(5000)), sdk.NewCoin("foo", sdk.NewInt(5000))) tests := []struct { fn func(poolId uint64) }{ @@ -416,10 +422,11 @@ func (suite *KeeperTestSuite) TestExitPool() { // Test the "tokenOutMins" // In this case, to refund the 50000000 amount of share token, the foo, bar token are expected to be refunded as 5000 amounts. - _, err := keeper.ExitPool(suite.Ctx, suite.TestAccs[0], poolId, types.OneShare.MulRaw(50), sdk.Coins{ + exitedCoins, err := keeper.ExitPool(suite.Ctx, suite.TestAccs[0], poolId, types.OneShare.MulRaw(50), sdk.Coins{ sdk.NewCoin("foo", sdk.NewInt(5000)), }) suite.Require().NoError(err) + suite.Require().Equal(fiveKFooAndBar, exitedCoins) }, }, }