diff --git a/Makefile b/Makefile index 1a19705db..fadebd06c 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ help: ## Print this help message .PHONY: interchaintest interchaintest: gen ## Build interchaintest binary into ./bin - go test -ldflags "-X github.com/strangelove-ventures/interchaintest/v8/interchaintest.GitSha=$(shell git describe --always --dirty)" -c -o ./bin/interchaintest ./cmd/interchaintest + go test -ldflags "-X github.com/strangelove-ventures/interchaintest/v9/interchaintest.GitSha=$(shell git describe --always --dirty)" -c -o ./bin/interchaintest ./cmd/interchaintest .PHONY: test test: ## Run unit tests @@ -38,4 +38,4 @@ mod-tidy: ## Run mod tidy .PHONY: proto-gen proto-gen: ## Generate code from protos @echo "Generating Protobuf files" - @$(protoImage) sh ./scripts/protocgen.sh \ No newline at end of file + @$(protoImage) sh ./scripts/protocgen.sh diff --git a/blockdb/messages_view_test.go b/blockdb/messages_view_test.go index 442c563a7..b85b55387 100644 --- a/blockdb/messages_view_test.go +++ b/blockdb/messages_view_test.go @@ -11,11 +11,11 @@ import ( "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/blockdb/tui/model.go b/blockdb/tui/model.go index cdee852ef..884bc386f 100644 --- a/blockdb/tui/model.go +++ b/blockdb/tui/model.go @@ -6,7 +6,7 @@ import ( "github.com/atotto/clipboard" "github.com/rivo/tview" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" ) //go:generate go run golang.org/x/tools/cmd/stringer -type=mainContent diff --git a/blockdb/tui/model_test.go b/blockdb/tui/model_test.go index ec3e832ca..d83dcf03c 100644 --- a/blockdb/tui/model_test.go +++ b/blockdb/tui/model_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" "github.com/stretchr/testify/require" ) diff --git a/blockdb/tui/presenter/cosmos_message.go b/blockdb/tui/presenter/cosmos_message.go index 1f29a9a21..bd51d2565 100644 --- a/blockdb/tui/presenter/cosmos_message.go +++ b/blockdb/tui/presenter/cosmos_message.go @@ -4,7 +4,7 @@ import ( "strconv" "strings" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" ) // CosmosMessage presents a blockdb.CosmosMessageResult. diff --git a/blockdb/tui/presenter/cosmos_message_test.go b/blockdb/tui/presenter/cosmos_message_test.go index ea30330ad..523426a1a 100644 --- a/blockdb/tui/presenter/cosmos_message_test.go +++ b/blockdb/tui/presenter/cosmos_message_test.go @@ -4,7 +4,7 @@ import ( "database/sql" "testing" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" "github.com/stretchr/testify/require" ) diff --git a/blockdb/tui/presenter/test_case.go b/blockdb/tui/presenter/test_case.go index c5e5f1118..9ee4a29bb 100644 --- a/blockdb/tui/presenter/test_case.go +++ b/blockdb/tui/presenter/test_case.go @@ -3,7 +3,7 @@ package presenter import ( "strconv" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" ) // TestCase presents a blockdb.TestCaseResult. diff --git a/blockdb/tui/presenter/test_case_test.go b/blockdb/tui/presenter/test_case_test.go index 525a0b4b2..839984d10 100644 --- a/blockdb/tui/presenter/test_case_test.go +++ b/blockdb/tui/presenter/test_case_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" "github.com/stretchr/testify/require" ) diff --git a/blockdb/tui/presenter/tx.go b/blockdb/tui/presenter/tx.go index d823ba893..f7e4e0603 100644 --- a/blockdb/tui/presenter/tx.go +++ b/blockdb/tui/presenter/tx.go @@ -6,7 +6,7 @@ import ( "strconv" "sync" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" ) var bufPool = sync.Pool{New: func() any { return new(bytes.Buffer) }} diff --git a/blockdb/tui/presenter/tx_test.go b/blockdb/tui/presenter/tx_test.go index 50a91b5c2..98d6bca4a 100644 --- a/blockdb/tui/presenter/tx_test.go +++ b/blockdb/tui/presenter/tx_test.go @@ -4,7 +4,7 @@ import ( "encoding/json" "testing" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" "github.com/stretchr/testify/require" ) diff --git a/blockdb/tui/update.go b/blockdb/tui/update.go index 2287afaed..25f9962d7 100644 --- a/blockdb/tui/update.go +++ b/blockdb/tui/update.go @@ -7,7 +7,7 @@ import ( "github.com/gdamore/tcell/v2" "github.com/rivo/tview" - "github.com/strangelove-ventures/interchaintest/v8/blockdb/tui/presenter" + "github.com/strangelove-ventures/interchaintest/v9/blockdb/tui/presenter" ) // Update should be the argument for *(tview.Application).SetInputCapture. diff --git a/blockdb/tui/update_test.go b/blockdb/tui/update_test.go index 623f563fc..8f6ea1f46 100644 --- a/blockdb/tui/update_test.go +++ b/blockdb/tui/update_test.go @@ -9,7 +9,7 @@ import ( "github.com/gdamore/tcell/v2" "github.com/rivo/tview" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" "github.com/stretchr/testify/require" ) diff --git a/blockdb/tui/views.go b/blockdb/tui/views.go index 3a50633e2..e3d801559 100644 --- a/blockdb/tui/views.go +++ b/blockdb/tui/views.go @@ -8,8 +8,8 @@ import ( "github.com/gdamore/tcell/v2" "github.com/rivo/tview" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" - "github.com/strangelove-ventures/interchaintest/v8/blockdb/tui/presenter" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/blockdb/tui/presenter" ) func headerView(m *Model) *tview.Flex { diff --git a/chain/cosmos/08-wasm-types/client_message.go b/chain/cosmos/08-wasm-types/client_message.go index e86a8477f..a34ac8f4c 100644 --- a/chain/cosmos/08-wasm-types/client_message.go +++ b/chain/cosmos/08-wasm-types/client_message.go @@ -1,7 +1,7 @@ package types import ( - "github.com/cosmos/ibc-go/v8/modules/core/exported" + "github.com/cosmos/ibc-go/v9/modules/core/exported" ) var _ exported.ClientMessage = &ClientMessage{} diff --git a/chain/cosmos/08-wasm-types/client_state.go b/chain/cosmos/08-wasm-types/client_state.go index f607d6f80..243a4bb3b 100644 --- a/chain/cosmos/08-wasm-types/client_state.go +++ b/chain/cosmos/08-wasm-types/client_state.go @@ -4,8 +4,8 @@ import ( storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" // nolint:staticcheck - "github.com/cosmos/ibc-go/v8/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" // nolint:staticcheck + "github.com/cosmos/ibc-go/v9/modules/core/exported" ) var _ exported.ClientState = (*ClientState)(nil) diff --git a/chain/cosmos/08-wasm-types/codec.go b/chain/cosmos/08-wasm-types/codec.go index 324016496..af136d563 100644 --- a/chain/cosmos/08-wasm-types/codec.go +++ b/chain/cosmos/08-wasm-types/codec.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" - "github.com/cosmos/ibc-go/v8/modules/core/exported" + "github.com/cosmos/ibc-go/v9/modules/core/exported" ) // RegisterInterfaces registers the tendermint concrete client-related diff --git a/chain/cosmos/08-wasm-types/consensus_state.go b/chain/cosmos/08-wasm-types/consensus_state.go index 3614100a6..a3cda993e 100644 --- a/chain/cosmos/08-wasm-types/consensus_state.go +++ b/chain/cosmos/08-wasm-types/consensus_state.go @@ -1,7 +1,7 @@ package types import ( - "github.com/cosmos/ibc-go/v8/modules/core/exported" + "github.com/cosmos/ibc-go/v9/modules/core/exported" ) var _ exported.ConsensusState = (*ConsensusState)(nil) diff --git a/chain/cosmos/08-wasm-types/module.go b/chain/cosmos/08-wasm-types/module.go index 013890c0e..3c713a368 100644 --- a/chain/cosmos/08-wasm-types/module.go +++ b/chain/cosmos/08-wasm-types/module.go @@ -13,46 +13,54 @@ import ( "github.com/spf13/cobra" ) -var _ module.AppModuleBasic = AppModuleBasic{} +var _ module.AppModule = AppModule{} -// AppModuleBasic defines the basic application module used by the tendermint light client. +// AppModule defines the basic application module used by the tendermint light client. // Only the RegisterInterfaces function needs to be implemented. All other function perform // a no-op. -type AppModuleBasic struct{} +type AppModule struct{} // Name returns the tendermint module name. -func (AppModuleBasic) Name() string { +func (AppModule) Name() string { return "08-wasm" } // RegisterLegacyAminoCodec performs a no-op. The Wasm client does not support amino. -func (AppModuleBasic) RegisterLegacyAminoCodec(*codec.LegacyAmino) {} +func (AppModule) RegisterLegacyAminoCodec(*codec.LegacyAmino) {} // RegisterInterfaces registers module concrete types into protobuf Any. This allows core IBC // to unmarshal wasm light client types. -func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { +func (AppModule) RegisterInterfaces(registry codectypes.InterfaceRegistry) { RegisterInterfaces(registry) } // DefaultGenesis performs a no-op. Genesis is not supported for the tendermint light client. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { +func (AppModule) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return nil } // ValidateGenesis performs a no-op. Genesis is not supported for the tendermint light client. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { +func (AppModule) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { return nil } // RegisterGRPCGatewayRoutes performs a no-op. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {} +func (AppModule) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {} // GetTxCmd performs a no-op. Please see the 02-client cli commands. -func (AppModuleBasic) GetTxCmd() *cobra.Command { +func (AppModule) GetTxCmd() *cobra.Command { return nil } // GetQueryCmd performs a no-op. Please see the 02-client cli commands. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { +func (AppModule) GetQueryCmd() *cobra.Command { return nil } + +// IsAppModule implements module.AppModule. +func (a AppModule) IsAppModule() { +} + +// IsOnePerModuleType implements module.AppModule. +func (a AppModule) IsOnePerModuleType() { +} diff --git a/chain/cosmos/08-wasm-types/wasm.pb.go b/chain/cosmos/08-wasm-types/wasm.pb.go index a1250579f..d49f25f51 100644 --- a/chain/cosmos/08-wasm-types/wasm.pb.go +++ b/chain/cosmos/08-wasm-types/wasm.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - types "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + types "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" io "io" math "math" math_bits "math/bits" diff --git a/chain/cosmos/address.go b/chain/cosmos/address.go index 121c021bb..d00654833 100644 --- a/chain/cosmos/address.go +++ b/chain/cosmos/address.go @@ -2,9 +2,10 @@ package cosmos import ( "errors" - "github.com/cosmos/cosmos-sdk/types/bech32" "strings" + "github.com/cosmos/cosmos-sdk/types/bech32" + sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -20,11 +21,6 @@ func (c *CosmosChain) AccAddressFromBech32(address string) (addr sdk.AccAddress, return nil, err } - err = sdk.VerifyAddressFormat(bz) - if err != nil { - return nil, err - } - return sdk.AccAddress(bz), nil } diff --git a/chain/cosmos/broadcaster.go b/chain/cosmos/broadcaster.go index c30f19f2e..1c63fc0ba 100644 --- a/chain/cosmos/broadcaster.go +++ b/chain/cosmos/broadcaster.go @@ -15,8 +15,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/tx/signing" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/testutil" ) type ClientContextOpt func(clientContext client.Context) client.Context diff --git a/chain/cosmos/chain_node.go b/chain/cosmos/chain_node.go index 912c2a7fe..b4b2619e3 100644 --- a/chain/cosmos/chain_node.go +++ b/chain/cosmos/chain_node.go @@ -17,6 +17,11 @@ import ( "sync" "time" + "cosmossdk.io/core/address" + banktypes "cosmossdk.io/x/bank/types" + stakingtypes "cosmossdk.io/x/staking/types" + "cosmossdk.io/x/tx/decode" + "cosmossdk.io/x/tx/signing" "github.com/avast/retry-go/v4" tmjson "github.com/cometbft/cometbft/libs/json" "github.com/cometbft/cometbft/p2p" @@ -24,14 +29,14 @@ import ( rpchttp "github.com/cometbft/cometbft/rpc/client/http" coretypes "github.com/cometbft/cometbft/rpc/core/types" libclient "github.com/cometbft/cometbft/rpc/jsonrpc/client" + baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" volumetypes "github.com/docker/docker/api/types/volume" dockerclient "github.com/docker/docker/client" "github.com/docker/go-connections/nat" @@ -41,12 +46,11 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" - icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" - ccvclient "github.com/cosmos/interchain-security/v5/x/ccv/provider/client" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + icatypes "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/types" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" ) // ChainNode represents a node in the test network that is being created @@ -77,9 +81,32 @@ type ChainNode struct { hostGRPCPort string hostP2PPort string cometHostname string + + // new things sdk v0.52 + // TODO: fix in thorchain once done as well + ProtoCodec *codec.ProtoCodec + InterfaceRegistry codectypes.InterfaceRegistry + SingingCtx *signing.Context + AddressCdc address.Codec + Decoder *decode.Decoder } func NewChainNode(log *zap.Logger, validator bool, chain *CosmosChain, dockerClient *dockerclient.Client, networkID string, testName string, image ibc.DockerImage, index int) *ChainNode { + // TODO: move this to the root of the chainNode on init? + cdc := codectestutil.CodecOptions{}.NewCodec() + baseapptestutil.RegisterInterfaces(cdc.InterfaceRegistry()) + signingCtx := cdc.InterfaceRegistry().SigningContext() + ac := signingCtx.AddressCodec() + // txCfg := authTx.NewTxConfig(cdc, signingCtx.AddressCodec(), signingCtx.ValidatorAddressCodec(), authTx.DefaultSignModes) + + dec, err := decode.NewDecoder(decode.Options{ + SigningContext: signingCtx, + ProtoCodec: cdc, + }) + if err != nil { + log.Error("failed to create decoder", zap.Error(err)) + } + tn := &ChainNode{ log: log.With( zap.Bool("validator", validator), @@ -94,6 +121,14 @@ func NewChainNode(log *zap.Logger, validator bool, chain *CosmosChain, dockerCli TestName: testName, Image: image, Index: index, + + // TODO: if chain is sdk v0.52, set these? else don't ? + // SDK v0.52 + ProtoCodec: cdc, + InterfaceRegistry: cdc.InterfaceRegistry(), + SingingCtx: signingCtx, + AddressCdc: ac, + Decoder: dec, } tn.containerLifecycle = dockerutil.NewContainerLifecycle(log, dockerClient, tn.Name()) @@ -140,7 +175,7 @@ func (tn *ChainNode) NewClient(addr string) error { } httpClient.Timeout = 10 * time.Second - rpcClient, err := rpchttp.NewWithClient(addr, "/websocket", httpClient) + rpcClient, err := rpchttp.NewWithClient(addr, httpClient) if err != nil { return err } @@ -450,7 +485,7 @@ func (tn *ChainNode) FindTxs(ctx context.Context, height int64) ([]blockdb.Tx, e var newTx blockdb.Tx newTx.Data = []byte(fmt.Sprintf(`{"data":"%s"}`, hex.EncodeToString(tx))) - sdkTx, err := decodeTX(interfaceRegistry, tx) + sdkTx, err := decodeTX(tn.AddressCdc, interfaceRegistry, tn.Decoder, tx) if err != nil { tn.logger().Info("Failed to decode tx", zap.Int64("height", height), zap.Error(err)) continue @@ -462,7 +497,7 @@ func (tn *ChainNode) FindTxs(ctx context.Context, height int64) ([]blockdb.Tx, e } newTx.Data = b - rTx := blockRes.TxsResults[i] + rTx := blockRes.TxResults[i] newTx.Events = make([]blockdb.Event, len(rTx.Events)) for j, e := range rTx.Events { @@ -882,7 +917,8 @@ func (tn *ChainNode) SendIBCTransfer( return tn.ExecTx(ctx, keyName, command...) } -func (tn *ChainNode) ConsumerAdditionProposal(ctx context.Context, keyName string, prop ccvclient.ConsumerAdditionProposalJSON) (string, error) { +// TODO: make tyope ConsumerAdditionProposalJSON +func (tn *ChainNode) ConsumerAdditionProposal(ctx context.Context, keyName string, prop ConsumerAdditionProposalJSON) (string, error) { propBz, err := json.Marshal(prop) if err != nil { return "", err @@ -1477,7 +1513,7 @@ func (tn *ChainNode) SendICABankTransfer(ctx context.Context, connectionID, from fromAddress := sdk.MustAccAddressFromBech32(fromAddr) toAddress := sdk.MustAccAddressFromBech32(amount.Address) coin := sdk.NewCoin(amount.Denom, amount.Amount) - msg := banktypes.NewMsgSend(fromAddress, toAddress, sdk.NewCoins(coin)) + msg := banktypes.NewMsgSend(fromAddress.String(), toAddress.String(), sdk.NewCoins(coin)) // TODO: use address codec here? msgs := []sdk.Msg{msg} ir := tn.Chain.Config().EncodingConfig.InterfaceRegistry diff --git a/chain/cosmos/codec.go b/chain/cosmos/codec.go index b297d2729..82ffaa1ca 100644 --- a/chain/cosmos/codec.go +++ b/chain/cosmos/codec.go @@ -1,6 +1,18 @@ package cosmos import ( + "cosmossdk.io/core/address" + "cosmossdk.io/x/bank" + "cosmossdk.io/x/consensus" + distr "cosmossdk.io/x/distribution" + "cosmossdk.io/x/gov" + + "cosmossdk.io/x/mint" + "cosmossdk.io/x/params" + + "cosmossdk.io/x/slashing" + "cosmossdk.io/x/staking" + "cosmossdk.io/x/tx/decode" "cosmossdk.io/x/upgrade" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -8,56 +20,45 @@ import ( "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/x/auth" authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" - "github.com/cosmos/cosmos-sdk/x/bank" - "github.com/cosmos/cosmos-sdk/x/consensus" - distr "github.com/cosmos/cosmos-sdk/x/distribution" "github.com/cosmos/cosmos-sdk/x/genutil" - genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" - "github.com/cosmos/cosmos-sdk/x/gov" - govclient "github.com/cosmos/cosmos-sdk/x/gov/client" - "github.com/cosmos/cosmos-sdk/x/mint" - "github.com/cosmos/cosmos-sdk/x/params" - paramsclient "github.com/cosmos/cosmos-sdk/x/params/client" - "github.com/cosmos/cosmos-sdk/x/slashing" - "github.com/cosmos/cosmos-sdk/x/staking" - "github.com/cosmos/ibc-go/modules/capability" - transfer "github.com/cosmos/ibc-go/v8/modules/apps/transfer" - ibccore "github.com/cosmos/ibc-go/v8/modules/core" - ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - ccvprovider "github.com/cosmos/interchain-security/v5/x/ccv/provider" - ibcwasm "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos/08-wasm-types" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" + transfer "github.com/cosmos/ibc-go/v9/modules/apps/transfer" + ibccore "github.com/cosmos/ibc-go/v9/modules/core" + ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" + // ccvprovider "github.com/cosmos/interchain-security/v5/x/ccv/provider" // TODO: + // genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + // ibcwasm "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos/08-wasm-types" + // govclient "cosmossdk.io/x/gov/client" + // paramsclient "cosmossdk.io/x/params/client" ) func DefaultEncoding() testutil.TestEncodingConfig { return testutil.MakeTestEncodingConfig( - auth.AppModuleBasic{}, - genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - bank.AppModuleBasic{}, - capability.AppModuleBasic{}, - staking.AppModuleBasic{}, - mint.AppModuleBasic{}, - distr.AppModuleBasic{}, - gov.NewAppModuleBasic( - []govclient.ProposalHandler{ - paramsclient.ProposalHandler, - }, - ), - params.AppModuleBasic{}, - slashing.AppModuleBasic{}, - upgrade.AppModuleBasic{}, - consensus.AppModuleBasic{}, - transfer.AppModuleBasic{}, - ibccore.AppModuleBasic{}, - ibctm.AppModuleBasic{}, - ibcwasm.AppModuleBasic{}, - ccvprovider.AppModuleBasic{}, + codectestutil.CodecOptions{}, + auth.AppModule{}, + // genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + genutil.AppModule{}, + bank.AppModule{}, + staking.AppModule{}, + mint.AppModule{}, + distr.AppModule{}, + gov.AppModule{}, + params.AppModule{}, + slashing.AppModule{}, + upgrade.AppModule{}, + consensus.AppModule{}, + transfer.AppModule{}, + ibccore.AppModule{}, + ibctm.AppModule{}, + // ibcwasm.AppModule{}, + // ccvprovider.AppModule{}, // TODO: ) } -func decodeTX(interfaceRegistry codectypes.InterfaceRegistry, txbz []byte) (sdk.Tx, error) { +func decodeTX(ac address.Codec, interfaceRegistry codectypes.InterfaceRegistry, txDecoder *decode.Decoder, txbz []byte) (sdk.Tx, error) { cdc := codec.NewProtoCodec(interfaceRegistry) - return authTx.DefaultTxDecoder(cdc)(txbz) + return authTx.DefaultJSONTxDecoder(ac, cdc, txDecoder)(txbz) } func encodeTxToJSON(interfaceRegistry codectypes.InterfaceRegistry, tx sdk.Tx) ([]byte, error) { diff --git a/chain/cosmos/cosmos_chain.go b/chain/cosmos/cosmos_chain.go index c493806ce..c8ed9d6ef 100644 --- a/chain/cosmos/cosmos_chain.go +++ b/chain/cosmos/cosmos_chain.go @@ -14,6 +14,8 @@ import ( "sync" sdkmath "cosmossdk.io/math" + govtypes "cosmossdk.io/x/gov/types" + paramsutils "cosmossdk.io/x/params/client/utils" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" @@ -22,20 +24,17 @@ import ( "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" // nolint:staticcheck - chanTypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - ccvclient "github.com/cosmos/interchain-security/v5/x/ccv/provider/client" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" // nolint:staticcheck + chanTypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" dockertypes "github.com/docker/docker/api/types" volumetypes "github.com/docker/docker/api/types/volume" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" - wasmtypes "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos/08-wasm-types" - "github.com/strangelove-ventures/interchaintest/v8/chain/internal/tendermint" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" + wasmtypes "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos/08-wasm-types" + "github.com/strangelove-ventures/interchaintest/v9/chain/internal/tendermint" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) @@ -510,7 +509,7 @@ func (c *CosmosChain) QueryBankMetadata(ctx context.Context, denom string) (*Ban } // ConsumerAdditionProposal submits a legacy governance proposal to add a consumer to the chain. -func (c *CosmosChain) ConsumerAdditionProposal(ctx context.Context, keyName string, prop ccvclient.ConsumerAdditionProposalJSON) (tx TxProposal, _ error) { +func (c *CosmosChain) ConsumerAdditionProposal(ctx context.Context, keyName string, prop ConsumerAdditionProposalJSON) (tx TxProposal, _ error) { txHash, err := c.getFullNode().ConsumerAdditionProposal(ctx, keyName, prop) if err != nil { return tx, fmt.Errorf("failed to submit consumer addition proposal: %w", err) diff --git a/chain/cosmos/genesis.go b/chain/cosmos/genesis.go index 1068a15a1..7fbb7add0 100644 --- a/chain/cosmos/genesis.go +++ b/chain/cosmos/genesis.go @@ -7,7 +7,7 @@ import ( "strings" "github.com/icza/dyno" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) type GenesisKV struct { diff --git a/chain/cosmos/ics.go b/chain/cosmos/ics.go index c6743dbf9..0b67ba408 100644 --- a/chain/cosmos/ics.go +++ b/chain/cosmos/ics.go @@ -12,21 +12,21 @@ import ( "time" sdkmath "cosmossdk.io/math" + govv1beta1 "cosmossdk.io/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/types" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" // nolint:staticcheck - ccvclient "github.com/cosmos/interchain-security/v5/x/ccv/provider/client" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" // nolint:staticcheck + "github.com/icza/dyno" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/tidwall/gjson" "go.uber.org/zap" "golang.org/x/mod/semver" "golang.org/x/sync/errgroup" - stakingttypes "github.com/cosmos/cosmos-sdk/x/staking/types" + stakingttypes "cosmossdk.io/x/staking/types" ) const ( @@ -34,6 +34,34 @@ const ( icsVer400 = "v4.0.0" ) +// https://github.com/cosmos/interchain-security/blob/v5.1.1/x/ccv/provider/client/legacy_proposals.go +// may change with permissionless ICS. +type ConsumerAdditionProposalJSON struct { + Title string `json:"title"` + Summary string `json:"summary"` + ChainId string `json:"chain_id"` + InitialHeight clienttypes.Height `json:"initial_height"` + GenesisHash []byte `json:"genesis_hash"` + BinaryHash []byte `json:"binary_hash"` + SpawnTime time.Time `json:"spawn_time"` + + ConsumerRedistributionFraction string `json:"consumer_redistribution_fraction"` + BlocksPerDistributionTransmission int64 `json:"blocks_per_distribution_transmission"` + DistributionTransmissionChannel string `json:"distribution_transmission_channel"` + HistoricalEntries int64 `json:"historical_entries"` + CcvTimeoutPeriod time.Duration `json:"ccv_timeout_period"` + TransferTimeoutPeriod time.Duration `json:"transfer_timeout_period"` + UnbondingPeriod time.Duration `json:"unbonding_period"` + + Deposit string `json:"deposit"` + + TopN uint32 `json:"top_N"` + ValidatorsPowerCap uint32 `json:"validators_power_cap"` + ValidatorSetCap uint32 `json:"validator_set_cap"` + Allowlist []string `json:"allowlist"` + Denylist []string `json:"denylist"` +} + // FinishICSProviderSetup sets up the base of an ICS connection with respect to the relayer, provider actions, and flushing of packets. // 1. Stop the relayer, then start it back up. This completes the ICS20-1 transfer channel setup. // - You must set look-back block history >100 blocks in [interchaintest.NewBuiltinRelayerFactory]. @@ -158,7 +186,7 @@ func (c *CosmosChain) StartProvider(testName string, ctx context.Context, additi return fmt.Errorf("invalid ICS_SPAWN_TIME_WAIT %s: %w", spawnTimeWait, err) } for _, consumer := range c.Consumers { - prop := ccvclient.ConsumerAdditionProposalJSON{ + prop := ConsumerAdditionProposalJSON{ Title: fmt.Sprintf("Addition of %s consumer chain", consumer.cfg.Name), Summary: "Proposal to add new consumer chain", ChainId: consumer.cfg.ChainID, diff --git a/chain/cosmos/module_authz.go b/chain/cosmos/module_authz.go index ad5ac5e76..ed37d6018 100644 --- a/chain/cosmos/module_authz.go +++ b/chain/cosmos/module_authz.go @@ -6,9 +6,9 @@ import ( "path" "strings" + "cosmossdk.io/x/authz" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/authz" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) // AuthzGrant grants a message as a permission to an account. diff --git a/chain/cosmos/module_bank.go b/chain/cosmos/module_bank.go index 5f54071ce..7b9a96b7d 100644 --- a/chain/cosmos/module_bank.go +++ b/chain/cosmos/module_bank.go @@ -6,10 +6,10 @@ import ( sdkmath "cosmossdk.io/math" + banktypes "cosmossdk.io/x/bank/types" "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) // BankSend sends tokens from one account to another. diff --git a/chain/cosmos/module_cosmwasm.go b/chain/cosmos/module_cosmwasm.go index 4940471ec..451ab3b6c 100644 --- a/chain/cosmos/module_cosmwasm.go +++ b/chain/cosmos/module_cosmwasm.go @@ -12,7 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/testutil" ) type InstantiateContractAttribute struct { diff --git a/chain/cosmos/module_distribution.go b/chain/cosmos/module_distribution.go index 29acc0de2..4c470c5b5 100644 --- a/chain/cosmos/module_distribution.go +++ b/chain/cosmos/module_distribution.go @@ -3,8 +3,8 @@ package cosmos import ( "context" + distrtypes "cosmossdk.io/x/distribution/types" sdk "github.com/cosmos/cosmos-sdk/types" - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" ) // DistributionFundCommunityPool funds the community pool with the specified amount of coins. diff --git a/chain/cosmos/module_gov.go b/chain/cosmos/module_gov.go index d9fac35c1..95f762af0 100644 --- a/chain/cosmos/module_gov.go +++ b/chain/cosmos/module_gov.go @@ -9,12 +9,12 @@ import ( "path/filepath" "strconv" + govv1 "cosmossdk.io/x/gov/types/v1" + govv1beta1 "cosmossdk.io/x/gov/types/v1beta1" + paramsutils "cosmossdk.io/x/params/client/utils" upgradetypes "cosmossdk.io/x/upgrade/types" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" ) // VoteOnProposal submits a vote for the specified proposal. diff --git a/chain/cosmos/module_slashing.go b/chain/cosmos/module_slashing.go index 3f5c98439..d10041bf0 100644 --- a/chain/cosmos/module_slashing.go +++ b/chain/cosmos/module_slashing.go @@ -3,7 +3,7 @@ package cosmos import ( "context" - slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + slashingtypes "cosmossdk.io/x/slashing/types" ) // SlashingUnJail unjails a validator. diff --git a/chain/cosmos/module_staking.go b/chain/cosmos/module_staking.go index f37ef4f17..88da3d828 100644 --- a/chain/cosmos/module_staking.go +++ b/chain/cosmos/module_staking.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + stakingtypes "cosmossdk.io/x/staking/types" ) // StakingCancelUnbond cancels an unbonding delegation. diff --git a/chain/cosmos/module_tokenfactory.go b/chain/cosmos/module_tokenfactory.go index 3e5bf5a41..057192c40 100644 --- a/chain/cosmos/module_tokenfactory.go +++ b/chain/cosmos/module_tokenfactory.go @@ -6,7 +6,7 @@ import ( "fmt" "strconv" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) // TokenFactoryCreateDenom creates a new tokenfactory token in the format 'factory/accountaddress/name'. diff --git a/chain/cosmos/module_vesting.go b/chain/cosmos/module_vesting.go.archive similarity index 93% rename from chain/cosmos/module_vesting.go rename to chain/cosmos/module_vesting.go.archive index 4e318a47f..45611a12e 100644 --- a/chain/cosmos/module_vesting.go +++ b/chain/cosmos/module_vesting.go.archive @@ -6,10 +6,12 @@ import ( "fmt" "path" - vestingcli "github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" + // vestingcli "github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" ) +// TODO: re-add + // VestingCreateAccount creates a new vesting account funded with an allocation of tokens. The account can either be a delayed or continuous vesting account, which is determined by the '--delayed' flag. // All vesting accounts created will have their start time set by the committed block's time. The end_time must be provided as a UNIX epoch timestamp. func (tn *ChainNode) VestingCreateAccount(ctx context.Context, keyName string, toAddr string, coin string, endTime int64, flags ...string) error { diff --git a/chain/cosmos/node_test.go b/chain/cosmos/node_test.go index e3223dbaf..d33f64b81 100644 --- a/chain/cosmos/node_test.go +++ b/chain/cosmos/node_test.go @@ -4,8 +4,8 @@ import ( "strings" "testing" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" + stakingtypes "cosmossdk.io/x/staking/types" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" "github.com/stretchr/testify/require" ) diff --git a/chain/cosmos/osmosis.go b/chain/cosmos/osmosis.go index ab81c5f99..eb4aed26a 100644 --- a/chain/cosmos/osmosis.go +++ b/chain/cosmos/osmosis.go @@ -7,7 +7,7 @@ import ( "path/filepath" "strings" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" ) // OsmosisPoolParams defines parameters for creating an osmosis gamm liquidity pool diff --git a/chain/cosmos/poll.go b/chain/cosmos/poll.go index 04f642d9b..c275ef963 100644 --- a/chain/cosmos/poll.go +++ b/chain/cosmos/poll.go @@ -5,12 +5,16 @@ import ( "errors" "fmt" + govv1 "cosmossdk.io/x/gov/types/v1" + govv1beta1 "cosmossdk.io/x/gov/types/v1beta1" + "cosmossdk.io/x/tx/decode" + baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + "go.uber.org/zap" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" ) // PollForProposalStatus attempts to find a proposal with matching ID and status using gov v1. @@ -63,7 +67,24 @@ func PollForMessage[T any](ctx context.Context, chain *CosmosChain, registry cod return zero, err } for _, tx := range block.Block.Txs { - sdkTx, err := decodeTX(registry, tx) + + // TODO: move this to the root + cdc := codectestutil.CodecOptions{}.NewCodec() + baseapptestutil.RegisterInterfaces(cdc.InterfaceRegistry()) + signingCtx := cdc.InterfaceRegistry().SigningContext() + ac := signingCtx.AddressCodec() + // txCfg := authTx.NewTxConfig(cdc, signingCtx.AddressCodec(), signingCtx.ValidatorAddressCodec(), authTx.DefaultSignModes) + + dec, err := decode.NewDecoder(decode.Options{ + SigningContext: signingCtx, + ProtoCodec: cdc, + }) + if err != nil { + zap.L().Error("failed to create decoder", zap.Error(err)) + continue + } + + sdkTx, err := decodeTX(ac, registry, dec, tx) if err != nil { return zero, err } diff --git a/chain/cosmos/query.go b/chain/cosmos/query.go index d710d453c..4b7f0f103 100644 --- a/chain/cosmos/query.go +++ b/chain/cosmos/query.go @@ -4,9 +4,13 @@ import ( "context" "fmt" + "cosmossdk.io/x/tx/decode" tmtypes "github.com/cometbft/cometbft/rpc/core/types" + baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + "go.uber.org/zap" ) type blockClient interface { @@ -22,7 +26,23 @@ func RangeBlockMessages(ctx context.Context, interfaceRegistry codectypes.Interf return fmt.Errorf("tendermint rpc get block: %w", err) } for _, txbz := range block.Block.Txs { - tx, err := decodeTX(interfaceRegistry, txbz) + // TODO: move this to the root + cdc := codectestutil.CodecOptions{}.NewCodec() + baseapptestutil.RegisterInterfaces(cdc.InterfaceRegistry()) + signingCtx := cdc.InterfaceRegistry().SigningContext() + ac := signingCtx.AddressCodec() + // txCfg := authTx.NewTxConfig(cdc, signingCtx.AddressCodec(), signingCtx.ValidatorAddressCodec(), authTx.DefaultSignModes) + + dec, err := decode.NewDecoder(decode.Options{ + SigningContext: signingCtx, + ProtoCodec: cdc, + }) + if err != nil { + zap.L().Error("failed to create decoder", zap.Error(err)) + continue + } + + tx, err := decodeTX(ac, interfaceRegistry, dec, txbz) if err != nil { return fmt.Errorf("decode tendermint tx: %w", err) } diff --git a/chain/cosmos/sidecar.go b/chain/cosmos/sidecar.go index 9927e6ec0..135f17cfc 100644 --- a/chain/cosmos/sidecar.go +++ b/chain/cosmos/sidecar.go @@ -9,8 +9,8 @@ import ( "github.com/docker/go-connections/nat" "go.uber.org/zap" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) type SidecarProcesses []*SidecarProcess diff --git a/chain/cosmos/wallet.go b/chain/cosmos/wallet.go index 2ee27bc08..8f3d7696b 100644 --- a/chain/cosmos/wallet.go +++ b/chain/cosmos/wallet.go @@ -2,7 +2,7 @@ package cosmos import ( "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) var _ ibc.Wallet = &CosmosWallet{} diff --git a/chain/cosmos/wasm/wasm.go b/chain/cosmos/wasm/wasm.go index 46886314a..4f3724e36 100644 --- a/chain/cosmos/wasm/wasm.go +++ b/chain/cosmos/wasm/wasm.go @@ -1,17 +1,17 @@ package wasm import ( - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + // wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" // TODO: "github.com/cosmos/cosmos-sdk/types/module/testutil" // simappparams "github.com/cosmos/cosmos-sdk/simapp/params" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" ) func WasmEncoding() *testutil.TestEncodingConfig { cfg := cosmos.DefaultEncoding() - wasmtypes.RegisterInterfaces(cfg.InterfaceRegistry) + // wasmtypes.RegisterInterfaces(cfg.InterfaceRegistry) return &cfg } diff --git a/chain/ethereum/ethererum_chain.go b/chain/ethereum/ethererum_chain.go index 010bd0068..046e91fd2 100644 --- a/chain/ethereum/ethererum_chain.go +++ b/chain/ethereum/ethererum_chain.go @@ -14,9 +14,9 @@ import ( dockerclient "github.com/docker/docker/client" "github.com/docker/go-connections/nat" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "go.uber.org/zap" "github.com/ethereum/go-ethereum/common" diff --git a/chain/ethereum/foundry/anvil_chain.go b/chain/ethereum/foundry/anvil_chain.go index d42b8c7ef..fb0ca1afa 100644 --- a/chain/ethereum/foundry/anvil_chain.go +++ b/chain/ethereum/foundry/anvil_chain.go @@ -12,8 +12,8 @@ import ( "github.com/docker/docker/api/types/mount" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "go.uber.org/zap" ) diff --git a/chain/ethereum/foundry/default_configs.go b/chain/ethereum/foundry/default_configs.go index 498f132ae..09e416be0 100644 --- a/chain/ethereum/foundry/default_configs.go +++ b/chain/ethereum/foundry/default_configs.go @@ -1,7 +1,7 @@ package foundry import ( - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func DefaultEthereumAnvilChainConfig( diff --git a/chain/ethereum/foundry/forge.go b/chain/ethereum/foundry/forge.go index a37084e83..dccf52c88 100644 --- a/chain/ethereum/foundry/forge.go +++ b/chain/ethereum/foundry/forge.go @@ -8,7 +8,7 @@ import ( "path/filepath" "github.com/docker/docker/api/types/mount" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" ) // cli options for the `forge script` command diff --git a/chain/ethereum/geth/default_configs.go b/chain/ethereum/geth/default_configs.go index a38235c8f..c0e029a0f 100644 --- a/chain/ethereum/geth/default_configs.go +++ b/chain/ethereum/geth/default_configs.go @@ -1,7 +1,7 @@ package geth import ( - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func DefaultEthereumGethChainConfig( diff --git a/chain/ethereum/geth/geth_chain.go b/chain/ethereum/geth/geth_chain.go index cf9538870..e4568879c 100644 --- a/chain/ethereum/geth/geth_chain.go +++ b/chain/ethereum/geth/geth_chain.go @@ -12,9 +12,9 @@ import ( "github.com/docker/docker/api/types/mount" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "go.uber.org/zap" ) diff --git a/chain/ethereum/unimplemented.go b/chain/ethereum/unimplemented.go index 4893aaf49..298ae53b4 100644 --- a/chain/ethereum/unimplemented.go +++ b/chain/ethereum/unimplemented.go @@ -4,7 +4,7 @@ import ( "context" "runtime" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func PanicFunctionName() { diff --git a/chain/ethereum/wallet.go b/chain/ethereum/wallet.go index 86e6688a7..c5a94b88d 100644 --- a/chain/ethereum/wallet.go +++ b/chain/ethereum/wallet.go @@ -2,7 +2,7 @@ package ethereum import ( "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) var _ ibc.Wallet = &EthereumWallet{} diff --git a/chain/internal/tendermint/tendermint_node.go b/chain/internal/tendermint/tendermint_node.go index ab9ff578f..41eab06f5 100644 --- a/chain/internal/tendermint/tendermint_node.go +++ b/chain/internal/tendermint/tendermint_node.go @@ -18,9 +18,9 @@ import ( dockerclient "github.com/docker/docker/client" "github.com/docker/go-connections/nat" "github.com/hashicorp/go-version" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "go.uber.org/zap" ) @@ -113,7 +113,7 @@ func (tn *TendermintNode) NewClient(addr string) error { } httpClient.Timeout = 10 * time.Second - rpcClient, err := rpchttp.NewWithClient(addr, "/websocket", httpClient) + rpcClient, err := rpchttp.NewWithClient(addr, httpClient) if err != nil { return err } diff --git a/chain/penumbra/cnidarium/v1/cnidarium.pb.go b/chain/penumbra/cnidarium/v1/cnidarium.pb.go index dfc2932b0..3973a480c 100644 --- a/chain/penumbra/cnidarium/v1/cnidarium.pb.go +++ b/chain/penumbra/cnidarium/v1/cnidarium.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - types "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" + types "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/app/v1/app.pb.go b/chain/penumbra/core/app/v1/app.pb.go index b18c8a031..4d10a909b 100644 --- a/chain/penumbra/core/app/v1/app.pb.go +++ b/chain/penumbra/core/app/v1/app.pb.go @@ -8,18 +8,18 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v111 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/auction/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/community_pool/v1" - v110 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/dex/v1" - v17 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/distributions/v1" - v16 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/fee/v1" - v18 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/funding/v1" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/governance/v1" - v14 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/ibc/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/sct/v1" - v19 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/shielded_pool/v1" - v15 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/stake/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/transaction/v1" + v111 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/auction/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/community_pool/v1" + v110 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/dex/v1" + v17 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/distributions/v1" + v16 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/fee/v1" + v18 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/funding/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/governance/v1" + v14 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/ibc/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/sct/v1" + v19 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/shielded_pool/v1" + v15 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/stake/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/transaction/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/asset/v1/asset.pb.go b/chain/penumbra/core/asset/v1/asset.pb.go index 8ee968015..6da3659da 100644 --- a/chain/penumbra/core/asset/v1/asset.pb.go +++ b/chain/penumbra/core/asset/v1/asset.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/codec/types" proto "github.com/cosmos/gogoproto/proto" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" io "io" math "math" math_bits "math/bits" diff --git a/chain/penumbra/core/component/auction/v1/auction.pb.go b/chain/penumbra/core/component/auction/v1/auction.pb.go index a7948415d..8bf5b3912 100644 --- a/chain/penumbra/core/component/auction/v1/auction.pb.go +++ b/chain/penumbra/core/component/auction/v1/auction.pb.go @@ -9,9 +9,9 @@ import ( types "github.com/cosmos/cosmos-sdk/codec/types" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/dex/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/dex/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/component/community_pool/v1/community_pool.pb.go b/chain/penumbra/core/component/community_pool/v1/community_pool.pb.go index 8ffd55e5f..13bd1babd 100644 --- a/chain/penumbra/core/component/community_pool/v1/community_pool.pb.go +++ b/chain/penumbra/core/component/community_pool/v1/community_pool.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/component/compact_block/v1/compact_block.pb.go b/chain/penumbra/core/component/compact_block/v1/compact_block.pb.go index cbdac2261..b4530a347 100644 --- a/chain/penumbra/core/component/compact_block/v1/compact_block.pb.go +++ b/chain/penumbra/core/component/compact_block/v1/compact_block.pb.go @@ -8,11 +8,11 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/dex/v1" - v14 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/fee/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/sct/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/shielded_pool/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/tct/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/dex/v1" + v14 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/fee/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/sct/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/shielded_pool/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/tct/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/component/dex/v1/dex.pb.go b/chain/penumbra/core/component/dex/v1/dex.pb.go index 4ae28d626..5b368ac6f 100644 --- a/chain/penumbra/core/component/dex/v1/dex.pb.go +++ b/chain/penumbra/core/component/dex/v1/dex.pb.go @@ -9,14 +9,14 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v14 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/fee/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/sct/v1" - v17 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/shielded_pool/v1" - v15 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" - v16 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/txhash/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/tct/v1" + v14 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/fee/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/sct/v1" + v17 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/shielded_pool/v1" + v15 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" + v16 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/txhash/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/tct/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/component/fee/v1/fee.pb.go b/chain/penumbra/core/component/fee/v1/fee.pb.go index a1cc0a19b..38141943c 100644 --- a/chain/penumbra/core/component/fee/v1/fee.pb.go +++ b/chain/penumbra/core/component/fee/v1/fee.pb.go @@ -8,8 +8,8 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/component/funding/v1/funding.pb.go b/chain/penumbra/core/component/funding/v1/funding.pb.go index 174d3e993..581821802 100644 --- a/chain/penumbra/core/component/funding/v1/funding.pb.go +++ b/chain/penumbra/core/component/funding/v1/funding.pb.go @@ -6,7 +6,7 @@ package fundingv1 import ( fmt "fmt" proto "github.com/cosmos/gogoproto/proto" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" io "io" math "math" math_bits "math/bits" diff --git a/chain/penumbra/core/component/governance/v1/governance.pb.go b/chain/penumbra/core/component/governance/v1/governance.pb.go index 0990a918e..b0954045b 100644 --- a/chain/penumbra/core/component/governance/v1/governance.pb.go +++ b/chain/penumbra/core/component/governance/v1/governance.pb.go @@ -9,20 +9,20 @@ import ( types "github.com/cosmos/cosmos-sdk/codec/types" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v113 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/auction/v1" - v17 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/community_pool/v1" - v112 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/dex/v1" - v110 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/distributions/v1" - v19 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/fee/v1" - v111 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/funding/v1" - v18 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/ibc/v1" - v14 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/sct/v1" - v15 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/shielded_pool/v1" - v16 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/stake/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/decaf377_rdsa/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v113 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/auction/v1" + v17 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/community_pool/v1" + v112 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/dex/v1" + v110 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/distributions/v1" + v19 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/fee/v1" + v111 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/funding/v1" + v18 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/ibc/v1" + v14 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/sct/v1" + v15 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/shielded_pool/v1" + v16 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/stake/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/decaf377_rdsa/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/component/ibc/v1/ibc.pb.go b/chain/penumbra/core/component/ibc/v1/ibc.pb.go index b8503b05c..eeb049791 100644 --- a/chain/penumbra/core/component/ibc/v1/ibc.pb.go +++ b/chain/penumbra/core/component/ibc/v1/ibc.pb.go @@ -7,10 +7,10 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/codec/types" proto "github.com/cosmos/gogoproto/proto" - types1 "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" + types1 "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" io "io" math "math" math_bits "math/bits" diff --git a/chain/penumbra/core/component/sct/v1/sct.pb.go b/chain/penumbra/core/component/sct/v1/sct.pb.go index e6d67602f..7580be2ce 100644 --- a/chain/penumbra/core/component/sct/v1/sct.pb.go +++ b/chain/penumbra/core/component/sct/v1/sct.pb.go @@ -9,7 +9,7 @@ import ( grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" types "github.com/cosmos/gogoproto/types" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/tct/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/tct/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/component/shielded_pool/v1/shielded_pool.pb.go b/chain/penumbra/core/component/shielded_pool/v1/shielded_pool.pb.go index fe8ac00e7..fa5f98bdb 100644 --- a/chain/penumbra/core/component/shielded_pool/v1/shielded_pool.pb.go +++ b/chain/penumbra/core/component/shielded_pool/v1/shielded_pool.pb.go @@ -8,14 +8,14 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v15 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/sct/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" - v17 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/txhash/v1" - v16 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/decaf377_fmd/v1" - v14 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/decaf377_rdsa/v1" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/tct/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v15 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/sct/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" + v17 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/txhash/v1" + v16 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/decaf377_fmd/v1" + v14 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/decaf377_rdsa/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/tct/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/component/stake/v1/stake.pb.go b/chain/penumbra/core/component/stake/v1/stake.pb.go index 7515f763f..f38f02563 100644 --- a/chain/penumbra/core/component/stake/v1/stake.pb.go +++ b/chain/penumbra/core/component/stake/v1/stake.pb.go @@ -8,10 +8,10 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/sct/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/sct/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/core/transaction/v1/transaction.pb.go b/chain/penumbra/core/transaction/v1/transaction.pb.go index e38fda34d..77c8312fa 100644 --- a/chain/penumbra/core/transaction/v1/transaction.pb.go +++ b/chain/penumbra/core/transaction/v1/transaction.pb.go @@ -7,20 +7,20 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/codec/types" proto "github.com/cosmos/gogoproto/proto" - v111 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v19 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/auction/v1" - v15 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/dex/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/fee/v1" - v18 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/governance/v1" - v17 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/ibc/v1" - v113 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/sct/v1" - v14 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/shielded_pool/v1" - v16 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/stake/v1" - v110 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v112 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/txhash/v1" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/decaf377_fmd/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/decaf377_rdsa/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/tct/v1" + v111 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v19 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/auction/v1" + v15 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/dex/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/fee/v1" + v18 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/governance/v1" + v17 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/ibc/v1" + v113 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/sct/v1" + v14 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/shielded_pool/v1" + v16 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/stake/v1" + v110 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v112 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/txhash/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/decaf377_fmd/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/decaf377_rdsa/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/tct/v1" io "io" math "math" math_bits "math/bits" diff --git a/chain/penumbra/custody/threshold/v1/threshold.pb.go b/chain/penumbra/custody/threshold/v1/threshold.pb.go index d5f54e813..b5eec3df7 100644 --- a/chain/penumbra/custody/threshold/v1/threshold.pb.go +++ b/chain/penumbra/custody/threshold/v1/threshold.pb.go @@ -6,10 +6,10 @@ package thresholdv1 import ( fmt "fmt" proto "github.com/cosmos/gogoproto/proto" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/governance/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/stake/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/transaction/v1" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/decaf377_frost/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/governance/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/stake/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/transaction/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/decaf377_frost/v1" io "io" math "math" math_bits "math/bits" diff --git a/chain/penumbra/custody/v1/custody.pb.go b/chain/penumbra/custody/v1/custody.pb.go index e16ef148d..4d4abfd00 100644 --- a/chain/penumbra/custody/v1/custody.pb.go +++ b/chain/penumbra/custody/v1/custody.pb.go @@ -8,11 +8,11 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/governance/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/stake/v1" - v14 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/transaction/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/decaf377_rdsa/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/governance/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/stake/v1" + v14 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/transaction/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/decaf377_rdsa/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/penumbra_app_node.go b/chain/penumbra/penumbra_app_node.go index 7f61ed81d..e8f1d44af 100644 --- a/chain/penumbra/penumbra_app_node.go +++ b/chain/penumbra/penumbra_app_node.go @@ -13,8 +13,8 @@ import ( "github.com/docker/docker/client" dockerclient "github.com/docker/docker/client" "github.com/docker/go-connections/nat" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "go.uber.org/zap" ) diff --git a/chain/penumbra/penumbra_chain.go b/chain/penumbra/penumbra_chain.go index dc8ba12c7..ee5548f56 100644 --- a/chain/penumbra/penumbra_chain.go +++ b/chain/penumbra/penumbra_chain.go @@ -19,10 +19,10 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/docker/docker/api/types" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/chain/internal/tendermint" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/chain/internal/tendermint" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) diff --git a/chain/penumbra/penumbra_client_node.go b/chain/penumbra/penumbra_client_node.go index 8e210166d..2257a2402 100644 --- a/chain/penumbra/penumbra_client_node.go +++ b/chain/penumbra/penumbra_client_node.go @@ -12,25 +12,24 @@ import ( "cosmossdk.io/math" "github.com/BurntSushi/toml" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - transactionv1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/transaction/v1" + transactionv1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/transaction/v1" //nolint:staticcheck - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" volumetypes "github.com/docker/docker/api/types/volume" "github.com/docker/docker/client" "github.com/docker/go-connections/nat" - asset "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - ibcv1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/ibc/v1" - pool "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/shielded_pool/v1" - keys "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - num "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" - custody "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/custody/v1" - view "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/view/v1" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + asset "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + ibcv1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/ibc/v1" + pool "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/shielded_pool/v1" + keys "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + num "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" + custody "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/custody/v1" + view "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/view/v1" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" @@ -636,9 +635,9 @@ func ibcTransferTimeouts(options ibc.TransferOptions) (clienttypes.Height, uint6 // based timeouts. // see: https://github.com/cosmos/ibc-go/blob/0364aae96f0326651c411ed0f3486be570280e5c/modules/apps/transfer/types/packet.go#L22-L33 func defaultTransferTimeouts() (clienttypes.Height, uint64) { - t, err := clienttypes.ParseHeight(transfertypes.DefaultRelativePacketTimeoutHeight) + t, err := clienttypes.ParseHeight("0-1000") if err != nil { panic(fmt.Errorf("cannot parse packet timeout height string when retrieving default value: %w", err)) } - return t, transfertypes.DefaultRelativePacketTimeoutTimestamp + return t, uint64((time.Duration(10) * time.Minute).Nanoseconds()) } diff --git a/chain/penumbra/penumbra_client_node_test.go b/chain/penumbra/penumbra_client_node_test.go index c18f2f1c5..b35c10dee 100644 --- a/chain/penumbra/penumbra_client_node_test.go +++ b/chain/penumbra/penumbra_client_node_test.go @@ -5,7 +5,7 @@ import ( "testing" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "github.com/stretchr/testify/require" ) diff --git a/chain/penumbra/penumbra_node.go b/chain/penumbra/penumbra_node.go index 1fdebf5be..2fe864338 100644 --- a/chain/penumbra/penumbra_node.go +++ b/chain/penumbra/penumbra_node.go @@ -6,8 +6,8 @@ import ( "sync" dockerclient "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/chain/internal/tendermint" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/chain/internal/tendermint" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "go.uber.org/zap" ) diff --git a/chain/penumbra/tools/summoning/v1/summoning.pb.go b/chain/penumbra/tools/summoning/v1/summoning.pb.go index 128fe70cf..04996f4ba 100644 --- a/chain/penumbra/tools/summoning/v1/summoning.pb.go +++ b/chain/penumbra/tools/summoning/v1/summoning.pb.go @@ -8,8 +8,8 @@ import ( fmt "fmt" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/util/tendermint_proxy/v1/tendermint_proxy.pb.go b/chain/penumbra/util/tendermint_proxy/v1/tendermint_proxy.pb.go index 4712be8fa..84466f539 100644 --- a/chain/penumbra/util/tendermint_proxy/v1/tendermint_proxy.pb.go +++ b/chain/penumbra/util/tendermint_proxy/v1/tendermint_proxy.pb.go @@ -6,9 +6,10 @@ package tendermint_proxyv1 import ( context "context" fmt "fmt" - crypto "github.com/cometbft/cometbft/proto/tendermint/crypto" - p2p "github.com/cometbft/cometbft/proto/tendermint/p2p" - types "github.com/cometbft/cometbft/proto/tendermint/types" + // TODO: regen these properly + crypto "github.com/cometbft/cometbft/api/cometbft/crypto/v1" + p2p "github.com/cometbft/cometbft/api/cometbft/p2p/v1" + types "github.com/cometbft/cometbft/api/cometbft/types/v1" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" types1 "github.com/cosmos/gogoproto/types" diff --git a/chain/penumbra/view/v1/view.pb.go b/chain/penumbra/view/v1/view.pb.go index 87c568246..cf7d9ba88 100644 --- a/chain/penumbra/view/v1/view.pb.go +++ b/chain/penumbra/view/v1/view.pb.go @@ -10,20 +10,20 @@ import ( types "github.com/cosmos/cosmos-sdk/codec/types" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - v112 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/app/v1" - v18 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/asset/v1" - v11 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/auction/v1" - v12 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/dex/v1" - v16 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/fee/v1" - v15 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/ibc/v1" - v17 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/sct/v1" - v113 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/shielded_pool/v1" - v111 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/component/stake/v1" - v1 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/keys/v1" - v110 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/num/v1" - v13 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/transaction/v1" - v14 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/core/txhash/v1" - v19 "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra/crypto/tct/v1" + v112 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/app/v1" + v18 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/asset/v1" + v11 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/auction/v1" + v12 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/dex/v1" + v16 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/fee/v1" + v15 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/ibc/v1" + v17 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/sct/v1" + v113 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/shielded_pool/v1" + v111 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/component/stake/v1" + v1 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/keys/v1" + v110 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/num/v1" + v13 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/transaction/v1" + v14 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/core/txhash/v1" + v19 "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra/crypto/tct/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/chain/penumbra/wallet.go b/chain/penumbra/wallet.go index 41cbc88af..bb958f2fd 100644 --- a/chain/penumbra/wallet.go +++ b/chain/penumbra/wallet.go @@ -1,7 +1,7 @@ package penumbra import ( - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) var _ ibc.Wallet = &PenumbraWallet{} diff --git a/chain/polkadot.zip b/chain/polkadot.zip new file mode 100644 index 000000000..6ed0b81a7 Binary files /dev/null and b/chain/polkadot.zip differ diff --git a/chain/polkadot/keys.go b/chain/polkadot/keys.go deleted file mode 100644 index 18489ff4c..000000000 --- a/chain/polkadot/keys.go +++ /dev/null @@ -1,106 +0,0 @@ -package polkadot - -import ( - "crypto/ed25519" - "encoding/hex" - "fmt" - - "github.com/decred/dcrd/dcrec/secp256k1/v2" - - schnorrkel "github.com/ChainSafe/go-schnorrkel/1" - "github.com/StirlingMarketingGroup/go-namecase" - p2pCrypto "github.com/libp2p/go-libp2p/core/crypto" - "golang.org/x/crypto/blake2b" -) - -const ( - ss58Ed25519Prefix = "Ed25519HDKD" - ss58Secp256k1Prefix = "Secp256k1HDKD" -) - -var DEV_SEED, _ = hex.DecodeString("fac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e") - -func DeriveEd25519FromName(name string) (*p2pCrypto.Ed25519PrivateKey, error) { - chainCode := make([]byte, 32) - derivePath := []byte{byte(len(name) << 2)} - derivePath = append(derivePath, []byte(namecase.New().NameCase(name))...) - _ = copy(chainCode, []byte(derivePath)) - - hasher, err := blake2b.New256(nil) - if err != nil { - return nil, fmt.Errorf("error constructing hasher: %w", err) - } - - toHash := []byte{byte(len(ss58Ed25519Prefix) << 2)} - toHash = append(toHash, []byte(ss58Ed25519Prefix)...) - toHash = append(toHash, DEV_SEED...) - toHash = append(toHash, chainCode...) - - if _, err := hasher.Write(toHash); err != nil { - return nil, fmt.Errorf("error writing data to hasher: %w", err) - } - - newKey := hasher.Sum(nil) - - if err != nil { - return nil, fmt.Errorf("error deriving: %w", err) - } - privKey := ed25519.NewKeyFromSeed(newKey) - pubKey := privKey.Public().(ed25519.PublicKey) - key := []byte{} - key = append(key, privKey.Seed()...) - key = append(key, pubKey...) - - priv, err := p2pCrypto.UnmarshalEd25519PrivateKey(key) - if err != nil { - return nil, fmt.Errorf("error unmarshaling: %w", err) - } - return priv.(*p2pCrypto.Ed25519PrivateKey), nil -} - -func DeriveSr25519FromName(path []string) (*schnorrkel.MiniSecretKey, error) { - var miniSecretSeed [32]byte - _ = copy(miniSecretSeed[:], DEV_SEED[:32]) - miniSecret, err := schnorrkel.NewMiniSecretKeyFromRaw(miniSecretSeed) - if err != nil { - return nil, fmt.Errorf("error getting mini secret from seed: %w", err) - } - for _, pathItem := range path { - var chainCode [32]byte - derivePath := []byte{byte(len(pathItem) << 2)} - derivePath = append(derivePath, []byte(pathItem)...) - _ = copy(chainCode[:], []byte(derivePath)) - miniSecret, _, err = miniSecret.HardDeriveMiniSecretKey([]byte{}, chainCode) - if err != nil { - return nil, fmt.Errorf("error hard deriving mini secret key") - } - } - - return miniSecret, nil -} - -func DeriveSecp256k1FromName(name string) (*secp256k1.PrivateKey, error) { - chainCode := make([]byte, 32) - derivePath := []byte{byte(len(name) << 2)} - derivePath = append(derivePath, []byte(namecase.New().NameCase(name))...) - _ = copy(chainCode, []byte(derivePath)) - - hasher, err := blake2b.New256(nil) - if err != nil { - return nil, fmt.Errorf("error constructing hasher: %w", err) - } - - toHash := []byte{byte(len(ss58Secp256k1Prefix) << 2)} - toHash = append(toHash, []byte(ss58Secp256k1Prefix)...) - toHash = append(toHash, DEV_SEED...) - toHash = append(toHash, chainCode...) - - if _, err := hasher.Write(toHash); err != nil { - return nil, fmt.Errorf("error writing data to hasher: %w", err) - } - - newKey := hasher.Sum(nil) - privKey, _ := secp256k1.PrivKeyFromBytes(newKey) - - return privKey, nil -} diff --git a/chain/polkadot/keys_test.go b/chain/polkadot/keys_test.go deleted file mode 100644 index 1bcd86f71..000000000 --- a/chain/polkadot/keys_test.go +++ /dev/null @@ -1,95 +0,0 @@ -package polkadot_test - -import ( - "crypto/ed25519" - "encoding/hex" - "testing" - - p2pCrypto "github.com/libp2p/go-libp2p/core/crypto" - "github.com/libp2p/go-libp2p/core/peer" - "github.com/misko9/go-substrate-rpc-client/v4/signature" - "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" - "github.com/stretchr/testify/require" -) - -func TestNodeKeyPeerID(t *testing.T) { - nodeKey, err := hex.DecodeString("1b57e31ddf03e39c58207dfcb5445958924b818c08c303a91838e68cfac551b2") - require.NoError(t, err, "error decoding node key from hex string") - - privKeyEd25519 := ed25519.NewKeyFromSeed(nodeKey) - privKey, _, err := p2pCrypto.KeyPairFromStdKey(&privKeyEd25519) - require.NoError(t, err, "error getting private key") - - id, err := peer.IDFromPrivateKey(privKey) - require.NoError(t, err, "error getting peer id from private key") - peerId := id.String() - require.Equal(t, "12D3KooWCqDbuUHRNWPAuHpVnzZGCkkMwgEx7Xd6xgszqtVpH56c", peerId) -} - -func Test_DeriveEd25519FromName(t *testing.T) { - privKey, err := polkadot.DeriveEd25519FromName("Alice") - require.NoError(t, err, "error deriving ed25519 private key") - - pubKey, err := privKey.GetPublic().Raw() - require.NoError(t, err, "error fetching pubkey bytes") - - pubKeyEncoded, err := polkadot.EncodeAddressSS58(pubKey) - require.NoError(t, err, "error encoding ed25519 public key to ss58") - - require.Equal(t, "5wfmbM1KN4DCJeTP6jj9TqCAKKNApYNCG4zhwcweWhXZRo1j", pubKeyEncoded) -} - -func Test_DeriveSr25519FromNameAccount(t *testing.T) { - privKeyAccount, err := polkadot.DeriveSr25519FromName([]string{"Alice"}) - require.NoError(t, err, "error deriving account sr25519 private key") - - b := privKeyAccount.Public().Encode() - pubKeyAccount := b[:] - - pubKeyEncoded, err := polkadot.EncodeAddressSS58(pubKeyAccount) - require.NoError(t, err, "error encoding account public key to ss58") - - kp, err := signature.KeyringPairFromSecret("//Alice", polkadot.Ss58Format) - require.NoError(t, err, "error signature KeyringPairFromSecret") - - pubKeyDecoded, err := polkadot.DecodeAddressSS58(pubKeyEncoded) - require.NoError(t, err, "error decoding SS58 address to pub key") - - require.Equal(t, pubKeyDecoded, kp.PublicKey) -} - -func Test_DeriveSr25519FromNameStash(t *testing.T) { - privKeyStash, err := polkadot.DeriveSr25519FromName([]string{"Alice", "stash"}) - require.NoError(t, err, "error deriving stash sr25519 private key") - - pubKeyStash := make([]byte, 32) - for i, mkByte := range privKeyStash.Public().Encode() { - pubKeyStash[i] = mkByte - } - pubKeyEncoded, err := polkadot.EncodeAddressSS58(pubKeyStash) - require.NoError(t, err, "error encoding stash public key to ss58") - - kp, err := signature.KeyringPairFromSecret("//Alice//stash", polkadot.Ss58Format) - require.NoError(t, err, "error signature KeyringPairFromSecret") - - require.Equal(t, kp.Address, pubKeyEncoded) -} - -func Test_DeriveSecp256k1FromName(t *testing.T) { - privKey, err := polkadot.DeriveSecp256k1FromName("Alice") - require.NoError(t, err, "error deriving secp256k1 private key") - - pubKey := []byte{} - y := privKey.PublicKey.Y.Bytes() - if y[len(y)-1]%2 == 0 { - pubKey = append(pubKey, 0x02) - } else { - pubKey = append(pubKey, 0x03) - } - pubKey = append(pubKey, privKey.PublicKey.X.Bytes()...) - - pubKeyEncoded, err := polkadot.EncodeAddressSS58(pubKey) - require.NoError(t, err, "error encoding secp256k1 public key to ss58") - - require.Equal(t, "NaqsuM2ZDssHFdr7HU8znFsHKpgkCyrCW6aPiLpLTa8Vxi3Q9", pubKeyEncoded) -} diff --git a/chain/polkadot/parachain_node.go b/chain/polkadot/parachain_node.go deleted file mode 100644 index 43bdbebea..000000000 --- a/chain/polkadot/parachain_node.go +++ /dev/null @@ -1,396 +0,0 @@ -package polkadot - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "path/filepath" - "strings" - - "cosmossdk.io/math" - "github.com/avast/retry-go/v4" - sdktypes "github.com/cosmos/cosmos-sdk/types" - "github.com/docker/docker/client" - "github.com/icza/dyno" - p2pcrypto "github.com/libp2p/go-libp2p/core/crypto" - "github.com/libp2p/go-libp2p/core/peer" - gsrpc "github.com/misko9/go-substrate-rpc-client/v4" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "go.uber.org/zap" -) - -// Increase parachain wallet amount due to their additional precision -const parachainScaling = int64(1_000) - -// ParachainNode defines the properties required for running a polkadot parachain node. -type ParachainNode struct { - log *zap.Logger - TestName string - Index int - - NetworkID string - containerLifecycle *dockerutil.ContainerLifecycle - VolumeName string - DockerClient *client.Client - Image ibc.DockerImage - - Chain ibc.Chain - Bin string - NodeKey p2pcrypto.PrivKey - ChainID string - Flags []string - RelayChainFlags []string - - api *gsrpc.SubstrateAPI - hostWsPort string - hostRpcPort string -} - -type ParachainNodes []*ParachainNode - -// Name returns the name of the test node container. -func (pn *ParachainNode) Name() string { - return fmt.Sprintf("%s-%d-%s-%s", pn.Bin, pn.Index, pn.ChainID, dockerutil.SanitizeContainerName(pn.TestName)) -} - -// HostName returns the docker hostname of the test container. -func (pn *ParachainNode) HostName() string { - return dockerutil.CondenseHostName(pn.Name()) -} - -// Bind returns the home folder bind point for running the node. -func (pn *ParachainNode) Bind() []string { - return []string{fmt.Sprintf("%s:%s", pn.VolumeName, pn.NodeHome())} -} - -// NodeHome returns the working directory within the docker image, -// the path where the docker volume is mounted. -func (pn *ParachainNode) NodeHome() string { - return "/home/heighliner" -} - -// ParachainChainSpecFileName returns the relative path to the chain spec file -// within the parachain container. -func (pn *ParachainNode) ParachainChainSpecFileName() string { - return fmt.Sprintf("%s.json", pn.ChainID) -} - -// ParachainChainSpecFilePathFull returns the full path to the chain spec file -// within the parachain container -func (pn *ParachainNode) ParachainChainSpecFilePathFull() string { - return filepath.Join(pn.NodeHome(), pn.ParachainChainSpecFileName()) -} - -// RawRelayChainSpecFilePathFull returns the full path to the raw relay chain spec file -// within the container. -func (pn *ParachainNode) RawRelayChainSpecFilePathFull() string { - return filepath.Join(pn.NodeHome(), fmt.Sprintf("%s-raw.json", pn.Chain.Config().ChainID)) -} - -// RawRelayChainSpecFilePathRelative returns the relative path to the raw relay chain spec file -// within the container. -func (pn *ParachainNode) RawRelayChainSpecFilePathRelative() string { - return fmt.Sprintf("%s-raw.json", pn.Chain.Config().ChainID) -} - -// PeerID returns the public key of the node key for p2p. -func (pn *ParachainNode) PeerID() (string, error) { - id, err := peer.IDFromPrivateKey(pn.NodeKey) - if err != nil { - return "", err - } - return id.String(), nil -} - -// MultiAddress returns the p2p multiaddr of the node. -func (pn *ParachainNode) MultiAddress() (string, error) { - peerId, err := pn.PeerID() - if err != nil { - return "", err - } - return fmt.Sprintf("/dns4/%s/tcp/%s/p2p/%s", pn.HostName(), strings.Split(nodePort, "/")[0], peerId), nil -} - -type GetParachainIDResponse struct { - ParachainID int `json:"para_id"` -} - -// GenerateDefaultChainSpec runs build-spec to get the default chain spec into something malleable -func (pn *ParachainNode) GenerateDefaultChainSpec(ctx context.Context) ([]byte, error) { - cmd := []string{ - pn.Bin, - "build-spec", - fmt.Sprintf("--chain=%s", pn.ChainID), - } - res := pn.Exec(ctx, cmd, nil) - if res.Err != nil { - return nil, res.Err - } - return res.Stdout, nil -} - -// GenerateParachainGenesisFile creates the default chain spec, modifies it and returns it. -// The modified chain spec is then written to each Parachain node -func (pn *ParachainNode) GenerateParachainGenesisFile(ctx context.Context, additionalGenesisWallets ...ibc.WalletAmount) ([]byte, error) { - defaultChainSpec, err := pn.GenerateDefaultChainSpec(ctx) - if err != nil { - return nil, fmt.Errorf("error generating default parachain chain spec: %w", err) - } - - var chainSpec interface{} - err = json.Unmarshal(defaultChainSpec, &chainSpec) - if err != nil { - return nil, fmt.Errorf("error unmarshaling parachain chain spec: %w", err) - } - - balances, err := dyno.GetSlice(chainSpec, "genesis", "runtime", "balances", "balances") - if err != nil { - return nil, fmt.Errorf("error getting balances from parachain chain spec: %w", err) - } - - for _, wallet := range additionalGenesisWallets { - balances = append(balances, - []interface{}{wallet.Address, wallet.Amount.MulRaw(parachainScaling).Uint64()}, - ) - } - if err := dyno.Set(chainSpec, balances, "genesis", "runtime", "balances", "balances"); err != nil { - return nil, fmt.Errorf("error setting parachain balances: %w", err) - } - editedChainSpec, err := json.MarshalIndent(chainSpec, "", " ") - if err != nil { - return nil, fmt.Errorf("error marshaling modified parachain chain spec: %w", err) - } - - return editedChainSpec, nil -} - -// ParachainID retrieves the node parachain ID. -func (pn *ParachainNode) ParachainID(ctx context.Context) (int, error) { - cmd := []string{ - pn.Bin, - "build-spec", - fmt.Sprintf("--chain=%s", pn.ChainID), - } - res := pn.Exec(ctx, cmd, nil) - if res.Err != nil { - return -1, res.Err - } - out := GetParachainIDResponse{} - if err := json.Unmarshal([]byte(res.Stdout), &out); err != nil { - return -1, err - } - return out.ParachainID, nil -} - -// ExportGenesisWasm exports the genesis wasm json for the configured chain ID. -func (pn *ParachainNode) ExportGenesisWasm(ctx context.Context) (string, error) { - cmd := []string{ - pn.Bin, - "export-genesis-wasm", - fmt.Sprintf("--chain=%s", pn.ParachainChainSpecFilePathFull()), - } - res := pn.Exec(ctx, cmd, nil) - if res.Err != nil { - return "", res.Err - } - return string(res.Stdout), nil -} - -// ExportGenesisState exports the genesis state json for the configured chain ID. -func (pn *ParachainNode) ExportGenesisState(ctx context.Context) (string, error) { - cmd := []string{ - pn.Bin, - "export-genesis-state", - fmt.Sprintf("--chain=%s", pn.ParachainChainSpecFilePathFull()), - } - res := pn.Exec(ctx, cmd, nil) - if res.Err != nil { - return "", res.Err - } - return string(res.Stdout), nil -} - -func (pn *ParachainNode) logger() *zap.Logger { - return pn.log.With( - zap.String("chain_id", pn.ChainID), - zap.String("test", pn.TestName), - ) -} - -// CreateNodeContainer assembles a parachain node docker container ready to launch. -func (pn *ParachainNode) CreateNodeContainer(ctx context.Context) error { - nodeKey, err := pn.NodeKey.Raw() - if err != nil { - return fmt.Errorf("error getting ed25519 node key: %w", err) - } - multiAddress, err := pn.MultiAddress() - if err != nil { - return err - } - cmd := []string{ - pn.Bin, - fmt.Sprintf("--ws-port=%s", strings.Split(wsPort, "/")[0]), - "--collator", - fmt.Sprintf("--node-key=%s", hex.EncodeToString(nodeKey[0:32])), - fmt.Sprintf("--%s", IndexedName[pn.Index]), - "--unsafe-ws-external", - "--unsafe-rpc-external", - "--prometheus-external", - "--rpc-cors=all", - "--ws-external", - "--rpc-external", - "--rpc-methods=unsafe", - "--log=ibc_transfer=trace,pallet_ibc=trace,grandpa-verifier=trace,runtime=trace", - "--force-authoring", - "--enable-offchain-indexing=true", - "--pruning=archive", - fmt.Sprintf("--prometheus-port=%s", strings.Split(prometheusPort, "/")[0]), - fmt.Sprintf("--listen-addr=/ip4/0.0.0.0/tcp/%s", strings.Split(nodePort, "/")[0]), - fmt.Sprintf("--public-addr=%s", multiAddress), - "--base-path", pn.NodeHome(), - fmt.Sprintf("--chain=%s", pn.ParachainChainSpecFilePathFull()), - } - cmd = append(cmd, pn.Flags...) - cmd = append(cmd, "--", fmt.Sprintf("--chain=%s", pn.RawRelayChainSpecFilePathFull())) - cmd = append(cmd, pn.RelayChainFlags...) - - return pn.containerLifecycle.CreateContainer(ctx, pn.TestName, pn.NetworkID, pn.Image, exposedPorts, pn.Bind(), nil, pn.HostName(), cmd, nil, []string{}) -} - -// StopContainer stops the relay chain node container, waiting at most 30 seconds. -func (pn *ParachainNode) StopContainer(ctx context.Context) error { - return pn.containerLifecycle.StopContainer(ctx) -} - -// StartContainer starts the container after it is built by CreateNodeContainer. -func (pn *ParachainNode) StartContainer(ctx context.Context) error { - if err := pn.containerLifecycle.StartContainer(ctx); err != nil { - return err - } - - hostPorts, err := pn.containerLifecycle.GetHostPorts(ctx, wsPort, rpcPort) - if err != nil { - return err - } - - // Set the host ports once since they will not change after the container has started. - pn.hostWsPort, pn.hostRpcPort = hostPorts[0], hostPorts[1] - - explorerUrl := fmt.Sprintf("\033[4;34mhttps://polkadot.js.org/apps?rpc=ws://%s#/explorer\033[0m", - strings.Replace(pn.hostWsPort, "localhost", "127.0.0.1", 1)) - pn.log.Info(explorerUrl, zap.String("container", pn.Name())) - var api *gsrpc.SubstrateAPI - if err = retry.Do(func() error { - var err error - api, err = gsrpc.NewSubstrateAPI("ws://" + pn.hostWsPort) - return err - }, retry.Context(ctx), RtyAtt, RtyDel, RtyErr); err != nil { - return err - } - - pn.api = api - return nil -} - -// Exec run a container for a specific job and block until the container exits. -func (pn *ParachainNode) Exec(ctx context.Context, cmd []string, env []string) dockerutil.ContainerExecResult { - job := dockerutil.NewImage(pn.log, pn.DockerClient, pn.NetworkID, pn.TestName, pn.Image.Repository, pn.Image.Version) - opts := dockerutil.ContainerOptions{ - Binds: pn.Bind(), - Env: env, - User: pn.Image.UidGid, - } - return job.Run(ctx, cmd, opts) -} - -func (pn *ParachainNode) GetBalance(ctx context.Context, address string, denom string) (math.Int, error) { - return GetBalance(pn.api, address) -} - -// GetIbcBalance returns the Coins type of ibc coins in account -func (pn *ParachainNode) GetIbcBalance(ctx context.Context, address string, denom uint64) (sdktypes.Coin, error) { - res, err := pn.api.RPC.IBC.QueryBalanceWithAddress(ctx, address, denom) - if err != nil { - return sdktypes.Coin{}, err - } - return res, nil -} - -// SendFunds sends funds to a wallet from a user account. -// Implements Chain interface. -func (pn *ParachainNode) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { - kp, err := pn.Chain.(*PolkadotChain).GetKeyringPair(keyName) - if err != nil { - return err - } - pn.log.Info( - "ParachainNode SendFunds", - zap.String("From", kp.Address), - zap.String("To", amount.Address), - zap.String("Amount", amount.Amount.String()), - ) - hash, err := SendFundsTx(pn.api, kp, amount) - if err != nil { - return err - } - - pn.log.Info("Transfer sent", zap.String("hash", fmt.Sprintf("%#x", hash)), zap.String("container", pn.Name())) - return nil -} - -// SendIbcFunds sends funds to a wallet from a user account. -func (pn *ParachainNode) SendIbcFunds( - ctx context.Context, - channelID string, - keyName string, - amount ibc.WalletAmount, - options ibc.TransferOptions, -) error { - kp, err := pn.Chain.(*PolkadotChain).GetKeyringPair(keyName) - if err != nil { - return err - } - - pn.log.Info( - "ParachainNode SendIbcFunds", - zap.String("From", kp.Address), - zap.String("To", amount.Address), - zap.String("Amount", amount.Amount.String()), - ) - hash, err := SendIbcFundsTx(pn.api, kp, channelID, amount, options) - if err != nil { - pn.log.Info("IBC Transfer not sent", zap.String("hash", fmt.Sprintf("%#x", hash)), zap.String("container", pn.Name())) - return err - } - - pn.log.Info("IBC Transfer sent", zap.String("hash", fmt.Sprintf("%#x", hash)), zap.String("container", pn.Name())) - return nil -} - -// MintFunds mints an asset for a user on parachain, keyName must be the owner of the asset -func (pn *ParachainNode) MintFunds( - keyName string, - amount ibc.WalletAmount, -) error { - kp, err := pn.Chain.(*PolkadotChain).GetKeyringPair(keyName) - if err != nil { - return err - } - - pn.log.Info( - "ParachainNode MintFunds", - zap.String("From", kp.Address), - zap.String("To", amount.Address), - zap.String("Amount", amount.Amount.String()), - ) - hash, err := MintFundsTx(pn.api, kp, amount) - if err != nil { - pn.log.Info("MintFunds not sent", zap.String("hash", fmt.Sprintf("%#x", hash)), zap.String("container", pn.Name())) - return err - } - - pn.log.Info("MintFunds sent", zap.String("hash", fmt.Sprintf("%#x", hash)), zap.String("container", pn.Name())) - return nil -} diff --git a/chain/polkadot/polkadot_chain.go b/chain/polkadot/polkadot_chain.go deleted file mode 100644 index 6c71c3b39..000000000 --- a/chain/polkadot/polkadot_chain.go +++ /dev/null @@ -1,863 +0,0 @@ -package polkadot - -import ( - "context" - "crypto/rand" - crand "crypto/rand" - "encoding/json" - "fmt" - "io" - "strings" - - "cosmossdk.io/math" - "github.com/99designs/keyring" - "github.com/StirlingMarketingGroup/go-namecase" - sdktypes "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/go-bip39" - "github.com/docker/docker/api/types" - volumetypes "github.com/docker/docker/api/types/volume" - "github.com/docker/docker/client" - dockerclient "github.com/docker/docker/client" - "github.com/icza/dyno" - p2pcrypto "github.com/libp2p/go-libp2p/core/crypto" - "github.com/misko9/go-substrate-rpc-client/v4/signature" - gstypes "github.com/misko9/go-substrate-rpc-client/v4/types" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "go.uber.org/zap" - "golang.org/x/sync/errgroup" -) - -// Increase polkadot wallet amount due to their additional precision -const polkadotScaling = int64(1_000) - -// PolkadotChain implements the ibc.Chain interface for substrate chains. -type PolkadotChain struct { - log *zap.Logger - testName string - cfg ibc.ChainConfig - numRelayChainNodes int - parachainConfig []ParachainConfig - RelayChainNodes RelayChainNodes - ParachainNodes []ParachainNodes - keyring keyring.Keyring -} - -// PolkadotAuthority is used when constructing the validator authorities in the substrate chain spec. -type PolkadotAuthority struct { - Grandpa string `json:"grandpa"` - Babe string `json:"babe"` - IMOnline string `json:"im_online"` - ParachainValidator string `json:"parachain_validator"` - AuthorityDiscovery string `json:"authority_discovery"` - ParaValidator string `json:"para_validator"` - ParaAssignment string `json:"para_assignment"` - Beefy string `json:"beefy"` -} - -// PolkadotParachainSpec is used when constructing substrate chain spec for parachains. -type PolkadotParachainSpec struct { - GenesisHead string `json:"genesis_head"` - ValidationCode string `json:"validation_code"` - Parachain bool `json:"parachain"` -} - -// ParachainConfig is a shared type that allows callers of this module to configure a parachain. -type ParachainConfig struct { - ChainID string - Bin string - Image ibc.DockerImage - NumNodes int - Flags []string - RelayChainFlags []string -} - -// IndexedName is a slice of the substrate dev key names used for key derivation. -var IndexedName = []string{"alice", "bob", "charlie", "dave", "ferdie"} -var IndexedUri = []string{"//Alice", "//Bob", "//Charlie", "//Dave", "//Ferdie"} - -// NewPolkadotChain returns an uninitialized PolkadotChain, which implements the ibc.Chain interface. -func NewPolkadotChain(log *zap.Logger, testName string, chainConfig ibc.ChainConfig, numRelayChainNodes int, parachains []ParachainConfig) *PolkadotChain { - return &PolkadotChain{ - log: log, - testName: testName, - cfg: chainConfig, - numRelayChainNodes: numRelayChainNodes, - parachainConfig: parachains, - keyring: keyring.NewArrayKeyring(nil), - } -} - -// Config fetches the chain configuration. -// Implements Chain interface. -func (c *PolkadotChain) Config() ibc.ChainConfig { - return c.cfg -} - -func (c *PolkadotChain) NewRelayChainNode( - ctx context.Context, - i int, - chain *PolkadotChain, - dockerClient *dockerclient.Client, - networkID string, - testName string, - image ibc.DockerImage, -) (*RelayChainNode, error) { - seed := make([]byte, 32) - if _, err := rand.Read(seed); err != nil { - return nil, err - } - - nodeKey, _, err := p2pcrypto.GenerateEd25519Key(crand.Reader) - if err != nil { - return nil, fmt.Errorf("error generating node key: %w", err) - } - - nameCased := namecase.New().NameCase(IndexedName[i]) - - ed25519PrivKey, err := DeriveEd25519FromName(nameCased) - if err != nil { - return nil, err - } - - accountKeyName := IndexedName[i] - accountKeyUri := IndexedUri[i] - stashKeyName := accountKeyName + "stash" - stashKeyUri := accountKeyUri + "//stash" - - if err := c.RecoverKey(ctx, accountKeyName, accountKeyUri); err != nil { - return nil, err - } - - if err := c.RecoverKey(ctx, stashKeyName, stashKeyUri); err != nil { - return nil, err - } - - ecdsaPrivKey, err := DeriveSecp256k1FromName(nameCased) - if err != nil { - return nil, fmt.Errorf("error generating secp256k1 private key: %w", err) - } - - pn := &RelayChainNode{ - log: c.log, - Index: i, - Chain: c, - DockerClient: dockerClient, - NetworkID: networkID, - TestName: testName, - Image: image, - NodeKey: nodeKey, - Ed25519PrivateKey: ed25519PrivKey, - AccountKeyName: accountKeyName, - StashKeyName: stashKeyName, - EcdsaPrivateKey: *ecdsaPrivKey, - } - - pn.containerLifecycle = dockerutil.NewContainerLifecycle(c.log, dockerClient, pn.Name()) - - v, err := dockerClient.VolumeCreate(ctx, volumetypes.CreateOptions{ - Labels: map[string]string{ - dockerutil.CleanupLabel: testName, - - dockerutil.NodeOwnerLabel: pn.Name(), - }, - }) - if err != nil { - return nil, fmt.Errorf("creating volume for chain node: %w", err) - } - pn.VolumeName = v.Name - - if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ - Log: c.log, - Client: dockerClient, - VolumeName: v.Name, - ImageRef: image.Ref(), - TestName: testName, - UidGid: image.UidGid, - }); err != nil { - return nil, fmt.Errorf("set volume owner: %w", err) - } - - return pn, nil -} - -func (c *PolkadotChain) NewParachainNode( - ctx context.Context, - i int, - dockerClient *dockerclient.Client, - networkID string, - testName string, - parachainConfig ParachainConfig, -) (*ParachainNode, error) { - nodeKey, _, err := p2pcrypto.GenerateEd25519Key(crand.Reader) - if err != nil { - return nil, fmt.Errorf("error generating node key: %w", err) - } - pn := &ParachainNode{ - log: c.log, - Index: i, - Chain: c, - DockerClient: dockerClient, - NetworkID: networkID, - TestName: testName, - NodeKey: nodeKey, - Image: parachainConfig.Image, - Bin: parachainConfig.Bin, - ChainID: parachainConfig.ChainID, - Flags: parachainConfig.Flags, - RelayChainFlags: parachainConfig.RelayChainFlags, - } - - pn.containerLifecycle = dockerutil.NewContainerLifecycle(c.log, dockerClient, pn.Name()) - - v, err := dockerClient.VolumeCreate(ctx, volumetypes.CreateOptions{ - Labels: map[string]string{ - dockerutil.CleanupLabel: testName, - - dockerutil.NodeOwnerLabel: pn.Name(), - }, - }) - if err != nil { - return nil, fmt.Errorf("creating volume for chain node: %w", err) - } - pn.VolumeName = v.Name - - if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ - Log: c.log, - Client: dockerClient, - VolumeName: v.Name, - ImageRef: parachainConfig.Image.Ref(), - TestName: testName, - UidGid: parachainConfig.Image.UidGid, - }); err != nil { - return nil, fmt.Errorf("set volume owner: %w", err) - } - - return pn, nil -} - -// Initialize initializes node structs so that things like initializing keys can be done before starting the chain. -// Implements Chain interface. -func (c *PolkadotChain) Initialize(ctx context.Context, testName string, cli *client.Client, networkID string) error { - relayChainNodes := []*RelayChainNode{} - chainCfg := c.Config() - images := []ibc.DockerImage{} - images = append(images, chainCfg.Images...) - for _, parachain := range c.parachainConfig { - images = append(images, parachain.Image) - } - for _, image := range images { - rc, err := cli.ImagePull( - ctx, - image.Repository+":"+image.Version, - types.ImagePullOptions{}, - ) - if err != nil { - c.log.Error("Failed to pull image", - zap.Error(err), - zap.String("repository", image.Repository), - zap.String("tag", image.Version), - ) - } else { - _, _ = io.Copy(io.Discard, rc) - _ = rc.Close() - } - } - for i := 0; i < c.numRelayChainNodes; i++ { - pn, err := c.NewRelayChainNode(ctx, i, c, cli, networkID, testName, chainCfg.Images[0]) - if err != nil { - return err - } - relayChainNodes = append(relayChainNodes, pn) - } - c.RelayChainNodes = relayChainNodes - for _, pc := range c.parachainConfig { - parachainNodes := []*ParachainNode{} - for i := 0; i < pc.NumNodes; i++ { - pn, err := c.NewParachainNode(ctx, i, cli, networkID, testName, pc) - if err != nil { - return err - } - parachainNodes = append(parachainNodes, pn) - } - c.ParachainNodes = append(c.ParachainNodes, parachainNodes) - } - - return nil -} - -func runtimeGenesisPath(path ...interface{}) []interface{} { - fullPath := []interface{}{"genesis", "runtime", "runtime_genesis_config"} - fullPath = append(fullPath, path...) - return fullPath -} - -func (c *PolkadotChain) modifyRelayChainGenesis(ctx context.Context, chainSpec interface{}, additionalGenesisWallets []ibc.WalletAmount) error { - bootNodes := []string{} - authorities := [][]interface{}{} - balances := [][]interface{}{} - var sudoAddress string - for i, n := range c.RelayChainNodes { - multiAddress, err := n.MultiAddress() - if err != nil { - return err - } - bootNodes = append(bootNodes, multiAddress) - stashAddress, err := c.GetAddress(ctx, n.StashKeyName) - if err != nil { - return fmt.Errorf("error getting stash address: %w", err) - } - accountAddress, err := c.GetAddress(ctx, n.AccountKeyName) - if err != nil { - return fmt.Errorf("error getting account address: %w", err) - } - grandpaAddress, err := n.GrandpaAddress() - if err != nil { - return fmt.Errorf("error getting grandpa address") - } - beefyAddress, err := n.EcdsaAddress() - if err != nil { - return fmt.Errorf("error getting beefy address") - } - balances = append(balances, - []interface{}{string(stashAddress), uint64(1_100_000_000_000_000_000)}, - []interface{}{string(accountAddress), uint64(1_100_000_000_000_000_000)}, - ) - if i == 0 { - sudoAddress = string(accountAddress) - } - authority := []interface{}{string(stashAddress), string(stashAddress), PolkadotAuthority{ - Grandpa: grandpaAddress, - Babe: string(accountAddress), - IMOnline: string(accountAddress), - ParachainValidator: string(accountAddress), - AuthorityDiscovery: string(accountAddress), - ParaValidator: string(accountAddress), - ParaAssignment: string(accountAddress), - Beefy: beefyAddress, - }} - authorities = append(authorities, authority) - } - for _, wallet := range additionalGenesisWallets { - balances = append(balances, - []interface{}{wallet.Address, wallet.Amount.MulRaw(polkadotScaling).Uint64()}, - ) - } - - if err := dyno.Set(chainSpec, bootNodes, "bootNodes"); err != nil { - return fmt.Errorf("error setting boot nodes: %w", err) - } - if err := dyno.Set(chainSpec, authorities, runtimeGenesisPath("session", "keys")...); err != nil { - return fmt.Errorf("error setting authorities: %w", err) - } - if err := dyno.Set(chainSpec, balances, runtimeGenesisPath("balances", "balances")...); err != nil { - return fmt.Errorf("error setting balances: %w", err) - } - if err := dyno.Set(chainSpec, sudoAddress, runtimeGenesisPath("sudo", "key")...); err != nil { - return fmt.Errorf("error setting sudo key: %w", err) - } - /*if err := dyno.Set(chainSpec, sudoAddress, runtimeGenesisPath("bridgeRococoGrandpa", "owner")...); err != nil { - return fmt.Errorf("error setting bridgeRococoGrandpa owner: %w", err) - } - if err := dyno.Set(chainSpec, sudoAddress, runtimeGenesisPath("bridgeWococoGrandpa", "owner")...); err != nil { - return fmt.Errorf("error setting bridgeWococoGrandpa owner: %w", err) - } - if err := dyno.Set(chainSpec, sudoAddress, runtimeGenesisPath("bridgeRococoMessages", "owner")...); err != nil { - return fmt.Errorf("error setting bridgeRococoMessages owner: %w", err) - } - if err := dyno.Set(chainSpec, sudoAddress, runtimeGenesisPath("bridgeWococoMessages", "owner")...); err != nil { - return fmt.Errorf("error setting bridgeWococoMessages owner: %w", err) - } - */ - if err := dyno.Set(chainSpec, 2, runtimeGenesisPath("configuration", "config", "validation_upgrade_delay")...); err != nil { - return fmt.Errorf("error setting validation upgrade delay: %w", err) - } - parachains := [][]interface{}{} - - for _, parachainNodes := range c.ParachainNodes { - firstParachainNode := parachainNodes[0] - parachainID, err := firstParachainNode.ParachainID(ctx) - if err != nil { - return fmt.Errorf("error getting parachain ID: %w", err) - } - genesisState, err := firstParachainNode.ExportGenesisState(ctx) - if err != nil { - return fmt.Errorf("error exporting genesis state: %w", err) - } - genesisWasm, err := firstParachainNode.ExportGenesisWasm(ctx) - if err != nil { - return fmt.Errorf("error exporting genesis wasm: %w", err) - } - - composableParachain := []interface{}{parachainID, PolkadotParachainSpec{ - GenesisHead: genesisState, - ValidationCode: genesisWasm, - Parachain: true, - }} - parachains = append(parachains, composableParachain) - } - - if err := dyno.Set(chainSpec, parachains, runtimeGenesisPath("paras", "paras")...); err != nil { - return fmt.Errorf("error setting parachains: %w", err) - } - if err := dyno.Set(chainSpec, 20, "genesis", "runtime", "session_length_in_blocks"); err != nil { - return fmt.Errorf("error setting session_length_in_blocks: %w", err) - } - return nil -} - -func (c *PolkadotChain) logger() *zap.Logger { - return c.log.With( - zap.String("chain_id", c.cfg.ChainID), - zap.String("test", c.testName), - ) -} - -// Start sets up everything needed (validators, gentx, fullnodes, peering, additional accounts) for chain to start from genesis. -// Implements Chain interface. -func (c *PolkadotChain) Start(testName string, ctx context.Context, additionalGenesisWallets ...ibc.WalletAmount) error { - var eg errgroup.Group - // Generate genesis file for each set of parachains - for _, parachainNodes := range c.ParachainNodes { - firstParachainNode := parachainNodes[0] - parachainChainSpec, err := firstParachainNode.GenerateParachainGenesisFile(ctx, additionalGenesisWallets...) - if err != nil { - return fmt.Errorf("error generating parachain genesis file: %w", err) - } - for _, n := range parachainNodes { - n := n - eg.Go(func() error { - c.logger().Info("Copying parachain chain spec", zap.String("container", n.Name())) - fw := dockerutil.NewFileWriter(n.logger(), n.DockerClient, n.TestName) - return fw.WriteFile(ctx, n.VolumeName, n.ParachainChainSpecFileName(), parachainChainSpec) - }) - } - } - if err := eg.Wait(); err != nil { - return err - } - - // generate chain spec - firstNode := c.RelayChainNodes[0] - if err := firstNode.GenerateChainSpec(ctx); err != nil { - return fmt.Errorf("error generating chain spec: %w", err) - } - fr := dockerutil.NewFileRetriever(c.logger(), firstNode.DockerClient, c.testName) - fw := dockerutil.NewFileWriter(c.logger(), firstNode.DockerClient, c.testName) - - chainSpecBytes, err := fr.SingleFileContent(ctx, firstNode.VolumeName, firstNode.ChainSpecFilePathContainer()) - if err != nil { - return fmt.Errorf("error reading chain spec: %w", err) - } - - var chainSpec interface{} - if err := json.Unmarshal(chainSpecBytes, &chainSpec); err != nil { - return fmt.Errorf("error unmarshaling chain spec: %w", err) - } - - if err := c.modifyRelayChainGenesis(ctx, chainSpec, additionalGenesisWallets); err != nil { - return fmt.Errorf("error modifying genesis: %w", err) - } - - editedChainSpec, err := json.MarshalIndent(chainSpec, "", " ") - if err != nil { - return fmt.Errorf("error marshaling modified chain spec: %w", err) - } - - if err := fw.WriteFile(ctx, firstNode.VolumeName, firstNode.ChainSpecFilePathContainer(), editedChainSpec); err != nil { - return fmt.Errorf("error writing modified chain spec: %w", err) - } - - c.logger().Info("Generating raw chain spec", zap.String("container", firstNode.Name())) - - if err := firstNode.GenerateChainSpecRaw(ctx); err != nil { - return err - } - - rawChainSpecBytes, err := fr.SingleFileContent(ctx, firstNode.VolumeName, firstNode.RawChainSpecFilePathRelative()) - if err != nil { - return fmt.Errorf("error reading chain spec: %w", err) - } - - for i, n := range c.RelayChainNodes { - n := n - i := i - eg.Go(func() error { - if i != 0 { - c.logger().Info("Copying raw chain spec", zap.String("container", n.Name())) - if err := fw.WriteFile(ctx, n.VolumeName, n.RawChainSpecFilePathRelative(), rawChainSpecBytes); err != nil { - return fmt.Errorf("error writing raw chain spec: %w", err) - } - } - c.logger().Info("Creating container", zap.String("name", n.Name())) - if err := n.CreateNodeContainer(ctx); err != nil { - return err - } - c.logger().Info("Starting container", zap.String("name", n.Name())) - return n.StartContainer(ctx) - }) - } - if err := eg.Wait(); err != nil { - return err - } - for _, nodes := range c.ParachainNodes { - nodes := nodes - for _, n := range nodes { - n := n - eg.Go(func() error { - c.logger().Info("Copying raw chain spec", zap.String("container", n.Name())) - if err := fw.WriteFile(ctx, n.VolumeName, n.RawRelayChainSpecFilePathRelative(), rawChainSpecBytes); err != nil { - return fmt.Errorf("error writing raw chain spec: %w", err) - } - //fmt.Print(string(rawChainSpecBytes)) - c.logger().Info("Creating container", zap.String("name", n.Name())) - if err := n.CreateNodeContainer(ctx); err != nil { - return err - } - c.logger().Info("Starting container", zap.String("name", n.Name())) - return n.StartContainer(ctx) - }) - } - } - if err := eg.Wait(); err != nil { - return err - } - - return nil -} - -// Exec runs an arbitrary command using Chain's docker environment. -// Implements Chain interface. -func (c *PolkadotChain) Exec(ctx context.Context, cmd []string, env []string) ([]byte, []byte, error) { - res := c.RelayChainNodes[0].Exec(ctx, cmd, env) - return res.Stdout, res.Stderr, res.Err -} - -// GetRPCAddress retrieves the rpc address that can be reached by other containers in the docker network. -// Implements Chain interface. -func (c *PolkadotChain) GetRPCAddress() string { - var parachainHostName string - port := strings.Split(rpcPort, "/")[0] - - if len(c.ParachainNodes) > 0 && len(c.ParachainNodes[0]) > 0 { - parachainHostName = c.ParachainNodes[0][0].HostName() - //return fmt.Sprintf("%s:%s", c.ParachainNodes[0][0].HostName(), strings.Split(rpcPort, "/")[0]) - } else { - parachainHostName = c.RelayChainNodes[0].HostName() - } - relaychainHostName := c.RelayChainNodes[0].HostName() - parachainUrl := fmt.Sprintf("http://%s:%s", parachainHostName, port) - relaychainUrl := fmt.Sprintf("http://%s:%s", relaychainHostName, port) - return fmt.Sprintf("%s,%s", parachainUrl, relaychainUrl) - //return fmt.Sprintf("%s:%s", c.RelayChainNodes[0].HostName(), strings.Split(rpcPort, "/")[0]) -} - -// GetGRPCAddress retrieves the grpc address that can be reached by other containers in the docker network. -// Implements Chain interface. -func (c *PolkadotChain) GetGRPCAddress() string { - if len(c.ParachainNodes) > 0 && len(c.ParachainNodes[0]) > 0 { - return fmt.Sprintf("%s:%s", c.ParachainNodes[0][0].HostName(), strings.Split(wsPort, "/")[0]) - } - return fmt.Sprintf("%s:%s", c.RelayChainNodes[0].HostName(), strings.Split(wsPort, "/")[0]) -} - -// Implements Chain interface -func (c *PolkadotChain) GetHostPeerAddress() string { - panic("NOT IMPLEMENTED") -} - -// GetHostRPCAddress returns the rpc address that can be reached by processes on the host machine. -// Note that this will not return a valid value until after Start returns. -// Implements Chain interface. -func (c *PolkadotChain) GetHostRPCAddress() string { - if len(c.ParachainNodes) > 0 && len(c.ParachainNodes[0]) > 0 { - return c.ParachainNodes[0][0].hostRpcPort - } - return c.RelayChainNodes[0].hostRpcPort -} - -// GetHostGRPCAddress returns the grpc address that can be reached by processes on the host machine. -// Note that this will not return a valid value until after Start returns. -// Implements Chain interface. -func (c *PolkadotChain) GetHostGRPCAddress() string { - if len(c.ParachainNodes) > 0 && len(c.ParachainNodes[0]) > 0 { - return c.ParachainNodes[0][0].hostWsPort - } - return c.RelayChainNodes[0].hostWsPort -} - -// Height returns the current block height or an error if unable to get current height. -// Implements Chain interface. -func (c *PolkadotChain) Height(ctx context.Context) (int64, error) { - if len(c.ParachainNodes) > 0 && len(c.ParachainNodes[0]) > 0 { - block, err := c.ParachainNodes[0][0].api.RPC.Chain.GetBlockLatest() - if err != nil { - return 0, err - } - return int64(block.Block.Header.Number), nil - } - block, err := c.RelayChainNodes[0].api.RPC.Chain.GetBlockLatest() - if err != nil { - return 0, err - } - return int64(block.Block.Header.Number), nil -} - -// ExportState exports the chain state at specific height. -// Implements Chain interface. -func (c *PolkadotChain) ExportState(ctx context.Context, height int64) (string, error) { - panic("[ExportState] not implemented yet") -} - -// HomeDir is the home directory of a node running in a docker container. Therefore, this maps to -// the container's filesystem (not the host). -// Implements Chain interface. -func (c *PolkadotChain) HomeDir() string { - panic("[HomeDir] not implemented yet") -} - -func NewMnemonic() (string, error) { - // Implementation copied from substrate's go-relayer implementation - entropySeed, err := bip39.NewEntropy(256) - if err != nil { - return "", err - } - mnemonic, err := bip39.NewMnemonic(entropySeed) - if err != nil { - return "", err - } - - return mnemonic, nil -} - -// CreateKey creates a test key in the "user" node (either the first fullnode or the first validator if no fullnodes). -// Implements Chain interface. -func (c *PolkadotChain) CreateKey(ctx context.Context, keyName string) error { - _, err := c.keyring.Get(keyName) - if err == nil { - return fmt.Errorf("Key already exists: %s", keyName) - } - - mnemonic, err := NewMnemonic() - if err != nil { - return err - } - - kp, err := signature.KeyringPairFromSecret(mnemonic, Ss58Format) - if err != nil { - return fmt.Errorf("failed to create keypair: %w", err) - } - - serializedKp, err := json.Marshal(kp) - if err != nil { - return err - } - err = c.keyring.Set(keyring.Item{ - Key: keyName, - Data: serializedKp, - }) - - return err -} - -// RecoverKey recovers an existing user from a given mnemonic. -// Implements Chain interface. -func (c *PolkadotChain) RecoverKey(ctx context.Context, keyName, mnemonic string) error { - _, err := c.keyring.Get(keyName) - if err == nil { - return fmt.Errorf("Key already exists: %s", keyName) - } - - kp, err := signature.KeyringPairFromSecret(mnemonic, Ss58Format) - if err != nil { - return fmt.Errorf("failed to create keypair: %w", err) - } - - serializedKp, err := json.Marshal(kp) - if err != nil { - return err - } - err = c.keyring.Set(keyring.Item{ - Key: keyName, - Data: serializedKp, - }) - - return err -} - -// GetAddress fetches the address for a test key on the "user" node (either the first fullnode or the first validator if no fullnodes). -// Implements Chain interface. -func (c *PolkadotChain) GetAddress(ctx context.Context, keyName string) ([]byte, error) { - krItem, err := c.keyring.Get(keyName) - if err != nil { - return nil, err - } - - kp := signature.KeyringPair{} - err = json.Unmarshal(krItem.Data, &kp) - if err != nil { - return nil, err - } - - return []byte(kp.Address), nil -} - -func (c *PolkadotChain) GetPublicKey(keyName string) ([]byte, error) { - krItem, err := c.keyring.Get(keyName) - if err != nil { - return nil, err - } - - kp := signature.KeyringPair{} - err = json.Unmarshal(krItem.Data, &kp) - if err != nil { - return nil, err - } - - return kp.PublicKey, nil -} - -// BuildWallet will return a Polkadot wallet -// If mnemonic != "", it will restore using that mnemonic -// If mnemonic == "", it will create a new key -func (c *PolkadotChain) BuildWallet(ctx context.Context, keyName string, mnemonic string) (ibc.Wallet, error) { - if mnemonic != "" { - if err := c.RecoverKey(ctx, keyName, mnemonic); err != nil { - return nil, fmt.Errorf("failed to recover key with name %q on chain %s: %w", keyName, c.cfg.Name, err) - } - } else { - if err := c.CreateKey(ctx, keyName); err != nil { - return nil, fmt.Errorf("failed to create key with name %q on chain %s: %w", keyName, c.cfg.Name, err) - } - } - - addrBytes, err := c.GetAddress(ctx, keyName) - if err != nil { - return nil, fmt.Errorf("failed to get account address for key %q on chain %s: %w", keyName, c.cfg.Name, err) - } - - return NewWallet(keyName, addrBytes, mnemonic, c.cfg), nil -} - -// BuildRelayerWallet will return a Polkadot wallet populated with the mnemonic so that the wallet can -// be restored in the relayer node using the mnemonic. After it is built, that address is included in -// genesis with some funds. -func (c *PolkadotChain) BuildRelayerWallet(ctx context.Context, keyName string) (ibc.Wallet, error) { - mnemonic, err := NewMnemonic() - if err != nil { - return nil, err - } - - return c.BuildWallet(ctx, keyName, mnemonic) -} - -// SendFunds sends funds to a wallet from a user account. -// Implements Chain interface. -func (c *PolkadotChain) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { - // If denom == polkadot denom, it is a relay chain tx, else parachain tx - if amount.Denom == c.cfg.Denom { - // If keyName == faucet, also fund parachain's user until relay chain and parachains are their own chains - if keyName == "faucet" { - err := c.ParachainNodes[0][0].SendFunds(ctx, keyName, amount) - if err != nil { - return err - } - } - return c.RelayChainNodes[0].SendFunds(ctx, keyName, amount) - } - - return c.ParachainNodes[0][0].SendFunds(ctx, keyName, amount) -} - -// SendFundsWithNote sends funds to a wallet from a user account with a note/memo. -// Implements Chain interface. -func (c *PolkadotChain) SendFundsWithNote(ctx context.Context, keyName string, amount ibc.WalletAmount, note string) (string, error) { - panic("PolkadotChain: SendFundsWithNote unimplemented") -} - -// SendIBCTransfer sends an IBC transfer returning a transaction or an error if the transfer failed. -// Implements Chain interface. -func (c *PolkadotChain) SendIBCTransfer( - ctx context.Context, - channelID string, - keyName string, - amount ibc.WalletAmount, - options ibc.TransferOptions, -) (ibc.Tx, error) { - return ibc.Tx{}, c.ParachainNodes[0][0].SendIbcFunds(ctx, channelID, keyName, amount, options) -} - -// GetBalance fetches the current balance for a specific account address and denom. -// Implements Chain interface. -func (c *PolkadotChain) GetBalance(ctx context.Context, address string, denom string) (math.Int, error) { - // If denom == polkadot denom, it is a relay chain query, else parachain query - if denom == c.cfg.Denom { - return c.RelayChainNodes[0].GetBalance(ctx, address, denom) - } - - return c.ParachainNodes[0][0].GetBalance(ctx, address, denom) -} - -// AccountInfo contains information of an account -type AccountInfo struct { - Nonce gstypes.U32 - Consumers gstypes.U32 - Providers gstypes.U32 - Sufficients gstypes.U32 - Data struct { - Free gstypes.U128 - Reserved gstypes.U128 - MiscFrozen gstypes.U128 - FreeFrozen gstypes.U128 - } -} - -// GetGasFeesInNativeDenom gets the fees in native denom for an amount of spent gas. -// Implements Chain interface. -func (c *PolkadotChain) GetGasFeesInNativeDenom(gasPaid int64) int64 { - panic("[GetGasFeesInNativeDenom] not implemented yet") -} - -// Acknowledgements returns all acknowledgements in a block at height. -// Implements Chain interface. -func (c *PolkadotChain) Acknowledgements(ctx context.Context, height int64) ([]ibc.PacketAcknowledgement, error) { - panic("[Acknowledgements] not implemented yet") -} - -// Timeouts returns all timeouts in a block at height. -// Implements Chain interface. -func (c *PolkadotChain) Timeouts(ctx context.Context, height int64) ([]ibc.PacketTimeout, error) { - panic("[Timeouts] not implemented yet") -} - -// GetKeyringPair returns the keyring pair from the keyring using keyName -func (c *PolkadotChain) GetKeyringPair(keyName string) (signature.KeyringPair, error) { - kp := signature.KeyringPair{} - krItem, err := c.keyring.Get(keyName) - if err != nil { - return kp, err - } - - err = json.Unmarshal(krItem.Data, &kp) - if err != nil { - return kp, err - } - - return kp, nil -} - -// FindTxs implements blockdb.BlockSaver (Not implemented yet for polkadot, but we don't want to exit) -func (c *PolkadotChain) FindTxs(ctx context.Context, height int64) ([]blockdb.Tx, error) { - return []blockdb.Tx{}, nil -} - -// GetIbcBalance returns the Coins type of ibc coins in account -func (c *PolkadotChain) GetIbcBalance(ctx context.Context, address string, denom uint64) (sdktypes.Coin, error) { - return c.ParachainNodes[0][0].GetIbcBalance(ctx, address, denom) -} - -// MintFunds mints an asset for a user on parachain, keyName must be the owner of the asset -func (c *PolkadotChain) MintFunds(keyName string, amount ibc.WalletAmount) error { - return c.ParachainNodes[0][0].MintFunds(keyName, amount) -} diff --git a/chain/polkadot/polkadot_chain_test.go b/chain/polkadot/polkadot_chain_test.go deleted file mode 100644 index 3e3e3133c..000000000 --- a/chain/polkadot/polkadot_chain_test.go +++ /dev/null @@ -1,91 +0,0 @@ -package polkadot_test - -import ( - "context" - "fmt" - "testing" - - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/stretchr/testify/require" - "go.uber.org/zap/zaptest" -) - -func TestWalletMethods(t *testing.T) { - ctx := context.Background() - nv := 5 - nf := 3 - - chains, err := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - { - ChainConfig: ibc.ChainConfig{ - Type: "polkadot", - Name: "composable", - ChainID: "rococo-local", - Images: []ibc.DockerImage{ - { - Repository: "seunlanlege/centauri-polkadot", - Version: "v0.9.27", - UidGid: "1025:1025", - }, - { - Repository: "seunlanlege/centauri-parachain", - Version: "v0.9.27", - UidGid: "1025:1025", - }, - }, - Bin: "polkadot", - Bech32Prefix: "composable", - Denom: "uDOT", - GasPrices: "", - GasAdjustment: 0, - TrustingPeriod: "", - CoinType: "354", - }, - NumValidators: &nv, - NumFullNodes: &nf, - }, - }, - ).Chains(t.Name()) - - require.NoError(t, err, "failed to get polkadot chain") - require.Len(t, chains, 1) - chain := chains[0] - - // BuildRelayerWallet test - relayKeyName := "relayerWallet" - relayWallet, err := chain.BuildRelayerWallet(ctx, relayKeyName) - require.NoError(t, err, "Error building wallet") - - address, err := chain.GetAddress(ctx, relayKeyName) - require.NoError(t, err, "Error getting relay address") - fmt.Println("Relay wallet mnemonic: ", relayWallet.Mnemonic()) - fmt.Println("Relay wallet keyname: ", relayWallet.KeyName()) - fmt.Println("Relay wallet address: ", relayWallet.FormattedAddress()) - fmt.Println("Address: ", address) - require.Equal(t, relayWallet.FormattedAddress(), string(address), "Relay addresses not equal") - - // BuildWallet test - userKeyName := "userWallet" - userWallet, err := chain.BuildRelayerWallet(ctx, userKeyName) - require.NoError(t, err, "Error building wallet") - - address, err = chain.GetAddress(ctx, userKeyName) - require.NoError(t, err, "Error getting user address") - fmt.Println("Wallet mnemonic: ", userWallet.Mnemonic()) - fmt.Println("Wallet keyname: ", userWallet.KeyName()) - fmt.Println("Wallet address: ", userWallet.FormattedAddress()) - fmt.Println("Address: ", address) - require.Equal(t, userWallet.FormattedAddress(), string(address), "User addresses not equal") - - // RecoverKey test - recoverKeyName := "recoverWallet" - err = chain.RecoverKey(ctx, recoverKeyName, userWallet.Mnemonic()) - require.NoError(t, err, "Error on RecoverKey") - - userAddress, err := chain.GetAddress(ctx, userKeyName) - require.NoError(t, err, "Error getting user address for recover comparison") - recoverAddress, err := chain.GetAddress(ctx, recoverKeyName) - require.NoError(t, err, "Error getting recover address for recover comparison") - require.Equal(t, userAddress, recoverAddress, "User and recover addresses not equal") -} diff --git a/chain/polkadot/query.go b/chain/polkadot/query.go deleted file mode 100644 index 8b0ca27db..000000000 --- a/chain/polkadot/query.go +++ /dev/null @@ -1,34 +0,0 @@ -package polkadot - -import ( - "cosmossdk.io/math" - gsrpc "github.com/misko9/go-substrate-rpc-client/v4" - gstypes "github.com/misko9/go-substrate-rpc-client/v4/types" -) - -// GetBalance fetches the current balance for a specific account address using the SubstrateAPI -func GetBalance(api *gsrpc.SubstrateAPI, address string) (math.Int, error) { - meta, err := api.RPC.State.GetMetadataLatest() - if err != nil { - return math.Int{}, err - } - pubKey, err := DecodeAddressSS58(address) - if err != nil { - return math.Int{}, err - } - key, err := gstypes.CreateStorageKey(meta, "System", "Account", pubKey, nil) - if err != nil { - return math.Int{}, err - } - - var accountInfo AccountInfo - ok, err := api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil { - return math.Int{}, err - } - if !ok { - return math.Int{}, nil - } - - return math.NewIntFromBigInt(accountInfo.Data.Free.Int), nil -} diff --git a/chain/polkadot/relay_chain_node.go b/chain/polkadot/relay_chain_node.go deleted file mode 100644 index 27a440938..000000000 --- a/chain/polkadot/relay_chain_node.go +++ /dev/null @@ -1,300 +0,0 @@ -package polkadot - -import ( - "context" - "encoding/hex" - "fmt" - "path/filepath" - "strings" - "time" - - "cosmossdk.io/math" - "github.com/avast/retry-go/v4" - "github.com/docker/docker/client" - "github.com/docker/go-connections/nat" - gsrpc "github.com/misko9/go-substrate-rpc-client/v4" - - p2pCrypto "github.com/libp2p/go-libp2p/core/crypto" - "github.com/libp2p/go-libp2p/core/peer" - "go.uber.org/zap" - - "github.com/decred/dcrd/dcrec/secp256k1/v2" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -// RelayChainNode defines the properties required for running a polkadot relay chain node. -type RelayChainNode struct { - log *zap.Logger - TestName string - Index int - - NetworkID string - containerLifecycle *dockerutil.ContainerLifecycle - VolumeName string - DockerClient *client.Client - Image ibc.DockerImage - - Chain ibc.Chain - NodeKey p2pCrypto.PrivKey - AccountKeyName string - StashKeyName string - Ed25519PrivateKey p2pCrypto.PrivKey - EcdsaPrivateKey secp256k1.PrivateKey - - api *gsrpc.SubstrateAPI - hostWsPort string - hostRpcPort string -} - -type RelayChainNodes []*RelayChainNode - -const ( - wsPort = "27451/tcp" - //rpcPort = "27452/tcp" - nodePort = "27452/tcp" - rpcPort = "9933/tcp" - prometheusPort = "27453/tcp" -) - -var ( - RtyAtt = retry.Attempts(10) - RtyDel = retry.Delay(time.Second * 2) - RtyErr = retry.LastErrorOnly(true) -) - -var exposedPorts = nat.PortMap{ - nat.Port(wsPort): {}, - nat.Port(rpcPort): {}, - nat.Port(prometheusPort): {}, - nat.Port(nodePort): {}, -} - -// Name returns the name of the test node. -func (p *RelayChainNode) Name() string { - return fmt.Sprintf("relaychain-%d-%s-%s", p.Index, p.Chain.Config().ChainID, dockerutil.SanitizeContainerName(p.TestName)) -} - -// HostName returns the docker hostname of the test container. -func (p *RelayChainNode) HostName() string { - return dockerutil.CondenseHostName(p.Name()) -} - -// Bind returns the home folder bind point for running the node. -func (p *RelayChainNode) Bind() []string { - return []string{fmt.Sprintf("%s:%s", p.VolumeName, p.NodeHome())} -} - -// NodeHome returns the working directory within the docker image, -// the path where the docker volume is mounted. -func (p *RelayChainNode) NodeHome() string { - return "/home/heighliner" -} - -// PeerID returns the public key of the node key for p2p. -func (p *RelayChainNode) PeerID() (string, error) { - id, err := peer.IDFromPrivateKey(p.NodeKey) - if err != nil { - return "", err - } - return id.String(), nil -} - -// GrandpaAddress returns the ss58 encoded grandpa (consensus) address. -func (p *RelayChainNode) GrandpaAddress() (string, error) { - pubKey, err := p.Ed25519PrivateKey.GetPublic().Raw() - if err != nil { - return "", fmt.Errorf("error fetching pubkey bytes: %w", err) - } - return EncodeAddressSS58(pubKey) -} - -// EcdsaAddress returns the ss58 encoded secp256k1 address. -func (p *RelayChainNode) EcdsaAddress() (string, error) { - pubKey := []byte{} - y := p.EcdsaPrivateKey.PublicKey.Y.Bytes() - if y[len(y)-1]%2 == 0 { - pubKey = append(pubKey, 0x02) - } else { - pubKey = append(pubKey, 0x03) - } - pubKey = append(pubKey, p.EcdsaPrivateKey.PublicKey.X.Bytes()...) - return EncodeAddressSS58(pubKey) -} - -// MultiAddress returns the p2p multiaddr of the node. -func (p *RelayChainNode) MultiAddress() (string, error) { - peerId, err := p.PeerID() - if err != nil { - return "", err - } - return fmt.Sprintf("/dns4/%s/tcp/%s/p2p/%s", p.HostName(), strings.Split(nodePort, "/")[0], peerId), nil -} - -func (c *RelayChainNode) logger() *zap.Logger { - return c.log.With( - zap.String("chain_id", c.Chain.Config().ChainID), - zap.String("test", c.TestName), - ) -} - -// ChainSpecFilePathContainer returns the relative path to the chain spec file -// within the container. -func (p *RelayChainNode) ChainSpecFilePathContainer() string { - return fmt.Sprintf("%s.json", p.Chain.Config().ChainID) -} - -// RawChainSpecFilePathFull returns the full path to the raw chain spec file -// within the container. -func (p *RelayChainNode) RawChainSpecFilePathFull() string { - return filepath.Join(p.NodeHome(), fmt.Sprintf("%s-raw.json", p.Chain.Config().ChainID)) -} - -// RawChainSpecFilePathRelative returns the relative path to the raw chain spec file -// within the container. -func (p *RelayChainNode) RawChainSpecFilePathRelative() string { - return fmt.Sprintf("%s-raw.json", p.Chain.Config().ChainID) -} - -// GenerateChainSpec builds the chain spec for the configured chain ID. -func (p *RelayChainNode) GenerateChainSpec(ctx context.Context) error { - chainCfg := p.Chain.Config() - cmd := []string{ - chainCfg.Bin, - "build-spec", - fmt.Sprintf("--chain=%s", chainCfg.ChainID), - "--disable-default-bootnode", - } - res := p.Exec(ctx, cmd, nil) - if res.Err != nil { - return res.Err - } - fw := dockerutil.NewFileWriter(p.logger(), p.DockerClient, p.TestName) - return fw.WriteFile(ctx, p.VolumeName, p.ChainSpecFilePathContainer(), res.Stdout) -} - -// GenerateChainSpecRaw builds the raw chain spec from the generated chain spec -// for the configured chain ID. -func (p *RelayChainNode) GenerateChainSpecRaw(ctx context.Context) error { - chainCfg := p.Chain.Config() - cmd := []string{ - chainCfg.Bin, - "build-spec", - fmt.Sprintf("--chain=%s.json", filepath.Join(p.NodeHome(), chainCfg.ChainID)), - "--raw", - } - res := p.Exec(ctx, cmd, nil) - if res.Err != nil { - return res.Err - } - fw := dockerutil.NewFileWriter(p.logger(), p.DockerClient, p.TestName) - return fw.WriteFile(ctx, p.VolumeName, p.RawChainSpecFilePathRelative(), res.Stdout) -} - -// CreateNodeContainer assembles a relay chain node docker container ready to launch. -func (p *RelayChainNode) CreateNodeContainer(ctx context.Context) error { - nodeKey, err := p.NodeKey.Raw() - if err != nil { - return fmt.Errorf("error getting ed25519 node key: %w", err) - } - multiAddress, err := p.MultiAddress() - if err != nil { - return err - } - chainCfg := p.Chain.Config() - cmd := []string{ - chainCfg.Bin, - fmt.Sprintf("--chain=%s", p.RawChainSpecFilePathFull()), - fmt.Sprintf("--ws-port=%s", strings.Split(wsPort, "/")[0]), - fmt.Sprintf("--%s", IndexedName[p.Index]), - fmt.Sprintf("--node-key=%s", hex.EncodeToString(nodeKey[0:32])), - // "--validator", - "--ws-external", - "--rpc-external", - "--beefy", - "--rpc-cors=all", - "--unsafe-ws-external", - "--unsafe-rpc-external", - "--prometheus-external", - "--enable-offchain-indexing=true", - "--rpc-methods=unsafe", - "--pruning=archive", - fmt.Sprintf("--prometheus-port=%s", strings.Split(prometheusPort, "/")[0]), - fmt.Sprintf("--listen-addr=/ip4/0.0.0.0/tcp/%s", strings.Split(nodePort, "/")[0]), - fmt.Sprintf("--public-addr=%s", multiAddress), - "--base-path", p.NodeHome(), - } - return p.containerLifecycle.CreateContainer(ctx, p.TestName, p.NetworkID, p.Image, exposedPorts, p.Bind(), nil, p.HostName(), cmd, nil, []string{}) -} - -// StopContainer stops the relay chain node container, waiting at most 30 seconds. -func (p *RelayChainNode) StopContainer(ctx context.Context) error { - return p.containerLifecycle.StopContainer(ctx) -} - -// StartContainer starts the container after it is built by CreateNodeContainer. -func (p *RelayChainNode) StartContainer(ctx context.Context) error { - if err := p.containerLifecycle.StartContainer(ctx); err != nil { - return err - } - - hostPorts, err := p.containerLifecycle.GetHostPorts(ctx, wsPort, rpcPort) - if err != nil { - return err - } - - // Set the host ports once since they will not change after the container has started. - p.hostWsPort, p.hostRpcPort = hostPorts[0], hostPorts[1] - - p.logger().Info("Waiting for RPC endpoint to be available", zap.String("container", p.Name())) - explorerUrl := fmt.Sprintf("\033[4;34mhttps://polkadot.js.org/apps?rpc=ws://%s#/explorer\033[0m", - strings.Replace(p.hostWsPort, "localhost", "127.0.0.1", 1)) - p.log.Info(explorerUrl, zap.String("container", p.Name())) - var api *gsrpc.SubstrateAPI - if err = retry.Do(func() error { - var err error - api, err = gsrpc.NewSubstrateAPI("ws://" + p.hostWsPort) - return err - }, retry.Context(ctx), RtyAtt, RtyDel, RtyErr); err != nil { - return err - } - - p.logger().Info("Done", zap.String("container", p.Name())) - p.api = api - - return nil -} - -// Exec runs a container for a specific job and blocks until the container exits. -func (p *RelayChainNode) Exec(ctx context.Context, cmd []string, env []string) dockerutil.ContainerExecResult { - job := dockerutil.NewImage(p.log, p.DockerClient, p.NetworkID, p.TestName, p.Image.Repository, p.Image.Version) - opts := dockerutil.ContainerOptions{ - Binds: p.Bind(), - Env: env, - User: p.Image.UidGid, - } - return job.Run(ctx, cmd, opts) -} - -// SendFunds sends funds to a wallet from a user account. -// Implements Chain interface. -func (p *RelayChainNode) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { - kp, err := p.Chain.(*PolkadotChain).GetKeyringPair(keyName) - if err != nil { - return err - } - - hash, err := SendFundsTx(p.api, kp, amount) - if err != nil { - return err - } - - p.log.Info("Transfer sent", zap.String("hash", fmt.Sprintf("%#x", hash)), zap.String("container", p.Name())) - return nil -} - -// GetBalance fetches the current balance for a specific account address and denom. -// Implements Chain interface. -func (p *RelayChainNode) GetBalance(ctx context.Context, address string, denom string) (math.Int, error) { - return GetBalance(p.api, address) -} diff --git a/chain/polkadot/ss58.go b/chain/polkadot/ss58.go deleted file mode 100644 index 0abcb3e87..000000000 --- a/chain/polkadot/ss58.go +++ /dev/null @@ -1,107 +0,0 @@ -package polkadot - -import ( - "encoding/hex" - "fmt" - - "github.com/mr-tron/base58" - "golang.org/x/crypto/blake2b" -) - -const ( - Ss58Format = 49 - ss58Prefix = "SS58PRE" -) - -func EncodeAddressSS58(key []byte) (string, error) { - input := []byte{Ss58Format} - input = append(input, key...) - - checksum, err := ss58Checksum(input) - if err != nil { - return "", err - } - - final := input - if len(key) == 32 || len(key) == 33 { - final = append(final, checksum[0:2]...) - } else { - final = append(final, checksum[0:1]...) - } - - return base58.Encode(final), nil -} - -// Decodes an address to public key, refactored from https://github.com/subscan-explorer/subscan-essentials -func DecodeAddressSS58(address string) ([]byte, error) { - checksumPrefix := []byte(ss58Prefix) - ss58AddrDecoded, err := base58.Decode(address) - if len(ss58AddrDecoded) == 0 || ss58AddrDecoded[0] != byte(Ss58Format) || err != nil { - return nil, err - } - var checksumLength int - if IntInSlice(len(ss58AddrDecoded), []int{3, 4, 6, 10}) { - checksumLength = 1 - } else if IntInSlice(len(ss58AddrDecoded), []int{5, 7, 11, 35}) { - checksumLength = 2 - } else if IntInSlice(len(ss58AddrDecoded), []int{8, 12}) { - checksumLength = 3 - } else if IntInSlice(len(ss58AddrDecoded), []int{9, 13}) { - checksumLength = 4 - } else if IntInSlice(len(ss58AddrDecoded), []int{14}) { - checksumLength = 5 - } else if IntInSlice(len(ss58AddrDecoded), []int{15}) { - checksumLength = 6 - } else if IntInSlice(len(ss58AddrDecoded), []int{16}) { - checksumLength = 7 - } else if IntInSlice(len(ss58AddrDecoded), []int{17}) { - checksumLength = 8 - } else { - return nil, fmt.Errorf("Cannot get checksum length") - } - bss := ss58AddrDecoded[0 : len(ss58AddrDecoded)-checksumLength] - checksum, _ := blake2b.New(64, []byte{}) - w := append(checksumPrefix[:], bss[:]...) - _, err = checksum.Write(w) - if err != nil { - return nil, err - } - - h := checksum.Sum(nil) - if BytesToHex(h[0:checksumLength]) != BytesToHex(ss58AddrDecoded[len(ss58AddrDecoded)-checksumLength:]) { - return nil, fmt.Errorf("Checksum incorrect") - } - return ss58AddrDecoded[1 : len(ss58AddrDecoded)-checksumLength], nil -} - -func BytesToHex(b []byte) string { - c := make([]byte, hex.EncodedLen(len(b))) - hex.Encode(c, b) - return string(c) -} - -func IntInSlice(a int, list []int) bool { - for _, b := range list { - if b == a { - return true - } - } - return false -} - -func ss58Checksum(data []byte) ([]byte, error) { - hasher, err := blake2b.New512(nil) - if err != nil { - return nil, err - } - - if _, err := hasher.Write([]byte(ss58Prefix)); err != nil { - return nil, err - } - - if _, err := hasher.Write(data); err != nil { - return nil, err - } - - return hasher.Sum(nil), nil -} diff --git a/chain/polkadot/tx.go b/chain/polkadot/tx.go deleted file mode 100644 index b4afce48c..000000000 --- a/chain/polkadot/tx.go +++ /dev/null @@ -1,193 +0,0 @@ -package polkadot - -import ( - "encoding/hex" - "math/big" - "strconv" - - gsrpc "github.com/misko9/go-substrate-rpc-client/v4" - "github.com/misko9/go-substrate-rpc-client/v4/signature" - gstypes "github.com/misko9/go-substrate-rpc-client/v4/types" - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -// SendFundsTx sends funds to a wallet using the SubstrateAPI -func SendFundsTx(api *gsrpc.SubstrateAPI, senderKeypair signature.KeyringPair, amount ibc.WalletAmount) (gstypes.Hash, error) { - hash := gstypes.Hash{} - meta, err := api.RPC.State.GetMetadataLatest() - if err != nil { - return hash, err - } - - receiverPubKey, err := DecodeAddressSS58(amount.Address) - if err != nil { - return hash, err - } - - receiver, err := gstypes.NewMultiAddressFromHexAccountID(hex.EncodeToString(receiverPubKey)) - if err != nil { - return hash, err - } - - call, err := gstypes.NewCall(meta, "Balances.transfer", receiver, gstypes.NewUCompact(amount.Amount.BigInt())) - if err != nil { - return hash, err - } - - return CreateSignSubmitExt(api, meta, senderKeypair, call) -} - -// Turns on sending and receiving ibc transfers -func EnableIbc(api *gsrpc.SubstrateAPI, senderKeypair signature.KeyringPair) (gstypes.Hash, error) { - hash := gstypes.Hash{} - meta, err := api.RPC.State.GetMetadataLatest() - if err != nil { - return hash, err - } - - c, err := gstypes.NewCall(meta, "Ibc.set_params", gstypes.NewBool(true), gstypes.NewBool(true)) - if err != nil { - return hash, err - } - - sc, err := gstypes.NewCall(meta, "Sudo.sudo", c) - if err != nil { - return hash, err - } - - return CreateSignSubmitExt(api, meta, senderKeypair, sc) -} - -// SendIbcFundsTx sends funds to a wallet using the SubstrateAPI -func SendIbcFundsTx( - api *gsrpc.SubstrateAPI, - senderKeypair signature.KeyringPair, - channelID string, - amount ibc.WalletAmount, - options ibc.TransferOptions, -) (gstypes.Hash, error) { - hash := gstypes.Hash{} - meta, err := api.RPC.State.GetMetadataLatest() - if err != nil { - return hash, err - } - - assetNum, err := strconv.ParseInt(amount.Denom, 10, 64) - if err != nil { - return hash, err - } - - raw := gstypes.NewU8(1) - size := gstypes.NewU8(uint8(len(amount.Address) * 4)) - to := gstypes.NewStorageDataRaw([]byte(amount.Address)) - channel := gstypes.NewU64(0) // Parse channel number from string - timeout := gstypes.NewU8(1) - timestamp := gstypes.NewOptionU64(gstypes.NewU64(0)) - height := gstypes.NewOptionU64(gstypes.NewU64(3000)) // Must set timestamp or height - assetId := gstypes.NewU128(*big.NewInt(assetNum)) - amount2 := gstypes.NewU128(*amount.Amount.BigInt()) - memo := gstypes.NewU8(0) - - call, err := gstypes.NewCall(meta, "Ibc.transfer", raw, size, to, channel, timeout, timestamp, height, assetId, amount2, memo) - if err != nil { - return hash, err - } - - return CreateSignSubmitExt(api, meta, senderKeypair, call) -} - -// MintFunds mints an asset for a user on parachain, keyName must be the owner of the asset -func MintFundsTx( - api *gsrpc.SubstrateAPI, - senderKeypair signature.KeyringPair, - amount ibc.WalletAmount, -) (gstypes.Hash, error) { - hash := gstypes.Hash{} - meta, err := api.RPC.State.GetMetadataLatest() - if err != nil { - return hash, err - } - - assetNum, err := strconv.ParseInt(amount.Denom, 10, 64) - if err != nil { - return hash, err - } - - receiverPubKey, err := DecodeAddressSS58(amount.Address) - if err != nil { - return hash, err - } - - receiver, err := gstypes.NewMultiAddressFromHexAccountID(hex.EncodeToString(receiverPubKey)) - if err != nil { - return hash, err - } - - assetId := gstypes.NewU128(*big.NewInt(assetNum)) - amount2 := gstypes.NewUCompact(amount.Amount.BigInt()) - - call, err := gstypes.NewCall(meta, "Assets.mint", assetId, receiver, amount2) - if err != nil { - return hash, err - } - - return CreateSignSubmitExt(api, meta, senderKeypair, call) -} - -// Common tx function to create an extrinsic and sign/submit it -func CreateSignSubmitExt( - api *gsrpc.SubstrateAPI, - meta *gstypes.Metadata, - senderKeypair signature.KeyringPair, - call gstypes.Call, -) (gstypes.Hash, error) { - hash := gstypes.Hash{} - ext := gstypes.NewExtrinsic(call) - genesisHash, err := api.RPC.Chain.GetBlockHash(0) - if err != nil { - return hash, err - } - - rv, err := api.RPC.State.GetRuntimeVersionLatest() - if err != nil { - return hash, err - } - - pubKey, err := DecodeAddressSS58(senderKeypair.Address) - if err != nil { - return hash, err - } - - key, err := gstypes.CreateStorageKey(meta, "System", "Account", pubKey) - if err != nil { - return hash, err - } - - var accountInfo AccountInfo - ok, err := api.RPC.State.GetStorageLatest(key, &accountInfo) - if err != nil || !ok { - return hash, err - } - - nonce := uint32(accountInfo.Nonce) - o := gstypes.SignatureOptions{ - BlockHash: genesisHash, - Era: gstypes.ExtrinsicEra{IsMortalEra: false}, - GenesisHash: genesisHash, - Nonce: gstypes.NewUCompactFromUInt(uint64(nonce)), - SpecVersion: rv.SpecVersion, - Tip: gstypes.NewUCompactFromUInt(0), - TransactionVersion: rv.TransactionVersion, - } - - // Sign the transaction using Alice's default account - err = ext.Sign(senderKeypair, o) - if err != nil { - return hash, err - } - - // Send the extrinsic - hash, err = api.RPC.Author.SubmitExtrinsic(ext) - - return hash, err -} diff --git a/chain/polkadot/wallet.go b/chain/polkadot/wallet.go deleted file mode 100644 index 82ac58d12..000000000 --- a/chain/polkadot/wallet.go +++ /dev/null @@ -1,42 +0,0 @@ -package polkadot - -import ( - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -var _ ibc.Wallet = &PolkadotWallet{} - -type PolkadotWallet struct { - mnemonic string - address []byte - keyName string - chainCfg ibc.ChainConfig -} - -func NewWallet(keyname string, address []byte, mnemonic string, chainCfg ibc.ChainConfig) *PolkadotWallet { - return &PolkadotWallet{ - mnemonic: mnemonic, - address: address, - keyName: keyname, - chainCfg: chainCfg, - } -} - -func (w *PolkadotWallet) KeyName() string { - return w.keyName -} - -func (w *PolkadotWallet) FormattedAddress() string { - return string(w.address) -} - -// Get mnemonic, only used for relayer wallets -func (w *PolkadotWallet) Mnemonic() string { - return w.mnemonic -} - -// Get Address -// TODO Change to SS58 -func (w *PolkadotWallet) Address() []byte { - return w.address -} diff --git a/chain/thorchain/address.go b/chain/thorchain/address.go index 0021ddc85..1d2f6eccc 100644 --- a/chain/thorchain/address.go +++ b/chain/thorchain/address.go @@ -21,11 +21,6 @@ func (c *Thorchain) AccAddressFromBech32(address string) (addr sdk.AccAddress, e return nil, err } - err = sdk.VerifyAddressFormat(bz) - if err != nil { - return nil, err - } - return sdk.AccAddress(bz), nil } diff --git a/chain/thorchain/api_query.go b/chain/thorchain/api_query.go index 559243664..0e6777784 100644 --- a/chain/thorchain/api_query.go +++ b/chain/thorchain/api_query.go @@ -14,7 +14,7 @@ import ( sdkmath "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" ) func (c *Thorchain) ApiGetBalances(addr string) (common.Coins, error) { diff --git a/chain/thorchain/broadcaster.go b/chain/thorchain/broadcaster.go index f4b37b474..56495d64d 100644 --- a/chain/thorchain/broadcaster.go +++ b/chain/thorchain/broadcaster.go @@ -15,8 +15,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/tx/signing" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/testutil" ) type ClientContextOpt func(clientContext client.Context) client.Context diff --git a/chain/thorchain/codec.go b/chain/thorchain/codec.go index 7c1194638..1b21da74d 100644 --- a/chain/thorchain/codec.go +++ b/chain/thorchain/codec.go @@ -1,6 +1,14 @@ package thorchain import ( + "cosmossdk.io/core/address" + "cosmossdk.io/x/bank" + "cosmossdk.io/x/consensus" + distr "cosmossdk.io/x/distribution" + "cosmossdk.io/x/mint" + "cosmossdk.io/x/params" + "cosmossdk.io/x/staking" + "cosmossdk.io/x/tx/decode" "cosmossdk.io/x/upgrade" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -8,44 +16,39 @@ import ( "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/x/auth" authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" - "github.com/cosmos/cosmos-sdk/x/bank" - "github.com/cosmos/cosmos-sdk/x/consensus" - distr "github.com/cosmos/cosmos-sdk/x/distribution" "github.com/cosmos/cosmos-sdk/x/genutil" - genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" - "github.com/cosmos/cosmos-sdk/x/mint" - "github.com/cosmos/cosmos-sdk/x/params" - "github.com/cosmos/cosmos-sdk/x/staking" - "github.com/cosmos/ibc-go/modules/capability" - transfer "github.com/cosmos/ibc-go/v8/modules/apps/transfer" - ibccore "github.com/cosmos/ibc-go/v8/modules/core" - ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + transfer "github.com/cosmos/ibc-go/v9/modules/apps/transfer" + ibccore "github.com/cosmos/ibc-go/v9/modules/core" + ibctm "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint" + + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" ) +// TODO: ref sdk for this, does this work? func DefaultEncoding() testutil.TestEncodingConfig { return testutil.MakeTestEncodingConfig( - auth.AppModuleBasic{}, - genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - bank.AppModuleBasic{}, - capability.AppModuleBasic{}, - staking.AppModuleBasic{}, - mint.AppModuleBasic{}, - distr.AppModuleBasic{}, - params.AppModuleBasic{}, - upgrade.AppModuleBasic{}, - consensus.AppModuleBasic{}, - transfer.AppModuleBasic{}, - ibccore.AppModuleBasic{}, - ibctm.AppModuleBasic{}, + codectestutil.CodecOptions{}, + auth.AppModule{}, + // genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + genutil.AppModule{}, + bank.AppModule{}, + staking.AppModule{}, + mint.AppModule{}, + distr.AppModule{}, + params.AppModule{}, + upgrade.AppModule{}, + consensus.AppModule{}, + transfer.AppModule{}, + ibccore.AppModule{}, + ibctm.AppModule{}, ) } -func decodeTX(interfaceRegistry codectypes.InterfaceRegistry, txbz []byte) (sdk.Tx, error) { +func decodeTX(ac address.Codec, interfaceRegistry codectypes.InterfaceRegistry, txDecoder *decode.Decoder, txbz []byte) (sdk.Tx, error) { cdc := codec.NewProtoCodec(interfaceRegistry) - return authTx.DefaultTxDecoder(cdc)(txbz) + return authTx.DefaultJSONTxDecoder(ac, cdc, txDecoder)(txbz) } - func encodeTxToJSON(interfaceRegistry codectypes.InterfaceRegistry, tx sdk.Tx) ([]byte, error) { cdc := codec.NewProtoCodec(interfaceRegistry) return authTx.DefaultJSONTxEncoder(cdc)(tx) diff --git a/chain/thorchain/genesis.go b/chain/thorchain/genesis.go index 377e6fb82..1c3273893 100644 --- a/chain/thorchain/genesis.go +++ b/chain/thorchain/genesis.go @@ -7,7 +7,7 @@ import ( "strings" "github.com/icza/dyno" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) type GenesisKV struct { diff --git a/chain/thorchain/module_bank.go b/chain/thorchain/module_bank.go index ef540809b..5d3c8f906 100644 --- a/chain/thorchain/module_bank.go +++ b/chain/thorchain/module_bank.go @@ -5,10 +5,10 @@ import ( sdkmath "cosmossdk.io/math" + banktypes "cosmossdk.io/x/bank/types" "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) // Deprecated: use BankSend instead diff --git a/chain/thorchain/module_thorchain.go b/chain/thorchain/module_thorchain.go index ad4240c34..caf09debc 100644 --- a/chain/thorchain/module_thorchain.go +++ b/chain/thorchain/module_thorchain.go @@ -6,7 +6,7 @@ import ( "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) // BankSend sends tokens from one account to another. diff --git a/chain/thorchain/poll.go b/chain/thorchain/poll.go index 2b813da9b..2c279fe74 100644 --- a/chain/thorchain/poll.go +++ b/chain/thorchain/poll.go @@ -7,8 +7,8 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" ) // PollForMessage searches every transaction for a message. Must pass a coded registry capable of decoding the cosmos transaction. @@ -25,7 +25,7 @@ func PollForMessage[T any](ctx context.Context, chain *Thorchain, registry codec return zero, err } for _, tx := range block.Block.Txs { - sdkTx, err := decodeTX(registry, tx) + sdkTx, err := decodeTX(nil, registry, nil, tx) // TODO: fix me if err != nil { return zero, err } diff --git a/chain/thorchain/query.go b/chain/thorchain/query.go index dcb453114..fdefc6df5 100644 --- a/chain/thorchain/query.go +++ b/chain/thorchain/query.go @@ -22,7 +22,7 @@ func RangeBlockMessages(ctx context.Context, interfaceRegistry codectypes.Interf return fmt.Errorf("tendermint rpc get block: %w", err) } for _, txbz := range block.Block.Txs { - tx, err := decodeTX(interfaceRegistry, txbz) + tx, err := decodeTX(nil, interfaceRegistry, nil, txbz) // TODO: fix me! if err != nil { return fmt.Errorf("decode tendermint tx: %w", err) } diff --git a/chain/thorchain/sidecar.go b/chain/thorchain/sidecar.go index d4a691248..2156fe82e 100644 --- a/chain/thorchain/sidecar.go +++ b/chain/thorchain/sidecar.go @@ -9,8 +9,8 @@ import ( "github.com/docker/go-connections/nat" "go.uber.org/zap" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) type SidecarProcesses []*SidecarProcess diff --git a/chain/thorchain/thorchain.go b/chain/thorchain/thorchain.go index 078b6a4a3..07ba446b9 100644 --- a/chain/thorchain/thorchain.go +++ b/chain/thorchain/thorchain.go @@ -21,15 +21,15 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" // nolint:staticcheck - chanTypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" // nolint:staticcheck + chanTypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" dockertypes "github.com/docker/docker/api/types" volumetypes "github.com/docker/docker/api/types/volume" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) diff --git a/chain/thorchain/thornode.go b/chain/thorchain/thornode.go index b7c8d9309..1e91d4f6f 100644 --- a/chain/thorchain/thornode.go +++ b/chain/thorchain/thornode.go @@ -16,6 +16,7 @@ import ( "sync" "time" + stakingtypes "cosmossdk.io/x/staking/types" "github.com/avast/retry-go/v4" tmjson "github.com/cometbft/cometbft/libs/json" "github.com/cometbft/cometbft/p2p" @@ -27,7 +28,6 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" volumetypes "github.com/docker/docker/api/types/volume" dockerclient "github.com/docker/docker/client" "github.com/docker/go-connections/nat" @@ -38,10 +38,10 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" ) type ChainNode struct { @@ -136,7 +136,7 @@ func (tn *ChainNode) NewClient(addr string) error { } httpClient.Timeout = 10 * time.Second - rpcClient, err := rpchttp.NewWithClient(addr, "/websocket", httpClient) + rpcClient, err := rpchttp.NewWithClient(addr, httpClient) if err != nil { return err } @@ -427,7 +427,7 @@ func (tn *ChainNode) FindTxs(ctx context.Context, height int64) ([]blockdb.Tx, e var newTx blockdb.Tx newTx.Data = []byte(fmt.Sprintf(`{"data":"%s"}`, hex.EncodeToString(tx))) - sdkTx, err := decodeTX(interfaceRegistry, tx) + sdkTx, err := decodeTX(nil, interfaceRegistry, nil, tx) if err != nil { tn.logger().Info("Failed to decode tx", zap.Int64("height", height), zap.Error(err)) continue @@ -439,7 +439,7 @@ func (tn *ChainNode) FindTxs(ctx context.Context, height int64) ([]blockdb.Tx, e } newTx.Data = b - rTx := blockRes.TxsResults[i] + rTx := blockRes.TxResults[i] newTx.Events = make([]blockdb.Event, len(rTx.Events)) for j, e := range rTx.Events { diff --git a/chain/thorchain/wallet.go b/chain/thorchain/wallet.go index e51fc254b..8771a7ccc 100644 --- a/chain/thorchain/wallet.go +++ b/chain/thorchain/wallet.go @@ -2,7 +2,7 @@ package thorchain import ( "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) var _ ibc.Wallet = &CosmosWallet{} diff --git a/chain/utxo/default_configs.go b/chain/utxo/default_configs.go index cd42df4d3..0db30f467 100644 --- a/chain/utxo/default_configs.go +++ b/chain/utxo/default_configs.go @@ -3,7 +3,7 @@ package utxo import ( "fmt" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func DefaultBitcoinChainConfig( diff --git a/chain/utxo/unimplemented.go b/chain/utxo/unimplemented.go index 5968afc7c..99a05f9c1 100644 --- a/chain/utxo/unimplemented.go +++ b/chain/utxo/unimplemented.go @@ -4,7 +4,7 @@ import ( "context" "runtime" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func PanicFunctionName() { diff --git a/chain/utxo/utxo_chain.go b/chain/utxo/utxo_chain.go index bc981ce73..cabe286fb 100644 --- a/chain/utxo/utxo_chain.go +++ b/chain/utxo/utxo_chain.go @@ -17,9 +17,9 @@ import ( "github.com/docker/docker/api/types/volume" dockerclient "github.com/docker/docker/client" "github.com/docker/go-connections/nat" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "go.uber.org/zap" ) diff --git a/chain/utxo/wallet.go b/chain/utxo/wallet.go index 3cacf32e0..908c8a817 100644 --- a/chain/utxo/wallet.go +++ b/chain/utxo/wallet.go @@ -4,7 +4,7 @@ import ( "fmt" "sync" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) var _ ibc.Wallet = &UtxoWallet{} diff --git a/chainfactory.go b/chainfactory.go index 124b8a19d..aab90461d 100644 --- a/chainfactory.go +++ b/chainfactory.go @@ -7,14 +7,15 @@ import ( "strings" "sync" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/foundry" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/geth" - "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra" - "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/utxo" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum/foundry" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum/geth" + "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra" + + // "github.com/strangelove-ventures/interchaintest/v9/chain/polkadot" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/utxo" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "go.uber.org/zap" "gopkg.in/yaml.v3" ) @@ -137,26 +138,27 @@ func buildChain(log *zap.Logger, testName string, cfg ibc.ChainConfig, numValida return cosmos.NewCosmosChain(testName, cfg, nv, nf, log), nil case "penumbra": return penumbra.NewPenumbraChain(log, testName, cfg, nv, nf), nil - case "polkadot": - // TODO Clean this up. RelayChain config should only reference cfg.Images[0] and parachains should iterate through the remaining - // Maybe just pass everything in like NewCosmosChain and NewPenumbraChain, let NewPolkadotChain figure it out - // Or parachains and ICS consumer chains maybe should be their own chain - switch { - case strings.Contains(cfg.Name, "composable"): - parachains := []polkadot.ParachainConfig{{ - //Bin: "composable", - Bin: "parachain-node", - ChainID: "dev-2000", - //ChainID: "dali-dev", - Image: cfg.Images[1], - NumNodes: nf, - Flags: []string{"--execution=wasm", "--wasmtime-instantiation-strategy=recreate-instance-copy-on-write"}, - RelayChainFlags: []string{"--execution=wasm"}, - }} - return polkadot.NewPolkadotChain(log, testName, cfg, nv, parachains), nil - default: - return nil, fmt.Errorf("unexpected error, unknown polkadot parachain: %s", cfg.Name) - } + // TODO: + // case "polkadot": + // // TODO Clean this up. RelayChain config should only reference cfg.Images[0] and parachains should iterate through the remaining + // // Maybe just pass everything in like NewCosmosChain and NewPenumbraChain, let NewPolkadotChain figure it out + // // Or parachains and ICS consumer chains maybe should be their own chain + // switch { + // case strings.Contains(cfg.Name, "composable"): + // parachains := []polkadot.ParachainConfig{{ + // //Bin: "composable", + // Bin: "parachain-node", + // ChainID: "dev-2000", + // //ChainID: "dali-dev", + // Image: cfg.Images[1], + // NumNodes: nf, + // Flags: []string{"--execution=wasm", "--wasmtime-instantiation-strategy=recreate-instance-copy-on-write"}, + // RelayChainFlags: []string{"--execution=wasm"}, + // }} + // return polkadot.NewPolkadotChain(log, testName, cfg, nv, parachains), nil + // default: + // return nil, fmt.Errorf("unexpected error, unknown polkadot parachain: %s", cfg.Name) + // } case "ethereum": switch cfg.Bin { case "anvil": diff --git a/chainset.go b/chainset.go index 5bd172693..981fc8797 100644 --- a/chainset.go +++ b/chainset.go @@ -9,9 +9,9 @@ import ( "time" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "go.uber.org/multierr" "go.uber.org/zap" "golang.org/x/sync/errgroup" diff --git a/chainspec.go b/chainspec.go index 0d676fb14..cb6ff67f7 100644 --- a/chainspec.go +++ b/chainspec.go @@ -8,7 +8,7 @@ import ( "sync" "sync/atomic" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "go.uber.org/zap" ) diff --git a/chainspec_test.go b/chainspec_test.go index 8f1af9185..111893ded 100644 --- a/chainspec_test.go +++ b/chainspec_test.go @@ -5,8 +5,8 @@ import ( "testing" "github.com/google/go-cmp/cmp" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/cmd/interchaintest/flags.go b/cmd/interchaintest/flags.go index e4413609b..418a9e53b 100644 --- a/cmd/interchaintest/flags.go +++ b/cmd/interchaintest/flags.go @@ -6,7 +6,7 @@ import ( "os" "time" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) diff --git a/cmd/interchaintest/interchaintest_test.go b/cmd/interchaintest/interchaintest_test.go index c46718578..ecef21989 100644 --- a/cmd/interchaintest/interchaintest_test.go +++ b/cmd/interchaintest/interchaintest_test.go @@ -12,13 +12,13 @@ import ( "time" "github.com/rivo/tview" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/blockdb" - blockdbtui "github.com/strangelove-ventures/interchaintest/v8/blockdb/tui" - "github.com/strangelove-ventures/interchaintest/v8/conformance" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/blockdb" + blockdbtui "github.com/strangelove-ventures/interchaintest/v9/blockdb/tui" + "github.com/strangelove-ventures/interchaintest/v9/conformance" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "go.uber.org/zap" ) diff --git a/cmd/interchaintest/matrix_test.go b/cmd/interchaintest/matrix_test.go index 98aac8892..dcf0b1ad5 100644 --- a/cmd/interchaintest/matrix_test.go +++ b/cmd/interchaintest/matrix_test.go @@ -5,7 +5,7 @@ import ( "encoding/json" "testing" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/conformance/flush.go b/conformance/flush.go index e8d508ca7..15c3a7977 100644 --- a/conformance/flush.go +++ b/conformance/flush.go @@ -7,11 +7,11 @@ import ( "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" ) diff --git a/conformance/relayersetup.go b/conformance/relayersetup.go index e2feb36a3..123f41e90 100644 --- a/conformance/relayersetup.go +++ b/conformance/relayersetup.go @@ -5,12 +5,12 @@ import ( "fmt" "testing" - conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - "github.com/cosmos/ibc-go/v8/modules/core/exported" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + conntypes "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types" + "github.com/cosmos/ibc-go/v9/modules/core/exported" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" ) diff --git a/conformance/test.go b/conformance/test.go index 1d095551c..d07448c32 100644 --- a/conformance/test.go +++ b/conformance/test.go @@ -14,8 +14,8 @@ // import ( // "testing" // -// "github.com/strangelove-ventures/interchaintest/v8/conformance" -// "github.com/strangelove-ventures/interchaintest/v8/ibc" +// "github.com/strangelove-ventures/interchaintest/v9/conformance" +// "github.com/strangelove-ventures/interchaintest/v9/ibc" // ) // // func TestMyRelayer(t *testing.T) { @@ -36,15 +36,15 @@ import ( "time" "cosmossdk.io/math" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + transfertypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" ) @@ -414,7 +414,7 @@ func testPacketRelaySuccess( req.NoError(srcAck.Validate(), "invalid acknowledgement on source chain") // get ibc denom for src denom on dst chain - srcDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channels[i].Counterparty.PortID, channels[i].Counterparty.ChannelID, srcDenom)) + srcDenomTrace := transfertypes.NewDenom(srcDenom, transfertypes.NewHop(channels[i].Counterparty.PortID, channels[i].Counterparty.ChannelID)) dstIbcDenom := srcDenomTrace.IBCDenom() srcFinalBalance, err := srcChain.GetBalance(ctx, srcUser.(*cosmos.CosmosWallet).FormattedAddressWithPrefix(srcChainCfg.Bech32Prefix), srcDenom) @@ -450,7 +450,7 @@ func testPacketRelaySuccess( require.NoError(t, testutil.WaitForBlocks(ctx, 5, srcChain, dstChain)) // get ibc denom for dst denom on src chain - dstDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channels[i].PortID, channels[i].ChannelID, dstDenom)) + dstDenomTrace := transfertypes.NewDenom(dstDenom, transfertypes.NewHop(channels[i].PortID, channels[i].ChannelID)) srcIbcDenom := dstDenomTrace.IBCDenom() srcFinalBalance, err := srcChain.GetBalance(ctx, dstUser.(*cosmos.CosmosWallet).FormattedAddressWithPrefix(srcChainCfg.Bech32Prefix), srcIbcDenom) @@ -503,7 +503,7 @@ func testPacketRelayFail( require.NoError(t, testutil.WaitForBlocks(ctx, 5, srcChain, dstChain)) // get ibc denom for src denom on dst chain - srcDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channels[i].Counterparty.PortID, channels[i].Counterparty.ChannelID, srcDenom)) + srcDenomTrace := transfertypes.NewDenom(srcDenom, transfertypes.NewHop(channels[i].Counterparty.PortID, channels[i].Counterparty.ChannelID)) dstIbcDenom := srcDenomTrace.IBCDenom() srcFinalBalance, err := srcChain.GetBalance(ctx, srcUser.(*cosmos.CosmosWallet).FormattedAddressWithPrefix(srcChainCfg.Bech32Prefix), srcDenom) @@ -534,7 +534,7 @@ func testPacketRelayFail( require.NoError(t, testutil.WaitForBlocks(ctx, 5, srcChain, dstChain)) // get ibc denom for dst denom on src chain - dstDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channels[i].PortID, channels[i].ChannelID, dstDenom)) + dstDenomTrace := transfertypes.NewDenom(dstDenom, transfertypes.NewHop(channels[i].PortID, channels[i].ChannelID)) srcIbcDenom := dstDenomTrace.IBCDenom() srcFinalBalance, err := srcChain.GetBalance(ctx, dstUser.(*cosmos.CosmosWallet).FormattedAddressWithPrefix(srcChainCfg.Bech32Prefix), srcIbcDenom) diff --git a/dockerutil/container_lifecycle.go b/dockerutil/container_lifecycle.go index b89d06acc..8ea00ea25 100644 --- a/dockerutil/container_lifecycle.go +++ b/dockerutil/container_lifecycle.go @@ -15,7 +15,7 @@ import ( "github.com/docker/go-connections/nat" "go.uber.org/zap" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) type ContainerLifecycle struct { diff --git a/dockerutil/fileretriever_test.go b/dockerutil/fileretriever_test.go index 0d1aa833e..aa4e81424 100644 --- a/dockerutil/fileretriever_test.go +++ b/dockerutil/fileretriever_test.go @@ -5,8 +5,8 @@ import ( "testing" volumetypes "github.com/docker/docker/api/types/volume" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/dockerutil/filewriter_test.go b/dockerutil/filewriter_test.go index 43ab117ad..28b285f1e 100644 --- a/dockerutil/filewriter_test.go +++ b/dockerutil/filewriter_test.go @@ -5,8 +5,8 @@ import ( "testing" volumetypes "github.com/docker/docker/api/types/volume" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/dockerutil/setup_test.go b/dockerutil/setup_test.go index 84f7f8d00..499525045 100644 --- a/dockerutil/setup_test.go +++ b/dockerutil/setup_test.go @@ -7,8 +7,8 @@ import ( volumetypes "github.com/docker/docker/api/types/volume" "github.com/docker/docker/errdefs" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/mocktesting" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/mocktesting" "github.com/stretchr/testify/require" ) diff --git a/docs/conformance-tests-lib.md b/docs/conformance-tests-lib.md index b6a66ad45..b1f77c319 100644 --- a/docs/conformance-tests-lib.md +++ b/docs/conformance-tests-lib.md @@ -9,7 +9,7 @@ You can view all the specific conformance test by reviewing them in the [conform ## Importing Conformance Tests In Your Project -`interchaintest` can be imported into your own packages to be used as a library as well as being used from the +`interchaintest` can be imported into your own packages to be used as a library as well as being used from the binary itself, see [here](conformance-tests-bin.md). A common pattern when importing `interchaintest` into your own repositories is to use a Go submodule. The reason being @@ -21,16 +21,16 @@ to use specific versions of dependencies. To avoid this issue one will typically The main entrypoint exposed by the `conformance` package is a function named `Test`. -Here is the function signature of `Test`: +Here is the function signature of `Test`: ```go func Test(t *testing.T, ctx context.Context, cfs []interchaintest.ChainFactory, rfs []interchaintest.RelayerFactory, rep *testreporter.Reporter) ``` -It accepts a normal `testing.T` and `context.Context` from the Go standard library as well as a few types defined in `interchaintest`. +It accepts a normal `testing.T` and `context.Context` from the Go standard library as well as a few types defined in `interchaintest`. - `testreporter.Reporter` is used for collecting detailed test reports, you can read more about it [here](../testreporter/doc.go). - `interchaintest.ChainFactory` is used to define which chain pairs should be used in conformance testing. -- `interchaintest.RelayerFactory` is used to define which relayer implementations should be used to test IBC functionality between your chain pairs. +- `interchaintest.RelayerFactory` is used to define which relayer implementations should be used to test IBC functionality between your chain pairs. It is important to note that the `Test` function accepts a slice of `ChainFactory`, currently the `conformance` tests only work against a pair of two chains at a time. This means that each `ChainFactory` should only contain definitions for two chains, @@ -47,10 +47,10 @@ import ( "context" "testing" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/conformance" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/conformance" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "go.uber.org/zap/zaptest" ) diff --git a/examples/cosmos/chain_core_test.go b/examples/cosmos/chain_core_test.go index 795ba8078..e0af44b36 100644 --- a/examples/cosmos/chain_core_test.go +++ b/examples/cosmos/chain_core_test.go @@ -10,18 +10,18 @@ import ( sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" + banktypes "cosmossdk.io/x/bank/types" + govv1 "cosmossdk.io/x/gov/types/v1" + stakingtypes "cosmossdk.io/x/staking/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - vestingcli "github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + // vestingcli "github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli" // TODO: re-add me with the module depending on the new account structure ) var ( @@ -111,8 +111,8 @@ func TestCoreSDKCommands(t *testing.T) { }) // used in circuit - superAdmin, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "acc0", mnemonic, genesisAmt, chain) - require.NoError(t, err) + // superAdmin, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "acc0", mnemonic, genesisAmt, chain) + // require.NoError(t, err) t.Run("authz", func(t *testing.T) { users := interchaintest.GetAndFundTestUsers(t, ctx, "default", genesisAmt, chain, chain, chain) @@ -139,10 +139,11 @@ func TestCoreSDKCommands(t *testing.T) { testGov(ctx, t, chain, users) }) - t.Run("auth-vesting", func(t *testing.T) { - testAuth(ctx, t, chain) - testVesting(ctx, t, chain, superAdmin) - }) + // TODO: . + // t.Run("auth-vesting", func(t *testing.T) { + // testAuth(ctx, t, chain) + // testVesting(ctx, t, chain, superAdmin) + // }) t.Run("upgrade", func(t *testing.T) { testUpgrade(ctx, t, chain) @@ -697,6 +698,8 @@ func testStaking(ctx context.Context, t *testing.T, chain *cosmos.CosmosChain, u }) } +// TODO: . +/* func testVesting(ctx context.Context, t *testing.T, chain *cosmos.CosmosChain, admin ibc.Wallet) { t.Parallel() @@ -731,6 +734,7 @@ func testVesting(ctx context.Context, t *testing.T, chain *cosmos.CosmosChain, a chain.AuthPrintAccountInfo(chain, res) }) + t.Run("periodic account", func(t *testing.T) { acc = "cosmos1hkar47a0ysml3fhw2jgyrnrvwq9z8tk7zpw3jz" @@ -766,3 +770,4 @@ func testVesting(ctx context.Context, t *testing.T, chain *cosmos.CosmosChain, a chain.AuthPrintAccountInfo(chain, res) }) } +*/ diff --git a/examples/cosmos/chain_export_test.go b/examples/cosmos/chain_export_test.go index 23d571d1f..e82bc2f14 100644 --- a/examples/cosmos/chain_export_test.go +++ b/examples/cosmos/chain_export_test.go @@ -2,13 +2,14 @@ package cosmos_test import ( "context" + "fmt" "testing" "time" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap" ) @@ -21,6 +22,7 @@ func TestJunoStateExport(t *testing.T) { chains := interchaintest.CreateChainWithConfig(t, numValsOne, numFullNodesZero, "juno", "v19.0.0-alpha.3", ibc.ChainConfig{}) chain := chains[0].(*cosmos.CosmosChain) + fmt.Println("Starting Juno chain") enableBlockDB := false ctx, _, _, _ := interchaintest.BuildInitialChain(t, chains, enableBlockDB) diff --git a/examples/cosmos/chain_genesis_stake_test.go b/examples/cosmos/chain_genesis_stake_test.go index 138cf43c4..22dcf4529 100644 --- a/examples/cosmos/chain_genesis_stake_test.go +++ b/examples/cosmos/chain_genesis_stake_test.go @@ -8,10 +8,10 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/cosmos/chain_miscellaneous_test.go b/examples/cosmos/chain_miscellaneous_test.go index 6203fb901..7d3ae500b 100644 --- a/examples/cosmos/chain_miscellaneous_test.go +++ b/examples/cosmos/chain_miscellaneous_test.go @@ -7,14 +7,13 @@ import ( "cosmossdk.io/math" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + banktypes "cosmossdk.io/x/bank/types" sdk "github.com/cosmos/cosmos-sdk/types" testutil "github.com/cosmos/cosmos-sdk/types/module/testutil" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) @@ -97,8 +96,7 @@ func TestICTestMiscellaneous(t *testing.T) { } func wasmEncoding() *testutil.TestEncodingConfig { - cfg := cosmos.DefaultEncoding() - wasmtypes.RegisterInterfaces(cfg.InterfaceRegistry) + cfg := cosmos.DefaultEncoding() // TODO: change to use the default wasm encoding with cosmos.DefaultEncoding return &cfg } diff --git a/examples/cosmos/chain_param_change_test.go b/examples/cosmos/chain_param_change_test.go index 65a6c9222..5688b0426 100644 --- a/examples/cosmos/chain_param_change_test.go +++ b/examples/cosmos/chain_param_change_test.go @@ -6,13 +6,13 @@ import ( "testing" "cosmossdk.io/math" - paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + paramsutils "cosmossdk.io/x/params/client/utils" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "github.com/stretchr/testify/require" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + govv1beta1 "cosmossdk.io/x/gov/types/v1beta1" ) func TestJunoParamChange(t *testing.T) { diff --git a/examples/cosmos/chain_upgrade_ibc_test.go b/examples/cosmos/chain_upgrade_ibc_test.go index ebcc62c7e..6a7561b28 100644 --- a/examples/cosmos/chain_upgrade_ibc_test.go +++ b/examples/cosmos/chain_upgrade_ibc_test.go @@ -7,14 +7,14 @@ import ( "time" "cosmossdk.io/math" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/conformance" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + govv1beta1 "cosmossdk.io/x/gov/types/v1beta1" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/conformance" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/cosmos/code_coverage_test.go b/examples/cosmos/code_coverage_test.go index fd18d95a4..4f88566e8 100644 --- a/examples/cosmos/code_coverage_test.go +++ b/examples/cosmos/code_coverage_test.go @@ -5,11 +5,11 @@ import ( "os" "testing" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zapcore" "go.uber.org/zap/zaptest" diff --git a/examples/cosmos/cometmock_test.go b/examples/cosmos/cometmock_test.go index 75dd201da..45a5414a1 100644 --- a/examples/cosmos/cometmock_test.go +++ b/examples/cosmos/cometmock_test.go @@ -5,9 +5,9 @@ import ( "testing" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/cosmos/ethermint_test.go b/examples/cosmos/ethermint_test.go index 04012122d..d1295c1b0 100644 --- a/examples/cosmos/ethermint_test.go +++ b/examples/cosmos/ethermint_test.go @@ -11,11 +11,11 @@ import ( sdkmath "cosmossdk.io/math" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + banktypes "cosmossdk.io/x/bank/types" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/cosmos/sdk_boundary_test.go b/examples/cosmos/sdk_boundary_test.go index f7ff3e568..c79e55089 100644 --- a/examples/cosmos/sdk_boundary_test.go +++ b/examples/cosmos/sdk_boundary_test.go @@ -4,13 +4,13 @@ import ( "context" "testing" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/conformance" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/relayer/rly" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/conformance" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/relayer/rly" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/cosmwasm/rust-optimizer/rust_optimizer_test.go b/examples/cosmwasm/rust-optimizer/rust_optimizer_test.go index 7f8aa8fca..7d882f067 100644 --- a/examples/cosmwasm/rust-optimizer/rust_optimizer_test.go +++ b/examples/cosmwasm/rust-optimizer/rust_optimizer_test.go @@ -6,13 +6,13 @@ import ( "testing" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos/wasm" - "github.com/strangelove-ventures/interchaintest/v8/contract/cosmwasm" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos/wasm" + "github.com/strangelove-ventures/interchaintest/v9/contract/cosmwasm" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/cosmwasm/workspace-optimizer/workspace_optimizer_test.go b/examples/cosmwasm/workspace-optimizer/workspace_optimizer_test.go index 1c630c71e..b61e9da54 100644 --- a/examples/cosmwasm/workspace-optimizer/workspace_optimizer_test.go +++ b/examples/cosmwasm/workspace-optimizer/workspace_optimizer_test.go @@ -6,13 +6,13 @@ import ( "testing" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos/wasm" - "github.com/strangelove-ventures/interchaintest/v8/contract/cosmwasm" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos/wasm" + "github.com/strangelove-ventures/interchaintest/v9/contract/cosmwasm" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/ethereum/foundry_test.go b/examples/ethereum/foundry_test.go index 12a38cca5..e5b71b3f1 100644 --- a/examples/ethereum/foundry_test.go +++ b/examples/ethereum/foundry_test.go @@ -7,12 +7,12 @@ import ( "time" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/foundry" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum/foundry" + "github.com/strangelove-ventures/interchaintest/v9/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/ethereum/geth_test.go b/examples/ethereum/geth_test.go index e3232fdc0..2106327c2 100644 --- a/examples/ethereum/geth_test.go +++ b/examples/ethereum/geth_test.go @@ -8,12 +8,12 @@ import ( "testing" "time" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/geth" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum/geth" + "github.com/strangelove-ventures/interchaintest/v9/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/hyperspace/hyperspace_test.go b/examples/hyperspace/hyperspace_test.go.archive similarity index 96% rename from examples/hyperspace/hyperspace_test.go rename to examples/hyperspace/hyperspace_test.go.archive index 615f80245..5b6100cbc 100644 --- a/examples/hyperspace/hyperspace_test.go +++ b/examples/hyperspace/hyperspace_test.go.archive @@ -12,16 +12,16 @@ import ( "time" "cosmossdk.io/math" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + govv1beta1 "cosmossdk.io/x/gov/types/v1beta1" + transfertypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" "github.com/icza/dyno" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + // "github.com/strangelove-ventures/interchaintest/v9/chain/polkadot" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/ibc/client_creation_test.go b/examples/ibc/client_creation_test.go index 274788a66..073c589b1 100644 --- a/examples/ibc/client_creation_test.go +++ b/examples/ibc/client_creation_test.go @@ -4,10 +4,10 @@ import ( "context" "testing" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/ibc/ics_test.go b/examples/ibc/ics_test.go index e3271925f..f4ccf099b 100644 --- a/examples/ibc/ics_test.go +++ b/examples/ibc/ics_test.go @@ -7,13 +7,13 @@ import ( "testing" "cosmossdk.io/math" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - ibcconntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + transfertypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" + ibcconntypes "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) @@ -26,7 +26,7 @@ var ( ) // This tests Cosmos Interchain Security, spinning up a provider and a single consumer chain. -// go test -timeout 3000s -run ^TestICS$ github.com/strangelove-ventures/interchaintest/v8/examples/ibc -v -test.short +// go test -timeout 3000s -run ^TestICS$ github.com/strangelove-ventures/interchaintest/v9/examples/ibc -v -test.short func TestICS(t *testing.T) { if testing.Short() { ver := icsVersions[0] @@ -183,7 +183,7 @@ func icsTest(t *testing.T, version string, rly ibc.RelayerImplementation) { require.NoError(t, r.Flush(ctx, eRep, ibcPath, channelID)) - srcDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", consumerChannelID, provider.Config().Denom)) + srcDenomTrace := transfertypes.NewDenom(provider.Config().Denom, transfertypes.NewHop("transfer", consumerChannelID)) dstIbcDenom := srcDenomTrace.IBCDenom() consumerBal, err := consumer.BankQueryBalance(ctx, consumerUser.FormattedAddress(), dstIbcDenom) diff --git a/examples/ibc/learn_ibc_test.go b/examples/ibc/learn_ibc_test.go index 548666d7d..c28d3493c 100644 --- a/examples/ibc/learn_ibc_test.go +++ b/examples/ibc/learn_ibc_test.go @@ -6,14 +6,14 @@ import ( "testing" "time" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + transfertypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" "cosmossdk.io/math" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) @@ -121,7 +121,7 @@ func TestLearn(t *testing.T) { require.True(t, gaiaUserBalNew.Equal(expectedBal)) // Trace IBC Denom - srcDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", osmoChannelID, gaia.Config().Denom)) + srcDenomTrace := transfertypes.NewDenom(gaia.Config().Denom, transfertypes.NewHop("transfer", osmoChannelID)) dstIbcDenom := srcDenomTrace.IBCDenom() // Test destination wallet has increased funds diff --git a/examples/ibc/wasm/wasm_ibc_test.go b/examples/ibc/wasm/wasm_ibc_test.go index 1883a6607..b7e286357 100644 --- a/examples/ibc/wasm/wasm_ibc_test.go +++ b/examples/ibc/wasm/wasm_ibc_test.go @@ -7,12 +7,12 @@ import ( "time" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos/wasm" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos/wasm" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/ibc/wasm/wasm_icq_test.go b/examples/ibc/wasm/wasm_icq_test.go index bbd53080f..c12d25420 100644 --- a/examples/ibc/wasm/wasm_icq_test.go +++ b/examples/ibc/wasm/wasm_icq_test.go @@ -11,14 +11,14 @@ import ( "time" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - cosmosChain "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos/wasm" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + cosmosChain "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos/wasm" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap" "go.uber.org/zap/zaptest" diff --git a/examples/penumbra/penumbra_chain_test.go b/examples/penumbra/penumbra_chain_test.go index 496aafda2..616d822ad 100644 --- a/examples/penumbra/penumbra_chain_test.go +++ b/examples/penumbra/penumbra_chain_test.go @@ -7,11 +7,11 @@ import ( "time" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/penumbra/penumbra_ibc_test.go b/examples/penumbra/penumbra_ibc_test.go index 681444551..d037ef8ba 100644 --- a/examples/penumbra/penumbra_ibc_test.go +++ b/examples/penumbra/penumbra_ibc_test.go @@ -7,13 +7,13 @@ import ( "time" "cosmossdk.io/math" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + transfertypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) @@ -179,9 +179,9 @@ func TestPenumbraToPenumbraIBC(t *testing.T) { require.True(t, aliceBal.Equal(expectedBal), fmt.Sprintf("incorrect balance, got (%s) expected (%s)", aliceBal, expectedBal)) // Compose IBC token denom information for Chain A's native token denom represented on Chain B - ibcDenom := transfertypes.GetPrefixedDenom(abChan.Counterparty.PortID, abChan.Counterparty.ChannelID, chainA.Config().Denom) + ibcDenom := transfertypes.NewDenom(chainA.Config().Denom, transfertypes.NewHop(abChan.Counterparty.PortID, abChan.Counterparty.ChannelID)) - bobBal, err = chainB.GetBalance(ctx, bob.KeyName(), ibcDenom) + bobBal, err = chainB.GetBalance(ctx, bob.KeyName(), ibcDenom.IBCDenom()) require.NoError(t, err) require.True(t, bobBal.Equal(transferAmount), fmt.Sprintf("incorrect balance, got (%s) expected (%s)", bobBal, transferAmount)) @@ -216,7 +216,7 @@ func TestPenumbraToPenumbraIBC(t *testing.T) { err = testutil.WaitForBlocks(ctx, 10, chainA) require.NoError(t, err) - bobBal, err = chainB.GetBalance(ctx, bob.KeyName(), ibcDenom) + bobBal, err = chainB.GetBalance(ctx, bob.KeyName(), ibcDenom.IBCDenom()) require.NoError(t, err) require.True(t, bobBal.Equal(transferAmount), fmt.Sprintf("incorrect balance, got (%s) expected (%s)", bobBal, transferAmount)) @@ -252,7 +252,7 @@ func TestPenumbraToPenumbraIBC(t *testing.T) { err = testutil.WaitForBlocks(ctx, 10, chainA) require.NoError(t, err) - bobBal, err = chainB.GetBalance(ctx, bob.KeyName(), ibcDenom) + bobBal, err = chainB.GetBalance(ctx, bob.KeyName(), ibcDenom.IBCDenom()) require.NoError(t, err) require.True(t, bobBal.Equal(transferAmount), fmt.Sprintf("incorrect balance, got (%s) expected (%s)", bobBal, transferAmount)) @@ -436,9 +436,10 @@ func TestPenumbraToCosmosIBC(t *testing.T) { require.True(t, aliceBal.Equal(expectedBal), fmt.Sprintf("incorrect balance, got (%s) expected (%s)", aliceBal, expectedBal)) // Compose IBC token denom information for Chain A's native token denom represented on Chain B - ibcDenom := transfertypes.GetPrefixedDenom(abChan.Counterparty.PortID, abChan.Counterparty.ChannelID, chainA.Config().Denom) - ibcDenomTrace := transfertypes.ParseDenomTrace(ibcDenom) - chainADenomOnChainB := ibcDenomTrace.IBCDenom() + // ibcDenom := transfertypes.GetPrefixedDenom(abChan.Counterparty.PortID, abChan.Counterparty.ChannelID, chainA.Config().Denom) + // ibcDenomTrace := transfertypes.ParseDenomTrace(ibcDenom) + ibcDenom := transfertypes.NewDenom(chainA.Config().Denom, transfertypes.NewHop(abChan.Counterparty.PortID, abChan.Counterparty.ChannelID)) + chainADenomOnChainB := ibcDenom.IBCDenom() bobBal, err = chainB.GetBalance(ctx, bob.FormattedAddress(), chainADenomOnChainB) require.NoError(t, err) @@ -449,7 +450,7 @@ func TestPenumbraToCosmosIBC(t *testing.T) { transfer = ibc.WalletAmount{ Address: string(aliceAddr), - Denom: ibcDenomTrace.IBCDenom(), + Denom: chainADenomOnChainB, Amount: transferAmount, } @@ -558,9 +559,8 @@ func TestPenumbraToCosmosIBC(t *testing.T) { require.NoError(t, err) // Compose IBC token denom information for Chain B's native token denom represented on Chain A - chainBIbcDenom := transfertypes.GetPrefixedDenom(abChan.PortID, abChan.ChannelID, chainB.Config().Denom) - chainBIbcDenomTrace := transfertypes.ParseDenomTrace(chainBIbcDenom) - chainBDenomOnChainA := chainBIbcDenomTrace.IBCDenom() + chainBIbcDenom := transfertypes.NewDenom(chainB.Config().Denom, transfertypes.NewHop(abChan.PortID, abChan.ChannelID)) + chainBDenomOnChainA := chainBIbcDenom.IBCDenom() transfer = ibc.WalletAmount{ Address: string(aliceAddr), diff --git a/examples/polkadot/polkadot_chain_test.go b/examples/polkadot/polkadot_chain_test.go.archive similarity index 97% rename from examples/polkadot/polkadot_chain_test.go rename to examples/polkadot/polkadot_chain_test.go.archive index 15acf2178..e6ba91e8c 100644 --- a/examples/polkadot/polkadot_chain_test.go +++ b/examples/polkadot/polkadot_chain_test.go.archive @@ -6,11 +6,11 @@ import ( "testing" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/polkadot" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/polkadot/push_wasm_client_code_test.go b/examples/polkadot/push_wasm_client_code_test.go index 2233b1f8b..9ae6d316e 100644 --- a/examples/polkadot/push_wasm_client_code_test.go +++ b/examples/polkadot/push_wasm_client_code_test.go @@ -10,13 +10,13 @@ import ( "testing" "cosmossdk.io/math" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + govv1beta1 "cosmossdk.io/x/gov/types/v1beta1" "github.com/icza/dyno" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/polkadot/substrate_cosmos_ibc_test.go b/examples/polkadot/substrate_cosmos_ibc_test.go index 90c842687..52801a7c1 100644 --- a/examples/polkadot/substrate_cosmos_ibc_test.go +++ b/examples/polkadot/substrate_cosmos_ibc_test.go @@ -6,11 +6,11 @@ import ( "testing" "time" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/thorchain/chainspec_exochains.go b/examples/thorchain/chainspec_exochains.go index 002889e76..1e8860b6c 100644 --- a/examples/thorchain/chainspec_exochains.go +++ b/examples/thorchain/chainspec_exochains.go @@ -1,13 +1,13 @@ package thorchain_test import ( - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/foundry" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/geth" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/chain/utxo" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum/foundry" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum/geth" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/chain/utxo" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) type ExoChains map[string]*ExoChain diff --git a/examples/thorchain/chainspec_thorchain.go b/examples/thorchain/chainspec_thorchain.go index de750d711..1cf6afd70 100644 --- a/examples/thorchain/chainspec_thorchain.go +++ b/examples/thorchain/chainspec_thorchain.go @@ -5,10 +5,10 @@ import ( "strings" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) var ( diff --git a/examples/thorchain/features/arb.go b/examples/thorchain/features/arb.go index c6eafe4ee..54e36af08 100644 --- a/examples/thorchain/features/arb.go +++ b/examples/thorchain/features/arb.go @@ -9,9 +9,9 @@ import ( "time" sdkmath "cosmossdk.io/math" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "golang.org/x/sync/errgroup" ) diff --git a/examples/thorchain/features/dual_lper.go b/examples/thorchain/features/dual_lper.go index c418c5e4b..9b0889412 100644 --- a/examples/thorchain/features/dual_lper.go +++ b/examples/thorchain/features/dual_lper.go @@ -5,9 +5,9 @@ import ( "fmt" "testing" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func DualLp( diff --git a/examples/thorchain/features/helpers.go b/examples/thorchain/features/helpers.go index f8d3206f4..8ec55ede1 100644 --- a/examples/thorchain/features/helpers.go +++ b/examples/thorchain/features/helpers.go @@ -9,11 +9,11 @@ import ( "time" sdkmath "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "golang.org/x/sync/errgroup" ) diff --git a/examples/thorchain/features/ragnarok.go b/examples/thorchain/features/ragnarok.go index 5268ca4dc..4cf0fc959 100644 --- a/examples/thorchain/features/ragnarok.go +++ b/examples/thorchain/features/ragnarok.go @@ -6,9 +6,9 @@ import ( "testing" sdkmath "cosmossdk.io/math" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func Ragnarok( diff --git a/examples/thorchain/features/saver_eject.go b/examples/thorchain/features/saver_eject.go index e6c6245c0..d39b6055c 100644 --- a/examples/thorchain/features/saver_eject.go +++ b/examples/thorchain/features/saver_eject.go @@ -10,9 +10,9 @@ import ( "testing" sdkmath "cosmossdk.io/math" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func SaverEject( diff --git a/examples/thorchain/features/savers.go b/examples/thorchain/features/savers.go index 5e11ee759..9dd304b7d 100644 --- a/examples/thorchain/features/savers.go +++ b/examples/thorchain/features/savers.go @@ -8,9 +8,9 @@ import ( "testing" sdkmath "cosmossdk.io/math" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func Saver( diff --git a/examples/thorchain/features/swap.go b/examples/thorchain/features/swap.go index a31393fc7..8a4c7f1c4 100644 --- a/examples/thorchain/features/swap.go +++ b/examples/thorchain/features/swap.go @@ -7,9 +7,9 @@ import ( "testing" sdkmath "cosmossdk.io/math" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain/common" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain/common" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func SingleSwap( diff --git a/examples/thorchain/helper.go b/examples/thorchain/helper.go index be897a7b6..af990cb53 100644 --- a/examples/thorchain/helper.go +++ b/examples/thorchain/helper.go @@ -5,8 +5,8 @@ import ( "fmt" "regexp" "time" - - "github.com/strangelove-ventures/interchaintest/v8/ibc" + + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) func GetEthAddressFromStdout(stdout string) (string, error) { @@ -31,7 +31,7 @@ func NiceWaitForBlocks(ctx context.Context, delta int64, chain ibc.Chain) error } currentHeight := startingHeight - for ; currentHeight < startingHeight + delta; { + for currentHeight < startingHeight+delta { time.Sleep(time.Millisecond * 200) currentHeight, err = chain.Height(ctx) if err != nil { diff --git a/examples/thorchain/setup.go b/examples/thorchain/setup.go index 2353e4963..0d5ec9128 100644 --- a/examples/thorchain/setup.go +++ b/examples/thorchain/setup.go @@ -18,14 +18,14 @@ import ( "github.com/docker/docker/client" ethcommon "github.com/ethereum/go-ethereum/common" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/foundry" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/geth" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/chain/utxo" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum/foundry" + "github.com/strangelove-ventures/interchaintest/v9/chain/ethereum/geth" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/chain/utxo" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" "golang.org/x/sync/errgroup" @@ -164,7 +164,7 @@ func SetupContracts(ctx context.Context, ethExoChain *ExoChain, bscExoChain *Exo if ethExoChain.chain.Config().Bin == "geth" { ethContractAddr, err = SetupGethContracts(egCtx, ethExoChain) } else { - ethContractAddr, err = SetupAnvilContracts(egCtx, ethExoChain) + ethContractAddr, err = SetupAnvilContracts(egCtx, ethExoChain) } return err }) @@ -173,7 +173,7 @@ func SetupContracts(ctx context.Context, ethExoChain *ExoChain, bscExoChain *Exo bscContractAddr, err = SetupGethContracts(egCtx, bscExoChain) return err }) - + return ethContractAddr, bscContractAddr, eg.Wait() } diff --git a/examples/thorchain/thorchain_hardfork_test.go b/examples/thorchain/thorchain_hardfork_test.go index 6e5d794bd..082021f9d 100644 --- a/examples/thorchain/thorchain_hardfork_test.go +++ b/examples/thorchain/thorchain_hardfork_test.go @@ -5,12 +5,12 @@ import ( _ "embed" "testing" - "github.com/strangelove-ventures/interchaintest/v8" - tc "github.com/strangelove-ventures/interchaintest/v8/chain/thorchain" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + tc "github.com/strangelove-ventures/interchaintest/v9/chain/thorchain" + "github.com/strangelove-ventures/interchaintest/v9/ibc" - //"github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + //"github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/examples/thorchain/thorchain_test.go b/examples/thorchain/thorchain_test.go index 60b47caa0..f7ceabba9 100644 --- a/examples/thorchain/thorchain_test.go +++ b/examples/thorchain/thorchain_test.go @@ -7,8 +7,8 @@ import ( "sync" "testing" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/examples/thorchain/features" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/examples/thorchain/features" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" diff --git a/examples/utxo/start_test.go b/examples/utxo/start_test.go index d8f8bcc56..9679b9d05 100644 --- a/examples/utxo/start_test.go +++ b/examples/utxo/start_test.go @@ -8,9 +8,9 @@ import ( "testing" sdkmath "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/utxo" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/utxo" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "golang.org/x/sync/errgroup" "github.com/stretchr/testify/require" diff --git a/go.mod b/go.mod index 20c1f531d..69adbfeb6 100644 --- a/go.mod +++ b/go.mod @@ -1,35 +1,83 @@ -module github.com/strangelove-ventures/interchaintest/v8 +module github.com/strangelove-ventures/interchaintest/v9 -go 1.22.2 +go 1.23.1 replace ( github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + // github.com/misko9/go-substrate-rpc-client/v4 => github.com/DimitrisJim/go-substrate-rpc-client/v4 v4.0.0-20240717100841-406da076c1d5 // TODO: temp: re-add polkadot / hyperspace github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) +//TODO: remove everything below after tags are created +replace ( + cosmossdk.io/tools/confix => ../cosmos-sdk/tools/confix + cosmossdk.io/x/accounts => ../cosmos-sdk/x/accounts + cosmossdk.io/x/accounts/defaults/lockup => ../cosmos-sdk/x/accounts/defaults/lockup + cosmossdk.io/x/accounts/defaults/multisig => ../cosmos-sdk/x/accounts/defaults/multisig + cosmossdk.io/x/circuit => ../cosmos-sdk/x/circuit + cosmossdk.io/x/mint => ../cosmos-sdk/x/mint + cosmossdk.io/x/nft => ../cosmos-sdk/x/nft + cosmossdk.io/x/protocolpool => ../cosmos-sdk/x/protocolpool +) + +replace ( + cosmossdk.io/api => cosmossdk.io/api v0.7.3-0.20240815194237-858ec2fcb897 // main + cosmossdk.io/client/v2 => cosmossdk.io/client/v2 v2.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/core => cosmossdk.io/core v0.12.1-0.20240906083041-6033330182c7 // main + cosmossdk.io/store => cosmossdk.io/store v1.0.0-rc.0.0.20240815194237-858ec2fcb897 // main + cosmossdk.io/x/authz => cosmossdk.io/x/authz v0.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/x/bank => cosmossdk.io/x/bank v0.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/x/consensus => cosmossdk.io/x/consensus v0.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/x/feegrant => ../cosmos-sdk/x/feegrant + cosmossdk.io/x/gov => cosmossdk.io/x/gov v0.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/x/group => cosmossdk.io/x/group v0.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/x/params => cosmossdk.io/x/params v0.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/x/slashing => cosmossdk.io/x/slashing v0.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/x/staking => cosmossdk.io/x/staking v0.0.0-20240905174638-8ce77cbb2450 + cosmossdk.io/x/tx => cosmossdk.io/x/tx v0.13.4-0.20240815194237-858ec2fcb897 // main + cosmossdk.io/x/upgrade => cosmossdk.io/x/upgrade v0.0.0-20240905174638-8ce77cbb2450 + github.com/cometbft/cometbft => github.com/cometbft/cometbft v1.0.0-rc1 + // pseudo version lower than the latest tag + github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.52.0-alpha.1.0.20240905174638-8ce77cbb2450 + github.com/cosmos/ibc-go/modules/capability => ../ibc-go/modules/capability //TODO: remove after capability is tagged + + // marko/gomod_change - github.com/cosmos/ibc-go/v9@2ee55486da3dc1378e3e25262e1858367e3a1c42 - SDK v52 work + // 69863a144e6bbfbf98d7d50de6b9e3736950ede2 - cleans up ctx -> gomod_change + // github.com/cosmos/ibc-go/v9 => github.com/cosmos/ibc-go/v9 v9.0.0-20240906130908-69863a144e6b + + // https://github.com/cosmos/ibc-go/pull/7298 (on top of marko's gomod_change) + github.com/cosmos/ibc-go/v9 => github.com/reecepbcups/ibc-go/v9 v9.0.0-20240917012915-f6fb263f76b4 + +// TODO: wasmd sdk v52 +) + require ( cosmossdk.io/math v1.3.0 - cosmossdk.io/store v1.1.0 + cosmossdk.io/store v1.1.1-0.20240909133312-50288938d1b6 + cosmossdk.io/x/bank v0.0.0-20240226161501-23359a0b6d91 + cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 + cosmossdk.io/x/distribution v0.0.0-20240906090851-36d9b25e8981 cosmossdk.io/x/feegrant v0.1.0 + cosmossdk.io/x/gov v0.0.0-20231113122742-912390d5fc4a + cosmossdk.io/x/mint v0.0.0-20240909082436-01c0e9ba3581 + cosmossdk.io/x/params v0.0.0-00010101000000-000000000000 + cosmossdk.io/x/slashing v0.0.0-00010101000000-000000000000 + cosmossdk.io/x/staking v0.0.0-00010101000000-000000000000 cosmossdk.io/x/upgrade v0.1.3 - github.com/99designs/keyring v1.2.2 + github.com/99designs/keyring v1.2.2 // indirect github.com/BurntSushi/toml v1.4.0 - github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 - github.com/CosmWasm/wasmd v0.42.1-0.20230928145107-894076a25cb2 - github.com/StirlingMarketingGroup/go-namecase v1.0.0 github.com/atotto/clipboard v0.1.4 github.com/avast/retry-go/v4 v4.5.1 - github.com/cometbft/cometbft v0.38.10 - github.com/cosmos/cosmos-sdk v0.50.8 - github.com/cosmos/go-bip39 v1.0.0 - github.com/cosmos/gogoproto v1.5.0 - github.com/cosmos/ibc-go/modules/capability v1.0.0 - github.com/cosmos/ibc-go/v8 v8.3.2 - github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74 + github.com/cometbft/cometbft v1.0.0-rc1.0.20240908111210-ab0be101882f + github.com/cosmos/cosmos-sdk v0.53.0 + github.com/cosmos/go-bip39 v1.0.0 // indirect + github.com/cosmos/gogoproto v1.7.0 + github.com/cosmos/ibc-go/modules/capability v1.0.1 // indirect; TODO: remove me? + github.com/cosmos/ibc-go/v9 v9.0.0-20240906130908-69863a144e6b + // github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74 // TODO: github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc - github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 github.com/docker/docker v24.0.9+incompatible github.com/docker/go-connections v0.5.0 github.com/ethereum/go-ethereum v1.14.5 @@ -39,208 +87,191 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-version v1.7.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/libp2p/go-libp2p v0.31.0 - github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20240603204351-26b456ae3afe - github.com/mr-tron/base58 v1.2.0 github.com/pelletier/go-toml v1.9.5 - github.com/pelletier/go-toml/v2 v2.2.2 + github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 - github.com/spf13/cobra v1.8.0 + github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.9.0 github.com/tidwall/gjson v1.17.1 - github.com/tyler-smith/go-bip32 v1.0.0 - github.com/tyler-smith/go-bip39 v1.1.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.24.0 - golang.org/x/mod v0.18.0 - golang.org/x/sync v0.7.0 - golang.org/x/tools v0.22.0 - google.golang.org/grpc v1.65.0 + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/mod v0.21.0 + golang.org/x/sync v0.8.0 + golang.org/x/tools v0.25.0 + google.golang.org/grpc v1.66.2 gopkg.in/yaml.v3 v3.0.1 modernc.org/sqlite v1.30.1 ) require ( - cloud.google.com/go v0.112.1 // indirect + cosmossdk.io/core v1.0.0 + cosmossdk.io/x/authz v0.0.0-00010101000000-000000000000 + cosmossdk.io/x/tx v0.13.4 + github.com/cometbft/cometbft/api v1.0.0-rc.1.0.20240909080621-90c99d9658b0 +) + +require ( + github.com/go-kit/kit v0.13.0 // indirect + github.com/gofrs/uuid v4.4.0+incompatible // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect +) + +require ( + buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.2-20240701160653-fedbb9acfd2f.2 // indirect + buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.34.2-20240130113600-88ef6483f90f.2 // indirect + cloud.google.com/go v0.115.0 // indirect + cloud.google.com/go/auth v0.6.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect - cloud.google.com/go/iam v1.1.6 // indirect - cloud.google.com/go/storage v1.38.0 // indirect - cosmossdk.io/api v0.7.5 // indirect - cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/core v0.11.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cloud.google.com/go/iam v1.1.9 // indirect + cloud.google.com/go/storage v1.42.0 // indirect + cosmossdk.io/api v0.8.0 // indirect + cosmossdk.io/collections v0.4.1-0.20240802064046-23fac2f1b8ab // indirect + cosmossdk.io/depinject v1.0.0 // indirect cosmossdk.io/errors v1.0.1 // indirect - cosmossdk.io/log v1.3.1 // indirect - cosmossdk.io/x/evidence v0.1.0 // indirect - cosmossdk.io/x/tx v0.13.3 // indirect - filippo.io/edwards25519 v1.0.0 // indirect + cosmossdk.io/log v1.4.1 // indirect + cosmossdk.io/schema v0.2.0 // indirect + cosmossdk.io/x/epochs v0.0.0-20240522060652-a1ae4c3e0337 // indirect + cosmossdk.io/x/protocolpool v0.0.0-20230925135524-a1bc045b3190 // indirect + filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect - github.com/CosmWasm/wasmvm v1.4.0 // indirect - github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/zstd v1.5.5 // indirect - github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect - github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect + github.com/DataDog/datadog-go v4.8.3+incompatible // indirect + github.com/DataDog/zstd v1.5.6 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/StackExchange/wmi v1.2.1 // indirect - github.com/aws/aws-sdk-go v1.44.224 // indirect + github.com/aws/aws-sdk-go v1.54.6 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect - github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/bgentry/speakeasy v0.2.0 // indirect github.com/bits-and-blooms/bitset v1.10.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/cespare/xxhash v1.1.0 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect - github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v1.1.0 // indirect + github.com/cockroachdb/pebble v1.1.2 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft-db v0.10.0 // indirect + github.com/cometbft/cometbft-db v0.15.0 // indirect github.com/consensys/bavard v0.1.13 // indirect github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-db v1.0.2 // indirect + github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect + github.com/cosmos/crypto v0.1.2 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.1.2 // indirect - github.com/cosmos/ics23/go v0.10.0 // indirect + github.com/cosmos/iavl v1.3.0 // indirect + github.com/cosmos/ics23/go v0.11.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect - github.com/danieljoos/wincred v1.1.2 // indirect - github.com/deckarep/golang-set v1.8.0 // indirect + github.com/danieljoos/wincred v1.2.1 // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect - github.com/decred/base58 v1.0.4 // indirect - github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect - github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect; indifrect + github.com/dgraph-io/badger/v4 v4.3.0 // indirect + github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 // indirect + github.com/distribution/reference v0.6.0 // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/emicklei/dot v1.6.1 // indirect + github.com/dvsekhvalnov/jose2go v1.7.0 // indirect + github.com/emicklei/dot v1.6.2 // indirect github.com/ethereum/c-kzg-4844 v1.0.0 // indirect - github.com/fatih/color v1.16.0 // indirect + github.com/fatih/color v1.17.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gdamore/encoding v1.0.0 // indirect - github.com/getsentry/sentry-go v0.27.0 // indirect - github.com/go-kit/kit v0.12.0 // indirect + github.com/getsentry/sentry-go v0.28.1 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/gobwas/ws v1.2.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect - github.com/golang/glog v1.2.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/google/btree v1.1.2 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/flatbuffers v24.3.25+incompatible // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.2 // indirect + github.com/googleapis/gax-go/v2 v2.12.5 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect - github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.4 // indirect - github.com/hashicorp/go-hclog v1.5.0 // indirect + github.com/hashicorp/go-getter v1.7.5 // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-metrics v0.5.3 // indirect - github.com/hashicorp/go-plugin v1.5.2 // indirect + github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect - github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/hdevalence/ed25519consensus v0.2.0 // indirect github.com/holiman/uint256 v1.2.4 // indirect github.com/huandu/skiplist v1.2.0 // indirect github.com/iancoleman/strcase v0.3.0 // indirect - github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/go-cid v0.4.1 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.7 // indirect - github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.10.7 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.8.14 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/linxGnu/grocksdb v1.9.3 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect - github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect + github.com/minio/highwayhash v1.0.3 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/morikuni/aec v1.0.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.1.0 // indirect - github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.11.0 // indirect - github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.9.0 // indirect - github.com/multiformats/go-multihash v0.2.3 // indirect - github.com/multiformats/go-varint v0.0.7 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect - github.com/onsi/gomega v1.27.10 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc2 // indirect - github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect - github.com/pierrec/xxHash v0.1.5 // indirect + github.com/opencontainers/image-spec v1.1.0-rc5 // indirect + github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.19.0 // indirect + github.com/prometheus/client_golang v1.20.3 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.52.2 // indirect - github.com/prometheus/procfs v0.13.0 // indirect + github.com/prometheus/common v0.59.1 // indirect + github.com/prometheus/procfs v0.15.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.3 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.32.0 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/rs/cors v1.11.1 // indirect + github.com/rs/zerolog v1.33.0 // indirect + github.com/sagikazarmark/locafero v0.6.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/sasha-s/go-deadlock v0.3.5 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/cast v1.7.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.18.2 // indirect + github.com/spf13/viper v1.19.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/supranational/blst v0.3.11 // indirect + github.com/supranational/blst v0.3.13 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect @@ -248,40 +279,39 @@ require ( github.com/tidwall/pretty v1.2.0 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect - github.com/ulikunitz/xz v0.5.11 // indirect + github.com/ulikunitz/xz v0.5.12 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.3.8 // indirect + gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect + gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect + go.etcd.io/bbolt v1.4.0-alpha.1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect - golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/oauth2 v0.20.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 // indirect + go.opentelemetry.io/otel v1.27.0 // indirect + go.opentelemetry.io/otel/metric v1.27.0 // indirect + go.opentelemetry.io/otel/trace v1.27.0 // indirect + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect + golang.org/x/net v0.29.0 // indirect + golang.org/x/oauth2 v0.22.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/term v0.24.0 // indirect + golang.org/x/text v0.18.0 // indirect golang.org/x/time v0.5.0 // indirect - google.golang.org/api v0.169.0 // indirect - google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect - google.golang.org/protobuf v1.34.1 // indirect + google.golang.org/api v0.186.0 // indirect + google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gotest.tools/v3 v3.5.1 // indirect - lukechampine.com/blake3 v1.2.1 // indirect modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect modernc.org/libc v1.52.1 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect modernc.org/strutil v1.2.0 // indirect modernc.org/token v1.1.0 // indirect - nhooyr.io/websocket v1.8.7 // indirect pgregory.net/rapid v1.1.0 // indirect rsc.io/tmplfunc v0.0.3 // indirect sigs.k8s.io/yaml v1.4.0 // indirect diff --git a/go.sum b/go.sum index e6b659a1e..0205c8b84 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,7 @@ +buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.2-20240701160653-fedbb9acfd2f.2 h1:90/4O5QkHb8EZdA2SAhueRzYw6u5ZHCPKtReFqshnTY= +buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.2-20240701160653-fedbb9acfd2f.2/go.mod h1:1+3gJj2NvZ1mTLAtHu+lMhOjGgQPiCKCeo+9MBww0Eo= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.34.2-20240130113600-88ef6483f90f.2 h1:b7EEYTUHmWSBEyISHlHvXbJPqtKiHRuUignL1tsHnNQ= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.34.2-20240130113600-88ef6483f90f.2/go.mod h1:HqcXMSa5qnNuakaMUo+hWhF51mKbcrZxGl9Vp5EeJXc= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -30,8 +34,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= -cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= +cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= +cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -46,6 +50,10 @@ cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjby cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/auth v0.6.0 h1:5x+d6b5zdezZ7gmLWD1m/xNjnaQ2YDhmIz/HH3doy1g= +cloud.google.com/go/auth v0.6.0/go.mod h1:b4acV+jLQDyjwm4OXHYjNvRi4jvGBzHWJRtJcy+2P4g= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -107,12 +115,14 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= -cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/iam v1.1.9 h1:oSkYLVtVme29uGYrOcKcvJRht7cHJpYD09GM9JaR0TE= +cloud.google.com/go/iam v1.1.9/go.mod h1:Nt1eDWNYH9nGQg3d/mY7U1hvfGmsaG9o/kLGoLoLXjQ= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/longrunning v0.5.8 h1:QThI5BFSlYlS7K0wnABCdmKsXbG/htLc3nTPzrfOgeU= +cloud.google.com/go/longrunning v0.5.8/go.mod h1:oJDErR/mm5h44gzsfjQlxd6jyjFvuBPOxR1TLy2+cQk= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -169,8 +179,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg= -cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= +cloud.google.com/go/storage v1.42.0 h1:4QtGpplCVt1wz6g5o1ifXd656P5z+yNgzdw1tVfp0cU= +cloud.google.com/go/storage v1.42.0/go.mod h1:HjMXRFq65pGKFn6hxj6x3HCyR41uSB72Z0SO/Vn6JFQ= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -182,37 +192,55 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= -cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= -cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= -cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= -cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/api v0.7.3-0.20240815194237-858ec2fcb897 h1:YV9M+9pClbzPncO5XMSc3kIgDWjb7DdZ/DtURaWqle8= +cosmossdk.io/api v0.7.3-0.20240815194237-858ec2fcb897/go.mod h1:oqpDMZQpEgSo0Cm4F+0yxoC9UQbo/SlodZR4zeOqBsE= +cosmossdk.io/client/v2 v2.0.0-20240905174638-8ce77cbb2450 h1:VuXpdi2nEUfBPAjgUxxh0FheX6i25OWiAEtT2CJr+hE= +cosmossdk.io/client/v2 v2.0.0-20240905174638-8ce77cbb2450/go.mod h1:HBereCqcck5s+c91cXcbchGBxy/wJMkYLivpWAvnf1U= +cosmossdk.io/collections v0.4.1-0.20240802064046-23fac2f1b8ab h1:E/IWad76v1Nc4Atswaccpt7twJ0VwHkbY94/PhmZfTo= +cosmossdk.io/collections v0.4.1-0.20240802064046-23fac2f1b8ab/go.mod h1:Or+5eVAo1aiS1DnPK90eQykGc59LGBWtqwBoJcxXTmw= +cosmossdk.io/core v0.12.1-0.20240906083041-6033330182c7 h1:1uZhb/TVewamHZMF4M37XZxScX/zcp4/oHFcvD20AvQ= +cosmossdk.io/core v0.12.1-0.20240906083041-6033330182c7/go.mod h1:abgLjeFLhtuKIYZWSPlVUgQBrKObO7ULV35KYfexE90= +cosmossdk.io/core/testing v0.0.0-20240913164418-aaf72f20c10b h1:uEMbr7Hdpz0fU+GXU6mSN2vgoQnr66WYUpRuiba2aEk= +cosmossdk.io/core/testing v0.0.0-20240913164418-aaf72f20c10b/go.mod h1:FllCSj/ZYskfb982HKqBSISO8DkBY4Euqq768HSFz68= +cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= +cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= +cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= -cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= -cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= -cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= -cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= -cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= -cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= -cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= -cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= -cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= +cosmossdk.io/schema v0.2.0 h1:UH5CR1DqUq8yP+5Np8PbvG4YX0zAUsTN2Qk6yThmfMk= +cosmossdk.io/schema v0.2.0/go.mod h1:RDAhxIeNB4bYqAlF4NBJwRrgtnciMcyyg0DOKnhNZQQ= +cosmossdk.io/store v1.0.0-rc.0.0.20240815194237-858ec2fcb897 h1:o024zaPHYtmUGL2BCX1ns9rfZmMc19U4hQ2CAPt2Xgg= +cosmossdk.io/store v1.0.0-rc.0.0.20240815194237-858ec2fcb897/go.mod h1:Ma4uny4RFegWTbU71fBmkSIoHrWHlLC/JwwgWgehZm4= +cosmossdk.io/x/authz v0.0.0-20240905174638-8ce77cbb2450 h1:dIvjFGZiu+yOAdY0ru9BWuh3S9DTBXuTqdthjoZQJQ0= +cosmossdk.io/x/authz v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:BL2cp28qWDibgmHgjClot6q8kSZEClSS4IOQtt9Tn9E= +cosmossdk.io/x/bank v0.0.0-20240905174638-8ce77cbb2450 h1:7L3wLk36pJc9fEXzSj7MDoayUqTJyyEAqj5W3Ua4TAI= +cosmossdk.io/x/bank v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:9kSCRv7B/mYQmni3T880QT6yEtW9CjyRjDS4P8MCYgA= +cosmossdk.io/x/consensus v0.0.0-20240905174638-8ce77cbb2450 h1:J//VFkxEHUAcUi+gX5uYa7ICU7mEJZDWQ+5dAsSgPp4= +cosmossdk.io/x/consensus v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:l6pOuqO+/JfstuPFgRV+srKRtC0xxz65FrRGdzoQMt4= +cosmossdk.io/x/distribution v0.0.0-20240906090851-36d9b25e8981 h1:7nEV9siFRy8pcTo+8i3GQku27buS+yOSxTvMeL/uPK4= +cosmossdk.io/x/distribution v0.0.0-20240906090851-36d9b25e8981/go.mod h1:gyG0xDJw0O8Kmyy/n91248GaIpcC4OWhobjFw8MxRuI= +cosmossdk.io/x/epochs v0.0.0-20240522060652-a1ae4c3e0337 h1:GuBrfHsK3RD5vlD4DuBz3DXslR6VlnzrYmHOC3L679Q= +cosmossdk.io/x/epochs v0.0.0-20240522060652-a1ae4c3e0337/go.mod h1:PhLn1pMBilyRC4GfRkoYhm+XVAYhF4adVrzut8AdpJI= +cosmossdk.io/x/gov v0.0.0-20240905174638-8ce77cbb2450 h1:4qpruZEf5JgMPmdQr2neXsc8at1TWnH59ZcEz9SR1uw= +cosmossdk.io/x/gov v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:vxdu3r1+keQ0zugjZYwoaa0IcRscfqM/XQ8mw/MwFGc= +cosmossdk.io/x/group v0.0.0-20240905174638-8ce77cbb2450 h1:6UP+BMaQIf12+Zdm50nHJzBd47Ue9pq+CvTRIhOM4q0= +cosmossdk.io/x/group v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:SPQg4DfFURVX3xOLzOWzv30vxUj8mf5Ehm0OagfdMN8= +cosmossdk.io/x/params v0.0.0-20240905174638-8ce77cbb2450 h1:8LThIewMzM3xM7/iQv/LOO4hrC6Hg7yohFeCaLALeg4= +cosmossdk.io/x/params v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:Zj4HqEipshPgZxUlCnUtQHJN/vIpzkqjmvi6V6iO13Y= +cosmossdk.io/x/slashing v0.0.0-20240905174638-8ce77cbb2450 h1:padUT7OMCH3gekVGhdAwisgDjF3aXM2W3aLWmTjSFn8= +cosmossdk.io/x/slashing v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:R51bRE6znRn4FQKf6Fwx1Ceddt7SZ3ERQ0P3T+3LqOY= +cosmossdk.io/x/staking v0.0.0-20240905174638-8ce77cbb2450 h1:F0ivlDxBL/6dpBp7I/c9VeN9EN+OgGF2352KIQXZi48= +cosmossdk.io/x/staking v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:zfnbjV4Be1fp5kbtmoWKpc+9/t/4x6lNHMXm/C6N+yU= +cosmossdk.io/x/tx v0.13.4-0.20240815194237-858ec2fcb897 h1:J3vS3G41JtTWkUX3wVKcXdy1yPUca0d3QnexCR52PeY= +cosmossdk.io/x/tx v0.13.4-0.20240815194237-858ec2fcb897/go.mod h1:5+Hpds6bhT6CdR7DqPh0dVOqyqL7NJkq+x+yjLdYSQU= +cosmossdk.io/x/upgrade v0.0.0-20240905174638-8ce77cbb2450 h1:/l5yuPc0EFHm6X+eWIHFzYn544GQThEj07xFj24itc4= +cosmossdk.io/x/upgrade v0.0.0-20240905174638-8ce77cbb2450/go.mod h1:lRbl8ZW3Xe48JWG3K2fw2TiL4sI8qPvMRY6Fe6ikm9U= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= -filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= @@ -223,67 +251,36 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= -github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= -github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= -github.com/CosmWasm/wasmd v0.42.1-0.20230928145107-894076a25cb2 h1:j8J9LnhC6IikohLEYMAFX0xPQmgPez9vsj0rNQISkiE= -github.com/CosmWasm/wasmd v0.42.1-0.20230928145107-894076a25cb2/go.mod h1:3sCglc35LoFUGmh4a/auoJALitaE4qw+jAqK53ak7+s= -github.com/CosmWasm/wasmvm v1.4.0 h1:84I3MlvvzcOo2z+ed0ztPi7eeDNk6/sYuK76uyXP1nI= -github.com/CosmWasm/wasmvm v1.4.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= -github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= -github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= -github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= +github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= +github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= -github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/adlio/schema v1.3.6 h1:k1/zc2jNfeiZBA5aFTRy37jlBIuCkXCm0XmvpzCKI9I= +github.com/adlio/schema v1.3.6/go.mod h1:qkxwLgPBd1FgLRHYVCmQT/rrBr3JH38J9LjmVzWNudg= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/avast/retry-go/v4 v4.5.1 h1:AxIx0HGi4VZ3I02jr78j5lZ3M6x1E0Ivxa6b0pUUh7o= github.com/avast/retry-go/v4 v4.5.1/go.mod h1:/sipNsvNB3RRuT5iNcb6h73nw3IBmXJ/H3XrCQYSOpc= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.44.224 h1:09CiaaF35nRmxrzWZ2uRq5v6Ghg/d2RiPjZnSgtt+RQ= -github.com/aws/aws-sdk-go v1.44.224/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go v1.54.6 h1:HEYUib3yTt8E6vxjMWM3yAq5b+qjj/6aKA62mkgux9g= +github.com/aws/aws-sdk-go v1.54.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -291,29 +288,21 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E= +github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= -github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= +github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= +github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= -github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -330,10 +319,7 @@ github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw= -github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -345,128 +331,97 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= -github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 h1:pU88SPhIFid6/k0egdR5V6eALQYq2qbSmukrkgIh/0A= +github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= -github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/pebble v1.1.2 h1:CUh2IPtR4swHlEj48Rhfzw6l/d0qA31fItcIszQVIsA= +github.com/cockroachdb/pebble v1.1.2/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.10 h1:2ePuglchT+j0Iao+cfmt/nw5U7K2lnGDzXSUPGVdXaU= -github.com/cometbft/cometbft v0.38.10/go.mod h1:jHPx9vQpWzPHEAiYI/7EDKaB1NXhK6o3SArrrY8ExKc= -github.com/cometbft/cometbft-db v0.10.0 h1:VMBQh88zXn64jXVvj39tlu/IgsGR84T7ImjS523DCiU= -github.com/cometbft/cometbft-db v0.10.0/go.mod h1:7RR7NRv99j7keWJ5IkE9iZibUTKYdtepXTp7Ra0FxKk= +github.com/cometbft/cometbft v1.0.0-rc1 h1:pYCXw0rKILceyOzHwd+/fGLag8VYemwLUIX6N7V2REw= +github.com/cometbft/cometbft v1.0.0-rc1/go.mod h1:64cB2wvltmK5plHlJFLYOZYGsaTKNW2EZgcHBisHP7o= +github.com/cometbft/cometbft-db v0.15.0 h1:VLtsRt8udD4jHCyjvrsTBpgz83qne5hnL245AcPJVRk= +github.com/cometbft/cometbft-db v0.15.0/go.mod h1:EBrFs1GDRiTqrWXYi4v90Awf/gcdD5ExzdPbg4X8+mk= +github.com/cometbft/cometbft/api v1.0.0-rc.1.0.20240909080621-90c99d9658b0 h1:ZiVL6Lc/g7ZG//Bgec3fN3bA+TlJn5kY8V+r3txoCCY= +github.com/cometbft/cometbft/api v1.0.0-rc.1.0.20240909080621-90c99d9658b0/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= -github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= +github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22 h1:V3WlarcZwlYYt3dUsStxm0FAFXVeEcvgwfmR6upxm5M= +github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.8 h1:2UJHssUaGHTl4/dFp8xyREKAnfiRU6VVfqtKG9n8w5g= -github.com/cosmos/cosmos-sdk v0.50.8/go.mod h1:Zb+DgHtiByNwgj71IlJBXwOq6dLhtyAq3AgqpXm/jHo= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/cosmos-sdk v0.52.0-alpha.1.0.20240905174638-8ce77cbb2450 h1:H4Kf0u7SAB1poVZJwfnKbkGUhbLTqFSaPw8ARPa1/Ww= +github.com/cosmos/cosmos-sdk v0.52.0-alpha.1.0.20240905174638-8ce77cbb2450/go.mod h1:1GgLZiqibXldZpyqhyuszX5PUIQhc8q6lYxAbNocNlI= +github.com/cosmos/crypto v0.1.2 h1:Yn500sPY+9sKVdhiPUSDtt8JOpBGMB515dOmla4zfls= +github.com/cosmos/crypto v0.1.2/go.mod h1:b6VWz3HczIpBaQPvI7KrbQeF3pXHh0al3T5e0uwMBQw= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= -github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= -github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= -github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= -github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= -github.com/cosmos/ibc-go/v8 v8.3.2 h1:8X1oHHKt2Bh9hcExWS89rntLaCKZp2EjFTUSxKlPhGI= -github.com/cosmos/ibc-go/v8 v8.3.2/go.mod h1:WVVIsG39jGrF9Cjggjci6LzySyWGloz194sjTxiGNIE= -github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= -github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74 h1:6atU/xizTL10q6EprP7oRuvfgUP2F6puvutnVoE+FRc= -github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74/go.mod h1:h/RkwOppo5AJj+1pkQyfjqU1MPdpohD/S6oEeAXpGZY= +github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro= +github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0= +github.com/cosmos/iavl v1.3.0 h1:Ezaxt8aPA3kbkhsfyqwenChGLQwHDAIif3tG9x1FMV8= +github.com/cosmos/iavl v1.3.0/go.mod h1:T6SfBcyhulVIY2G/ZtAtQm/QiJvsuhIos52V4dWYk88= +github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= +github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= +github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= -github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= -github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/dgraph-io/badger/v4 v4.3.0 h1:lcsCE1/1qrRhqP+zYx6xDZb8n7U+QlwNicpc676Ub40= +github.com/dgraph-io/badger/v4 v4.3.0/go.mod h1:Sc0T595g8zqAQRDf44n+z3wG4BOqLwceaFntt8KPxUM= +github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 h1:Pux6+xANi0I7RRo5E1gflI4EZ2yx3BGZ75JkAIvGEOA= +github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91/go.mod h1:swkazRqnUf1N62d0Nutz7KIj2UKqsm/H8tD0nBJAXqM= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= -github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI= -github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/dvsekhvalnov/jose2go v1.7.0 h1:bnQc8+GMnidJZA8zc6lLEAb4xNrIqHwO+9TzqvtQZPo= +github.com/dvsekhvalnov/jose2go v1.7.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= +github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -485,16 +440,14 @@ github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 h1:KrE8I4reeV github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0/go.mod h1:D9AJLVXSyZQXJQVk8oh1EwjISE+sJTn2duYIZC0dy3w= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= -github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -509,14 +462,9 @@ github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= github.com/gdamore/tcell/v2 v2.7.4 h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU= github.com/gdamore/tcell/v2 v2.7.4/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg= -github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= -github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.28.1 h1:zzaSm/vHmGllRM6Tpx1492r0YDzauArdBfkJRtY6P5k= +github.com/getsentry/sentry-go v0.28.1/go.mod h1:1fQZ+7l7eeJ3wYi82q5Hg8GqAPgefRq+FP/QhafYVgg= 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= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -524,9 +472,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= @@ -536,52 +483,28 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= -github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= -github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= -github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk= -github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= +github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4= -github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -617,15 +540,16 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI= +github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -652,8 +576,8 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -677,7 +601,6 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -696,73 +619,46 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= -github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= +github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA= +github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= 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/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= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0= -github.com/hashicorp/go-getter v1.7.4/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= -github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4= +github.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= -github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= +github.com/hashicorp/go-plugin v1.6.1 h1:P7MR2UP6gNKGPp+y7EZw2kOiq4IR9WiqLvp0XOsVdwI= +github.com/hashicorp/go-plugin v1.6.1/go.mod h1:XPHFku2tFo3o3QKFgSYo+cghcUhw1NA1hZyMK0PWAw0= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= -github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= @@ -771,14 +667,10 @@ github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= -github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= +github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= @@ -790,7 +682,6 @@ github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3 github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= @@ -799,51 +690,29 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= -github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= -github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= -github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= -github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -856,23 +725,14 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-libp2p v0.31.0 h1:LFShhP8F6xthWiBBq3euxbKjZsoRajVEyBS9snfHxYg= -github.com/libp2p/go-libp2p v0.31.0/go.mod h1:W/FEK1c/t04PbRH3fA9i5oucu5YcgrG0JVoBWT1B7Eg= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= -github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= +github.com/linxGnu/grocksdb v1.9.3 h1:s1cbPcOd0cU2SKXRG1nEqCOWYAELQjdqg3RVI2MH9ik= +github.com/linxGnu/grocksdb v1.9.3/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= @@ -882,7 +742,6 @@ github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= @@ -890,33 +749,17 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= -github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20240603204351-26b456ae3afe h1:0fcCSfvBgbagEsEMkZuxgA3Ex7IN9i1Hon0fwgMLpQw= -github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20240603204351-26b456ae3afe/go.mod h1:Q5BxOd9FxJqYp4vCiLGVdetecPcWTmUQIu0bRigYosU= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= +github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= @@ -924,112 +767,61 @@ github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8oh github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= -github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= -github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= -github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= -github.com/multiformats/go-multiaddr v0.11.0 h1:XqGyJ8ufbCE0HmTDwx2kPdsrQ36AGPZNZX6s6xfJH10= -github.com/multiformats/go-multiaddr v0.11.0/go.mod h1:gWUm0QLR4thQ6+ZF6SXUw8YjtwQSPapICM+NmCkxHSM= -github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= -github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= -github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= -github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= -github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= -github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= -github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= -github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= +github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA= +github.com/onsi/gomega v1.28.1/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= +github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= +github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/oxyno-zeta/gomock-extra-matcher v1.2.0 h1:WPEclU0y0PMwUzdDcaKZvld4aXpa3fkzjiUMQdcBEHg= -github.com/oxyno-zeta/gomock-extra-matcher v1.2.0/go.mod h1:S0r7HmKeCGsHmvIVFMjKWwswb4+30nCNWbXRMBVPkaU= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= -github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= -github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -1037,46 +829,33 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= -github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= +github.com/prometheus/client_golang v1.20.3 h1:oPksm4K8B+Vt35tUhw6GbSNSgVlVSBH0qELP/7u83l4= +github.com/prometheus/client_golang v1.20.3/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= -github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= +github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0= +github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= -github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/reecepbcups/ibc-go/v9 v9.0.0-20240917012915-f6fb263f76b4 h1:c5/MzvUs8i7PTtqCEd/nBOi8MD9WEZECn5s1cI6d6J8= +github.com/reecepbcups/ibc-go/v9 v9.0.0-20240917012915-f6fb263f76b4/go.mod h1:x2zCH4x1SXMz2IHs0OgMQ7+niB1X/9pdstgJuX0QQTI= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= @@ -1086,80 +865,52 @@ github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/m github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= -github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= -github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= +github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= +github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.1.5-0.20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1170,13 +921,12 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= -github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKtmTjk= +github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= @@ -1193,28 +943,14 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= -github.com/tyler-smith/go-bip32 v1.0.0/go.mod h1:onot+eHknzV4BVPwrzqY5OoVpyCvnwD7lMawL5aQupE= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= -github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= +github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1227,12 +963,12 @@ github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= -go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA= +gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8= +gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q= +gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02/go.mod h1:JTnUj0mpYiAsuZLmKjTx/ex3AtMowcCgnE7YNyCEP0I= +go.etcd.io/bbolt v1.4.0-alpha.1 h1:3yrqQzbRRPFPdOMWS/QQIVxVnzSkAZQYeWlZFv1kbj4= +go.etcd.io/bbolt v1.4.0-alpha.1/go.mod h1:S/Z/Nm3iuOnyO1W4XuFfPci51Gj6F1Hv0z8hisyYYOw= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1242,54 +978,39 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= -go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0= +go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= +go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= +go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= +go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= +go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= +go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= +go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= -go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1300,9 +1021,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1330,17 +1050,13 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1351,7 +1067,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1359,7 +1074,6 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -1378,7 +1092,6 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1392,8 +1105,8 @@ golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1419,8 +1132,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= -golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1436,18 +1149,13 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1456,19 +1164,14 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1478,13 +1181,10 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1507,8 +1207,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1532,7 +1230,6 @@ golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1540,8 +1237,9 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1549,8 +1247,8 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1563,22 +1261,19 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1588,8 +1283,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1598,7 +1291,6 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1633,8 +1325,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= +golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1645,7 +1337,6 @@ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1694,10 +1385,9 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= -google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= +google.golang.org/api v0.186.0 h1:n2OPp+PPXX0Axh4GuSsL5QL8xQCTb2oDwyzPnQvqUug= +google.golang.org/api v0.186.0/go.mod h1:hvRbBmgoje49RV3xqVXrmP6w93n6ehGgIVPYrGtBFFc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -1710,7 +1400,6 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1743,7 +1432,6 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1811,21 +1499,16 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= -google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094 h1:6whtk83KtD3FkGrVb2hFXuQ+ZMbCNdakARIn/aHMmG8= +google.golang.org/genproto v0.0.0-20240701130421-f6361c86f094/go.mod h1:Zs4wYw8z1zr6RNF4cwYb31mvN/EGaKAdQjNCF3DW6K4= +google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= +google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1835,7 +1518,6 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= @@ -1858,8 +1540,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= +google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1876,8 +1558,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1885,22 +1567,15 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1916,7 +1591,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1924,10 +1598,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= -launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= -lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= -lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= modernc.org/cc/v4 v4.21.2 h1:dycHFB/jDc3IyacKipCNSDrjIC0Lm1hyoWOZTRR20Lk= modernc.org/cc/v4 v4.21.2/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= modernc.org/ccgo/v4 v4.17.10 h1:6wrtRozgrhCxieCeJh85QsxkX/2FFrT9hdaWPlbn4Zo= @@ -1954,9 +1624,6 @@ modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= -nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -1964,7 +1631,5 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/go.work b/go.work index 17e01f5e5..af88fc48b 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,8 @@ -go 1.22.2 +go 1.23.1 + +toolchain go1.23.1 use ( . - ./local-interchain + // ./local-interchain // TODO: . ) diff --git a/ibc/packet.go b/ibc/packet.go index 85d9ece88..471659254 100644 --- a/ibc/packet.go +++ b/ibc/packet.go @@ -5,7 +5,7 @@ import ( "fmt" "reflect" - host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + host "github.com/cosmos/ibc-go/v9/modules/core/24-host" "go.uber.org/multierr" ) diff --git a/ibc/relayer.go b/ibc/relayer.go index 0739f16df..6d18ca290 100644 --- a/ibc/relayer.go +++ b/ibc/relayer.go @@ -5,9 +5,9 @@ import ( "fmt" "time" - chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - ptypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + chantypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" + ptypes "github.com/cosmos/ibc-go/v9/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v9/modules/core/24-host" ) // Relayer represents an instance of a relayer that can be support IBC. diff --git a/ibc/relayer_test.go b/ibc/relayer_test.go index 5d98a6cd4..993482713 100644 --- a/ibc/relayer_test.go +++ b/ibc/relayer_test.go @@ -3,7 +3,7 @@ package ibc import ( "testing" - chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + chantypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types" "github.com/stretchr/testify/require" ) diff --git a/ibc/types.go b/ibc/types.go index d99699774..d474bc414 100644 --- a/ibc/types.go +++ b/ibc/types.go @@ -12,7 +12,7 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + ibcexported "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types" "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/google/go-cmp/cmp" diff --git a/interchain.go b/interchain.go index 95d09108a..833bf98b6 100644 --- a/interchain.go +++ b/interchain.go @@ -7,9 +7,9 @@ import ( sdkmath "cosmossdk.io/math" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) diff --git a/interchain_builder.go b/interchain_builder.go index 11a5bce3f..6199b7697 100644 --- a/interchain_builder.go +++ b/interchain_builder.go @@ -7,10 +7,10 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/interchain_test.go b/interchain_test.go index 9d7062759..c2b85c362 100644 --- a/interchain_test.go +++ b/interchain_test.go @@ -13,18 +13,18 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer/rly" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer/rly" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap" "go.uber.org/zap/zaptest" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" // nolint:staticcheck + transfertypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v9/modules/core/02-client/types" // nolint:staticcheck ) func TestInterchain_DuplicateChain_CosmosRly(t *testing.T) { @@ -408,12 +408,13 @@ func broadcastTxCosmosChainTest(t *testing.T, relayerImpl ibc.RelayerImplementat msg := transfertypes.NewMsgTransfer( "transfer", "channel-0", - transferAmount, + sdk.NewCoins(transferAmount), testUser.FormattedAddress(), testUser.(*cosmos.CosmosWallet).FormattedAddressWithPrefix(gaia1.Config().Bech32Prefix), clienttypes.NewHeight(1, 1000), 0, memo, + nil, // forwarding data ) resp, err := cosmos.BroadcastTx(ctx, b, testUser.(*cosmos.CosmosWallet), msg) require.NoError(t, err) @@ -423,7 +424,7 @@ func broadcastTxCosmosChainTest(t *testing.T, relayerImpl ibc.RelayerImplementat t.Run("transfer success", func(t *testing.T) { require.NoError(t, testutil.WaitForBlocks(ctx, 5, gaia0, gaia1)) - srcDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", gaia0.Config().Denom)) + srcDenomTrace := transfertypes.NewDenom(gaia0.Config().Denom, transfertypes.NewHop("transfer", "channel-0")) dstIbcDenom := srcDenomTrace.IBCDenom() dstFinalBalance, err := gaia1.GetBalance(ctx, testUser.(*cosmos.CosmosWallet).FormattedAddressWithPrefix(gaia1.Config().Bech32Prefix), dstIbcDenom) diff --git a/local-ic-archive.zip b/local-ic-archive.zip new file mode 100644 index 000000000..552c217d9 Binary files /dev/null and b/local-ic-archive.zip differ diff --git a/local-interchain/.flake8 b/local-interchain/.flake8 deleted file mode 100644 index aaa9d78ea..000000000 --- a/local-interchain/.flake8 +++ /dev/null @@ -1,31 +0,0 @@ -[flake8] - -plugins = - flake8-simplify - flake8-bandit - flake8-bugbear - flake8-builtins - flake8-comprehensions - flake8-eradicate - flake8-isort - flake8-pytest-style - flakehell - pep8-naming - -spellcheck-targets=comments - -extend-ignore = - E501 - ; docstrings - D - ; try pass - S110 - ; dict(k=v) - C408 - -exclude = - .git, - __pycache__, - .mypy_cache - -max-complexity = 10 \ No newline at end of file diff --git a/local-interchain/.gitignore b/local-interchain/.gitignore deleted file mode 100644 index 3b5fe7ae7..000000000 --- a/local-interchain/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -bin/ - -dist/ - -chains/*_ignored.json -chains/*_ignore.json - -configs/logs.json -configs/contracts.json - -contracts/*.wasm -!contracts/cw_ibc_example.wasm - - -__pycache__/ - -node_modules/ \ No newline at end of file diff --git a/local-interchain/Makefile b/local-interchain/Makefile deleted file mode 100644 index 342ef86fd..000000000 --- a/local-interchain/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/make -f - -CWD := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -COMMIT := $(shell git log -1 --format='%H') - -# don't override user values -ifeq (,$(VERSION)) - VERSION := $(shell git describe --tags --always) - ifeq (,$(VERSION)) - HEAD := $(shell git rev-parse --abbrev-ref HEAD) - VERSION := $(HEAD)-$(COMMIT) - endif -endif - -# if env IGNORE_STATIC_LINK=true, then only set the main version in ldflags -# required so releasing the binary does not set the main directory incorrectly -ldflags = -X main.MakeFileInstallDirectory=$(CWD) -X main.Version=$(VERSION) -ifeq ($(IGNORE_STATIC_LINK),true) - ldflags = -X main.Version=$(VERSION) -endif - -ldflags := $(strip $(ldflags)) -BUILD_FLAGS := -ldflags '$(ldflags)' - -.PHONY: build -build: - go build $(BUILD_FLAGS) -o ../bin/local-ic ./cmd/local-ic - -.PHONY: run -run: - go run ./cmd/local-ic $(filter-out $@,$(MAKECMDGOALS)) - -.PHONY: install -install: - go install $(BUILD_FLAGS) ./cmd/local-ic ./interchain - diff --git a/local-interchain/README.md b/local-interchain/README.md deleted file mode 100644 index 065a2e8fa..000000000 --- a/local-interchain/README.md +++ /dev/null @@ -1,169 +0,0 @@ -# Local Interchain - -A simple way to config and run IBC local chain testing environments with any language of choice for interaction. - -- [**Rust**](./rust/README.md) -- [**Typescript**](./ts/README.md) -- [**Python**](./python/README.md) - -## External Repository CI - -- [**Rust**](./rust/README.md) - -## Installing Locally - -**Install on Mac / Linux** -```bash -git clone https://github.com/strangelove-ventures/interchaintest.git - -cd interchaintest/local-interchain - -# NOTE: your binary will link back to this location of where you install. -# If you rename the folder or move it, you need to `make install` the binary again. -make install -``` -**Install on Windows** - -Follow [this guide](./docs/WINDOWS.md) to setup the Windows OS environment for installing Local Interchain. - -## Running - -- Copy: `cp ./chains/base_ibc.json ./chains/mytest1_ignored.json` -- Run: `local-ic start mytest1_ignored.json [flags]` -- Run in different directory: `ICTEST_HOME=/root/local-interchain local-ic start myother_ignored.json [flags]` - -**NOTE** The ICTEST_HOME path must contain the directories `chains` to be valid. - -*(Default: `make install` links to the cloned directory. `go install .` will use your home directory ~/local-interchain)* - -*(Ending the config file with `_ignored.json` or `_ignore.json` will ignore it from git)* - -### Optional Start Flags - --api-address string override the default API address (default "127.0.0.1") - --api-port uint16 override the default API port (default 8080) - --auth-key string require an auth key to use the internal API - --help - --relayer-image string override the docker relayer image (default "ghcr.io/cosmos/relayer") - --relayer-startup-flags string override the default relayer startup flags (default "--block-history=100") - --relayer-uidgid string override the default image UID:GID (default "100:1000") - --relayer-version string override the default relayer version (default "latest") - ---- - -## REST API - -A rest API can be found at `curl 127.0.0.1:8080/` by default. Other actions can take place here such as file uploads, actions, querying chain config information, and more! - -Read more about the API [here](./docs/REST_API.md) - -## Helpful Tips - -- Auto complete: edit ~/.bashrc or ~/.zshrc and add `source <(local-ic completion bash)` or `source <(local-ic completion zsh)`. - (fish & windows powershell is also supported) - -- After starting the chain(s), you can read the `./configs/logs.json` file to get useful information. This includes the chain's id, name, RPC address, and more. - -```json -// ./configs/logs.json -[ - { - "chain_id": "exampleid-1", - "chain_name": "example", - "rpc_address": "http://127.0.0.1:38829", - "grpc_address": "127.0.0.1:34917", - "ibc_paths": [] - } -] -``` - -- 'ibc-path' should only be set if you are using 2+ chains. If you are using 1 chain, you can leave it blank. - -- You can use `%DENOM%` anywhere in the chain's config to use the `denom` line. This is useful for gas prices, Genesis accounts, etc. - -- Configuration's have set defaults. The minimum you need to run a single chain is the following - -```json -{ - "name": "juno", - "chain_id": "localjuno-2", - "denom": "ujuno", - "docker_image": { - "version": "v14.1.0" - }, - "gas_prices": "0%DENOM%", - "gas_adjustment": 2.0 -} -``` - ---- - -## Base Chain Template - -Here is a base chain template with every feature the configuration accepts. Accounts have extra data to make it simpler for scripting and read from the file directly. - -```json -{ - "name": "juno", - "chain_id": "localjuno-1", - "denom": "ujuno", - "binary": "junod", - "bech32_prefix": "juno", - "docker_image": { - "repository": "ghcr.io/cosmoscontracts/juno-e2e", - "version": "v14.1.0", - "uid_gid": "1000:1000" - }, - "chain_type": "cosmos", - "coin_type": 118, - "trusting_period": "112h", - "gas_prices": "0%DENOM%", - "gas_adjustment": 2.0, - "number_vals": 1, - "number_node": 0, - "ibc_paths": ["juno-ibc-1"], - "debugging": true, - "block_time": "500ms", - "host_port_override": { - "26656": "26656", - "26657": "26657", - "1317": "1317", - "9090": "9090" - }, - "config_file_overrides": [ - { - "file": "config/config.toml", - "paths": { - "rpc.cors_allowed_origins": ["*"], - "rpc.mempool": ["nop"], - "moniker": "myNodeMoniker", - } - } - ], - "genesis": { - "modify": [ - { - "key": "app_state.gov.voting_params.voting_period", - "value": "15s" - }, - { - "key": "app_state.gov.deposit_params.max_deposit_period", - "value": "15s" - }, - { - "key": "app_state.gov.deposit_params.min_deposit.0.denom", - "value": "ujuno" - } - ], - "accounts": [ - { - "name": "acc0", - "address": "juno1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk", - "amount": "10000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - } - ] - } -}, -``` - -**NOTE** The `host_port_override` section maps internal ports to the external host. If no ports are overridden, random host ports are assigned as usual. \ No newline at end of file diff --git a/local-interchain/bash/source.bash b/local-interchain/bash/source.bash deleted file mode 100755 index e0ad4dca6..000000000 --- a/local-interchain/bash/source.bash +++ /dev/null @@ -1,152 +0,0 @@ -# IMPORT ME WITH: source <(curl -s https://raw.githubusercontent.com/strangelove-ventures/interchaintest/main/local-interchain/bash/source.bash) - -# exitIfEmpty "$someKey" someKey -function ICT_exitIfEmpty() { - if [ -z "$1" ]; then - echo "Exiting because ${2} is empty" - exit 1 - fi -} - -# === BASE === - -# ICT_MAKE_REQUEST http://127.0.0.1:8080 localjuno-1 "q" "bank total" -ICT_MAKE_REQUEST() { - local API=$1 CHAIN_ID=$2 ACTION=$3 - shift 3 # get the 4th argument and up as the command - local COMMAND="$*" - - DATA=`printf '{"chain_id":"%s","action":"%s","cmd":"MYCOMMAND"}' $CHAIN_ID $ACTION` - DATA=`echo $DATA | sed "s/MYCOMMAND/$COMMAND/g"` - - curl "$API" -ss --no-progress-meter --header "Content-Type: application/json" -X POST -d "$DATA" -} - -# ICT_QUERY "http://localhost:8080" "localjuno-1" "bank balances juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0" -ICT_QUERY() { - local API=$1 CHAIN_ID=$2 CMD=$3 # can be multiple words - ICT_MAKE_REQUEST "$API" $CHAIN_ID "q" "$CMD" -} - -# ICT_BIN "http://localhost:8080" "localjuno-1" "decode" -ICT_BIN() { - local API=$1 CHAIN_ID=$2 CMD=$3 # can be multiple words - ICT_MAKE_REQUEST "$API" $CHAIN_ID "bin" "$CMD" -} - -# ICT_SH_EXEC "http://localhost:8080" "localjuno-1" "ls -l" -# NOTE: if using a /, make sure to escape it with \ -ICT_SH_EXEC() { - local API=$1 CHAIN_ID=$2 CMD=$3 # can be multiple words - ICT_MAKE_REQUEST "$API" $CHAIN_ID "exec" "$CMD" -} - -# === RELAYER === - -# ICT_RELAYER_STOP http://127.0.0.1 "localjuno-1" -ICT_RELAYER_STOP() { - local API=$1 CHAIN_ID=$2 - - # TODO: how does this function? - ICT_MAKE_REQUEST $API $CHAIN_ID "stop-relayer" "" -} - -# ICT_RELAYER_START http://127.0.0.1 "localjuno-1" "demo-path2 --max-tx-size 10" -ICT_RELAYER_START() { - local API=$1 CHAIN_ID=$2 CMD=$3 - - ICT_MAKE_REQUEST $API $CHAIN_ID "start-relayer" "$CMD" -} - -# RELAYER_EXEC http://127.0.0.1:8080 "localjuno-1" "rly paths list" -ICT_RELAYER_EXEC() { - local API=$1 CHAIN_ID=$2 - shift 2 # get the 3rd argument and up as the command - local CMD="$*" - - ICT_MAKE_REQUEST $API $CHAIN_ID "relayer-exec" "$CMD" -} - -# RELAYER_CHANNELS http://127.0.0.1:8080 "localjuno-1" -ICT_RELAYER_CHANNELS() { - local API=$1 CHAIN_ID=$2 - - ICT_MAKE_REQUEST $API $CHAIN_ID "get_channels" "" -} - -# === COSMWASM === - -# ICT_WASM_DUMP_CONTRACT_STATE "http://localhost:8080" "localjuno-1" "cosmos1contractaddress" "100" -ICT_WASM_DUMP_CONTRACT_STATE() { - local API=$1 CHAIN_ID=$2 CONTRACT=$3 HEIGHT=$4 - - ICT_MAKE_REQUEST $API $CHAIN_ID "recover-key" "contract=$CONTRACT;height=$HEIGHT" -} - -# ICT_WASM_STORE_FILE "http://localhost:8080" "localjuno-1" "/host/absolute/path.wasm" "keyName" -# returns the code_id of the uploaded contract -ICT_WASM_STORE_FILE() { - local API=$1 CHAIN_ID=$2 FILE=$3 KEYNAME=$4 - - DATA=`printf '{"chain_id":"%s","file_path":"%s","key_name":"%s"}' $CHAIN_ID $FILE $KEYNAME` - curl "$API/upload" --header "Content-Type: application/json" --header "Upload-Type: cosmwasm" -X POST -d "$DATA" -} - -# === OTHER === - -# ICT_POLL_FOR_START "http://localhost:8080" 50 -ICT_POLL_FOR_START() { - local API=$1 ATTEMPTS_MAX=$2 - - curl --head -X GET --retry $ATTEMPTS_MAX --retry-connrefused --retry-delay 3 $API -} - -# ICT_KILL_ALL "http://localhost:8080" "localjuno-1" -# (Kills all running, keeps local-ic process. `killall local-ic` to kill that as well) -ICT_KILL_ALL() { - local API=$1 CHAIN_ID=$2 - ICT_MAKE_REQUEST $API $CHAIN_ID "kill-all" "" -} - -# ICT_GET_PEER "http://localhost:8080" "localjuno-1" -ICT_GET_PEER() { - local API=$1 CHAIN_ID=$2 - - if [[ $API != */info ]]; then - API="$API/info" - fi - - curl -G -d "chain_id=$CHAIN_ID" -d "request=peer" $API -} - -# ICT_FAUCET_REQUEST "http://localhost:8080" "localjuno-1" "1000000000ujuno" "juno1qk7zqy3k2v3jx2zq2z2zq2zq2zq2zq2zq2zq" -ICT_FAUCET_REQUEST() { - local API=$1 CHAIN_ID=$2 AMOUNT=$3 ADDRESS=$4 - ICT_MAKE_REQUEST $API $CHAIN_ID "faucet" "amount=$AMOUNT;address=$ADDRESS" -} - -# ICT_ADD_FULL_NODE http://127.0.0.1:8080 "localjuno-1" "1" -ICT_ADD_FULL_NODE() { - local API=$1 CHAIN_ID=$2 AMOUNT=$3 - - ICT_MAKE_REQUEST $API $CHAIN_ID "add-full-nodes" "amount=$AMOUNT" -} - -# ICT_RECOVER_KEY "http://localhost:8080" "localjuno-1" "mykey" "my mnemonic string here" -ICT_RECOVER_KEY() { - local API=$1 CHAIN_ID=$2 KEYNAME=$3 - shift 3 # get the 4th argument and up as the command - local MNEMONIC="$*" - - ICT_MAKE_REQUEST $API $CHAIN_ID "recover-key" "keyname=$KEYNAME;mnemonic=$MNEMONIC" -} - -# ICT_STORE_FILE "http://localhost:8080" "localjuno-1" "/host/absolute/path" -# Uploads any arbitrary host file to the chain node. -ICT_STORE_FILE() { - local API=$1 CHAIN_ID=$2 FILE=$3 - - DATA=`printf '{"chain_id":"%s","file_path":"%s"}' $CHAIN_ID $FILE` - curl "$API/upload" --header "Content-Type: application/json" -X POST -d "$DATA" -} - diff --git a/local-interchain/bash/test.bash b/local-interchain/bash/test.bash deleted file mode 100755 index 85a44784a..000000000 --- a/local-interchain/bash/test.bash +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash -# local-ic start juno_ibc -# -# bash local-interchain/bash/test.bash - -# exits if any command is non 0 status -set -e - -thisDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -# EXTERNAL: source <(curl -s https://raw.githubusercontent.com/strangelove-ventures/interchaintest/main/local-interchain/bash/source.bash) -source "$thisDir/source.bash" -API_ADDR="http://localhost:8080" - -# === BEGIN TESTS === - -ICT_POLL_FOR_START $API_ADDR 50 - -# Set standard interaction defaults -ICT_BIN "$API_ADDR" "localjuno-1" "config keyring-backend test" -ICT_BIN "$API_ADDR" "localjuno-1" "config output json" - -# Get total bank supply -BANK_TOTAL=`ICT_QUERY $API_ADDR "localjuno-1" "bank total"` && echo "BANK_TOTAL: $BANK_TOTAL" -ICT_exitIfEmpty "$BANK_TOTAL" "BANK_TOTAL" -echo $BANK_TOTAL | jq -r '.supply' - -# Get total bank supply another way (directly) -BANK_TOTAL=`ICT_MAKE_REQUEST $API_ADDR "localjuno-1" "q" "bank total"` && echo "BANK_TOTAL: $BANK_TOTAL" -ICT_exitIfEmpty "$BANK_TOTAL" "BANK_TOTAL" -echo $BANK_TOTAL | jq -r '.supply' - -# faucet to user -FAUCET_RES=`ICT_FAUCET_REQUEST "$API_ADDR" "localjuno-1" "7" "juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0"` && echo "FAUCET_RES: $FAUCET_RES" -FAUCET_CONFIRM=`ICT_QUERY $API_ADDR "localjuno-1" "bank balances juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0"` && echo "FAUCET_CONFIRM: $FAUCET_CONFIRM" -ICT_exitIfEmpty "$FAUCET_CONFIRM" "FAUCET_CONFIRM" - -if [ $(echo $FAUCET_CONFIRM | jq -r '.balances[0].amount') -lt 7 ]; then - echo "FAUCET_CONFIRM is less than 7" - exit 1 -fi - -# CosmWasm - Upload source file to chain & store -parent_dir=$(dirname $thisDir) # local-interchain folder -contract_source="$parent_dir/contracts/cw_ibc_example.wasm" -CODE_ID_JSON=`ICT_WASM_STORE_FILE $API_ADDR "localjuno-1" "$contract_source" "acc0"` && echo "CODE_ID_JSON: $CODE_ID_JSON" -CODE_ID=`echo $CODE_ID_JSON | jq -r '.code_id'` && echo "CODE_ID: $CODE_ID" -ICT_exitIfEmpty "$CODE_ID" "CODE_ID" - -# Upload random file -FILE_RESP=`ICT_STORE_FILE $API_ADDR "localjuno-1" "$thisDir/test.bash"` && echo "FILE_RESP: $FILE_RESP" -FILE_LOCATION=`echo $FILE_RESP | jq -r '.location'` && echo "FILE_LOCATION: $FILE_LOCATION" -ICT_exitIfEmpty "$FILE_LOCATION" "FILE_LOCATION" - -# Verify file contents are there -FILE_LOCATION_ESC=$(echo $FILE_LOCATION | sed 's/\//\\\//g') -MISC_BASH_CMD=`ICT_SH_EXEC "$API_ADDR" "localjuno-1" "cat $FILE_LOCATION_ESC"` && echo "MISC_BASH_CMD: $MISC_BASH_CMD" -ICT_exitIfEmpty "$MISC_BASH_CMD" "MISC_BASH_CMD" - -PEER=`ICT_GET_PEER $API_ADDR "localjuno-1"` && echo "PEER: $PEER" -ICT_exitIfEmpty "$PEER" "PEER" - -# RELAYER -CHANNELS=`ICT_RELAYER_CHANNELS $API_ADDR "localjuno-1"` && echo "CHANNELS: $CHANNELS" -ICT_exitIfEmpty "$CHANNELS" "CHANNELS" - -ICT_RELAYER_EXEC $API_ADDR "localjuno-1" "rly paths list" -ICT_RELAYER_EXEC $API_ADDR "localjuno-1" "rly chains list" -RLY_BALANCE=`ICT_RELAYER_EXEC $API_ADDR "localjuno-1" "rly q balance localjuno-1 --output=json"` && echo "RLY_BALANCE: $RLY_BALANCE" -ICT_exitIfEmpty "$RLY_BALANCE" "RLY_BALANCE" -echo $RLY_BALANCE | jq -r '.balance' - - -# Recover a key and validate -COSMOS_KEY_STATUS=`ICT_RECOVER_KEY $API_ADDR "localjuno-1" "mynewkey" "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"` && echo "COSMOS_KEY_STATUS: $COSMOS_KEY_STATUS" - -COSMOS_KEY_ADDRESS=`ICT_BIN "$API_ADDR" "localjuno-1" "keys show mynewkey -a"` && echo "COSMOS_KEY_ADDRESS: $COSMOS_KEY_ADDRESS" -ICT_exitIfEmpty "$COSMOS_KEY_ADDRESS" "COSMOS_KEY_ADDRESS" - -FULL_NODE_ADDED=`ICT_ADD_FULL_NODE $API_ADDR "localjuno-1" "1"` -ICT_exitIfEmpty "$FULL_NODE_ADDED" "FULL_NODE_ADDED" - -# Stop the relayer -ICT_RELAYER_STOP $API_ADDR "localjuno-1" - -# Kills all containers, not the local-ic process. Use `killall local-ic` to kill that as well -ICT_KILL_ALL $API_ADDR "localjuno-1" - -exit 0 diff --git a/local-interchain/chains/base.json b/local-interchain/chains/base.json deleted file mode 100644 index d9c419977..000000000 --- a/local-interchain/chains/base.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "chains": [ - { - "name": "juno", - "chain_id": "localjuno-1", - "denom": "ujuno", - "binary": "junod", - "bech32_prefix": "juno", - "docker_image": { - "repository": "ghcr.io/cosmoscontracts/juno", - "version": "v17.0.0", - "uid-gid": "1000:1000" - }, - "gas_prices": "0%DENOM%", - "chain_type": "cosmos", - "coin_type": 118, - "trusting_period": "112h", - "gas_adjustment": 2.0, - "number_vals": 2, - "number_node": 0, - "debugging": true, - "block_time": "5000ms", - "host_port_override": { - "26657": "26657", - "1317": "1317", - "9090": "9090" - }, - "config_file_overrides": [ - { - "file": "config/config.toml", - "paths": { - "moniker": "localic", - "rpc.cors_allowed_origins": ["*"] - } - } - ], - "genesis": { - "modify": [ - { - "key": "app_state.gov.params.voting_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.max_deposit_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.min_deposit.0.denom", - "value": "ujuno" - }, - { - "key": "app_state.gov.params.min_deposit.0.amount", - "value": "1" - } - ], - "accounts": [ - { - "name": "acc0", - "address": "juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl", - "amount": "10000000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - }, - { - "name": "acc1", - "address": "juno1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk", - "amount": "10000000000%DENOM%", - "mnemonic": "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" - } - ], - "startup_commands": [ - "%BIN% keys add example-key-after --keyring-backend test --home %HOME%" - ] - } - } - ] -} \ No newline at end of file diff --git a/local-interchain/chains/base_ibc.json b/local-interchain/chains/base_ibc.json deleted file mode 100644 index f88dfb2d1..000000000 --- a/local-interchain/chains/base_ibc.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "chains": [ - { - "name": "gaia", - "chain_id": "localcosmos-1", - "denom": "uatom", - "binary": "gaiad", - "bech32_prefix": "cosmos", - "docker_image": { - "version": "v9.1.0" - }, - "host_port_override": { - "26657": "26657", - "1317": "1317", - "9090": "9090" - }, - "block_time": "2s", - "gas_prices": "0%DENOM%", - "gas_adjustment": 2.0, - "ibc_paths": ["atom-juno", "atom-terra"], - "genesis": { - "accounts": [ - { - "name": "acc0", - "address": "cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr", - "amount": "10000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - } - ] - } - }, - { - "name": "juno", - "chain_id": "localjuno-1", - "binary": "junod", - "bech32_prefix": "juno", - "denom": "ujuno", - "docker_image": { - "repository": "ghcr.io/cosmoscontracts/juno", - "version": "v17.0.0" - }, - "block_time": "2s", - "gas_prices": "0%DENOM%", - "gas_adjustment": 2.0, - "ibc_paths": ["atom-juno", "juno-terra"] - }, - { - "name": "terra", - "chain_id": "localterra-1", - "binary": "terrad", - "bech32_prefix": "terra", - "denom": "uluna", - "docker_image": { - "version": "v2.3.4" - }, - "block_time": "2s", - "gas_prices": "0%DENOM%", - "gas_adjustment": 2.0, - "ibc_paths": ["atom-terra", "juno-terra"] - } - ] -} \ No newline at end of file diff --git a/local-interchain/chains/cosmoshub.json b/local-interchain/chains/cosmoshub.json deleted file mode 100644 index f12b337ab..000000000 --- a/local-interchain/chains/cosmoshub.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "chains": [ - { - "name": "gaia", - "chain_id": "localcosmos-1", - "denom": "uatom", - "binary": "gaiad", - "bech32_prefix": "cosmos", - "docker_image": { - "version": "v16.0.0" - }, - "gas_prices": "0%DENOM%", - "chain_type": "cosmos", - "coin_type": 118, - "trusting_period": "112h", - "gas_adjustment": 2.0, - "number_vals": 1, - "number_node": 0, - "debugging": true, - "block_time": "500ms", - "host_port_override": { - "26657": "26657", - "1317": "1317", - "9090": "9090" - }, - "genesis": { - "modify": [ - { - "key": "app_state.gov.params.voting_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.max_deposit_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.min_deposit.0.denom", - "value": "uatom" - } - ], - "accounts": [ - { - "name": "acc0", - "address": "cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr", - "amount": "10000000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/local-interchain/chains/eth.json b/local-interchain/chains/eth.json deleted file mode 100644 index 1585c865a..000000000 --- a/local-interchain/chains/eth.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "chains": [ - { - "name": "ethereum", - "chain_id": "31337", - "denom": "wei", - "binary": "anvil", - "bech32_prefix": "0x", - "docker_image": { - "repository": "ghcr.io/foundry-rs/foundry", - "version": "latest" - }, - "gas_prices": "0", - "chain_type": "ethereum", - "coin_type": 60, - "trusting_period": "0", - "gas_adjustment": 0, - "debugging": true, - "host_port_override": { - "8545": "8545" - }, - "config_file_overrides": [ - { - "paths": { - "--load-state": "chains/state/avs-and-eigenlayer-deployed-anvil-state.json" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/local-interchain/chains/hub.yml b/local-interchain/chains/hub.yml deleted file mode 100644 index 8587fd593..000000000 --- a/local-interchain/chains/hub.yml +++ /dev/null @@ -1,33 +0,0 @@ ---- -chains: -- name: gaia - chain_id: localcosmos-1 - denom: uatom - binary: gaiad - bech32_prefix: cosmos - docker_image: - version: v10.0.1 - gas_prices: 0%DENOM% - chain_type: cosmos - coin_type: 118 - trusting_period: 112h - gas_adjustment: 2 - number_vals: 1 - number_node: 0 - debugging: true - block_time: 500ms - genesis: - modify: - - key: app_state.gov.voting_params.voting_period - value: 15s - - key: app_state.gov.deposit_params.max_deposit_period - value: 15s - - key: app_state.gov.deposit_params.min_deposit.0.denom - value: uatom - accounts: - - name: acc0 - address: cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr - amount: 10000000000%DENOM% - mnemonic: decorate bright ozone fork gallery riot bus exhaust worth way bone - indoor calm squirrel merry zero scheme cotton until shop any excess stage - laundry diff --git a/local-interchain/chains/interchainsecurity.json b/local-interchain/chains/interchainsecurity.json deleted file mode 100644 index 73400bff6..000000000 --- a/local-interchain/chains/interchainsecurity.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "chains": [ - { - "name": "gaia", - "chain_id": "localcosmos-1", - "denom": "uatom", - "binary": "gaiad", - "bech32_prefix": "cosmos", - "docker_image": { - "version": "v15.0.0-rc2" - }, - "gas_prices": "0%DENOM%", - "chain_type": "cosmos", - "coin_type": 118, - "trusting_period": "336h", - "gas_adjustment": 1.3, - "number_vals": 1, - "number_node": 0, - "debugging": true, - "block_time": "1s", - "genesis": { - "modify": [ - { - "key": "app_state.gov.params.voting_period", - "value": "3s" - }, - { - "key": "app_state.interchainaccounts.host_genesis_state.params.allow_messages", - "value": [ - "/cosmos.bank.v1beta1.MsgSend", - "/cosmos.bank.v1beta1.MsgMultiSend", - "/cosmos.staking.v1beta1.MsgDelegate", - "/cosmos.staking.v1beta1.MsgUndelegate", - "/cosmos.staking.v1beta1.MsgBeginRedelegate", - "/cosmos.staking.v1beta1.MsgRedeemTokensforShares", - "/cosmos.staking.v1beta1.MsgTokenizeShares", - "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", - "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress", - "/ibc.applications.transfer.v1.MsgTransfer" - ] - } - ], - "accounts": [ - { - "name": "acc0", - "address": "cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr", - "amount": "10000000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - } - ] - } - }, - { - "name": "ics-consumer", - "chain_id": "localneutron-1", - "denom": "untrn", - "binary": "neutrond", - "bech32_prefix": "neutron", - "docker_image": { - "version": "v3.0.4", - "repository": "ghcr.io/strangelove-ventures/heighliner/neutron" - }, - "gas_prices": "0.0untrn,0.0uatom", - "chain_type": "cosmos", - "coin_type": 118, - "trusting_period": "336h", - "gas_adjustment": 1.3, - "number_vals": 1, - "number_node": 0, - "ics_consumer_link": "localcosmos-1", - "debugging": true, - "block_time": "1s", - "genesis": { - "modify": [ - { - "key": "consensus_params.block.max_gas", - "value": "100000000" - }, - { - "key": "app_state.ccvconsumer.params.soft_opt_out_threshold", - "value": "0.05" - }, - { - "key": "app_state.ccvconsumer.params.reward_denoms", - "value": [ - "untrn" - ] - }, - { - "key": "app_state.ccvconsumer.params.provider_reward_denoms", - "value": [ - "uatom" - ] - }, - { - "key": "consensus_params.block.max_gas", - "value": "1000000000" - }, - { - "key": "app_state.globalfee.params.minimum_gas_prices", - "value": [ - { - "denom": "untrn", - "amount": "0" - } - ] - }, - { - "key": "app_state.feeburner.params.treasury_address", - "value": "neutron1hj5fveer5cjtn4wd6wstzugjfdxzl0xpznmsky" - }, - { - "key": "app_state.tokenfactory.params.fee_collector_address", - "value": "neutron1hj5fveer5cjtn4wd6wstzugjfdxzl0xpznmsky" - }, - { - "key": "app_state.interchainaccounts.host_genesis_state.params.allow_messages", - "value": [ - "/cosmos.bank.v1beta1.MsgSend", - "/cosmos.bank.v1beta1.MsgMultiSend", - "/cosmos.staking.v1beta1.MsgDelegate", - "/cosmos.staking.v1beta1.MsgUndelegate", - "/cosmos.staking.v1beta1.MsgBeginRedelegate", - "/cosmos.staking.v1beta1.MsgRedeemTokensforShares", - "/cosmos.staking.v1beta1.MsgTokenizeShares", - "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", - "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress", - "/ibc.applications.transfer.v1.MsgTransfer", - "/ibc.lightclients.localhost.v2.ClientState", - "/ibc.core.client.v1.MsgCreateClient", - "/ibc.core.client.v1.Query/ClientState", - "/ibc.core.client.v1.Query/ConsensusState", - "/ibc.core.connection.v1.Query/Connection" - ] - } - ], - "accounts": [ - { - "name": "acc0", - "address": "neutron1hj5fveer5cjtn4wd6wstzugjfdxzl0xpznmsky", - "amount": "10000000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/local-interchain/chains/juno_ibc.json b/local-interchain/chains/juno_ibc.json deleted file mode 100644 index 04a650f76..000000000 --- a/local-interchain/chains/juno_ibc.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "chains": [ - { - "name": "juno", - "chain_id": "localjuno-1", - "denom": "ujuno", - "binary": "junod", - "bech32_prefix": "juno", - "docker_image": { - "repository": "ghcr.io/cosmoscontracts/juno", - "version": "v17.0.0" - }, - "gas_prices": "0%DENOM%", - "chain_type": "cosmos", - "coin_type": 118, - "trusting_period": "112h", - "gas_adjustment": 2.0, - "number_vals": 1, - "number_node": 0, - "block_time": "500ms", - "host_port_override": { - "26657": "26657", - "1317": "1317", - "9090": "9090" - }, - "ibc_paths": ["juno-ibc-1"], - "debugging": true, - "genesis": { - "modify": [ - { - "key": "app_state.gov.params.voting_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.max_deposit_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.min_deposit.0.denom", - "value": "ujuno" - } - ], - "accounts": [ - { - "name": "acc0", - "address": "juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl", - "amount": "10000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - }, - { - "name": "acc1", - "address": "juno1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk", - "amount": "10000000%DENOM%", - "mnemonic": "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" - } - ] - } - }, - { - "name": "juno", - "chain_id": "localjuno-2", - "binary": "junod", - "bech32_prefix": "juno", - "denom": "ujuno", - "docker_image": { - "repository": "ghcr.io/cosmoscontracts/juno", - "version": "v17.0.0" - }, - "genesis": { - "accounts": [ - { - "name": "second0", - "address": "juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl", - "amount": "10000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - }, - { - "name": "second1", - "address": "juno1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk", - "amount": "10000000%DENOM%", - "mnemonic": "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" - } - ] - }, - "block_time": "500ms", - "gas_prices": "0%DENOM%", - "gas_adjustment": 2.0, - "ibc_paths": ["juno-ibc-1"] - } - ] -} \ No newline at end of file diff --git a/local-interchain/chains/osmosis.json b/local-interchain/chains/osmosis.json deleted file mode 100644 index 9d1904618..000000000 --- a/local-interchain/chains/osmosis.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "chains": [ - { - "name": "osmosis", - "chain_id": "localosmo-1", - "denom": "uosmo", - "binary": "osmosisd", - "host_port_override": { - "26657": "26657", - "1317": "1317", - "9090": "9090" - }, - "bech32_prefix": "osmo", - "docker_image": { - "version": "v25.0.0" - }, - "ibc_paths": ["osmo-ibc-1"] - }, - { - "name": "osmosis", - "chain_id": "localosmo-2", - "denom": "uosmo", - "binary": "osmosisd", - "bech32_prefix": "osmo", - "docker_image": { - "version": "v25.0.0" - }, - "ibc_paths": ["osmo-ibc-1"] - } - ] -} - - diff --git a/local-interchain/chains/stargaze.json b/local-interchain/chains/stargaze.json deleted file mode 100644 index b3d7c04cb..000000000 --- a/local-interchain/chains/stargaze.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "chains": [ - { - "name": "stargaze", - "chain_id": "localstars-1", - "denom": "ustars", - "binary": "starsd", - "bech32_prefix": "stars", - "docker_image": { - "version": "v13.0.0" - }, - "gas_prices": "0%DENOM%", - "chain_type": "cosmos", - "coin_type": 118, - "trusting_period": "112h", - "host_port_override": { - "26657": "26657", - "1317": "1317", - "9090": "9090" - }, - "gas_adjustment": 2.0, - "number_vals": 1, - "number_node": 0, - "debugging": true, - "block_time": "500ms", - "genesis": { - "modify": [ - { - "key": "app_state.gov.params.voting_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.max_deposit_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.min_deposit.0.denom", - "value": "ustars" - } - ], - "accounts": [ - { - "name": "acc0", - "address": "stars1hj5fveer5cjtn4wd6wstzugjfdxzl0xpjs908j", - "amount": "10000000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/local-interchain/chains/state/README.md b/local-interchain/chains/state/README.md deleted file mode 100644 index 4adec1875..000000000 --- a/local-interchain/chains/state/README.md +++ /dev/null @@ -1,3 +0,0 @@ - -## avs-and-eigenlayer-deployed-anvil-state.json -- \ No newline at end of file diff --git a/local-interchain/chains/state/avs-and-eigenlayer-deployed-anvil-state.json b/local-interchain/chains/state/avs-and-eigenlayer-deployed-anvil-state.json deleted file mode 100644 index 1916e1e23..000000000 --- a/local-interchain/chains/state/avs-and-eigenlayer-deployed-anvil-state.json +++ /dev/null @@ -1 +0,0 @@ -{"block":{"number":"0x20","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x66427aac","gas_limit":"0x1c9c380","basefee":"0xbc67d05","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x256f1f3387c7600","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x09635f643e140090a9a8dcd712ed6285858cebef":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f","0x33":"0x64","0x64":"0xde0b6b3a7640000","0x65":"0x56bc75e2d63100000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x0b306bf915c4d645ff596e518faf3f9669b97016":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78881565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa81565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a26469706673582212207d16f46ce9f67dc4935c89b6dc9a4d8aa7d2511b60d48fb7bbb7e635a52f53dd64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000007a69461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122027588b0b41ad26fb037d5c6c3b99b735bdce03e3e45cffd659e9d5181cdfda0e64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0e801d84fa97b50751dbf25036d067dcf18858bf":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101155760003560e01c80636d14a987116100a2578063bf79ce5811610071578063bf79ce58146103cc578063d5254a8c146103df578063de29fac0146103ff578063e8bb9ae61461041f578063f4e24fe51461044857600080fd5b80636d14a9871461030a5780637916cea6146103315780637ff81a8714610372578063a3db80e2146103a557600080fd5b80633fb27952116100e95780633fb27952146101df57806347b314e8146101f25780635f61a88414610233578063605747d51461028f57806368bccaac146102dd57600080fd5b8062a1f4cb1461011a57806313542a4e1461015b57806326d941f214610192578063377ed99d146101a7575b600080fd5b610141610128366004611904565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610184610169366004611904565b6001600160a01b031660009081526001602052604090205490565b604051908152602001610152565b6101a56101a0366004611937565b61045b565b005b6101ca6101b5366004611937565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610152565b6101a56101ed3660046119c2565b6105b4565b61021b610200366004611a68565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b610282610241366004611937565b60408051808201909152600080825260208201525060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b6040516101529190611a81565b6102a261029d366004611a98565b610672565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610152565b6102f06102eb366004611ac2565b610705565b60405167ffffffffffffffff199091168152602001610152565b61021b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b61034461033f366004611a98565b6108a0565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610152565b610385610380366004611904565b6108eb565b604080518351815260209384015193810193909352820152606001610152565b6101416103b3366004611937565b6005602052600090815260409020805460019091015482565b6101846103da366004611b0a565b6109b8565b6103f26103ed366004611b67565b610e0c565b6040516101529190611bdf565b61018461040d366004611904565b60016020526000908152604090205481565b61021b61042d366004611a68565b6002602052600090815260409020546001600160a01b031681565b6101a56104563660046119c2565b611026565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104ac5760405162461bcd60e51b81526004016104a390611c29565b60405180910390fd5b60ff81166000908152600460205260409020541561052b5760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b60648201526084016104a3565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146105fc5760405162461bcd60e51b81526004016104a390611c29565b6000610607836108eb565b50905061061482826110cf565b7f73a2b7fb844724b971802ae9b15db094d4b7192df9d7350e14eb466b9b22eb4e83610655856001600160a01b031660009081526001602052604090205490565b8460405161066593929190611c9d565b60405180910390a1505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260049052919091208054839081106106af576106af611d09565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff8316600090815260046020526040812080548291908490811061072c5761072c611d09565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107f35760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e74000060648201526084016104a3565b604081015163ffffffff1615806108195750806040015163ffffffff168463ffffffff16105b6108975760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a4016104a3565b51949350505050565b600460205281600052604060002081815481106108bc57600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60408051808201909152600080825260208201526001600160a01b0382166000818152600360209081526040808320815180830183528154815260019182015481850152948452909152812054909190806109ae5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f742072656769737465726564000060648201526084016104a3565b9094909350915050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614610a025760405162461bcd60e51b81526004016104a390611c29565b6000610a30610a1936869003860160408701611d1f565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610ab8576040805162461bcd60e51b8152602060048201526024810191909152600080516020611f3683398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b657960648201526084016104a3565b6001600160a01b03851660009081526001602052604090205415610b425760405162461bcd60e51b81526020600482015260476024820152600080516020611f3683398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a4016104a3565b6000818152600260205260409020546001600160a01b031615610bc65760405162461bcd60e51b81526020600482015260426024820152600080516020611f3683398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a4016104a3565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610c1f918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611d51565b6040516020818303038152906040528051906020012060001c610c429190611d9c565b9050610cdc610c7b610c6683610c60368a90038a0160408b01611d1f565b9061131a565b610c7536899003890189611d1f565b906113b1565b610c83611445565b610cc5610cb685610c60604080518082018252600080825260209182015281518083019092526001825260029082015290565b610c75368a90038a018a611d1f565b610cd7368a90038a0160808b01611e0e565b611505565b610d775760405162461bcd60e51b815260206004820152606c6024820152600080516020611f3683398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c4016104a3565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610dfb9160808a0190611e6b565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610e2957610e29611952565b604051908082528060200260200182016040528015610e52578160200160208202803683370190505b50905060005b8481101561101d576000868683818110610e7457610e74611d09565b919091013560f81c6000818152600460205260409020549092509050801580610ed7575060ff821660009081526004602052604081208054909190610ebb57610ebb611d09565b600091825260209091200154600160c01b900463ffffffff1686105b15610f645760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a4016104a3565b805b80156110075760ff831660009081526004602052604090208790610f8b600184611eb5565b81548110610f9b57610f9b611d09565b600091825260209091200154600160c01b900463ffffffff1611610ff557610fc4600182611eb5565b858581518110610fd657610fd6611d09565b602002602001019063ffffffff16908163ffffffff1681525050611007565b80610fff81611ecc565b915050610f66565b505050808061101590611ee3565b915050610e58565b50949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461106e5760405162461bcd60e51b81526004016104a390611c29565b6000611079836108eb565b50905061108e8261108983611772565b6110cf565b7ff843ecd53a563675e62107be1494fdde4a3d49aeedaf8d88c616d85346e3500e83610655856001600160a01b031660009081526001602052604090205490565b604080518082019091526000808252602082015260005b835181101561131457600084828151811061110357611103611d09565b0160209081015160f81c60008181526004909252604090912054909150806111935760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f7420657869737400000060648201526084016104a3565b60ff821660009081526005602090815260409182902082518084019093528054835260010154908201526111c790866113b1565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916112109085611eb5565b8154811061122057611220611d09565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156112615780546001600160c01b031916604083901c1781556112fd565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061130c90611ee3565b9150506110e6565b50505050565b6040805180820190915260008082526020820152611336611831565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156113695761136b565bfe5b50806113a95760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104a3565b505092915050565b60408051808201909152600080825260208201526113cd61184f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156113695750806113a95760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104a3565b61144d61186d565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091611534611892565b60005b60028110156116f957600061154d826006611efe565b905084826002811061156157611561611d09565b60200201515183611573836000611f1d565b600c811061158357611583611d09565b602002015284826002811061159a5761159a611d09565b602002015160200151838260016115b19190611f1d565b600c81106115c1576115c1611d09565b60200201528382600281106115d8576115d8611d09565b60200201515151836115eb836002611f1d565b600c81106115fb576115fb611d09565b602002015283826002811061161257611612611d09565b602002015151600160200201518361162b836003611f1d565b600c811061163b5761163b611d09565b602002015283826002811061165257611652611d09565b60200201516020015160006002811061166d5761166d611d09565b60200201518361167e836004611f1d565b600c811061168e5761168e611d09565b60200201528382600281106116a5576116a5611d09565b6020020151602001516001600281106116c0576116c0611d09565b6020020151836116d1836005611f1d565b600c81106116e1576116e1611d09565b602002015250806116f181611ee3565b915050611537565b506117026118b1565b60006020826101808560086107d05a03fa90508080156113695750806117625760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016104a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152815115801561179757506020820151155b156117b5575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516117fa9190611d9c565b611824907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611eb5565b905292915050565b919050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806118806118cf565b815260200161188d6118cf565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461182c57600080fd5b60006020828403121561191657600080fd5b61191f826118ed565b9392505050565b803560ff8116811461182c57600080fd5b60006020828403121561194957600080fd5b61191f82611926565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561198b5761198b611952565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119ba576119ba611952565b604052919050565b600080604083850312156119d557600080fd5b6119de836118ed565b915060208084013567ffffffffffffffff808211156119fc57600080fd5b818601915086601f830112611a1057600080fd5b813581811115611a2257611a22611952565b611a34601f8201601f19168501611991565b91508082528784828501011115611a4a57600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a7a57600080fd5b5035919050565b8151815260208083015190820152604081016106ff565b60008060408385031215611aab57600080fd5b611ab483611926565b946020939093013593505050565b600080600060608486031215611ad757600080fd5b611ae084611926565b9250602084013563ffffffff81168114611af957600080fd5b929592945050506040919091013590565b6000806000838503610160811215611b2157600080fd5b611b2a856118ed565b9350610100601f1982011215611b3f57600080fd5b602085019250604061011f1982011215611b5857600080fd5b50610120840190509250925092565b600080600060408486031215611b7c57600080fd5b833567ffffffffffffffff80821115611b9457600080fd5b818601915086601f830112611ba857600080fd5b813581811115611bb757600080fd5b876020828501011115611bc957600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1d57835163ffffffff1683529284019291840191600101611bfb565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015611cdf57858101830151858201608001528201611cc3565b81811115611cf1576000608083870101525b50601f01601f19169290920160800195945050505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611d3157600080fd5b611d39611968565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611db957634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611dcf57600080fd5b611dd7611968565b806040840185811115611de957600080fd5b845b81811015611e03578035845260209384019301611deb565b509095945050505050565b600060808284031215611e2057600080fd5b6040516040810181811067ffffffffffffffff82111715611e4357611e43611952565b604052611e508484611dbe565b8152611e5f8460408501611dbe565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015611ec757611ec7611e9f565b500390565b600081611edb57611edb611e9f565b506000190190565b6000600019821415611ef757611ef7611e9f565b5060010190565b6000816000190483118215151615611f1857611f18611e9f565b500290565b60008219821115611f3057611f30611e9f565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a26469706673582212204db616f9eb8db4a06fc579da75805915c68b75362267a16d73f4d2b4d189ad5f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0x84ea74d481ee0a5332c457a4d796187f6ba67feb","0x66":"0x0","0xcc":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0xcd":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x5f3f1dbd7b74c6b46e8c44f98792a1daf8d69154","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690"}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0x1","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x322813fd9a801c5507c9de605d63cea4f2ce6c44":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b8565b6103ba565b005b6101a66101b6366004611802565b61049d565b6101a66101c936600461181f565b610550565b6101a66101dc366004611841565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61024160335481565b604051908152602001610208565b61024160645481565b61024161026636600461185a565b610749565b6101a6610279366004611886565b6108ed565b61024161028c366004611802565b6109bb565b6101a66109cf565b6102b86102a73660046118bf565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e7366004611841565b610a9b565b6000546101f4906201000090046001600160a01b031681565b610241610313366004611841565b610ae6565b610241610326366004611802565b610af1565b610333610aff565b6040516102089190611912565b61024161034e366004611802565b610b1f565b6101a6610361366004611945565b610bb4565b60645460655460408051928352602083019190915201610208565b61024161038f366004611841565b610d7d565b6102416103a2366004611841565b610db6565b6101a66103b5366004611841565b610dc1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611986565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610f1d565b610450838361102a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119d4565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119f1565b61054d816110bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119d4565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119f1565b6106018282610f1d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a3b565b6106925760405162461bcd60e51b815260040161041090611a5d565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846111c0565b60335460006108316103e883611abb565b905060006103e86108406112a2565b61084a9190611abb565b905060006108588783611ad3565b9050806108658489611aea565b61086f9190611b09565b9550856108d55760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6108df8685611abb565b603355505050505092915050565b600054610100900460ff161580801561090d5750600054600160ff909116105b806109275750303b158015610927575060005460ff166001145b6109435760405162461bcd60e51b815260040161041090611986565b6000805460ff191660011790558015610966576000805461ff0019166101001790555b610970838361102a565b80156109b6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109c96102e783610b1f565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190611a3b565b610a5c5760405162461bcd60e51b815260040161041090611a5d565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610aae9190611abb565b905060006103e8610abd6112a2565b610ac79190611abb565b905081610ad48583611aea565b610ade9190611b09565b949350505050565b60006109c982610d7d565b60006109c96103a283610b1f565b60606040518060800160405280604d8152602001611b61604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c990911690637a7e0d9290604401602060405180830381865afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190611b2b565b6001805460029081161415610c075760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610c7f5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610c8a848484611314565b60335480831115610d195760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d276103e883611abb565b905060006103e8610d366112a2565b610d409190611abb565b9050600082610d4f8784611aea565b610d599190611b09565b9050610d658685611ad3565b603355610d73888883611397565b5050505050505050565b6000806103e8603354610d909190611abb565b905060006103e8610d9f6112a2565b610da99190611abb565b905080610ad48386611aea565b60006109c982610a9b565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906119d4565b6001600160a01b0316336001600160a01b031614610e685760405162461bcd60e51b8152600401610410906119f1565b600154198119600154191614610ee65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561101f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b0384161790556106018160006113ab565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561122a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b6065546112356112a2565b11156112985760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6106018282611497565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190611b2b565b905090565b6032546001600160a01b038381169116146109b65760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109b66001600160a01b0383168483611513565b6000546201000090046001600160a01b03161580156113d257506001600160a01b03821615155b6114545760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826110bb565b6032546001600160a01b038381169116146106015760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b6928692916000916115a3918516908490611620565b8051909150156109b657808060200190518101906115c19190611a3b565b6109b65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b606061162f8484600085611639565b90505b9392505050565b60608247101561169a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161170d9190611b44565b60006040518083038185875af1925050503d806000811461174a576040519150601f19603f3d011682016040523d82523d6000602084013e61174f565b606091505b509150915061175f82828661176a565b979650505050505050565b60608315611779575081611632565b8251156117895782518084602001fd5b8160405162461bcd60e51b81526004016104109190611912565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117ce57600080fd5b843593506020850135925060408501356117e7816117a3565b915060608501356117f7816117a3565b939692955090935050565b60006020828403121561181457600080fd5b8135611632816117a3565b6000806040838503121561183257600080fd5b50508035926020909101359150565b60006020828403121561185357600080fd5b5035919050565b6000806040838503121561186d57600080fd5b8235611878816117a3565b946020939093013593505050565b6000806040838503121561189957600080fd5b82356118a4816117a3565b915060208301356118b4816117a3565b809150509250929050565b6000602082840312156118d157600080fd5b813560ff8116811461163257600080fd5b60005b838110156118fd5781810151838201526020016118e5565b8381111561190c576000848401525b50505050565b60208152600082518060208401526119318160408501602087016118e2565b601f01601f19169190910160400192915050565b60008060006060848603121561195a57600080fd5b8335611965816117a3565b92506020840135611975816117a3565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e657600080fd5b8151611632816117a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4d57600080fd5b8151801515811461163257600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ace57611ace611aa5565b500190565b600082821015611ae557611ae5611aa5565b500390565b6000816000190483118215151615611b0457611b04611aa5565b500290565b600082611b2657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3d57600080fd5b5051919050565b60008251611b568184602087016118e2565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220b9e1998196c21f2c1b5e003e1d12dcabb988e50f661fcc6f65cc67588dc8099364736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x36c02da8a0983159322a80ffe9f24b1acff8b570":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102945760003560e01c80635df45946116101675780639feab859116100ce578063d75b4c8811610087578063d75b4c88146106f5578063dd8283f314610708578063e65797ad1461071b578063f2fde38b146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b80639feab85914610659578063a50857bf14610680578063c391425e14610693578063ca0de882146106b3578063ca4f2d97146106da578063d72d8dd6146106ed57600080fd5b8063871ef04911610120578063871ef049146105cc578063886f1195146105df5780638da5cb5b146105f85780639aa1653d146106005780639b5d177b1461061f5780639e9923c21461063257600080fd5b80635df459461461053d5780636347c9001461056457806368304835146105775780636e3b17db1461059e578063715018a6146105b157806384ca5213146105b957600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104c85780635865c60c146104db578063595c6a67146104fb5780635ac86ab7146105035780635b0b829f146105225780635c975abb1461053557600080fd5b806328f61b3114610435578063296bb0641461044857806329d1e0c31461045b5780632cdd1e861461046e5780633998fdd3146104815780633c2a7f4c146104a857600080fd5b806310d67a2f1161025d57806310d67a2f1461034a57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c421461041557600080fd5b8062cf2ab51461029957806303fd3492146102ae57806304ec6351146102e1578063054310e61461030c5780630cf4b76714610337575b600080fd5b6102ac6102a73660046148b5565b610820565b005b6102ce6102bc3660046148f6565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102f46102ef366004614921565b610936565b6040516001600160c01b0390911681526020016102d8565b609d5461031f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d8565b6102ac610345366004614a40565b610b2c565b6102ac610358366004614ab5565b610c14565b6102ce61036b366004614ab5565b6001600160a01b031660009081526099602052604090205490565b6102ac6103943660046148f6565b610cc7565b6103bc6103a73660046148f6565b609a6020526000908152604090205460ff1681565b60405190151581526020016102d8565b6103df6103da366004614ad2565b610e04565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102d8565b6102ce610423366004614b05565b609b6020526000908152604090205481565b609e5461031f906001600160a01b031681565b61031f6104563660046148f6565b610e95565b6102ac610469366004614ab5565b610f21565b6102ac61047c366004614ab5565b610f32565b61031f7f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc981565b6104bb6104b6366004614ab5565b610f43565b6040516102d89190614b20565b6102ac6104d6366004614b78565b610fc2565b6104ee6104e9366004614ab5565b6114d3565b6040516102d89190614c1b565b6102ac611547565b6103bc610511366004614b05565b6001805460ff9092161b9081161490565b6102ac610530366004614ca0565b611613565b6001546102ce565b61031f7f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3681565b61031f6105723660046148f6565b6116aa565b61031f7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b6102ac6105ac366004614cd4565b6116d4565b6102ac611794565b6102ce6105c7366004614d8b565b6117a8565b6102f46105da3660046148f6565b6117f2565b60005461031f906201000090046001600160a01b031681565b61031f6117fd565b60965461060d9060ff1681565b60405160ff90911681526020016102d8565b6102ac61062d366004614f24565b611816565b61031f7f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377881565b6102ce7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102ac61068e36600461501d565b611b4e565b6106a66106a13660046150c5565b611cd2565b6040516102d8919061516a565b6102ce7f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b6102ac6106e83660046151b4565b611d8b565b609c546102ce565b6102ac61070336600461529a565b611df2565b6102ac61071636600461544d565b611e05565b61078a610729366004614b05565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff9081169183019190915292820151909216908201526060016102d8565b6102ac6107cc366004614ab5565b612109565b6102ac6107df3660046148f6565b61217f565b6108136107f2366004614ab5565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102d89190615521565b600154600290600490811614156108525760405162461bcd60e51b81526004016108499061552f565b60405180910390fd5b60005b8281101561093057600084848381811061087157610871615566565b90506020020160208101906108869190614ab5565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156108d1576108d1614be3565b60028111156108e2576108e2614be3565b905250805190915060006108f5826122db565b9050600061090b826001600160c01b0316612344565b9050610918858583612410565b5050505050808061092890615592565b915050610855565b50505050565b600083815260986020526040812080548291908490811061095957610959615566565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610a535760405162461bcd60e51b815260206004820152606560248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c401610849565b602081015163ffffffff161580610a795750806020015163ffffffff168463ffffffff16105b610b205760405162461bcd60e51b815260206004820152606660248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c401610849565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610b5557610b55614be3565b14610bc85760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f742072656769737465726564000000006064820152608401610849565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c099084906155fa565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b919061560d565b6001600160a01b0316336001600160a01b031614610cbb5760405162461bcd60e51b81526004016108499061562a565b610cc4816124fd565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d389190615674565b610d545760405162461bcd60e51b815260040161084990615696565b60015481811614610dcd5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610849565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c09565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e4157610e41615566565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b0316906347b314e890602401602060405180830381865afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f919061560d565b610f29612602565b610cc481612661565b610f3a612602565b610cc4816126ca565b6040805180820190915260008082526020820152610e8f610fbd7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610fa29291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120612733565b612781565b60015460029060049081161415610feb5760405162461bcd60e51b81526004016108499061552f565b600061103384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506128119050565b90508483146110a45760405162461bcd60e51b81526020600482015260436024820152600080516020615d2e83398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a401610849565b60005b838110156114ca5760008585838181106110c3576110c3615566565b919091013560f81c915036905060008989858181106110e4576110e4615566565b90506020028101906110f691906156de565b6040516379a0849160e11b815260ff8616600482015291935091507f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b03169063f341092290602401602060405180830381865afa158015611162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111869190615727565b63ffffffff1681146112225760405162461bcd60e51b81526020600482015260656024820152600080516020615d2e83398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c401610849565b6000805b8281101561146957600084848381811061124257611242615566565b90506020020160208101906112579190614ab5565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156112a2576112a2614be3565b60028111156112b3576112b3614be3565b905250805190915060006112c6826122db565b905060016001600160c01b03821660ff8b161c81161461134a5760405162461bcd60e51b815260206004820152604460248201819052600080516020615d2e833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a401610849565b856001600160a01b0316846001600160a01b0316116113f55760405162461bcd60e51b81526020600482015260676024820152600080516020615d2e83398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c401610849565b5061145383838f8f8d908e600161140c9190615744565b926114199392919061575c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061241092505050565b50909250611462905081615592565b9050611226565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a250505050806114c390615592565b90506110a7565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff16600281111561152d5761152d614be3565b600281111561153e5761153e614be3565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b89190615674565b6115d45760405162461bcd60e51b815260040161084990615696565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61161b612602565b609654829060ff9081169082161061169b5760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d45786973747360448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610849565b6116a583836128a2565b505050565b609c81815481106116ba57600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146117545760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f720000000000006064820152608401610849565b6116a58383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294f92505050565b61179c612602565b6117a66000612dc1565b565b60006117e87f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a8787878787604051602001610fa296959493929190615786565b9695505050505050565b6000610e8f826122db565b60006118116064546001600160a01b031690565b905090565b60018054600091908116141561183e5760405162461bcd60e51b81526004016108499061552f565b8389146118c15760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610849565b60006118cd3388612e13565b905061192d33828888808060200260200160405190810160405280939291908181526020016000905b82821015611922576119136040830286013681900381019061580b565b815260200190600101906118f6565b505050505087612f44565b600061197433838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506130d1915050565b905060005b8b811015611b3f576000609760008f8f8581811061199957611999615566565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110611a0657611a06615566565b602002602001015163ffffffff161115611b2c57611aa78e8e84818110611a2f57611a2f615566565b9050013560f81c60f81b60f81c84604001518481518110611a5257611a52615566565b60200260200101513386602001518681518110611a7157611a71615566565b60200260200101518d8d88818110611a8b57611a8b615566565b905060400201803603810190611aa1919061580b565b866135e8565b611b2c898984818110611abc57611abc615566565b9050604002016020016020810190611ad49190614ab5565b8f8f8590866001611ae59190615744565b92611af29392919061575c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294f92505050565b5080611b3781615592565b915050611979565b50505050505050505050505050565b600180546000919081161415611b765760405162461bcd60e51b81526004016108499061552f565b6000611b823385612e13565b90506000611bcb33838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506130d1915050565b51905060005b88811015611cc65760008a8a83818110611bed57611bed615566565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110611c2357611c23615566565b602002602001015163ffffffff161115611cb35760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a401610849565b5080611cbe81615592565b915050611bd1565b50505050505050505050565b6060600082516001600160401b03811115611cef57611cef614959565b604051908082528060200260200182016040528015611d18578160200160208202803683370190505b50905060005b8351811015611d8357611d4a85858381518110611d3d57611d3d615566565b60200260200101516138bd565b828281518110611d5c57611d5c615566565b63ffffffff9092166020928302919091019091015280611d7b81615592565b915050611d1e565b509392505050565b6001805460029081161415611db25760405162461bcd60e51b81526004016108499061552f565b6116a53384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294f92505050565b611dfa612602565b6116a58383836139f9565b600054610100900460ff1615808015611e255750600054600160ff909116105b80611e3f5750303b158015611e3f575060005460ff166001145b611ea25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610849565b6000805460ff191660011790558015611ec5576000805461ff0019166101001790555b82518451148015611ed7575081518351145b611f415760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610849565b611f4a89612dc1565b611f548686613c10565b611f5d88612661565b611f66876126ca565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81166001600160a01b03199283161790925585548085018755850180547f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36841690831617905585549384019095559190920180547f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377890921691909316179091555b84518110156120b7576120a585828151811061206457612064615566565b602002602001015185838151811061207e5761207e615566565b602002602001015185848151811061209857612098615566565b60200260200101516139f9565b806120af81615592565b915050612046565b5080156120fe576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b612111612602565b6001600160a01b0381166121765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610849565b610cc481612dc1565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f6919061560d565b6001600160a01b0316336001600160a01b0316146122265760405162461bcd60e51b81526004016108499061562a565b6001541981196001541916146122a45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610849565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c09565b600081815260986020526040812054806122f85750600092915050565b6000838152609860205260409020612311600183615827565b8154811061232157612321615566565b600091825260209091200154600160401b90046001600160c01b03169392505050565b606060008061235284613d00565b61ffff166001600160401b0381111561236d5761236d614959565b6040519080825280601f01601f191660200182016040528015612397576020820181803683370190505b5090506000805b8251821080156123af575061010081105b15612406576001811b9350858416156123f6578060f81b8383815181106123d8576123d8615566565b60200101906001600160f81b031916908160001a9053508160010191505b6123ff81615592565b905061239e565b5090949350505050565b60018260200151600281111561242857612428614be3565b1461243257505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e16906366acfefe906124879088908690889060040161583e565b6020604051808303816000875af11580156124a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ca919061586e565b90506001600160c01b038116156124f6576124f6856124f1836001600160c01b0316612344565b61294f565b5050505050565b6001600160a01b03811661258b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610849565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b3361260b6117fd565b6001600160a01b0316146117a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610849565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8f612740613d2b565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6040805180820190915260008082526020820152600080806127b1600080516020615d6e833981519152866158ad565b90505b6127bd81613e52565b9093509150600080516020615d6e8339815191528283098314156127f7576040805180820190915290815260208101919091529392505050565b600080516020615d6e8339815191526001820890506127b4565b60008061281d84613ed4565b9050808360ff166001901b1161289b5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610849565b9392505050565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff16600281111561298357612983614be3565b14612a025760405162461bcd60e51b815260206004820152604360248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a401610849565b609654600090612a1690859060ff16612811565b90506000612a23836122db565b90506001600160c01b038216612aa15760405162461bcd60e51b815260206004820152603b60248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206269746d61702063616e6e6f74206265203000000000006064820152608401610849565b612ab86001600160c01b0383811690831681161490565b612b505760405162461bcd60e51b815260206004820152605960248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527f72656420666f72207370656369666965642071756f72756d7300000000000000608482015260a401610849565b6001600160c01b0382811619821616612b698482614061565b6001600160c01b038116612c385760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc9169063a364f4da90602401600060405180830381600087803b158015612be957600080fd5b505af1158015612bfd573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36169063f4e24fe590612c86908a908a906004016158c1565b600060405180830381600087803b158015612ca057600080fd5b505af1158015612cb4573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e16925063bd29b8cd9150612d069087908a906004016158e5565b600060405180830381600087803b158015612d2057600080fd5b505af1158015612d34573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816925063bd29b8cd9150612d869087908a906004016158e5565b600060405180830381600087803b158015612da057600080fd5b505af1158015612db4573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36909116906313542a4e90602401602060405180830381865afa158015612e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea291906158fe565b905080610e8f577f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b031663bf79ce588484612ee387610f43565b6040518463ffffffff1660e01b8152600401612f0193929190615917565b6020604051808303816000875af1158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289b91906158fe565b6020808201516000908152609a909152604090205460ff1615612fea5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a401610849565b428160400151101561307f5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a401610849565b602080820180516000908152609a909252604091829020805460ff19166001179055609d54905191830151610930926001600160a01b03909216916130ca91889188918891906117a8565b8351614221565b6130f560405180606001604052806060815260200160608152602001606081525090565b600061313d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff1691506128119050565b9050600061314a886122db565b90506001600160c01b0382166131c85760405162461bcd60e51b815260206004820152603960248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206269746d61702063616e6e6f742062652030000000000000006064820152608401610849565b8082166001600160c01b03161561327e5760405162461bcd60e51b815260206004820152606860248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c401610849565b6001600160c01b03818116908316176132978982614061565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516132c791906155fa565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561330157613301614be3565b1461341a576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561335c5761335c614be3565b021790555050604051639926ee7d60e01b81526001600160a01b037f000000000000000000000000a82ff9afd8f496c3d6ac40e2a0f282e47488cfc9169150639926ee7d906133b1908d908990600401615996565b600060405180830381600087803b1580156133cb57600080fd5b505af11580156133df573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f361690633fb279529061346a908d908c908c90600401615a0a565b600060405180830381600087803b15801561348457600080fd5b505af1158015613498573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e169250632550477791506134ee908d908d908d908d90600401615a2f565b6000604051808303816000875af115801561350d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135359190810190615abb565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778169062bff04d90613592908c908c908c90600401615b1e565b6000604051808303816000875af11580156135b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135d99190810190615b38565b84525050509695505050505050565b6020808301516001600160a01b0380821660008181526099909452604090932054919290871614156136685760405162461bcd60e51b81526020600482015260356024820152600080516020615d4e83398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b6064820152608401610849565b8760ff16846000015160ff16146136e55760405162461bcd60e51b81526020600482015260476024820152600080516020615d4e83398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a401610849565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031690635401ed2790604401602060405180830381865afa158015613756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377a9190615bd1565b905061378681856143db565b6001600160601b0316866001600160601b0316116138195760405162461bcd60e51b81526020600482015260566024820152600080516020615d4e83398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a401610849565b61382388856143ff565b6001600160601b0316816001600160601b0316106120fe5760405162461bcd60e51b815260206004820152605c6024820152600080516020615d4e83398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a401610849565b600081815260986020526040812054815b8181101561394f5760016138e28284615827565b6138ec9190615827565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff168154811061391f5761391f615566565b60009182526020909120015463ffffffff161161393d575050610e8f565b8061394781615592565b9150506138ce565b5060405162461bcd60e51b815260206004820152606c60248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c401610849565b60965460ff1660c08110613a6d5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b6064820152608401610849565b613a78816001615bee565b6096805460ff191660ff9290921691909117905580613a9781866128a2565b60405160016296b58960e01b031981526001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e169063ff694a7790613aea90849088908890600401615c13565b600060405180830381600087803b158015613b0457600080fd5b505af1158015613b18573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf61137786001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613b8057600080fd5b505af1158015613b94573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613bfc57600080fd5b505af11580156120fe573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015613c3757506001600160a01b03821615155b613cb95760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610849565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2613cfc826124fd565b5050565b6000805b8215610e8f57613d15600184615827565b9092169180613d2381615c8c565b915050613d04565b6000306001600160a01b037f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b57016148015613d8457507f0000000000000000000000000000000000000000000000000000000000007a6946145b15613dae57507fd8cea607dc87be4701da97f1f02070e2cf469db0dbbbfc55a7d169f75da1f4bc90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615d6e8339815191526003600080516020615d6e83398151915286600080516020615d6e833981519152888909090890506000613ec8827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615d6e833981519152614419565b91959194509092505050565b600061010082511115613f5d5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610849565b8151613f6b57506000919050565b60008083600081518110613f8157613f81615566565b0160200151600160f89190911c81901b92505b845181101561405857848181518110613faf57613faf615566565b0160200151600160f89190911c1b91508282116140445760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610849565b9181179161405181615592565b9050613f94565b50909392505050565b60008281526098602052604090205480614106576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b600083815260986020526040812061411f600184615827565b8154811061412f5761412f615566565b600091825260209091200180549091504363ffffffff908116911614156141735780546001600160401b0316600160401b6001600160c01b03851602178155610930565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b1561433b57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061426190869086906004016158e5565b602060405180830381865afa15801561427e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142a29190615cae565b6001600160e01b031916146116a55760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610849565b826001600160a01b031661434f83836144c8565b6001600160a01b0316146116a55760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610849565b6020810151600090612710906143f59061ffff1685615cd8565b61289b9190615d07565b6040810151600090612710906143f59061ffff1685615cd8565b600080614424614835565b61442c614853565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561446d5761446f565bfe5b50826144bd5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610849565b505195945050505050565b60008060006144d785856144e4565b91509150611d8381614554565b60008082516041141561451b5760208301516040840151606085015160001a61450f8782858561470f565b9450945050505061454d565b825160401415614545576020830151604084015161453a8683836147fc565b93509350505061454d565b506000905060025b9250929050565b600081600481111561456857614568614be3565b14156145715750565b600181600481111561458557614585614be3565b14156145d35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610849565b60028160048111156145e7576145e7614be3565b14156146355760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610849565b600381600481111561464957614649614be3565b14156146a25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610849565b60048160048111156146b6576146b6614be3565b1415610cc45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610849565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561474657506000905060036147f3565b8460ff16601b1415801561475e57508460ff16601c14155b1561476f57506000905060046147f3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156147c3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147ec576000600192509250506147f3565b9150600090505b94509492505050565b6000806001600160ff1b0383168161481960ff86901c601b615744565b90506148278782888561470f565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f84011261488357600080fd5b5081356001600160401b0381111561489a57600080fd5b6020830191508360208260051b850101111561454d57600080fd5b600080602083850312156148c857600080fd5b82356001600160401b038111156148de57600080fd5b6148ea85828601614871565b90969095509350505050565b60006020828403121561490857600080fd5b5035919050565b63ffffffff81168114610cc457600080fd5b60008060006060848603121561493657600080fd5b8335925060208401356149488161490f565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561499157614991614959565b60405290565b604080519081016001600160401b038111828210171561499157614991614959565b604051601f8201601f191681016001600160401b03811182821017156149e1576149e1614959565b604052919050565b60006001600160401b03831115614a0257614a02614959565b614a15601f8401601f19166020016149b9565b9050828152838383011115614a2957600080fd5b828260208301376000602084830101529392505050565b600060208284031215614a5257600080fd5b81356001600160401b03811115614a6857600080fd5b8201601f81018413614a7957600080fd5b614a88848235602084016149e9565b949350505050565b6001600160a01b0381168114610cc457600080fd5b8035614ab081614a90565b919050565b600060208284031215614ac757600080fd5b813561289b81614a90565b60008060408385031215614ae557600080fd5b50508035926020909101359150565b803560ff81168114614ab057600080fd5b600060208284031215614b1757600080fd5b61289b82614af4565b815181526020808301519082015260408101610e8f565b60008083601f840112614b4957600080fd5b5081356001600160401b03811115614b6057600080fd5b60208301915083602082850101111561454d57600080fd5b60008060008060408587031215614b8e57600080fd5b84356001600160401b0380821115614ba557600080fd5b614bb188838901614871565b90965094506020870135915080821115614bca57600080fd5b50614bd787828801614b37565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614c1757634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614c3690840182614bf9565b5092915050565b803561ffff81168114614ab057600080fd5b600060608284031215614c6157600080fd5b614c6961496f565b90508135614c768161490f565b8152614c8460208301614c3d565b6020820152614c9560408301614c3d565b604082015292915050565b60008060808385031215614cb357600080fd5b614cbc83614af4565b9150614ccb8460208501614c4f565b90509250929050565b600080600060408486031215614ce957600080fd5b8335614cf481614a90565b925060208401356001600160401b03811115614d0f57600080fd5b614d1b86828701614b37565b9497909650939450505050565b60006001600160401b03821115614d4157614d41614959565b5060051b60200190565b600060408284031215614d5d57600080fd5b614d65614997565b9050614d7082614af4565b81526020820135614d8081614a90565b602082015292915050565b600080600080600060a08688031215614da357600080fd5b8535614dae81614a90565b945060208681013594506040808801356001600160401b03811115614dd257600080fd5b8801601f81018a13614de357600080fd5b8035614df6614df182614d28565b6149b9565b81815260069190911b8201840190848101908c831115614e1557600080fd5b928501925b82841015614e3b57614e2c8d85614d4b565b82529284019290850190614e1a565b999c989b5098996060810135995060800135979650505050505050565b60006101008284031215614e6b57600080fd5b50919050565b60008083601f840112614e8357600080fd5b5081356001600160401b03811115614e9a57600080fd5b6020830191508360208260061b850101111561454d57600080fd5b600060608284031215614ec757600080fd5b614ecf61496f565b905081356001600160401b03811115614ee757600080fd5b8201601f81018413614ef857600080fd5b614f07848235602084016149e9565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614f4357600080fd5b89356001600160401b0380821115614f5a57600080fd5b614f668d838e01614b37565b909b50995060208c0135915080821115614f7f57600080fd5b614f8b8d838e01614b37565b9099509750879150614fa08d60408e01614e58565b96506101408c0135915080821115614fb757600080fd5b614fc38d838e01614e71565b90965094506101608c0135915080821115614fdd57600080fd5b614fe98d838e01614eb5565b93506101808c013591508082111561500057600080fd5b5061500d8c828d01614eb5565b9150509295985092959850929598565b600080600080600080610160878903121561503757600080fd5b86356001600160401b038082111561504e57600080fd5b61505a8a838b01614b37565b9098509650602089013591508082111561507357600080fd5b61507f8a838b01614b37565b90965094508491506150948a60408b01614e58565b93506101408901359150808211156150ab57600080fd5b506150b889828a01614eb5565b9150509295509295509295565b600080604083850312156150d857600080fd5b82356150e38161490f565b91506020838101356001600160401b038111156150ff57600080fd5b8401601f8101861361511057600080fd5b803561511e614df182614d28565b81815260059190911b8201830190838101908883111561513d57600080fd5b928401925b8284101561515b57833582529284019290840190615142565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b818110156151a857835163ffffffff1683529284019291840191600101615186565b50909695505050505050565b600080602083850312156151c757600080fd5b82356001600160401b038111156151dd57600080fd5b6148ea85828601614b37565b6001600160601b0381168114610cc457600080fd5b600082601f83011261520f57600080fd5b8135602061521f614df183614d28565b82815260069290921b8401810191818101908684111561523e57600080fd5b8286015b8481101561528f576040818903121561525b5760008081fd5b615263614997565b813561526e81614a90565b81528185013561527d816151e9565b81860152835291830191604001615242565b509695505050505050565b600080600060a084860312156152af57600080fd5b6152b98585614c4f565b925060608401356152c9816151e9565b915060808401356001600160401b038111156152e457600080fd5b6152f0868287016151fe565b9150509250925092565b600082601f83011261530b57600080fd5b8135602061531b614df183614d28565b8281526060928302850182019282820191908785111561533a57600080fd5b8387015b8581101561535d576153508982614c4f565b845292840192810161533e565b5090979650505050505050565b600082601f83011261537b57600080fd5b8135602061538b614df183614d28565b82815260059290921b840181019181810190868411156153aa57600080fd5b8286015b8481101561528f5780356153c1816151e9565b83529183019183016153ae565b600082601f8301126153df57600080fd5b813560206153ef614df183614d28565b82815260059290921b8401810191818101908684111561540e57600080fd5b8286015b8481101561528f5780356001600160401b038111156154315760008081fd5b61543f8986838b01016151fe565b845250918301918301615412565b600080600080600080600080610100898b03121561546a57600080fd5b61547389614aa5565b975061548160208a01614aa5565b965061548f60408a01614aa5565b955061549d60608a01614aa5565b94506080890135935060a08901356001600160401b03808211156154c057600080fd5b6154cc8c838d016152fa565b945060c08b01359150808211156154e257600080fd5b6154ee8c838d0161536a565b935060e08b013591508082111561550457600080fd5b506155118b828c016153ce565b9150509295985092959890939650565b60208101610e8f8284614bf9565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156155a6576155a661557c565b5060010190565b6000815180845260005b818110156155d3576020818501810151868301820152016155b7565b818111156155e5576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061289b60208301846155ad565b60006020828403121561561f57600080fd5b815161289b81614a90565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561568657600080fd5b8151801515811461289b57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e198436030181126156f557600080fd5b8301803591506001600160401b0382111561570f57600080fd5b6020019150600581901b360382131561454d57600080fd5b60006020828403121561573957600080fd5b815161289b8161490f565b600082198211156157575761575761557c565b500190565b6000808585111561576c57600080fd5b8386111561577957600080fd5b5050820193919092039150565b600060c08201888352602060018060a01b03808a16828601526040898187015260c0606087015283895180865260e088019150848b01955060005b818110156157eb578651805160ff16845286015185168684015295850195918301916001016157c1565b505060808701989098525050505060a09091019190915250949350505050565b60006040828403121561581d57600080fd5b61289b8383614d4b565b6000828210156158395761583961557c565b500390565b60018060a01b038416815282602082015260606040820152600061586560608301846155ad565b95945050505050565b60006020828403121561588057600080fd5b81516001600160c01b038116811461289b57600080fd5b634e487b7160e01b600052601260045260246000fd5b6000826158bc576158bc615897565b500690565b6001600160a01b0383168152604060208201819052600090614a88908301846155ad565b828152604060208201526000614a8860408301846155ad565b60006020828403121561591057600080fd5b5051919050565b6001600160a01b0384168152610160810161593f602083018580358252602090810135910152565b615959606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b03831681526040602082015260008251606060408401526159c060a08401826155ad565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061586590830184866159e1565b60018060a01b03851681528360208201526060604082015260006117e86060830184866159e1565b600082601f830112615a6857600080fd5b81516020615a78614df183614d28565b82815260059290921b84018101918181019086841115615a9757600080fd5b8286015b8481101561528f578051615aae816151e9565b8352918301918301615a9b565b60008060408385031215615ace57600080fd5b82516001600160401b0380821115615ae557600080fd5b615af186838701615a57565b93506020850151915080821115615b0757600080fd5b50615b1485828601615a57565b9150509250929050565b8381526040602082015260006158656040830184866159e1565b60006020808385031215615b4b57600080fd5b82516001600160401b03811115615b6157600080fd5b8301601f81018513615b7257600080fd5b8051615b80614df182614d28565b81815260059190911b82018301908381019087831115615b9f57600080fd5b928401925b82841015615bc6578351615bb78161490f565b82529284019290840190615ba4565b979650505050505050565b600060208284031215615be357600080fd5b815161289b816151e9565b600060ff821660ff84168060ff03821115615c0b57615c0b61557c565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615c7c57865180516001600160a01b031684528601518516868401529585019591830191600101615c4c565b50909a9950505050505050505050565b600061ffff80831681811415615ca457615ca461557c565b6001019392505050565b600060208284031215615cc057600080fd5b81516001600160e01b03198116811461289b57600080fd5b60006001600160601b0380831681851681830481118215151615615cfe57615cfe61557c565b02949350505050565b60006001600160601b0380841680615d2157615d21615897565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c696461746543687530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220c46dbbd3cbf9c19ec3f0506d6da00edc62bed2ab5ebee2db59b63aa3575fcbe864736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4826533b4897376654bb4d4ad88b7fafd0c98528":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80639f3ccf651161010f578063c8294c56116100a2578063f2be94ae11610071578063f2be94ae1461054b578063f851e1981461055e578063fa28c62714610571578063ff694a771461058457600080fd5b8063c8294c56146104d6578063d5eccc05146104e9578063dd9846b9146104fc578063df5cf7231461052457600080fd5b8063bc9a40c3116100de578063bc9a40c314610474578063bd29b8cd14610487578063c46778a51461049a578063c601527d146104c357600080fd5b80639f3ccf65146103ee578063ac6bfb0314610401578063adc804da14610421578063b6904b781461046157600080fd5b80634bd26e091161018757806366acfefe1161015657806366acfefe1461034a5780636d14a987146103755780637c172347146103b457806381c07502146103ce57600080fd5b80634bd26e09146102e55780635401ed27146103155780635e5a6775146103285780635f1f2d771461033757600080fd5b806320b66298116101c357806320b662981461026c57806325504777146102815780632cd95940146102a25780633ca5a5f5146102c257600080fd5b80630491b41c146101ea57806308732461146102205780631f9b74e014610241575b600080fd5b61020d6101f8366004612c27565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b61023361022e366004612c42565b610597565b604051610217929190612c6c565b61025461024f366004612ca6565b6105e0565b6040516001600160601b039091168152602001610217565b61027f61027a366004612d21565b610630565b005b61029461028f366004612de2565b610961565b604051610217929190612e81565b6102b56102b0366004612ea6565b610c2c565b6040516102179190612ed2565b61020d6102d0366004612c27565b60ff1660009081526003602052604090205490565b61020d6102f3366004612ea6565b600091825260026020908152604080842060ff93909316845291905290205490565b610254610323366004612ea6565b610ccb565b61020d670de0b6b3a764000081565b61027f610345366004612fdb565b610ce4565b61035d610358366004612de2565b611104565b6040516001600160c01b039091168152602001610217565b61039c7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b039091168152602001610217565b6103bc602081565b60405160ff9091168152602001610217565b6103e16103dc366004613097565b61125e565b60405161021791906130e9565b61039c6103fc366004612c42565b611528565b61041461040f366004613127565b611560565b604051610217919061315a565b61043461042f366004612c42565b6115f8565b6040805182516001600160a01b031681526020928301516001600160601b03169281019290925201610217565b61041461046f366004612c42565b611672565b61027f6104823660046131a6565b611701565b61027f6104953660046131d0565b6117fa565b6102546104a8366004612c27565b6000602081905290815260409020546001600160601b031681565b61027f6104d136600461329c565b611927565b6102546104e43660046132e9565b611a1b565b6102546104f7366004612c27565b611a99565b61050f61050a366004613325565b611aec565b60405163ffffffff9091168152602001610217565b61039c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b610254610559366004613361565b611b01565b61041461056c366004612ea6565b611b96565b61025461057f366004613325565b611c7b565b61027f6105923660046133a3565b611cdc565b600360205281600052604060002081815481106105b357600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff8216600090815260016020526040812054839061061a5760405162461bcd60e51b815260040161061190613400565b60405180910390fd5b60006106268585611e47565b5095945050505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b29190613451565b6001600160a01b0316336001600160a01b0316146106e25760405162461bcd60e51b81526004016106119061346e565b846106fe8160ff16600090815260016020526040902054151590565b61071a5760405162461bcd60e51b815260040161061190613400565b8380610790576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f76696465646064820152608401610611565b8281146108055760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a20696e707574206c656e677468206d69736d61746368000000000000006064820152608401610611565b60ff87166000908152600360205260408120905b8281101561095657858582818110610833576108336134ea565b90506020020160208101906108489190613500565b8289898481811061085b5761085b6134ea565b9050602002013581548110610872576108726134ea565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75838a8a858181106108db576108db6134ea565b90506020020135815481106108f2576108f26134ea565b6000918252602090912001546001600160a01b0316888885818110610919576109196134ea565b905060200201602081019061092e9190613500565b60405161093c929190612c6c565b60405180910390a28061094e81613531565b915050610819565b505050505050505050565b606080336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146109ac5760405162461bcd60e51b81526004016106119061354c565b6000836001600160401b038111156109c6576109c6612f4a565b6040519080825280602002602001820160405280156109ef578160200160208202803683370190505b5090506000846001600160401b03811115610a0c57610a0c612f4a565b604051908082528060200260200182016040528015610a35578160200160208202803683370190505b50905060005b85811015610c1e576000878783818110610a5757610a576134ea565b919091013560f81c60008181526001602052604090205490925015159050610adf5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b6064820152608401610611565b600080610aec838d611e47565b9150915080610b895760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a401610611565b6000610b968c8585612045565b905082878681518110610bab57610bab6134ea565b60200260200101906001600160601b031690816001600160601b031681525050610bd584826122c5565b868681518110610be757610be76134ea565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610c1690613531565b915050610a3b565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610cbe576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c65565b5050505090505b92915050565b600080610cd88484611b96565b60400151949350505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d669190613451565b6001600160a01b0316336001600160a01b031614610d965760405162461bcd60e51b81526004016106119061346e565b81610db28160ff16600090815260016020526040902054151590565b610dce5760405162461bcd60e51b815260040161061190613400565b815180610e435760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f76696465640000006064820152608401610611565b60ff841660009081526003602090815260408083206004909252822090915b838110156110fb578660ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f784888481518110610ea257610ea26134ea565b602002602001015181548110610eba57610eba6134ea565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a28660ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7584888481518110610f1857610f186134ea565b602002602001015181548110610f3057610f306134ea565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a282548390610f70906001906135be565b81548110610f8057610f806134ea565b9060005260206000200183878381518110610f9d57610f9d6134ea565b602002602001015181548110610fb557610fb56134ea565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558254839080611008576110086135d5565b60008281526020812082016000199081019190915501905581548290611030906001906135be565b81548110611040576110406134ea565b9060005260206000200160009054906101000a90046001600160a01b031682878381518110611071576110716134ea565b602002602001015181548110611089576110896134ea565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818054806110c7576110c76135d5565b600082815260209020810160001990810180546001600160a01b0319169055019055806110f381613531565b915050610e62565b50505050505050565b6000336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461114e5760405162461bcd60e51b81526004016106119061354c565b6000805b8381101561062657600085858381811061116e5761116e6134ea565b919091013560f81c600081815260016020526040902054909250151590506111fe5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b60448201527f653a2071756f72756d20646f6573206e6f7420657869737400000000000000006064820152608401610611565b60008061120b838b611e47565b915091508061122d5760009150600160ff84161b6001600160c01b0386161794505b600061123a8a8585612045565b905061124684826122c5565b5050505050808061125690613531565b915050611152565b60606000826001600160401b0381111561127a5761127a612f4a565b6040519080825280602002602001820160405280156112a3578160200160208202803683370190505b50905060005b8381101561151d5760008585838181106112c5576112c56134ea565b919091013560f81c600081815260016020526040902054909250151590506113645760405162461bcd60e51b815260206004820152604660248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20646f6573206e6f7460648201526508195e1a5cdd60d21b608482015260a401610611565b60ff81166000908152600160205260408120805463ffffffff8a16929061138d5761138d6134ea565b60009182526020909120015463ffffffff1611156114395760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a401610611565b60ff8116600090815260016020526040812054905b818110156115075760ff8316600090815260016020819052604090912063ffffffff8b169161147d84866135be565b61148791906135be565b81548110611497576114976134ea565b60009182526020909120015463ffffffff16116114f55760016114ba82846135be565b6114c491906135be565b8585815181106114d6576114d66134ea565b602002602001019063ffffffff16908163ffffffff1681525050611507565b806114ff81613531565b91505061144e565b505050808061151590613531565b9150506112a9565b5090505b9392505050565b6004602052816000526040600020818154811061154457600080fd5b6000918252602090912001546001600160a01b03169150829050565b60408051606081018252600080825260208083018290528284018290528582526002815283822060ff881683529052919091208054839081106115a5576115a56134ea565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805483908110611630576116306134ea565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b604080516060810182526000808252602080830182905282840182905260ff8616825260019052919091208054839081106116af576116af6134ea565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117839190613451565b6001600160a01b0316336001600160a01b0316146117b35760405162461bcd60e51b81526004016106119061346e565b816117cf8160ff16600090815260016020526040902054151590565b6117eb5760405162461bcd60e51b815260040161061190613400565b6117f5838361243f565b505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146118425760405162461bcd60e51b81526004016106119061354c565b60005b81811015611921576000838383818110611861576118616134ea565b919091013560f81c600081815260016020526040902054909250151590506118f15760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610611565b60006118ff86836000612045565b905061190b82826122c5565b505050808061191990613531565b915050611845565b50505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a99190613451565b6001600160a01b0316336001600160a01b0316146119d95760405162461bcd60e51b81526004016106119061346e565b816119f58160ff16600090815260016020526040902054151590565b611a115760405162461bcd60e51b815260040161061190613400565b6117f583836124a8565b60ff83166000908152600160205260408120805482919084908110611a4257611a426134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610cd881856128eb565b60ff81166000908152600160208190526040822080549091611aba916135be565b81548110611aca57611aca6134ea565b600091825260209091200154600160401b90046001600160601b031692915050565b6000611af9848484612a65565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611b3257611b326134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611b8981866128eb565b6040015195945050505050565b6040805160608082018352600080835260208084018290528385018290528682526002815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611bef579150610cc59050565b600085815260026020908152604080832060ff881684529091529020611c166001846135be565b81548110611c2657611c266134ea565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610cc5915050565b600083815260026020908152604080832060ff861684529091528120611ca2858585612a65565b63ffffffff1681548110611cb857611cb86134ea565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c1614611d245760405162461bcd60e51b81526004016106119061354c565b60ff831660009081526001602052604090205415611da25760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b6064820152608401610611565b611dac83826124a8565b611db6838361243f565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611e668660ff1660009081526003602052604090205490565b604080518082019091526000808252602082015290915060ff871660009081526004602081905260408083209051639004134760e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91692639004134792611edb928c92016135eb565b600060405180830381865afa158015611ef8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f20919081019061364a565b905060005b838110156120115760ff89166000908152600360205260409020805482908110611f5157611f516134ea565b60009182526020808320604080518082019091529201546001600160a01b0381168352600160a01b90046001600160601b0316908201528351909450839083908110611f9f57611f9f6134ea565b60200260200101511115611fff57670de0b6b3a764000083602001516001600160601b0316838381518110611fd657611fd66134ea565b6020026020010151611fe891906136da565b611ff291906136f9565b611ffc908661371b565b94505b8061200981613531565b915050611f25565b50505060ff8616600090815260208190526040902054919350506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff8616845290915281205481908061210957600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff199096169190921617939093171691909117905561226b565b600086815260026020908152604080832060ff8916845290915281206121306001846135be565b81548110612140576121406134ea565b600091825260209091200180546001600160601b03600160401b9091048116945090915085168314156121795760009350505050611521565b80544363ffffffff908116911614156121b3578054600160401b600160a01b031916600160401b6001600160601b03871602178155612269565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26122bb8285612bcb565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906122e990846135be565b815481106122f9576122f96134ea565b90600052602060002001905083600014156123285754600160401b90046001600160601b03169150610cc59050565b805460009061234790600160401b90046001600160601b031686612be3565b82549091504363ffffffff90811691161415612384578154600160401b600160a01b031916600160401b6001600160601b03831602178255612436565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b600081511161250d5760405162461bcd60e51b815260206004820152603860248201526000805160206137fa83398151915260448201527f3a206e6f20737472617465676965732070726f766964656400000000000000006064820152608401610611565b805160ff8316600090815260036020908152604090912054906125308383613746565b11156125a05760405162461bcd60e51b815260206004820152604560248201526000805160206137fa83398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a401610611565b60005b828110156128e45760005b6125b88284613746565b811015612699578482815181106125d1576125d16134ea565b6020026020010151600001516001600160a01b0316600360008860ff1660ff1681526020019081526020016000208281548110612610576126106134ea565b6000918252602090912001546001600160a01b031614156126875760405162461bcd60e51b815260206004820152603d60248201526000805160206137fa83398151915260448201527f3a2063616e6e6f74206164642073616d652073747261746567792032780000006064820152608401610611565b8061269181613531565b9150506125ae565b5060008482815181106126ae576126ae6134ea565b6020026020010151602001516001600160601b0316116127335760405162461bcd60e51b815260206004820152604660248201526000805160206137fa83398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a401610611565b60ff851660009081526003602052604090208451859083908110612759576127596134ea565b602090810291909101810151825460018101845560009384528284208251928401516001600160601b0316600160a01b026001600160a01b039093169290921791015560ff87168252600490526040902084518590839081106127be576127be6134ea565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f540490869084908110612835576128356134ea565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75858381518110612892576128926134ea565b6020026020010151600001518684815181106128b0576128b06134ea565b6020026020010151602001516040516128ca929190612c6c565b60405180910390a2806128dc81613531565b9150506125a3565b5050505050565b816000015163ffffffff168163ffffffff1610156129905760405162461bcd60e51b815260206004820152605660248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a207374616b6555706461746520697320606482015275333937b69030b33a32b910313637b1b5a73ab6b132b960511b608482015260a401610611565b602082015163ffffffff1615806129b65750816020015163ffffffff168163ffffffff16105b612a615760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a2074686572652069732061206e65776560648201527f72207374616b6555706461746520617661696c61626c65206265666f726520626084820152693637b1b5a73ab6b132b960b11b60a482015260c401610611565b5050565b600083815260026020908152604080832060ff86168452909152812054805b8015612b0657600086815260026020908152604080832060ff89168452909152902063ffffffff851690612ab96001846135be565b81548110612ac957612ac96134ea565b60009182526020909120015463ffffffff1611612af457612aeb6001826135be565b92505050611521565b80612afe8161375e565b915050612a84565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e401610611565b60006115216001600160601b03808516908416613775565b600080821215612c0757612bf6826137b4565b612c0090846137d1565b9050610cc5565b612c00828461371b565b803560ff81168114612c2257600080fd5b919050565b600060208284031215612c3957600080fd5b61152182612c11565b60008060408385031215612c5557600080fd5b612c5e83612c11565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612ca357600080fd5b50565b60008060408385031215612cb957600080fd5b612cc283612c11565b91506020830135612cd281612c8e565b809150509250929050565b60008083601f840112612cef57600080fd5b5081356001600160401b03811115612d0657600080fd5b6020830191508360208260051b850101111561203e57600080fd5b600080600080600060608688031215612d3957600080fd5b612d4286612c11565b945060208601356001600160401b0380821115612d5e57600080fd5b612d6a89838a01612cdd565b90965094506040880135915080821115612d8357600080fd5b50612d9088828901612cdd565b969995985093965092949392505050565b60008083601f840112612db357600080fd5b5081356001600160401b03811115612dca57600080fd5b60208301915083602082850101111561203e57600080fd5b60008060008060608587031215612df857600080fd5b8435612e0381612c8e565b93506020850135925060408501356001600160401b03811115612e2557600080fd5b612e3187828801612da1565b95989497509550505050565b600081518084526020808501945080840160005b83811015612e765781516001600160601b031687529582019590820190600101612e51565b509495945050505050565b604081526000612e946040830185612e3d565b82810360208401526124368185612e3d565b60008060408385031215612eb957600080fd5b82359150612ec960208401612c11565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612f3e57612f2b83855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101612eee565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612f8257612f82612f4a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612fb057612fb0612f4a565b604052919050565b60006001600160401b03821115612fd157612fd1612f4a565b5060051b60200190565b60008060408385031215612fee57600080fd5b612ff783612c11565b91506020808401356001600160401b0381111561301357600080fd5b8401601f8101861361302457600080fd5b803561303761303282612fb8565b612f88565b81815260059190911b8201830190838101908883111561305657600080fd5b928401925b828410156130745783358252928401929084019061305b565b80955050505050509250929050565b803563ffffffff81168114612c2257600080fd5b6000806000604084860312156130ac57600080fd5b6130b584613083565b925060208401356001600160401b038111156130d057600080fd5b6130dc86828701612da1565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612f3e57835163ffffffff1683529284019291840191600101613105565b60008060006060848603121561313c57600080fd5b61314584612c11565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b03169082015260608101610cc5565b80356001600160601b0381168114612c2257600080fd5b600080604083850312156131b957600080fd5b6131c283612c11565b9150612ec96020840161318f565b6000806000604084860312156131e557600080fd5b8335925060208401356001600160401b038111156130d057600080fd5b600082601f83011261321357600080fd5b8135602061322361303283612fb8565b82815260069290921b8401810191818101908684111561324257600080fd5b8286015b84811015613291576040818903121561325f5760008081fd5b613267612f60565b813561327281612c8e565b815261327f82860161318f565b81860152835291830191604001613246565b509695505050505050565b600080604083850312156132af57600080fd5b6132b883612c11565b915060208301356001600160401b038111156132d357600080fd5b6132df85828601613202565b9150509250929050565b6000806000606084860312156132fe57600080fd5b61330784612c11565b925061331560208501613083565b9150604084013590509250925092565b60008060006060848603121561333a57600080fd5b8335925061334a60208501612c11565b915061335860408501613083565b90509250925092565b6000806000806080858703121561337757600080fd5b61338085612c11565b935061338e60208601613083565b93969395505050506040820135916060013590565b6000806000606084860312156133b857600080fd5b6133c184612c11565b92506133cf6020850161318f565b915060408401356001600160401b038111156133ea57600080fd5b6133f686828701613202565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b60006020828403121561346357600080fd5b815161152181612c8e565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561351257600080fd5b6115218261318f565b634e487b7160e01b600052601160045260246000fd5b60006000198214156135455761354561351b565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b6000828210156135d0576135d061351b565b500390565b634e487b7160e01b600052603160045260246000fd5b60006040820160018060a01b03808616845260206040818601528286548085526060870191508760005282600020945060005b8181101561363c57855485168352600195860195928401920161361e565b509098975050505050505050565b6000602080838503121561365d57600080fd5b82516001600160401b0381111561367357600080fd5b8301601f8101851361368457600080fd5b805161369261303282612fb8565b81815260059190911b820183019083810190878311156136b157600080fd5b928401925b828410156136cf578351825292840192908401906136b6565b979650505050505050565b60008160001904831182151516156136f4576136f461351b565b500290565b60008261371657634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b0380831681851680830382111561373d5761373d61351b565b01949350505050565b600082198211156137595761375961351b565b500190565b60008161376d5761376d61351b565b506000190190565b60008083128015600160ff1b8501841216156137935761379361351b565b6001600160ff1b03840183138116156137ae576137ae61351b565b50500390565b6000600160ff1b8214156137ca576137ca61351b565b5060000390565b60006001600160601b03838116908316818110156137f1576137f161351b565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d73a2646970667358221220ca36d2119db6ac2267e616da7f122a461c6e82a6db3c9c4253c0027e81f9cf3764736f6c634300080c0033","storage":{}},"0x4c5859f0f772848b2d91f1d83e2fe57935348029":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063a364f4da11610071578063a364f4da1461013f578063a50a640e14610152578063a98fb35514610179578063c4d66de81461018c578063e481af9d1461019f578063f2fde38b146101a757600080fd5b806333cfb7b7146100ae5780636b3aa72e146100d7578063715018a6146101115780638da5cb5b1461011b5780639926ee7d1461012c575b600080fd5b6100c16100bc366004611004565b6101ba565b6040516100ce9190611028565b60405180910390f35b7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757075b6040516001600160a01b0390911681526020016100ce565b61011961068a565b005b6033546001600160a01b03166100f9565b61011961013a36600461112a565b61069e565b61011961014d366004611004565b610773565b6100f97f0000000000000000000000001613beb3b2c4f22ee086b2b38c1476a3ce7f78e881565b6101196101873660046111d5565b61083a565b61011961019a366004611004565b61088e565b6100c16109a1565b6101196101b5366004611004565b610d6b565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16906313542a4e90602401602060405180830381865afa158015610226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024a9190611226565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c169063871ef04990602401602060405180830381865afa1580156102b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d9919061123f565b90506001600160c01b038116158061037357507f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036e9190611268565b60ff16155b1561038f57505060408051600081526020810190915292915050565b60006103a3826001600160c01b0316610de4565b90506000805b8251811015610479577f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b0316633ca5a5f58483815181106103f3576103f361128b565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b9190611226565b61046590836112b7565b915080610471816112cf565b9150506103a9565b5060008167ffffffffffffffff81111561049557610495611075565b6040519080825280602002602001820160405280156104be578160200160208202803683370190505b5090506000805b845181101561067d5760008582815181106104e2576104e261128b565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e1690633ca5a5f590602401602060405180830381865afa158015610557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057b9190611226565b905060005b81811015610667576040516356e4026d60e11b815260ff84166004820152602481018290527f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b03169063adc804da906044016040805180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061991906112ea565b6000015186868151811061062f5761062f61128b565b6001600160a01b039092166020928302919091019091015284610651816112cf565b955050808061065f906112cf565b915050610580565b5050508080610675906112cf565b9150506104c5565b5090979650505050505050565b610692610ea7565b61069c6000610f01565b565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146106ef5760405162461bcd60e51b81526004016106e69061135a565b60405180910390fd5b604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071690639926ee7d9061073d908590859060040161141f565b600060405180830381600087803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146107bb5760405162461bcd60e51b81526004016106e69061135a565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a364f4da906024015b600060405180830381600087803b15801561081f57600080fd5b505af1158015610833573d6000803e3d6000fd5b5050505050565b610842610ea7565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063a98fb3559061080590849060040161146a565b600054610100900460ff16158080156108ae5750600054600160ff909116105b806108c85750303b1580156108c8575060005460ff166001145b61092b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106e6565b6000805460ff19166001179055801561094e576000805461ff0019166101001790555b61095782610f53565b801561099d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b606060007f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a279190611268565b60ff16905080610a4557505060408051600081526020810190915290565b6000805b82811015610afa57604051633ca5a5f560e01b815260ff821660048201527f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031690633ca5a5f590602401602060405180830381865afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611226565b610ae690836112b7565b915080610af2816112cf565b915050610a49565b5060008167ffffffffffffffff811115610b1657610b16611075565b604051908082528060200260200182016040528015610b3f578160200160208202803683370190505b5090506000805b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc89190611268565b60ff16811015610d6157604051633ca5a5f560e01b815260ff821660048201526000907f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031690633ca5a5f590602401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190611226565b905060005b81811015610d4c576040516356e4026d60e11b815260ff84166004820152602481018290527f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b03169063adc804da906044016040805180830381865afa158015610cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfe91906112ea565b60000151858581518110610d1457610d1461128b565b6001600160a01b039092166020928302919091019091015283610d36816112cf565b9450508080610d44906112cf565b915050610c65565b50508080610d59906112cf565b915050610b46565b5090949350505050565b610d73610ea7565b6001600160a01b038116610dd85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e6565b610de181610f01565b50565b6060600080610df284610fbe565b61ffff1667ffffffffffffffff811115610e0e57610e0e611075565b6040519080825280601f01601f191660200182016040528015610e38576020820181803683370190505b5090506000805b825182108015610e50575061010081105b15610d61576001811b935085841615610e97578060f81b838381518110610e7957610e7961128b565b60200101906001600160f81b031916908160001a9053508160010191505b610ea0816112cf565b9050610e3f565b6033546001600160a01b0316331461069c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610dd85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016106e6565b6000805b8215610fe957610fd360018461147d565b9092169180610fe181611494565b915050610fc2565b92915050565b6001600160a01b0381168114610de157600080fd5b60006020828403121561101657600080fd5b813561102181610fef565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156110695783516001600160a01b031683529284019291840191600101611044565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156110ae576110ae611075565b60405290565b600067ffffffffffffffff808411156110cf576110cf611075565b604051601f8501601f19908116603f011681019082821181831017156110f7576110f7611075565b8160405280935085815286868601111561111057600080fd5b858560208301376000602087830101525050509392505050565b6000806040838503121561113d57600080fd5b823561114881610fef565b9150602083013567ffffffffffffffff8082111561116557600080fd5b908401906060828703121561117957600080fd5b61118161108b565b82358281111561119057600080fd5b83019150601f820187136111a357600080fd5b6111b2878335602085016110b4565b815260208301356020820152604083013560408201528093505050509250929050565b6000602082840312156111e757600080fd5b813567ffffffffffffffff8111156111fe57600080fd5b8201601f8101841361120f57600080fd5b61121e848235602084016110b4565b949350505050565b60006020828403121561123857600080fd5b5051919050565b60006020828403121561125157600080fd5b81516001600160c01b038116811461102157600080fd5b60006020828403121561127a57600080fd5b815160ff8116811461102157600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156112ca576112ca6112a1565b500190565b60006000198214156112e3576112e36112a1565b5060010190565b6000604082840312156112fc57600080fd5b6040516040810181811067ffffffffffffffff8211171561131f5761131f611075565b604052825161132d81610fef565b815260208301516bffffffffffffffffffffffff8116811461134e57600080fd5b60208201529392505050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b818110156113f8576020818501810151868301820152016113dc565b8181111561140a576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b038316815260406020820152600082516060604084015261144960a08401826113d2565b90506020840151606084015260408401516080840152809150509392505050565b60208152600061102160208301846113d2565b60008282101561148f5761148f6112a1565b500390565b600061ffff808316818114156114ac576114ac6112a1565b600101939250505056fea2646970667358221220b070a5fe0143977307a6135fd67e091d8db3d51dfe10598f2ca4a2135c982e7764736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5f3f1dbd7b74c6b46e8c44f98792a1daf8d69154":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636b92787e1161011a5780638da5cb5b116100ad578063e4e3ad771161007c578063e4e3ad77146104f6578063f2fde38b14610509578063f5c9899d1461051c578063f8c8765e14610542578063fabc1cbc1461055557600080fd5b80638da5cb5b14610490578063b98d0908146104a1578063cefdc1d4146104ae578063df5cf723146104cf57600080fd5b806372d18e8d116100e957806372d18e8d1461043b5780637afa1eed1461045a578063886f11951461046d5780638b00ce7c1461048057600080fd5b80636b92787e146103d85780636d14a987146103eb5780636efb463614610412578063715018a61461043357600080fd5b8063416c7e5e116101925780635c155662116101615780635c155662146103625780635c975abb146103825780635df459461461038a57806368304835146103b157600080fd5b8063416c7e5e146102f45780634f739f7414610307578063595c6a67146103275780635ac86ab71461032f57600080fd5b8063245a7bfc116101ce578063245a7bfc146102695780632cb223d5146102945780632d89f6fc146102b45780633563b0d1146102d457600080fd5b80630373408d1461020057806310d67a2f14610217578063136439dd1461022c578063171f1d5b1461023f575b600080fd5b60ce545b6040519081526020015b60405180910390f35b61022a610225366004614084565b610568565b005b61022a61023a3660046140a1565b610624565b61025261024d36600461421f565b610763565b60408051921515835290151560208301520161020e565b60cc5461027c906001600160a01b031681565b6040516001600160a01b03909116815260200161020e565b6102046102a236600461428d565b60cb6020526000908152604090205481565b6102046102c236600461428d565b60ca6020526000908152604090205481565b6102e76102e23660046142aa565b6108ed565b60405161020e9190614405565b61022a61030236600461442d565b610d83565b61031a610315366004614492565b610ef8565b60405161020e9190614596565b61022a61161e565b61035261033d366004614660565b606654600160ff9092169190911b9081161490565b604051901515815260200161020e565b6103756103703660046146a0565b6116e5565b60405161020e9190614751565b606654610204565b61027c7f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f3681565b61027c7f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e81565b61022a6103e6366004614795565b6118ad565b61027c7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b610425610420366004614a6c565b611a4e565b60405161020e929190614b2c565b61022a612966565b60c95463ffffffff165b60405163ffffffff909116815260200161020e565b60cd5461027c906001600160a01b031681565b60655461027c906001600160a01b031681565b60c9546104459063ffffffff1681565b6033546001600160a01b031661027c565b6097546103529060ff1681565b6104c16104bc366004614b75565b61297a565b60405161020e929190614bb7565b61027c7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61022a610504366004614bf0565b612b0c565b61022a610517366004614084565b612f86565b7f000000000000000000000000000000000000000000000000000000000000000a610445565b61022a610550366004614c64565b612ffc565b61022a6105633660046140a1565b61314d565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df9190614cc0565b6001600160a01b0316336001600160a01b0316146106185760405162461bcd60e51b815260040161060f90614cdd565b60405180910390fd5b610621816132a9565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561066c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106909190614d27565b6106ac5760405162461bcd60e51b815260040161060f90614d44565b606654818116146107255760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161060f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107ab576107ab614d8c565b60200201518951600160200201518a602001516000600281106107d0576107d0614d8c565b60200201518b602001516001600281106107ec576107ec614d8c565b602090810291909101518c518d8301516040516108499a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61086c9190614da2565b90506108df61088561087e88846133a0565b8690613437565b61088d6134cb565b6108d56108c6856108c0604080518082018252600080825260209182015281518083019092526001825260029082015290565b906133a0565b6108cf8c61358b565b90613437565b886201d4c061361b565b909890975095505050505050565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109539190614cc0565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b99190614cc0565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190614cc0565b9050600086516001600160401b03811115610a3c57610a3c6140ba565b604051908082528060200260200182016040528015610a6f57816020015b6060815260200190600190039081610a5a5790505b50905060005b8751811015610d77576000888281518110610a9257610a92614d8c565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa158015610af3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b1b9190810190614dc4565b905080516001600160401b03811115610b3657610b366140ba565b604051908082528060200260200182016040528015610b8157816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610b545790505b50848481518110610b9457610b94614d8c565b602002602001018190525060005b8151811015610d61576040518060600160405280876001600160a01b03166347b314e8858581518110610bd757610bd7614d8c565b60200260200101516040518263ffffffff1660e01b8152600401610bfd91815260200190565b602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e9190614cc0565b6001600160a01b03168152602001838381518110610c5e57610c5e614d8c565b60200260200101518152602001896001600160a01b031663fa28c627858581518110610c8c57610c8c614d8c565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c9190614e54565b6001600160601b0316815250858581518110610d2a57610d2a614d8c565b60200260200101518281518110610d4357610d43614d8c565b60200260200101819052508080610d5990614e93565b915050610ba2565b5050508080610d6f90614e93565b915050610a75565b50979650505050505050565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614cc0565b6001600160a01b0316336001600160a01b031614610eb15760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161060f565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b610f236040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f879190614cc0565b9050610fb46040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e90610fe4908b9089908990600401614eae565b600060405180830381865afa158015611001573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110299190810190614ef8565b81526040516340e03a8160e11b81526001600160a01b038316906381c075029061105b908b908b908b90600401614faf565b600060405180830381865afa158015611078573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110a09190810190614ef8565b6040820152856001600160401b038111156110bd576110bd6140ba565b6040519080825280602002602001820160405280156110f057816020015b60608152602001906001900390816110db5790505b50606082015260005b60ff811687111561152f576000856001600160401b0381111561111e5761111e6140ba565b604051908082528060200260200182016040528015611147578160200160208202803683370190505b5083606001518360ff168151811061116157611161614d8c565b602002602001018190525060005b8681101561142f5760008c6001600160a01b03166304ec63518a8a8581811061119a5761119a614d8c565b905060200201358e886000015186815181106111b8576111b8614d8c565b60200260200101516040518463ffffffff1660e01b81526004016111f59392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112369190614fd8565b90506001600160c01b0381166112da5760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a40161060f565b8a8a8560ff168181106112ef576112ef614d8c565b6001600160c01b03841692013560f81c9190911c60019081161415905061141c57856001600160a01b031663dd9846b98a8a8581811061133157611331614d8c565b905060200201358d8d8860ff1681811061134d5761134d614d8c565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190615001565b85606001518560ff16815181106113e0576113e0614d8c565b602002602001015184815181106113f9576113f9614d8c565b63ffffffff909216602092830291909101909101528261141881614e93565b9350505b508061142781614e93565b91505061116f565b506000816001600160401b0381111561144a5761144a6140ba565b604051908082528060200260200182016040528015611473578160200160208202803683370190505b50905060005b828110156114f45784606001518460ff168151811061149a5761149a614d8c565b602002602001015181815181106114b3576114b3614d8c565b60200260200101518282815181106114cd576114cd614d8c565b63ffffffff90921660209283029190910190910152806114ec81614e93565b915050611479565b508084606001518460ff168151811061150f5761150f614d8c565b6020026020010181905250505080806115279061501e565b9150506110f9565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115949190614cc0565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c906115c7908b908b908e9060040161503e565b600060405180830381865afa1580156115e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261160c9190810190614ef8565b60208301525098975050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168a9190614d27565b6116a65760405162461bcd60e51b815260040161060f90614d44565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60606000846001600160a01b031663c391425e84866040518363ffffffff1660e01b8152600401611717929190615068565b600060405180830381865afa158015611734573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261175c9190810190614ef8565b9050600084516001600160401b03811115611779576117796140ba565b6040519080825280602002602001820160405280156117a2578160200160208202803683370190505b50905060005b85518110156118a357866001600160a01b03166304ec63518783815181106117d2576117d2614d8c565b6020026020010151878685815181106117ed576117ed614d8c565b60200260200101516040518463ffffffff1660e01b815260040161182a9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b9190614fd8565b6001600160c01b031682828151811061188657611886614d8c565b60209081029190910101528061189b81614e93565b9150506117a8565b5095945050505050565b60cd546001600160a01b031633146119115760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b606482015260840161060f565b611948604051806080016040528060008152602001600063ffffffff16815260200160608152602001600063ffffffff1681525090565b84815263ffffffff438116602080840191909152908516606083015260408051601f8501839004830281018301909152838152908490849081908401838280828437600092019190915250505050604080830191909152516119ae9082906020016150bc565b60408051601f19818403018152828252805160209182012060c9805463ffffffff908116600090815260ca90945293909220555416907f1695b8d06ec800b4615e745cfb5bd00c1f2875615d42925c3b5afa543bb24c4890611a119084906150bc565b60405180910390a260c954611a2d9063ffffffff166001615147565b60c9805463ffffffff191663ffffffff929092169190911790555050505050565b6040805180820190915260608082526020820152600084611ac55760405162461bcd60e51b8152602060048201526037602482015260008051602061549383398151915260448201527f7265733a20656d7074792071756f72756d20696e707574000000000000000000606482015260840161060f565b60408301515185148015611add575060a08301515185145b8015611aed575060c08301515185145b8015611afd575060e08301515185145b611b675760405162461bcd60e51b8152602060048201526041602482015260008051602061549383398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161060f565b82515160208401515114611bdf5760405162461bcd60e51b815260206004820152604460248201819052600080516020615493833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161060f565b4363ffffffff168463ffffffff1610611c4e5760405162461bcd60e51b815260206004820152603c602482015260008051602061549383398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161060f565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b03811115611c8f57611c8f6140ba565b604051908082528060200260200182016040528015611cb8578160200160208202803683370190505b506020820152866001600160401b03811115611cd657611cd66140ba565b604051908082528060200260200182016040528015611cff578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b03811115611d3357611d336140ba565b604051908082528060200260200182016040528015611d5c578160200160208202803683370190505b5081526020860151516001600160401b03811115611d7c57611d7c6140ba565b604051908082528060200260200182016040528015611da5578160200160208202803683370190505b5081602001819052506000611e778a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c169350639aa1653d925060048083019260209291908290030181865afa158015611e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e72919061516f565b61383f565b905060005b87602001515181101561211257611ec188602001518281518110611ea257611ea2614d8c565b6020026020010151805160009081526020918201519091526040902090565b83602001518281518110611ed757611ed7614d8c565b60209081029190910101528015611f97576020830151611ef860018361518c565b81518110611f0857611f08614d8c565b602002602001015160001c83602001518281518110611f2957611f29614d8c565b602002602001015160001c11611f97576040805162461bcd60e51b815260206004820152602481019190915260008051602061549383398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161060f565b7f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b03166304ec635184602001518381518110611fdc57611fdc614d8c565b60200260200101518b8b600001518581518110611ffb57611ffb614d8c565b60200260200101516040518463ffffffff1660e01b81526004016120389392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015612055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120799190614fd8565b6001600160c01b03168360000151828151811061209857612098614d8c565b6020026020010181815250506120fe61087e6120d284866000015185815181106120c4576120c4614d8c565b6020026020010151166138d2565b8a6020015184815181106120e8576120e8614d8c565b60200260200101516138fd90919063ffffffff16565b94508061210a81614e93565b915050611e7c565b505061211d836139e1565b60975490935060ff166000816121345760006121b6565b7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b691906151a3565b905060005b8a811015612835578215612317578963ffffffff16827f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c6001600160a01b031663249a0c428f8f8681811061221257612212614d8c565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015612252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227691906151a3565b61228091906151bc565b10156123175760405162461bcd60e51b8152602060048201526066602482015260008051602061549383398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161060f565b7f000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f366001600160a01b03166368bccaac8d8d8481811061235857612358614d8c565b9050013560f81c60f81b60f81c8c8c60a00151858151811061237c5761237c614d8c565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156123d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fc91906151d4565b6001600160401b03191661241f8a604001518381518110611ea257611ea2614d8c565b67ffffffffffffffff1916146124bb5760405162461bcd60e51b8152602060048201526061602482015260008051602061549383398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161060f565b6124eb896040015182815181106124d4576124d4614d8c565b60200260200101518761343790919063ffffffff16565b95507f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031663c8294c568d8d8481811061252e5761252e614d8c565b9050013560f81c60f81b60f81c8c8c60c00151858151811061255257612552614d8c565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156125ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d29190614e54565b856020015182815181106125e8576125e8614d8c565b6001600160601b0390921660209283029190910182015285015180518290811061261457612614614d8c565b60200260200101518560000151828151811061263257612632614d8c565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015612820576126aa8660000151828151811061267c5761267c614d8c565b60200260200101518f8f8681811061269657612696614d8c565b600192013560f81c9290921c811614919050565b1561280e577f000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e6001600160a01b031663f2be94ae8f8f868181106126f0576126f0614d8c565b9050013560f81c60f81b60f81c8e8960200151858151811061271457612714614d8c565b60200260200101518f60e00151888151811061273257612732614d8c565b6020026020010151878151811061274b5761274b614d8c565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa1580156127af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d39190614e54565b87518051859081106127e7576127e7614d8c565b602002602001018181516127fb91906151ff565b6001600160601b03169052506001909101905b8061281881614e93565b915050612656565b5050808061282d90614e93565b9150506121bb565b50505060008061284f8c868a606001518b60800151610763565b91509150816128c05760405162461bcd60e51b8152602060048201526043602482015260008051602061549383398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161060f565b806129215760405162461bcd60e51b8152602060048201526039602482015260008051602061549383398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161060f565b5050600087826020015160405160200161293c929190615227565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b61296e613a7c565b6129786000613ad6565b565b60408051600180825281830190925260009160609183916020808301908036833701905050905084816000815181106129b5576129b5614d8c565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e906129f19088908690600401615068565b600060405180830381865afa158015612a0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a369190810190614ef8565b600081518110612a4857612a48614d8c565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad89190614fd8565b6001600160c01b031690506000612aee82613b28565b905081612afc8a838a6108ed565b9550955050505050935093915050565b60cc546001600160a01b03163314612b665760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c6572000000604482015260640161060f565b6000612b78604085016020860161428d565b9050366000612b8a604087018761526f565b90925090506000612ba1608088016060890161428d565b905060ca6000612bb4602089018961428d565b63ffffffff1663ffffffff1681526020019081526020016000205487604051602001612be091906152b5565b6040516020818303038152906040528051906020012014612c695760405162461bcd60e51b815260206004820152603d60248201527f737570706c696564207461736b20646f6573206e6f74206d617463682074686560448201527f206f6e65207265636f7264656420696e2074686520636f6e7472616374000000606482015260840161060f565b600060cb81612c7b60208a018a61428d565b63ffffffff1663ffffffff1681526020019081526020016000205414612cf85760405162461bcd60e51b815260206004820152602c60248201527f41676772656761746f722068617320616c726561647920726573706f6e64656460448201526b20746f20746865207461736b60a01b606482015260840161060f565b612d227f000000000000000000000000000000000000000000000000000000000000000a85615147565b63ffffffff164363ffffffff161115612d935760405162461bcd60e51b815260206004820152602d60248201527f41676772656761746f722068617320726573706f6e64656420746f207468652060448201526c7461736b20746f6f206c61746560981b606482015260840161060f565b600086604051602001612da69190615388565b604051602081830303815290604052805190602001209050600080612dce8387878a8c611a4e565b6040805160808101825263ffffffff43168152602080820184905280850151828401528451606083015291519395509193509091612e10918c91849101615396565b6040516020818303038152906040528051906020012060cb60008c6000016020810190612e3d919061428d565b63ffffffff1663ffffffff168152602001908152602001600020819055507fb6b77f791d125b1522410ab3adf6a5ea133c836a193ce67ed29c129ca1d8f5c08a82604051612e8c929190615396565b60405180910390a160005b86811015612f2d578560ff1684602001518281518110612eb957612eb9614d8c565b6020026020010151612ecb9190615402565b6001600160601b0316606485600001518381518110612eec57612eec614d8c565b60200260200101516001600160601b0316612f079190615431565b1015612f1b57505050505050505050505050565b80612f2581614e93565b915050612e97565b5060608a013560ce5560208a01803590612f47908c61428d565b63ffffffff167f8378be8a33cf3a493910a16e275cd96af4f048c5eb1a2c2962d4066e697fea8060405160405180910390a35050505050505050505050565b612f8e613a7c565b6001600160a01b038116612ff35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060f565b61062181613ad6565b600054610100900460ff161580801561301c5750600054600160ff909116105b806130365750303b158015613036575060005460ff166001145b6130995760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161060f565b6000805460ff1916600117905580156130bc576000805461ff0019166101001790555b6130c7856000613bf4565b6130d084613ad6565b60cc80546001600160a01b038086166001600160a01b03199283161790925560cd8054928516929091169190911790558015613146576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c49190614cc0565b6001600160a01b0316336001600160a01b0316146131f45760405162461bcd60e51b815260040161060f90614cdd565b6066541981196066541916146132725760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161060f565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610758565b6001600160a01b0381166133375760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161060f565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526133bc613f95565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156133ef576133f1565bfe5b508061342f5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161060f565b505092915050565b6040805180820190915260008082526020820152613453613fb3565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156133ef57508061342f5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161060f565b6134d3613fd1565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820190915260008082526020820152600080806135bb60008051602061547383398151915286614da2565b90505b6135c781613cde565b9093509150600080516020615473833981519152828309831415613601576040805180820190915290815260208101919091529392505050565b6000805160206154738339815191526001820890506135be565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061364d613ff6565b60005b6002811015613812576000613666826006615431565b905084826002811061367a5761367a614d8c565b6020020151518361368c8360006151bc565b600c811061369c5761369c614d8c565b60200201528482600281106136b3576136b3614d8c565b602002015160200151838260016136ca91906151bc565b600c81106136da576136da614d8c565b60200201528382600281106136f1576136f1614d8c565b60200201515151836137048360026151bc565b600c811061371457613714614d8c565b602002015283826002811061372b5761372b614d8c565b60200201515160016020020151836137448360036151bc565b600c811061375457613754614d8c565b602002015283826002811061376b5761376b614d8c565b60200201516020015160006002811061378657613786614d8c565b6020020151836137978360046151bc565b600c81106137a7576137a7614d8c565b60200201528382600281106137be576137be614d8c565b6020020151602001516001600281106137d9576137d9614d8c565b6020020151836137ea8360056151bc565b600c81106137fa576137fa614d8c565b6020020152508061380a81614e93565b915050613650565b5061381b614015565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60008061384b84613d60565b9050808360ff166001901b116138c95760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161060f565b90505b92915050565b6000805b82156138cc576138e760018461518c565b90921691806138f581615450565b9150506138d6565b60408051808201909152600080825260208201526102008261ffff16106139595760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161060f565b8161ffff166001141561396d5750816138cc565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff16106139d657600161ffff871660ff83161c811614156139b9576139b68484613437565b93505b6139c38384613437565b92506201fffe600192831b169101613989565b509195945050505050565b60408051808201909152600080825260208201528151158015613a0657506020820151155b15613a24575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206154738339815191528460200151613a579190614da2565b613a6f9060008051602061547383398151915261518c565b905292915050565b919050565b6033546001600160a01b031633146129785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060600080613b36846138d2565b61ffff166001600160401b03811115613b5157613b516140ba565b6040519080825280601f01601f191660200182016040528015613b7b576020820181803683370190505b5090506000805b825182108015613b93575061010081105b15613bea576001811b935085841615613bda578060f81b838381518110613bbc57613bbc614d8c565b60200101906001600160f81b031916908160001a9053508160010191505b613be381614e93565b9050613b82565b5090949350505050565b6065546001600160a01b0316158015613c1557506001600160a01b03821615155b613c975760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161060f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2613cda826132a9565b5050565b60008080600080516020615473833981519152600360008051602061547383398151915286600080516020615473833981519152888909090890506000613d54827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615473833981519152613eed565b91959194509092505050565b600061010082511115613de95760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161060f565b8151613df757506000919050565b60008083600081518110613e0d57613e0d614d8c565b0160200151600160f89190911c81901b92505b8451811015613ee457848181518110613e3b57613e3b614d8c565b0160200151600160f89190911c1b9150828211613ed05760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161060f565b91811791613edd81614e93565b9050613e20565b50909392505050565b600080613ef8614015565b613f00614033565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156133ef575082613f8a5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161060f565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613fe4614051565b8152602001613ff1614051565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461062157600080fd5b60006020828403121561409657600080fd5b81356138c98161406f565b6000602082840312156140b357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156140f2576140f26140ba565b60405290565b60405161010081016001600160401b03811182821017156140f2576140f26140ba565b604051601f8201601f191681016001600160401b0381118282101715614143576141436140ba565b604052919050565b60006040828403121561415d57600080fd5b6141656140d0565b9050813581526020820135602082015292915050565b600082601f83011261418c57600080fd5b604051604081018181106001600160401b03821117156141ae576141ae6140ba565b80604052508060408401858111156141c557600080fd5b845b818110156139d65780358352602092830192016141c7565b6000608082840312156141f157600080fd5b6141f96140d0565b9050614205838361417b565b8152614214836040840161417b565b602082015292915050565b600080600080610120858703121561423657600080fd5b84359350614247866020870161414b565b925061425686606087016141df565b91506142658660e0870161414b565b905092959194509250565b63ffffffff8116811461062157600080fd5b8035613a7781614270565b60006020828403121561429f57600080fd5b81356138c981614270565b6000806000606084860312156142bf57600080fd5b83356142ca8161406f565b92506020848101356001600160401b03808211156142e757600080fd5b818701915087601f8301126142fb57600080fd5b81358181111561430d5761430d6140ba565b61431f601f8201601f1916850161411b565b9150808252888482850101111561433557600080fd5b808484018584013760008482840101525080945050505061435860408501614282565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b868110156143f7578385038a52825180518087529087019087870190845b818110156143e257835180516001600160a01b031684528a8101518b8501526040908101516001600160601b0316908401529289019260609092019160010161439e565b50509a87019a95505091850191600101614380565b509298975050505050505050565b6020815260006144186020830184614361565b9392505050565b801515811461062157600080fd5b60006020828403121561443f57600080fd5b81356138c98161441f565b60008083601f84011261445c57600080fd5b5081356001600160401b0381111561447357600080fd5b60208301915083602082850101111561448b57600080fd5b9250929050565b600080600080600080608087890312156144ab57600080fd5b86356144b68161406f565b955060208701356144c681614270565b945060408701356001600160401b03808211156144e257600080fd5b6144ee8a838b0161444a565b9096509450606089013591508082111561450757600080fd5b818901915089601f83011261451b57600080fd5b81358181111561452a57600080fd5b8a60208260051b850101111561453f57600080fd5b6020830194508093505050509295509295509295565b600081518084526020808501945080840160005b8381101561458b57815163ffffffff1687529582019590820190600101614569565b509495945050505050565b6000602080835283516080828501526145b260a0850182614555565b905081850151601f19808684030160408701526145cf8383614555565b925060408701519150808684030160608701526145ec8383614555565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b828110156146435784878303018452614631828751614555565b95880195938801939150600101614617565b509998505050505050505050565b60ff8116811461062157600080fd5b60006020828403121561467257600080fd5b81356138c981614651565b60006001600160401b03821115614696576146966140ba565b5060051b60200190565b6000806000606084860312156146b557600080fd5b83356146c08161406f565b92506020848101356001600160401b038111156146dc57600080fd5b8501601f810187136146ed57600080fd5b80356147006146fb8261467d565b61411b565b81815260059190911b8201830190838101908983111561471f57600080fd5b928401925b8284101561473d57833582529284019290840190614724565b809650505050505061435860408501614282565b6020808252825182820181905260009190848201906040850190845b818110156147895783518352928401929184019160010161476d565b50909695505050505050565b600080600080606085870312156147ab57600080fd5b8435935060208501356147bd81614270565b925060408501356001600160401b038111156147d857600080fd5b6147e48782880161444a565b95989497509550505050565b600082601f83011261480157600080fd5b813560206148116146fb8361467d565b82815260059290921b8401810191818101908684111561483057600080fd5b8286015b8481101561485457803561484781614270565b8352918301918301614834565b509695505050505050565b600082601f83011261487057600080fd5b813560206148806146fb8361467d565b82815260069290921b8401810191818101908684111561489f57600080fd5b8286015b84811015614854576148b5888261414b565b8352918301916040016148a3565b600082601f8301126148d457600080fd5b813560206148e46146fb8361467d565b82815260059290921b8401810191818101908684111561490357600080fd5b8286015b848110156148545780356001600160401b038111156149265760008081fd5b6149348986838b01016147f0565b845250918301918301614907565b6000610180828403121561495557600080fd5b61495d6140f8565b905081356001600160401b038082111561497657600080fd5b614982858386016147f0565b8352602084013591508082111561499857600080fd5b6149a48583860161485f565b602084015260408401359150808211156149bd57600080fd5b6149c98583860161485f565b60408401526149db85606086016141df565b60608401526149ed8560e0860161414b565b6080840152610120840135915080821115614a0757600080fd5b614a13858386016147f0565b60a0840152610140840135915080821115614a2d57600080fd5b614a39858386016147f0565b60c0840152610160840135915080821115614a5357600080fd5b50614a60848285016148c3565b60e08301525092915050565b600080600080600060808688031215614a8457600080fd5b8535945060208601356001600160401b0380821115614aa257600080fd5b614aae89838a0161444a565b909650945060408801359150614ac382614270565b90925060608701359080821115614ad957600080fd5b50614ae688828901614942565b9150509295509295909350565b600081518084526020808501945080840160005b8381101561458b5781516001600160601b031687529582019590820190600101614b07565b6040815260008351604080840152614b476080840182614af3565b90506020850151603f19848303016060850152614b648282614af3565b925050508260208301529392505050565b600080600060608486031215614b8a57600080fd5b8335614b958161406f565b9250602084013591506040840135614bac81614270565b809150509250925092565b828152604060208201526000614bd06040830184614361565b949350505050565b600060808284031215614bea57600080fd5b50919050565b600080600060c08486031215614c0557600080fd5b83356001600160401b0380821115614c1c57600080fd5b614c2887838801614bd8565b9450614c378760208801614bd8565b935060a0860135915080821115614c4d57600080fd5b50614c5a86828701614942565b9150509250925092565b60008060008060808587031215614c7a57600080fd5b8435614c858161406f565b93506020850135614c958161406f565b92506040850135614ca58161406f565b91506060850135614cb58161406f565b939692955090935050565b600060208284031215614cd257600080fd5b81516138c98161406f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215614d3957600080fd5b81516138c98161441f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600082614dbf57634e487b7160e01b600052601260045260246000fd5b500690565b60006020808385031215614dd757600080fd5b82516001600160401b03811115614ded57600080fd5b8301601f81018513614dfe57600080fd5b8051614e0c6146fb8261467d565b81815260059190911b82018301908381019087831115614e2b57600080fd5b928401925b82841015614e4957835182529284019290840190614e30565b979650505050505050565b600060208284031215614e6657600080fd5b81516001600160601b03811681146138c957600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614ea757614ea7614e7d565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b03831115614edb57600080fd5b8260051b8085606085013760009201606001918252509392505050565b60006020808385031215614f0b57600080fd5b82516001600160401b03811115614f2157600080fd5b8301601f81018513614f3257600080fd5b8051614f406146fb8261467d565b81815260059190911b82018301908381019087831115614f5f57600080fd5b928401925b82841015614e49578351614f7781614270565b82529284019290840190614f64565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff84168152604060208201526000614fcf604083018486614f86565b95945050505050565b600060208284031215614fea57600080fd5b81516001600160c01b03811681146138c957600080fd5b60006020828403121561501357600080fd5b81516138c981614270565b600060ff821660ff81141561503557615035614e7d565b60010192915050565b604081526000615052604083018587614f86565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b818110156150af57845183529383019391830191600101615093565b5090979650505050505050565b6000602080835283518184015263ffffffff8185015116604084015260408401516080606085015280518060a086015260005b8181101561510b5782810184015186820160c0015283016150ef565b8181111561511d57600060c083880101525b50606086015163ffffffff811660808701529250601f01601f19169390930160c001949350505050565b600063ffffffff80831681851680830382111561516657615166614e7d565b01949350505050565b60006020828403121561518157600080fd5b81516138c981614651565b60008282101561519e5761519e614e7d565b500390565b6000602082840312156151b557600080fd5b5051919050565b600082198211156151cf576151cf614e7d565b500190565b6000602082840312156151e657600080fd5b815167ffffffffffffffff19811681146138c957600080fd5b60006001600160601b038381169083168181101561521f5761521f614e7d565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561526257815185529382019390820190600101615246565b5092979650505050505050565b6000808335601e1984360301811261528657600080fd5b8301803591506001600160401b038211156152a057600080fd5b60200191503681900382131561448b57600080fd5b6020815281356020820152600060208301356152d081614270565b63ffffffff81166040840152506040830135601e198436030181126152f457600080fd5b830180356001600160401b0381111561530c57600080fd5b80360385131561531b57600080fd5b6080606085015261533360a085018260208501614f86565b91505061534260608501614282565b63ffffffff81166080850152509392505050565b803561536181614270565b63ffffffff1682526020818101359083015260408082013590830152606090810135910152565b608081016138cc8284615356565b6153a08184615356565b60a0608082015263ffffffff82511660a0820152602082015160c082015260006040830151608060e08401526153da610120840182614af3565b90506060840151609f19848303016101008501526153f88282614af3565b9695505050505050565b60006001600160601b038083168185168183048111821515161561542857615428614e7d565b02949350505050565b600081600019048311821515161561544b5761544b614e7d565b500290565b600061ffff8083168181141561546857615468614e7d565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220b10039e976d5dde5e4b407e25e093bd764578137a60f9e3ee7e47f00266cce2b64736f6c634300080c0033","storage":{"0x97":"0x1"}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212208473e2cda982935bccab1789bc9098533ac3b1ad2c056cc51cc1d5d1193ed6fd64736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x5bc5b424ff8db9bd8202cae3beb193c946b905d8ebddb990e36a723af40eb1c4","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea264697066735822122088c715cd0f667668bf283754c18c39a61602f3b68fa89e81bebca9d33c30c0f664736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x8a791620dd6260079bf849dc5567adc3f2fdc318"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x70e0ba845a1a0f2da3359c97e0285013525ffc49":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0x84ea74d481ee0a5332c457a4d796187f6ba67feb","0x66":"0x0","0x97":"0x1","0x98":"0x0","0x99":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xcd8a1c3ba11cf5ecfa6267617243239504a98d90","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690"}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806340c10f191161005b57806340c10f19146100d257806370a08231146100e7578063a9059cbb14610110578063dd62ed3e1461012357600080fd5b8063095ea7b31461008257806318160ddd146100ad57806323b872dd146100bf575b600080fd5b610098610090366004610410565b600192915050565b60405190151581526020015b60405180910390f35b6002545b6040519081526020016100a4565b6100986100cd36600461043a565b61015c565b6100e56100e0366004610410565b610173565b005b6100b16100f5366004610476565b6001600160a01b031660009081526020819052604090205490565b61009861011e366004610410565b610181565b6100b1610131366004610498565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061016984848461018b565b5060019392505050565b61017d8282610335565b5050565b6000336101698185855b6001600160a01b0383166101f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101eb565b6001600160a01b0383166000908152602081905260409020548111156102cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101eb565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661038b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101eb565b806002600082825461039d91906104cb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b038116811461040b57600080fd5b919050565b6000806040838503121561042357600080fd5b61042c836103f4565b946020939093013593505050565b60008060006060848603121561044f57600080fd5b610458846103f4565b9250610466602085016103f4565b9150604084013590509250925092565b60006020828403121561048857600080fd5b610491826103f4565b9392505050565b600080604083850312156104ab57600080fd5b6104b4836103f4565b91506104c2602084016103f4565b90509250929050565b600082198211156104ec57634e487b7160e01b600052601160045260246000fd5b50019056fea26469706673582212205a338c0b0b48f98b5b6f7e618db605eb687cc1abdaacfd4547257e0bdc9594b764736f6c634300080c0033","storage":{"0x2":"0x64","0xd5482c7390e9753505446967c2fcd0000ab9bf8deb0af38aba516c293d000b":"0x64","0xca6ac29a9dc6d964f323dd4c7a44d81d3a76d1209169b99e4ae32aefad2034c8":"0x0"}},"0x84ea74d481ee0a5332c457a4d796187f6ba67feb":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220588d79746369ba6bc203e2ed869e37ff985f84ede6a035b19a6fa49703898aa064736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x84ea74d481ee0a5332c457a4d796187f6ba67feb0001","0x1":"0x0","0x64":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x96":"0x1","0x9c":"0x3","0x9d":"0x0","0x9e":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x36c02da8a0983159322a80ffe9f24b1acff8b570","0x683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7":"0x322af80000001e","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c":"0x998abeb3e57409262ae5b751f60747921b33613e","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d":"0xf5059a5d33d5853360d16c683c16e67980206f36","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539e":"0x95401dc811bb5740090279ba06cfa8fcf6113778","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690"}},"0x860b6912c2d0337ef05bbc89b0c2cb6cbaeab4a5":{"nonce":3,"balance":"0x56bc3136b41fa100e","code":"0x","storage":{}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614b54565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000077359400081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614b91565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614c24565b610764565b34801561036757600080fd5b506101fb7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561039b57600080fd5b506103af6103aa366004614d35565b610c05565b60405161020f9190614dae565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614dbc565b610c6a565b60405161020f9190614dd5565b34801561041557600080fd5b506103af610424366004614dbc565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa81565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614e1d565b610d17565b3480156104ba57600080fd5b5061022d6104c9366004614e90565b610ec4565b3480156104da57600080fd5b506103fc6104e9366004614d35565b611293565b3480156104fa57600080fd5b5061022d611386565b34801561050f57600080fd5b5061022d61051e366004614f3a565b6113f1565b34801561052f57600080fd5b5061022d61053e366004614f66565b61162e565b34801561054f57600080fd5b5061022d61055e366004615080565b611806565b34801561056f57600080fd5b5061022d61057e366004615151565b6119d9565b34801561058f57600080fd5b5061022d61059e366004614f3a565b611da4565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000006059f46081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061524c565b156106ad5760405162461bcd60e51b81526004016106a49061526e565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a4906152cb565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a490615313565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611f87565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600260048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a919061524c565b156108375760405162461bcd60e51b81526004016106a49061526e565b60335489906001600160401b03600160a01b90910481169082161161086e5760405162461bcd60e51b81526004016106a490615362565b603454600160401b900460ff166108e65760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b86851480156108f457508483145b6109845760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b4261099a613f486001600160401b038d16614b54565b1015610a235760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038b166004820152610acc907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab891906153fd565b8a35610ac760208d018d615416565b611fbb565b6000805b88811015610b7057610b528c8c358c8c85818110610af057610af061545c565b9050602002016020810190610b059190615472565b8b8b86818110610b1757610b1761545c565b9050602002810190610b299190615416565b8b8b88818110610b3b57610b3b61545c565b9050602002810190610b4d9190615499565b612149565b610b5c9083614b54565b915080610b68816154e2565b915050610ad0565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8539091169063c2c51c4090604401600060405180830381600087803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b505050505050505050505050505050565b600080610c4784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260392505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610c926040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610cfd57610cfd614d76565b6002811115610d0e57610d0e614d76565b90525092915050565b336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8531614610d5f5760405162461bcd60e51b81526004016106a4906154fd565b346801bc16d674ec80000014610deb5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa6001600160a01b031663228951186801bc16d674ec8000008787610e2e6126fd565b8888886040518863ffffffff1660e01b8152600401610e52969594939291906155cf565b6000604051808303818588803b158015610e6b57600080fd5b505af1158015610e7f573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610eb592919061561e565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f50919061524c565b15610f6d5760405162461bcd60e51b81526004016106a49061526e565b8684148015610f7b57508382145b6110045760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b4261101a613f486001600160401b038c16614b54565b101561109c5760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152611140907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa15801561110d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113191906153fd565b8735610ac760208a018a615416565b6000805b888110156111e4576111c68b8b8b848181106111625761116261545c565b90506020020160208101906111779190615472565b8a358a8a8681811061118b5761118b61545c565b905060200281019061119d9190615416565b8a8a888181106111af576111af61545c565b90506020028101906111c19190615499565b612742565b6111d09083615632565b9150806111dc816154e2565b915050611144565b506033546001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381169163c2c51c409116611229633b9aca0085615673565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561126f57600080fd5b505af1158015611283573d6000803e3d6000fd5b5050505050505050505050505050565b6112bb6040805160808101825260008082526020820181905291810182905290606082015290565b603660006112fe85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260392505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561136b5761136b614d76565b600281111561137c5761137c614d76565b9052509392505050565b6033546001600160a01b031633146113b05760405162461bcd60e51b81526004016106a4906152cb565b603454600160401b900460ff16156113da5760405162461bcd60e51b81526004016106a490615313565b6033546113ef906001600160a01b0316611f87565b565b336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316146114395760405162461bcd60e51b81526004016106a4906154fd565b611447633b9aca008261570e565b156114d15760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b60006114e1633b9aca0083615722565b6034549091506001600160401b03908116908216111561159a5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906115b89084906001600160401b0316615736565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161161791815260200190565b60405180910390a26116298383612c20565b505050565b600054610100900460ff161580801561164e5750600054600160ff909116105b806116685750303b158015611668575060005460ff166001145b6116cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff1916600117905580156116ee576000805461ff0019166101001790555b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611802576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118305760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600560048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc919061524c565b156118d95760405162461bcd60e51b81526004016106a49061526e565b82518451146119645760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b84518110156119d2576119c0838583815181106119865761198661545c565b60200260200101518784815181106119a0576119a061545c565b60200260200101516001600160a01b0316612c2a9092919063ffffffff16565b806119ca816154e2565b915050611967565b5050505050565b604051635ac86ab760e01b81526004808201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061524c565b15611a815760405162461bcd60e51b81526004016106a49061526e565b8386148015611a8f57508588145b8015611a9a57508782145b611b0e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611bb2907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba391906153fd565b8b35610ac760208e018e615416565b604080518082019091526000808252602082015260005b83811015611cb2576000611c6d8d358d8d85818110611bea57611bea61545c565b9050602002810190611bfc919061575e565b8c8c86818110611c0e57611c0e61545c565b9050602002810190611c209190615416565b8c8c88818110611c3257611c3261545c565b9050602002810190611c449190615499565b8c8c8a818110611c5657611c5661545c565b9050602002810190611c689190615499565b612c7c565b80518451919250908490611c82908390614b54565b9052506020808201519084018051611c9b908390615632565b905250819050611caa816154e2565b915050611bc9565b50805115611ce1576033548151611ce1916001600160a01b031690611cdc90633b9aca009061577f565b613167565b602081015115611d965760335460208201516001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381169263c2c51c4092911690611d3790633b9aca0090615673565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611dce5760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600560048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a919061524c565b15611e775760405162461bcd60e51b81526004016106a49061526e565b603754821115611f285760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611f3a919061579e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a26116298383613167565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611fb88147613167565b50565b611fc76003602061577f565b81146120575760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61209c82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150600390506131f5565b6121435760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061218884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156121f7576121f7614d76565b600281111561220857612208614d76565b905250905060008160600151600281111561222557612225614d76565b146122ce5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b6122d66126fd565b6122df906157b5565b61231b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323192505050565b146123a25760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b60006123e086868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324692505050565b90506123f08a87878b8b8e61326b565b60398054906000612400836154e2565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000000000077359400081169082161115612486576001600160401b037f0000000000000000000000000000000000000000000000000000000773594000166020830152612496565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561253457612534614d76565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516125cf9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166125f4919061577f565b9b9a5050505050505050505050565b6000815160301461268c5760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b6040516002906126a39084906000906020016157d9565b60408051601f19818403018152908290526126bd91615808565b602060405180830381855afa1580156126da573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6491906153fd565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061278184848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324692505050565b905060006127c185858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561283057612830614d76565b600281111561284157612841614d76565b8152505090508a6001600160401b031681604001516001600160401b0316106128f85760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b60018160600151600281111561291057612910614d76565b146129785760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b6129818b6134c2565b6001600160401b03166129c68787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ac92505050565b6001600160401b031611612a69576000836001600160401b031611612a695760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612a778987878b8b8f61326b565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000077359400081169086161115612ad957507f0000000000000000000000000000000000000000000000000000000773594000612adc565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612b8457612b84614d76565b0217905550905050816001600160401b0316816001600160401b031614612c10577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612bfb9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612c0d81836135c4565b95505b5050505050979650505050505050565b61180282826135e3565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116299084906136fc565b6040805180820190915260008082526020820152612ca1612c9c89615889565b6137ce565b6033546001600160401b03600160a01b909104811690821611612cd65760405162461bcd60e51b81526004016106a490615362565b6000612ce4612c9c8b615889565b90506000612d2488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612d5157612d51614d76565b1415612e085760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612ec75760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550612fa48c87878e7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9f91906159c5565b6137de565b6000612fe28787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141ff92505050565b9050612ff28d8a8a8e8e8661326b565b600061303088888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061421792505050565b905061306e8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ac92505050565b6001600160401b03166130886130838f615889565b61422f565b6001600160401b03161061314057603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261313593869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561311c5761311c614d76565b600281111561312d5761312d614d76565b905250614241565b95505050505061315a565b60335461313590839086906001600160a01b03168461447f565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe69091169063c0db354c9083906044016000604051808303818588803b1580156131d857600080fd5b505af11580156131ec573d6000803e3d6000fd5b50505050505050565b60008361320386858561455d565b1495945050505050565b6000816000815181106132225761322261545c565b60200260200101519050919050565b6000816001815181106132225761322261545c565b6000610c648260028151811061325e5761325e61545c565b60200260200101516146a9565b61327760036002615ac6565b84146133025760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561331060286001614b54565b61331a9190614b54565b61332590602061577f565b82146133a55760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166133bb60286001614b54565b600b901b179050600061340087878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471092505050565b905061344685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508591508690506131f5565b6134b85760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b60007f000000000000000000000000000000000000000000000000000000006059f4606001600160401b0316826001600160401b0316101561356c5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b613578600c6020615ad2565b6135a27f000000000000000000000000000000000000000000000000000000006059f46084615736565b610c649190615b01565b6000610c648260078151811061325e5761325e61545c565b60006135dc6001600160401b03808416908516615b27565b9392505050565b804710156136335760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613680576040519150601f19603f3d011682016040523d82523d6000602084013e613685565b606091505b50509050806116295760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b6000613751826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149bd9092919063ffffffff16565b805190915015611629578080602001905181019061376f919061524c565b6116295760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610c648261014001516146a9565b6137e9600280615ac6565b831461385d5760405162461bcd60e51b81526020600482015260496024820152600080516020615bd983398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b613869600d6002615ac6565b61387960c0840160a08501615b66565b6001600160401b0316106138e35760405162461bcd60e51b815260206004820152603f6024820152600080516020615bd983398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b6138ef60046002615ac6565b613900610100840160e08501615b66565b6001600160401b03161061396c576040805162461bcd60e51b8152602060048201526024810191909152600080516020615bd983398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b61397860186002615ac6565b61398860e0840160c08501615b66565b6001600160401b031610613a025760405162461bcd60e51b81526020600482015260476024820152600080516020615bd983398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613a1a612c9c85615889565b6001600160401b031610613a2f576005613a32565b60045b9050613a3f600482614b54565b613a4a906001614b54565b613a5590602061577f565b613a5f8480615416565b905014613ad35760405162461bcd60e51b81526020600482015260486024820152600080516020615bd983398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613adf60046003614b54565b613aea90602061577f565b613af76040850185615416565b905014613b715760405162461bcd60e51b815260206004820152604e6024820152600080516020615bd983398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613b7d6003602061577f565b613b8a6020850185615416565b905014613bf85760405162461bcd60e51b81526020600482015260426024820152600080516020615bd983398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613c0381602061577f565b613c106060850185615416565b905014613c835760405162461bcd60e51b81526020600482015260476024820152600080516020615bd983398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613c9160186001614b54565b613c9c906005614b54565b613ca7906001614b54565b613cb19190614b54565b613cbc90602061577f565b613cc96080850185615416565b905014613d525760405162461bcd60e51b81526020600482015260586024820152600080516020615bd983398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613d6460c0850160a08601615b66565b6001600160401b03166000613d7b600d6001614b54565b613d8b60e0880160c08901615b66565b6001600160401b0316901b600d613da460186001614b54565b613daf906001614b54565b613db99190614b54565b601b901b1717179050613e14613dd26080860186615416565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92505050610100870135846131f5565b613e875760405162461bcd60e51b815260206004820152604a6024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b613ede613e976020860186615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a0135925090506131f5565b613f3e5760405162461bcd60e51b815260206004820152603d6024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b6049613f96613f506040870187615416565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610100870135610160880135846131f5565b6140085760405162461bcd60e51b81526020600482015260496024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b506140606140196060860186615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016086013561014087013560096131f5565b6140cb5760405162461bcd60e51b81526020600482015260426024820152600080516020615bd983398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b60006140de610100860160e08701615b66565b6001600160401b03166140f360046001614b54565b600e901b179050600061413888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471092505050565b90506141886141478780615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016088013583856131f5565b6141f45760405162461bcd60e51b81526020600482015260436024820152600080516020615bd983398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610c648260018151811061325e5761325e61545c565b6000610c648260038151811061325e5761325e61545c565b600060206135a28361012001516146a9565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000007735940006001600160401b0316846001600160401b031611156142b857507f00000000000000000000000000000000000000000000000000000007735940006142bb565b50825b60408051808201909152600080825260208201526142d98286615736565b6001600160401b0390811682526034805484926000916142fb91859116615b83565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061432d8285602001516135c4565b602082015260028460600151600281111561434a5761434a614d76565b1461436c576039805490600061435f83615bae565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561441157614411614d76565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906145109084906001600160401b0316615b83565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561457c57506020845161457a919061570e565b155b61460b5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b8551811161469f5761462f60028561570e565b614662578151600052808601516020526020826040600060026107d05a03fa61465757600080fd5b60028404935061468d565b8086015160005281516020526020826040600060026107d05a03fa61468657600080fd5b6002840493505b614698602082614b54565b905061461c565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b600080600283516147219190615722565b90506000816001600160401b0381111561473d5761473d614f83565b604051908082528060200260200182016040528015614766578160200160208202803683370190505b50905060005b8281101561486d57600285614781838361577f565b815181106147915761479161545c565b6020026020010151868360026147a7919061577f565b6147b2906001614b54565b815181106147c2576147c261545c565b60200260200101516040516020016147e4929190918252602082015260400190565b60408051601f19818403018152908290526147fe91615808565b602060405180830381855afa15801561481b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061483e91906153fd565b8282815181106148505761485061545c565b602090810291909101015280614865816154e2565b91505061476c565b50614879600283615722565b91505b81156149995760005b828110156149865760028261489a838361577f565b815181106148aa576148aa61545c565b6020026020010151838360026148c0919061577f565b6148cb906001614b54565b815181106148db576148db61545c565b60200260200101516040516020016148fd929190918252602082015260400190565b60408051601f198184030181529082905261491791615808565b602060405180830381855afa158015614934573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061495791906153fd565b8282815181106149695761496961545c565b60209081029190910101528061497e816154e2565b915050614885565b50614992600283615722565b915061487c565b806000815181106149ac576149ac61545c565b602002602001015192505050919050565b60606149cc84846000856149d4565b949350505050565b606082471015614a355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614a8c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614aa89190615808565b60006040518083038185875af1925050503d8060008114614ae5576040519150601f19603f3d011682016040523d82523d6000602084013e614aea565b606091505b5091509150614afa828286614b05565b979650505050505050565b60608315614b145750816135dc565b825115614b245782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615bc5565b634e487b7160e01b600052601160045260246000fd5b60008219821115614b6757614b67614b3e565b500190565b6001600160401b0381168114611fb857600080fd5b8035614b8c81614b6c565b919050565b60008060408385031215614ba457600080fd5b823591506020830135614bb681614b6c565b809150509250929050565b600060408284031215614bd357600080fd5b50919050565b60008083601f840112614beb57600080fd5b5081356001600160401b03811115614c0257600080fd5b6020830191508360208260051b8501011115614c1d57600080fd5b9250929050565b60008060008060008060008060a0898b031215614c4057600080fd5b8835614c4b81614b6c565b975060208901356001600160401b0380821115614c6757600080fd5b614c738c838d01614bc1565b985060408b0135915080821115614c8957600080fd5b614c958c838d01614bd9565b909850965060608b0135915080821115614cae57600080fd5b614cba8c838d01614bd9565b909650945060808b0135915080821115614cd357600080fd5b50614ce08b828c01614bd9565b999c989b5096995094979396929594505050565b60008083601f840112614d0657600080fd5b5081356001600160401b03811115614d1d57600080fd5b602083019150836020828501011115614c1d57600080fd5b60008060208385031215614d4857600080fd5b82356001600160401b03811115614d5e57600080fd5b614d6a85828601614cf4565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614daa57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c648284614d8c565b600060208284031215614dce57600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614e166060840182614d8c565b5092915050565b600080600080600060608688031215614e3557600080fd5b85356001600160401b0380821115614e4c57600080fd5b614e5889838a01614cf4565b90975095506020880135915080821115614e7157600080fd5b50614e7e88828901614cf4565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614eac57600080fd5b8835614eb781614b6c565b975060208901356001600160401b0380821115614ed357600080fd5b614edf8c838d01614bd9565b909950975060408b0135915080821115614ef857600080fd5b614f048c838d01614bc1565b965060608b0135915080821115614cae57600080fd5b6001600160a01b0381168114611fb857600080fd5b8035614b8c81614f1a565b60008060408385031215614f4d57600080fd5b8235614f5881614f1a565b946020939093013593505050565b600060208284031215614f7857600080fd5b81356135dc81614f1a565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614fbc57614fbc614f83565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fea57614fea614f83565b604052919050565b60006001600160401b0382111561500b5761500b614f83565b5060051b60200190565b600082601f83011261502657600080fd5b8135602061503b61503683614ff2565b614fc2565b82815260059290921b8401810191818101908684111561505a57600080fd5b8286015b84811015615075578035835291830191830161505e565b509695505050505050565b60008060006060848603121561509557600080fd5b83356001600160401b03808211156150ac57600080fd5b818601915086601f8301126150c057600080fd5b813560206150d061503683614ff2565b82815260059290921b8401810191818101908a8411156150ef57600080fd5b948201945b8386101561511657853561510781614f1a565b825294820194908201906150f4565b9750508701359250508082111561512c57600080fd5b5061513986828701615015565b92505061514860408501614f2f565b90509250925092565b60008060008060008060008060008060c08b8d03121561517057600080fd5b6151798b614b81565b995060208b01356001600160401b038082111561519557600080fd5b6151a18e838f01614bc1565b9a5060408d01359150808211156151b757600080fd5b6151c38e838f01614bd9565b909a50985060608d01359150808211156151dc57600080fd5b6151e88e838f01614bd9565b909850965060808d013591508082111561520157600080fd5b61520d8e838f01614bd9565b909650945060a08d013591508082111561522657600080fd5b506152338d828e01614bd9565b915080935050809150509295989b9194979a5092959850565b60006020828403121561525e57600080fd5b815180151581146135dc57600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6020808252606f908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520666f60608201527f722074696d657374616d70206166746572206d6f7374526563656e745769746860808201526e064726177616c54696d657374616d7608c1b60a082015260c00190565b60006020828403121561540f57600080fd5b5051919050565b6000808335601e1984360301811261542d57600080fd5b8301803591506001600160401b0382111561544757600080fd5b602001915036819003821315614c1d57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561548457600080fd5b813564ffffffffff811681146135dc57600080fd5b6000808335601e198436030181126154b057600080fd5b8301803591506001600160401b038211156154ca57600080fd5b6020019150600581901b3603821315614c1d57600080fd5b60006000198214156154f6576154f6614b3e565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561559257818101518382015260200161557a565b838111156121435750506000910152565b600081518084526155bb816020860160208601615577565b601f01601f19169290920160200192915050565b6080815260006155e360808301888a61554e565b82810360208401526155f581886155a3565b9050828103604084015261560a81868861554e565b915050826060830152979650505050505050565b6020815260006149cc60208301848661554e565b600080821280156001600160ff1b038490038513161561565457615654614b3e565b600160ff1b839003841281161561566d5761566d614b3e565b50500190565b60006001600160ff1b038184138284138082168684048611161561569957615699614b3e565b600160ff1b60008712828116878305891216156156b8576156b8614b3e565b600087129250878205871284841616156156d4576156d4614b3e565b878505871281841616156156ea576156ea614b3e565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b60008261571d5761571d6156f8565b500690565b600082615731576157316156f8565b500490565b60006001600160401b038381169083168181101561575657615756614b3e565b039392505050565b6000823561017e1983360301811261577557600080fd5b9190910192915050565b600081600019048311821515161561579957615799614b3e565b500290565b6000828210156157b0576157b0614b3e565b500390565b80516020808301519190811015614bd35760001960209190910360031b1b16919050565b600083516157eb818460208801615577565b6001600160801b0319939093169190920190815260100192915050565b60008251615775818460208701615577565b600082601f83011261582b57600080fd5b81356001600160401b0381111561584457615844614f83565b615857601f8201601f1916602001614fc2565b81815284602083860101111561586c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610180823603121561589c57600080fd5b6158a4614f99565b82356001600160401b03808211156158bb57600080fd5b6158c73683870161581a565b835260208501359150808211156158dd57600080fd5b6158e93683870161581a565b6020840152604085013591508082111561590257600080fd5b61590e3683870161581a565b6040840152606085013591508082111561592757600080fd5b6159333683870161581a565b6060840152608085013591508082111561594c57600080fd5b506159593682860161581a565b60808301525061596b60a08401614b81565b60a082015261597c60c08401614b81565b60c082015261598d60e08401614b81565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b6000602082840312156159d757600080fd5b81516135dc81614b6c565b600181815b80851115615a1d578160001904821115615a0357615a03614b3e565b80851615615a1057918102915b93841c93908002906159e7565b509250929050565b600082615a3457506001610c64565b81615a4157506000610c64565b8160018114615a575760028114615a6157615a7d565b6001915050610c64565b60ff841115615a7257615a72614b3e565b50506001821b610c64565b5060208310610133831016604e8410600b8410161715615aa0575081810a610c64565b615aaa83836159e2565b8060001904821115615abe57615abe614b3e565b029392505050565b60006135dc8383615a25565b60006001600160401b0380831681851681830481118215151615615af857615af8614b3e565b02949350505050565b60006001600160401b0380841680615b1b57615b1b6156f8565b92169190910492915050565b60008083128015600160ff1b850184121615615b4557615b45614b3e565b6001600160ff1b0384018313811615615b6057615b60614b3e565b50500390565b600060208284031215615b7857600080fd5b81356135dc81614b6c565b60006001600160401b03808316818516808303821115615ba557615ba5614b3e565b01949350505050565b600081615bbd57615bbd614b3e565b506000190190565b6020815260006135dc60208301846155a356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a26469706673582212208b4d7c5233e2105019f597ee43bdf138a0116104b121f1680aed4a6689dba8aa64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x95401dc811bb5740090279ba06cfa8fcf6113778":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9d4454b023096f34b160d6b654540c56a1f81688","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0x1c"}},"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea264697066735822122017afad02485c63962f908328bdc40450b379dd341ed5366281679a74acfe19dd64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x998abeb3e57409262ae5b751f60747921b33613e":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0x1c","0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0x9635f643e140090a9a8dcd712ed6285858cebef","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x4826533b4897376654bb4d4ad88b7fafd0c98528","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xde0b6b3a764000009635f643e140090a9a8dcd712ed6285858cebef"}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea264697066735822122007844e02ac26baddeecfcdcead22b5de822753bb8b1ae06a0e060d08cd944b1d64736f6c634300080c0033","storage":{}},"0x9d4454b023096f34b160d6b654540c56a1f81688":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610ec7565b610268565b6040516100d89190610f43565b60405180910390f35b6100f46100ef366004610fb7565b6103ca565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004610fea565b610410565b005b6100f4610138366004611005565b610534565b6101647f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c81565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004610fea565b6105ba565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c1366004610fb7565b610601565b6040516100d89190611048565b61018f6101e1366004610fb7565b61076b565b6101286101f4366004610ec7565b6107e2565b610201600081565b6040519081526020016100d8565b61024061021d366004611080565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004610fea565b6108f0565b6060336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146102bb5760405162461bcd60e51b81526004016102b2906110aa565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d661111d565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103bf57600085858381811061032157610321611133565b919091013560f81c60008181526003602052604090205490925090508061035a5760405162461bcd60e51b81526004016102b290611149565b60006103658361090f565b905061037c89846103776001856111b4565b610a08565b8085858151811061038f5761038f611133565b602002602001019063ffffffff16908163ffffffff168152505050505080806103b7906111d9565b915050610305565b5090505b9392505050565b60408051808201909152600080825260208201526103e88383610a92565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c16146104585760405162461bcd60e51b81526004016102b2906110aa565b60ff8116600090815260036020526040902054156104d25760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff8088168552925290912080549091841690811061058157610581611133565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105d782610aea565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b6060600061060f8484610b2c565b905060008163ffffffff1667ffffffffffffffff8111156106325761063261111d565b60405190808252806020026020018201604052801561065b578160200160208202803683370190505b50905060005b8263ffffffff168110156107625761067a868287610c61565b82828151811061068c5761068c611133565b6020026020010181815250506000801b8282815181106106ae576106ae611133565b602002602001015114156107505760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b8061075a816111d9565b915050610661565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff84169081106107a9576107a9611133565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f000000000000000000000000851356ae760d987e095750cceb3bc6014560891c161461082a5760405162461bcd60e51b81526004016102b2906110aa565b60005b818110156108ea57600083838381811061084957610849611133565b919091013560f81c6000818152600360205260409020549092509050806108825760405162461bcd60e51b81526004016102b290611149565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff16906108b084610d38565b905060006108be8583610d72565b90508089146108d2576108d2818685610a08565b505050505080806108e2906111d9565b91505061082d565b50505050565b60006108fb82610aea565b54600160201b900463ffffffff1692915050565b60008061091b83610aea565b805490915060009061093b90600160201b900463ffffffff1660016111f4565b9050610948848383610d9c565b60ff84166000908152600260205260408120906109666001846111b4565b63ffffffff1681526020810191909152604001600020546103c35760ff841660009081526002602052604081209061099f6001846111b4565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b6000610a148383610a92565b9050610a2283838387610e3c565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610ac360018361121c565b81548110610ad357610ad3611133565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610b0a60018361121c565b81548110610b1a57610b1a611133565b90600052602060002001915050919050565b60ff8216600090815260036020526040812054805b8015610bd45760ff85166000908152600360205260408120610b6460018461121c565b81548110610b7457610b74611133565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610bc15760200151925061040a915050565b5080610bcc81611233565b915050610b41565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054805b8015610d2c5760ff8616600090815260026020908152604080832063ffffffff891684529091528120610cbb60018461121c565b81548110610ccb57610ccb611133565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090861610610d19576020015192506103c3915050565b5080610d2481611233565b915050610c87565b50600095945050505050565b600080610d4483610aea565b8054909150600090610d6590600190600160201b900463ffffffff166111b4565b90506103c3848383610d9c565b600080610d7f8484610a92565b6001810154909150610d948585846000610e3c565b949350505050565b81544363ffffffff90811691161415610dd357815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b81544363ffffffff90811691161415610e5b57600182018190556108ea565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610edc57600080fd5b83359250602084013567ffffffffffffffff80821115610efb57600080fd5b818601915086601f830112610f0f57600080fd5b813581811115610f1e57600080fd5b876020828501011115610f3057600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835163ffffffff1683529284019291840191600101610f5f565b50909695505050505050565b803560ff81168114610f9e57600080fd5b919050565b803563ffffffff81168114610f9e57600080fd5b60008060408385031215610fca57600080fd5b610fd383610f8d565b9150610fe160208401610fa3565b90509250929050565b600060208284031215610ffc57600080fd5b6103c382610f8d565b60008060006060848603121561101a57600080fd5b61102384610f8d565b925061103160208501610fa3565b915061103f60408501610fa3565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835183529284019291840191600101611064565b6000806040838503121561109357600080fd5b61109c83610f8d565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff838116908316818110156111d1576111d161119e565b039392505050565b60006000198214156111ed576111ed61119e565b5060010190565b600063ffffffff8083168185168083038211156112135761121361119e565b01949350505050565b60008282101561122e5761122e61119e565b500390565b6000816112425761124261119e565b50600019019056fea2646970667358221220f167c1173c2fadc03081d6adc0fb43333e24a986b19ef4494e81b67087aa639464736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x9e545e3c0baab3e08cdfd552c960a1050f373042":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea26469706673582212203e4551a42c3a3731dde4a217932f12275531cdf7f6c758d89baf0744bdd5fd5064736f6c634300080c0033","storage":{}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea26469706673582212203e4551a42c3a3731dde4a217932f12275531cdf7f6c758d89baf0744bdd5fd5064736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x1e","0x97":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb306bf915c4d645ff596e518faf3f9669b97016","0x3c876e28dbfaed463c44c6728600e9707c51030dffb0c7a216bf5ab4af970aa9":"0x0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102275760003560e01c806394f649dd11610130578063c6656702116100b8578063df5cf7231161007c578063df5cf72314610596578063e7a050aa146105bd578063f2fde38b146105d0578063f698da25146105e3578063fabc1cbc146105eb57600080fd5b8063c665670214610520578063cbc2bd6214610533578063cd293f6f14610546578063cf756fdf14610570578063df5b35471461058357600080fd5b8063b43b514b116100ff578063b43b514b146104b1578063b5d8b5b8146104c4578063c3c6b3a9146104d7578063c4623ea1146104fa578063c608c7f31461050d57600080fd5b806394f649dd14610433578063967fc0d2146104545780639b4da03d14610467578063b13442711461048a57600080fd5b80635c975abb116101b35780637ecebe00116101825780637ecebe00146103b3578063886f1195146103d35780638b8aac3c146103e65780638c80d4e51461040f5780638da5cb5b1461042257600080fd5b80635c975abb14610355578063663c1de41461035d578063715018a6146103805780637a7e0d921461038857600080fd5b80634665bcda116101fa5780634665bcda146102a157806348825e94146102e05780634e5a426314610307578063595c6a671461031a5780635ac86ab71461032257600080fd5b806310d67a2f1461022c578063136439dd1461024157806320606b701461025457806332e89ace1461028e575b600080fd5b61023f61023a366004612b4a565b6105fe565b005b61023f61024f366004612b67565b6106ba565b61027b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61027b61029c366004612c00565b6107f9565b6102c87f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6040516001600160a01b039091168152602001610285565b61027b7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61023f610315366004612ced565b610ae7565b61023f610b1f565b610345610330366004612d26565b609854600160ff9092169190911b9081161490565b6040519015158152602001610285565b60985461027b565b61034561036b366004612b4a565b60d16020526000908152604090205460ff1681565b61023f610be6565b61027b610396366004612d49565b60cd60209081526000928352604080842090915290825290205481565b61027b6103c1366004612b4a565b60ca6020526000908152604090205481565b6097546102c8906001600160a01b031681565b61027b6103f4366004612b4a565b6001600160a01b0316600090815260ce602052604090205490565b61023f61041d366004612d77565b610bfa565b6033546001600160a01b03166102c8565b610446610441366004612b4a565b610c53565b604051610285929190612e2c565b60cb546102c8906001600160a01b031681565b610345610475366004612b4a565b60d36020526000908152604090205460ff1681565b6102c87f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b61027b6104bf366004612fd5565b610dd3565b61023f6104d23660046130f0565b610e20565b6103456104e5366004612b67565b60cf6020526000908152604090205460ff1681565b61023f610508366004613132565b610f94565b61023f61051b366004613183565b610fe8565b61023f61052e366004612b4a565b6110a0565b6102c86105413660046131d6565b6110b1565b610559610554366004612fd5565b6110e9565b604080519215158352602083019190915201610285565b61023f61057e366004613132565b61117d565b61023f610591366004613202565b6112b1565b6102c87f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b61027b6105cb366004612d77565b6114da565b61023f6105de366004612b4a565b6115a3565b61027b611619565b61023f6105f9366004612b67565b611657565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610675919061326e565b6001600160a01b0316336001600160a01b0316146106ae5760405162461bcd60e51b81526004016106a59061328b565b60405180910390fd5b6106b7816117b3565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906132d5565b6107425760405162461bcd60e51b81526004016106a5906132f2565b609854818116146107bb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156108505760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156108a35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b60026065556001600160a01b038816600090815260d3602052604090205460ff161561094a5760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a4016106a5565b428410156109cc5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a4016106a5565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a84611619565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610ac78882886118aa565b610ad3888c8c8c611a69565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610b115760405162461bcd60e51b81526004016106a59061333a565b610b1b8282611c38565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8b91906132d5565b610ba75760405162461bcd60e51b81526004016106a5906132f2565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610bee611ca6565b610bf86000611d00565b565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610c425760405162461bcd60e51b81526004016106a5906133a4565b610c4d838383611d52565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c8b57610c8b612b90565b604051908082528060200260200182016040528015610cb4578160200160208202803683370190505b50905060005b82811015610d45576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610cf957610cf9613402565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610d3257610d32613402565b6020908102919091010152600101610cba565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610dc157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610da3575b50505050509150935093505050915091565b80516020808301516040808501516060860151608087015160a08801519351600097610e03979096959101613418565b604051602081830303815290604052805190602001209050919050565b60cb546001600160a01b03163314610e4a5760405162461bcd60e51b81526004016106a59061333a565b8060005b81811015610c4d5760d16000858584818110610e6c57610e6c613402565b9050602002016020810190610e819190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff1615610f8c57600060d16000868685818110610ebb57610ebb613402565b9050602002016020810190610ed09190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610f2b57610f2b613402565b9050602002016020810190610f409190612b4a565b6040516001600160a01b03909116815260200160405180910390a1610f8c848483818110610f7057610f70613402565b9050602002016020810190610f859190612b4a565b6000611c38565b600101610e4e565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91614610fdc5760405162461bcd60e51b81526004016106a5906133a4565b610c4d84848484611eae565b336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146110305760405162461bcd60e51b81526004016106a5906133a4565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050505050565b6110a8611ca6565b6106b78161213b565b60ce60205281600052604060002081815481106110cd57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080336001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916146111345760405162461bcd60e51b81526004016106a5906133a4565b600061113f84610dd3565b600081815260cf60205260408120549192509060ff16156111745750600081815260cf60205260409020805460ff1916905560015b92509050915091565b600054610100900460ff161580801561119d5750600054600160ff909116105b806111b75750303b1580156111b7575060005460ff166001145b61121a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a5565b6000805460ff19166001179055801561123d576000805461ff0019166101001790555b6112456121a4565b60c955611252838361223b565b61125b85611d00565b6112648461213b565b80156112aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146112db5760405162461bcd60e51b81526004016106a59061333a565b8281146113645760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a4016106a5565b8260005b818110156114d25760d1600087878481811061138657611386613402565b905060200201602081019061139b9190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff166114ca57600160d160008888858181106113d4576113d4613402565b90506020020160208101906113e99190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe86868381811061144457611444613402565b90506020020160208101906114599190612b4a565b6040516001600160a01b03909116815260200160405180910390a16114ca86868381811061148957611489613402565b905060200201602081019061149e9190612b4a565b8585848181106114b0576114b0613402565b90506020020160208101906114c59190613491565b611c38565b600101611368565b505050505050565b6098546000908190600190811614156115315760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b600260655561159533868686611a69565b600160655595945050505050565b6115ab611ca6565b6001600160a01b0381166116105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a5565b6106b781611d00565b60007f0000000000000000000000000000000000000000000000000000000000007a6946141561164a575060c95490565b6116526121a4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce919061326e565b6001600160a01b0316336001600160a01b0316146116fe5760405162461bcd60e51b81526004016106a59061328b565b60985419811960985419161461177c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107ee565b6001600160a01b0381166118415760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106a5565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b156119c957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906118ea9086908690600401613506565b602060405180830381865afa158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b919061351f565b6001600160e01b031916146119c45760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a4016106a5565b505050565b826001600160a01b03166119dd8383612321565b6001600160a01b0316146119c45760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a4016106a5565b6001600160a01b038316600090815260d16020526040812054849060ff16611b0f5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a4016106a5565b611b246001600160a01b038516338786612345565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b979190613549565b9150611ba586858785611eae565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc916906328a573ae90606401600060405180830381600087803b158015611c1757600080fd5b505af1158015611c2b573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610bf85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611dc75760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f21000060648201526084016106a5565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611e595760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b60648201526084016106a5565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611ea157611e97858561239f565b6001915050611ea7565b60009150505b9392505050565b6001600160a01b038416611f2a5760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f20616464726573730000000000000060648201526084016106a5565b80611f965760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b60648201526084016106a5565b6001600160a01b03808516600090815260cd60209081526040808320938616835292905220546120a7576001600160a01b038416600090815260ce6020908152604090912054106120685760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a4016106a5565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906120de908490613578565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b031615801561225c57506001600160a01b03821615155b6122de5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610b1b826117b3565b60008060006123308585612591565b9150915061233d81612601565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c4d9085906127bc565b6001600160a01b038216600090815260ce6020526040812054905b818110156124ba576001600160a01b03848116600090815260ce60205260409020805491851691839081106123f1576123f1613402565b6000918252602090912001546001600160a01b031614156124b2576001600160a01b038416600090815260ce60205260409020805461243290600190613590565b8154811061244257612442613402565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061247f5761247f613402565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506124ba565b6001016123ba565b818114156125425760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a4016106a5565b6001600160a01b038416600090815260ce60205260409020805480612569576125696135a7565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156125c85760208301516040840151606085015160001a6125bc8782858561288e565b945094505050506125fa565b8251604014156125f257602083015160408401516125e786838361297b565b9350935050506125fa565b506000905060025b9250929050565b6000816004811115612615576126156135bd565b141561261e5750565b6001816004811115612632576126326135bd565b14156126805760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106a5565b6002816004811115612694576126946135bd565b14156126e25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106a5565b60038160048111156126f6576126f66135bd565b141561274f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106a5565b6004816004811115612763576127636135bd565b14156106b75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106a5565b6000612811826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129b49092919063ffffffff16565b8051909150156119c4578080602001905181019061282f91906132d5565b6119c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128c55750600090506003612972565b8460ff16601b141580156128dd57508460ff16601c14155b156128ee5750600090506004612972565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612942573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661296b57600060019250925050612972565b9150600090505b94509492505050565b6000806001600160ff1b0383168161299860ff86901c601b613578565b90506129a68782888561288e565b935093505050935093915050565b60606129c384846000856129cb565b949350505050565b606082471015612a2c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a5565b6001600160a01b0385163b612a835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a5565b600080866001600160a01b03168587604051612a9f91906135d3565b60006040518083038185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b5091509150612af1828286612afc565b979650505050505050565b60608315612b0b575081611ea7565b825115612b1b5782518084602001fd5b8160405162461bcd60e51b81526004016106a591906135ef565b6001600160a01b03811681146106b757600080fd5b600060208284031215612b5c57600080fd5b8135611ea781612b35565b600060208284031215612b7957600080fd5b5035919050565b8035612b8b81612b35565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612bc957612bc9612b90565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bf857612bf8612b90565b604052919050565b60008060008060008060c08789031215612c1957600080fd5b8635612c2481612b35565b9550602087810135612c3581612b35565b9550604088013594506060880135612c4c81612b35565b93506080880135925060a088013567ffffffffffffffff80821115612c7057600080fd5b818a0191508a601f830112612c8457600080fd5b813581811115612c9657612c96612b90565b612ca8601f8201601f19168501612bcf565b91508082528b84828501011115612cbe57600080fd5b80848401858401376000848284010152508093505050509295509295509295565b80151581146106b757600080fd5b60008060408385031215612d0057600080fd5b8235612d0b81612b35565b91506020830135612d1b81612cdf565b809150509250929050565b600060208284031215612d3857600080fd5b813560ff81168114611ea757600080fd5b60008060408385031215612d5c57600080fd5b8235612d6781612b35565b91506020830135612d1b81612b35565b600080600060608486031215612d8c57600080fd5b8335612d9781612b35565b92506020840135612da781612b35565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015612df15781516001600160a01b031687529582019590820190600101612dcc565b509495945050505050565b600081518084526020808501945080840160005b83811015612df157815187529582019590820190600101612e10565b604081526000612e3f6040830185612db8565b8281036020840152612e518185612dfc565b95945050505050565b600067ffffffffffffffff821115612e7457612e74612b90565b5060051b60200190565b600082601f830112612e8f57600080fd5b81356020612ea4612e9f83612e5a565b612bcf565b82815260059290921b84018101918181019086841115612ec357600080fd5b8286015b84811015612ee7578035612eda81612b35565b8352918301918301612ec7565b509695505050505050565b600082601f830112612f0357600080fd5b81356020612f13612e9f83612e5a565b82815260059290921b84018101918181019086841115612f3257600080fd5b8286015b84811015612ee75780358352918301918301612f36565b600060408284031215612f5f57600080fd5b6040516040810181811067ffffffffffffffff82111715612f8257612f82612b90565b6040529050808235612f9381612b35565b815260208301356bffffffffffffffffffffffff81168114612fb457600080fd5b6020919091015292915050565b803563ffffffff81168114612b8b57600080fd5b600060208284031215612fe757600080fd5b813567ffffffffffffffff80821115612fff57600080fd5b9083019060e0828603121561301357600080fd5b61301b612ba6565b82358281111561302a57600080fd5b61303687828601612e7e565b82525060208301358281111561304b57600080fd5b61305787828601612ef2565b60208301525061306960408401612b80565b604082015261307b8660608501612f4d565b606082015261308c60a08401612fc1565b608082015261309d60c08401612b80565b60a082015295945050505050565b60008083601f8401126130bd57600080fd5b50813567ffffffffffffffff8111156130d557600080fd5b6020830191508360208260051b85010111156125fa57600080fd5b6000806020838503121561310357600080fd5b823567ffffffffffffffff81111561311a57600080fd5b613126858286016130ab565b90969095509350505050565b6000806000806080858703121561314857600080fd5b843561315381612b35565b9350602085013561316381612b35565b9250604085013561317381612b35565b9396929550929360600135925050565b6000806000806080858703121561319957600080fd5b84356131a481612b35565b935060208501356131b481612b35565b92506040850135915060608501356131cb81612b35565b939692955090935050565b600080604083850312156131e957600080fd5b82356131f481612b35565b946020939093013593505050565b6000806000806040858703121561321857600080fd5b843567ffffffffffffffff8082111561323057600080fd5b61323c888389016130ab565b9096509450602087013591508082111561325557600080fd5b50613262878288016130ab565b95989497509550505050565b60006020828403121561328057600080fd5b8151611ea781612b35565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156132e757600080fd5b8151611ea781612cdf565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60e08152600061342b60e0830189612db8565b828103602084015261343d8189612dfc565b6001600160a01b0397881660408501528651881660608501526020909601516bffffffffffffffffffffffff166080840152505063ffffffff9290921660a083015290921660c09092019190915292915050565b6000602082840312156134a357600080fd5b8135611ea781612cdf565b60005b838110156134c95781810151838201526020016134b1565b83811115610c4d5750506000910152565b600081518084526134f28160208601602086016134ae565b601f01601f19169290920160200192915050565b8281526040602082015260006129c360408301846134da565b60006020828403121561353157600080fd5b81516001600160e01b031981168114611ea757600080fd5b60006020828403121561355b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561358b5761358b613562565b500190565b6000828210156135a2576135a2613562565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516135e58184602087016134ae565b9190910192915050565b602081526000611ea760208301846134da56fea264697066735822122060f2550b039c3491d4eaf0229131ce22858686cdf96c07928dc0e113d756d35e64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa82ff9afd8f496c3d6ac40e2a0f282e47488cfc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x4c5859f0f772848b2d91f1d83e2fe57935348029","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690"}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103785760003560e01c806360d7faed116101d3578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b01461097d578063f2fde38b14610990578063f698da25146109a3578063fabc1cbc146109ab57600080fd5b8063cf80873e14610936578063da8be86414610957578063eea9064b1461096a57600080fd5b8063c488375a116100de578063c488375a14610853578063c5e480db14610873578063c94b511114610919578063ca661c041461092c57600080fd5b8063b7f06ebe146107f9578063bb45fef21461081c578063c448feb81461084a57600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461078457806399be81c81461079f578063a1788484146107b2578063b1344271146107d257600080fd5b8063886f1195146107405780638da5cb5b14610753578063900413471461076457600080fd5b80636d70f7ae116101ad5780636d70f7ae146106e7578063715018a6146106fa578063778e55f3146107025780637f5480711461072d57600080fd5b806360d7faed14610698578063635bbd10146106ab57806365da1264146106be57600080fd5b806329c77d4f116102ad5780634fc40b611161024b5780635ac86ab7116102255780635ac86ab71461062e5780635c975abb146106515780635cfe8d2c146106595780635f966f141461066c57600080fd5b80634fc40b6114610609578063595c6a6714610613578063597b36da1461061b57600080fd5b80633cdeb5e0116102875780633cdeb5e0146105695780633e28391d1461059857806343377382146105bb5780634665bcda146105e257600080fd5b806329c77d4f146104f7578063334043961461051757806339b70e381461052a57600080fd5b8063136439dd1161031a5780631bbce091116102f45780631bbce0911461049757806320606b70146104aa57806322bf40e4146104d157806328a573ae146104e457600080fd5b8063136439dd146104385780631522bf021461044b578063169283651461045e57600080fd5b80630dd8dd02116103565780630dd8dd02146103dd5780630f589e59146103fd57806310d67a2f14610412578063132d49671461042557600080fd5b80630449ca391461037d57806304a4f979146103a35780630b9f487a146103ca575b600080fd5b61039061038b366004614adb565b6109be565b6040519081526020015b60405180910390f35b6103907f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6103906103d8366004614b41565b610a43565b6103f06103eb366004614adb565b610b05565b60405161039a9190614b9c565b61041061040b366004614c39565b610e6e565b005b610410610420366004614c8c565b610fbe565b610410610433366004614cb0565b611071565b610410610446366004614cf1565b611128565b610410610459366004614d0a565b611267565b61039061046c366004614c8c565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103906104a5366004614cb0565b61127b565b6103907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6104106104df366004614d75565b6112a9565b6104106104f2366004614cb0565b6113ed565b610390610505366004614c8c565b609b6020526000908152604090205481565b610410610525366004614e1c565b61149d565b6105517f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b03909116815260200161039a565b610551610577366004614c8c565b6001600160a01b039081166000908152609960205260409020600101541690565b6105ab6105a6366004614c8c565b6115da565b604051901515815260200161039a565b6103907f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6105517f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6103906213c68081565b6104106115fa565b61039061062936600461513b565b6116c1565b6105ab61063c366004615177565b606654600160ff9092169190911b9081161490565b606654610390565b6104106106673660046151ed565b6116f1565b61055161067a366004614c8c565b6001600160a01b039081166000908152609960205260409020541690565b6104106106a636600461534d565b61199c565b6104106106b9366004614cf1565b611a37565b6105516106cc366004614c8c565b609a602052600090815260409020546001600160a01b031681565b6105ab6106f5366004614c8c565b611a48565b610410611a68565b6103906107103660046153dc565b609860209081526000928352604080842090915290825290205481565b61041061073b3660046154bd565b611a7c565b606554610551906001600160a01b031681565b6033546001600160a01b0316610551565b61077761077236600461554d565b611b81565b60405161039a91906155d7565b61055173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6104106107ad3660046155ea565b611c5b565b6103906107c0366004614c8c565b609f6020526000908152604090205481565b6105517f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b6105ab610807366004614cf1565b609e6020526000908152604090205460ff1681565b6105ab61082a36600461561f565b609c60209081526000928352604080842090915290825290205460ff1681565b610390609d5481565b610390610861366004614c8c565b60a16020526000908152604090205481565b6108e3610881366004614c8c565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff169082015260600161039a565b61039061092736600461564b565b611d2d565b61039062034bc081565b610949610944366004614c8c565b611de6565b60405161039a9291906156cc565b6103f0610965366004614c8c565b61219e565b6104106109783660046156f1565b612662565b61041061098b366004615749565b61266e565b61041061099e366004614c8c565b6126ff565b610390612775565b6104106109b9366004614cf1565b6127b3565b609d54600090815b83811015610a3b57600060a160008787858181106109e6576109e6615765565b90506020020160208101906109fb9190614c8c565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811115610a2a578092505b50610a3481615791565b90506109c6565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610ac1612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610b3a5760405162461bcd60e51b8152600401610b31906157ac565b60405180910390fd5b6000836001600160401b03811115610b5457610b54614ebe565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610e6357868682818110610bb857610bb8615765565b9050602002810190610bca91906157e3565b610bd8906020810190615803565b9050878783818110610bec57610bec615765565b9050602002810190610bfe91906157e3565b610c089080615803565b905014610c7d5760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610b31565b33878783818110610c9057610c90615765565b9050602002810190610ca291906157e3565b610cb3906060810190604001614c8c565b6001600160a01b031614610d2f5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610b31565b610e343383898985818110610d4657610d46615765565b9050602002810190610d5891906157e3565b610d69906060810190604001614c8c565b8a8a86818110610d7b57610d7b615765565b9050602002810190610d8d91906157e3565b610d979080615803565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610ddd57610ddd615765565b9050602002810190610def91906157e3565b610dfd906020810190615803565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290f92505050565b838281518110610e4657610e46615765565b602090810291909101015280610e5b81615791565b915050610b9e565b509095945050505050565b336000908152609960205260409020546001600160a01b031615610f085760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610b31565b610f123384612ecf565b604080518082019091526060815260006020820152610f34338083600061316b565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610f6d919061584c565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610fb092919061589e565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103591906158cd565b6001600160a01b0316336001600160a01b0316146110655760405162461bcd60e51b8152600401610b31906158ea565b61106e81613510565b50565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614806110d05750336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316145b6110ec5760405162461bcd60e51b8152600401610b3190615934565b6110f5836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613607565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190615991565b6111b05760405162461bcd60e51b8152600401610b31906159ae565b606654818116146112295760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b61126f613682565b611121848484846136dc565b6001600160a01b0383166000908152609b60205260408120546112a085828686611d2d565b95945050505050565b600054610100900460ff16158080156112c95750600054600160ff909116105b806112e35750303b1580156112e3575060005460ff166001145b6113465760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b31565b6000805460ff191660011790558015611369576000805461ff0019166101001790555b6113738888613902565b61137b6139e8565b60975561138789613a7f565b61139086613ad1565b61139c858585856136dc565b80156113e2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916148061144c5750336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316145b6114685760405162461bcd60e51b8152600401610b3190615934565b611471836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613bcb565b606654600290600490811614156114c65760405162461bcd60e51b8152600401610b31906157ac565b600260c95414156115195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c95560005b888110156115c9576115b98a8a8381811061153e5761153e615765565b905060200281019061155091906159f6565b89898481811061156257611562615765565b90506020028101906115749190615803565b89898681811061158657611586615765565b9050602002013588888781811061159f5761159f615765565b90506020020160208101906115b49190615a0c565b613c46565b6115c281615791565b9050611521565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190615991565b6116825760405162461bcd60e51b8152600401610b31906159ae565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116d49190615a9d565b604051602081830303815290604052805190602001209050919050565b60005b815181101561199857600082828151811061171157611711615765565b602002602001015190506000807f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663cd293f6f846040518263ffffffff1660e01b815260040161176a9190615ab0565b60408051808303816000875af1158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac9190615b5c565b91509150811561198a576040808401516001600160a01b0381166000908152609f602052918220805491928291906117e383615791565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff16815260200187600001518152602001876020015181525090506000611863826116c1565b6000818152609e602052604090205490915060ff16156118f95760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610b31565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906119449083908590615b8a565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506116f4565b5050565b606654600290600490811614156119c55760405162461bcd60e51b8152600401610b31906157ac565b600260c9541415611a185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c955611a2a8686868686613c46565b5050600160c95550505050565b611a3f613682565b61106e81613ad1565b6001600160a01b0390811660009081526099602052604090205416151590565b611a70613682565b611a7a6000613a7f565b565b4283602001511015611b005760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610b31565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611b3c8783888860200151611d2d565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611b6c9088908390614430565b611b788787868661316b565b50505050505050565b6060600082516001600160401b03811115611b9e57611b9e614ebe565b604051908082528060200260200182016040528015611bc7578160200160208202803683370190505b50905060005b8351811015610a3b576001600160a01b03851660009081526098602052604081208551909190869084908110611c0557611c05615765565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611c4057611c40615765565b6020908102919091010152611c5481615791565b9050611bcd565b611c6433611a48565b611ce65760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610b31565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611d2192919061589e565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611da3612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853909116906360f4062b90602401602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190615ba3565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9909116906394f649dd90602401600060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f129190810190615c17565b9150915060008313611f2957909590945092505050565b606080835160001415611fe3576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611f9e57611f9e615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611fd257611fd2615765565b602002602001018181525050612191565b8351611ff0906001615cd1565b6001600160401b0381111561200757612007614ebe565b604051908082528060200260200182016040528015612030578160200160208202803683370190505b50915081516001600160401b0381111561204c5761204c614ebe565b604051908082528060200260200182016040528015612075578160200160208202803683370190505b50905060005b845181101561210f5784818151811061209657612096615765565b60200260200101518382815181106120b0576120b0615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106120e2576120e2615765565b60200260200101518282815181106120fc576120fc615765565b602090810291909101015260010161207b565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516121349190615ce9565b8151811061214457612144615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600184516121749190615ce9565b8151811061218457612184615765565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156121ca5760405162461bcd60e51b8152600401610b31906157ac565b6121d3836115da565b6122535760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610b31565b61225c83611a48565b156122cf5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610b31565b6001600160a01b03831661234b5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610b31565b6001600160a01b038084166000818152609a60205260409020549091169033148061237e5750336001600160a01b038216145b806123a557506001600160a01b038181166000908152609960205260409020600101541633145b6124175760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610b31565b60008061242386611de6565b9092509050336001600160a01b0387161461247957826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516124fb576040805160008152602081019091529450612659565b81516001600160401b0381111561251457612514614ebe565b60405190808252806020026020018201604052801561253d578160200160208202803683370190505b50945060005b8251811015612657576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106125a3576125a3615765565b6020026020010151826000815181106125be576125be615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106125f0576125f0615765565b60200260200101518160008151811061260b5761260b615765565b60200260200101818152505061262489878b858561290f565b88848151811061263657612636615765565b6020026020010181815250505050808061264f90615791565b915050612543565b505b50505050919050565b6111233384848461316b565b61267733611a48565b6126f55760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610b31565b61106e3382612ecf565b612707613682565b6001600160a01b03811661276c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b31565b61106e81613a7f565b60007f0000000000000000000000000000000000000000000000000000000000007a694614156127a6575060975490565b6127ae6139e8565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a91906158cd565b6001600160a01b0316336001600160a01b03161461285a5760405162461bcd60e51b8152600401610b31906158ea565b6066541981196066541916146128d85760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161125c565b60006001600160a01b0386166129a65760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610b31565b8251612a305760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610b31565b60005b8351811015612ddd576001600160a01b03861615612a8957612a898688868481518110612a6257612a62615765565b6020026020010151868581518110612a7c57612a7c615765565b6020026020010151613607565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612ab957612ab9615765565b60200260200101516001600160a01b03161415612b82577f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031663beffbb8988858481518110612b1257612b12615765565b60200260200101516040518363ffffffff1660e01b8152600401612b4b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612b6557600080fd5b505af1158015612b79573d6000803e3d6000fd5b50505050612dd5565b846001600160a01b0316876001600160a01b03161480612c5457507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316639b4da03d858381518110612bde57612bde615765565b60200260200101516040518263ffffffff1660e01b8152600401612c1191906001600160a01b0391909116815260200190565b602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c529190615991565b155b612d205760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610b31565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316638c80d4e588868481518110612d6257612d62615765565b6020026020010151868581518110612d7c57612d7c615765565b60200260200101516040518463ffffffff1660e01b8152600401612da293929190615d00565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b505050505b600101612a33565b506001600160a01b0386166000908152609f60205260408120805491829190612e0583615791565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612e6d826116c1565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612ebb9083908590615b8a565b60405180910390a198975050505050505050565b6000612ede6020830183614c8c565b6001600160a01b03161415612f785760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610b31565b6213c680612f8c6060830160408401615d24565b63ffffffff1611156130415760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610b31565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff169061307d9060608401908401615d24565b63ffffffff1610156131135760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610b31565b6001600160a01b038216600090815260996020526040902081906131378282615d61565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611d2190849061584c565b606654600090600190811614156131945760405162461bcd60e51b8152600401610b31906157ac565b61319d856115da565b1561321a5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610b31565b61322384611a48565b6132a35760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610b31565b6001600160a01b038085166000908152609960205260409020600101541680158015906132d95750336001600160a01b03821614155b80156132ee5750336001600160a01b03861614155b1561345b57428460200151101561336d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156134075760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff19166001179055850151613448908890889085908890610a43565b905061345982828760000151614430565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806134ba88611de6565b9150915060005b82518110156113e257613508888a8584815181106134e1576134e1615765565b60200260200101518585815181106134fb576134fb615765565b6020026020010151613bcb565b6001016134c1565b6001600160a01b03811661359e5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b31565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061363e908490615ce9565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610fb093929190615d00565b6033546001600160a01b03163314611a7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b31565b8281146137645760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b31565b8260005b818110156138fa57600086868381811061378457613784615765565b90506020020160208101906137999190614c8c565b6001600160a01b038116600090815260a160205260408120549192508686858181106137c7576137c7615765565b90506020020135905062034bc081111561388b5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610b31565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806138f390615791565b9050613768565b505050505050565b6065546001600160a01b031615801561392357506001600160a01b03821615155b6139a55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261199882613510565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115613b8a5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610b31565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613c02908490615cd1565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610fb093929190615d00565b6000613c5461062987615dc4565b6000818152609e602052604090205490915060ff16613cd55760405162461bcd60e51b81526020600482015260436024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610b31565b609d544390613cea60a0890160808a01615d24565b63ffffffff16613cfa9190615cd1565b1115613d825760405162461bcd60e51b815260206004820152605f6024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610b31565b613d926060870160408801614c8c565b6001600160a01b0316336001600160a01b031614613e1f5760405162461bcd60e51b81526020600482015260506024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610b31565b8115613ea157613e3260a0870187615803565b85149050613ea15760405162461bcd60e51b81526020600482015260426024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610b31565b6000818152609e60205260409020805460ff1916905581156140065760005b613ecd60a0880188615803565b9050811015614000574360a16000613ee860a08b018b615803565b85818110613ef857613ef8615765565b9050602002016020810190613f0d9190614c8c565b6001600160a01b03168152602081019190915260400160002054613f3760a08a0160808b01615d24565b63ffffffff16613f479190615cd1565b1115613f655760405162461bcd60e51b8152600401610b3190615dd6565b613ff8613f756020890189614c8c565b33613f8360a08b018b615803565b85818110613f9357613f93615765565b9050602002016020810190613fa89190614c8c565b613fb560c08c018c615803565b86818110613fc557613fc5615765565b905060200201358a8a87818110613fde57613fde615765565b9050602002016020810190613ff39190614c8c565b6145ea565b600101613ec0565b506143f5565b336000908152609a60205260408120546001600160a01b0316905b61402e60a0890189615803565b90508110156143f2574360a1600061404960a08c018c615803565b8581811061405957614059615765565b905060200201602081019061406e9190614c8c565b6001600160a01b0316815260208101919091526040016000205461409860a08b0160808c01615d24565b63ffffffff166140a89190615cd1565b11156140c65760405162461bcd60e51b8152600401610b3190615dd6565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06140e860a08a018a615803565b838181106140f8576140f8615765565b905060200201602081019061410d9190614c8c565b6001600160a01b0316141561425d57600061412b60208a018a614c8c565b905060006001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316630e81073c8361416c60c08e018e615803565b8781811061417c5761417c615765565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af11580156141d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f49190615ba3565b6001600160a01b038084166000908152609a602052604090205491925016801561425557614255818461422a60a08f018f615803565b8881811061423a5761423a615765565b905060200201602081019061424f9190614c8c565b85613bcb565b5050506143ea565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663c4623ea13389898581811061429f5761429f615765565b90506020020160208101906142b49190614c8c565b6142c160a08d018d615803565b868181106142d1576142d1615765565b90506020020160208101906142e69190614c8c565b6142f360c08e018e615803565b8781811061430357614303615765565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b15801561436357600080fd5b505af1158015614377573d6000803e3d6000fd5b505050506001600160a01b038216156143ea576143ea823361439c60a08c018c615803565b858181106143ac576143ac615765565b90506020020160208101906143c19190614c8c565b6143ce60c08d018d615803565b868181106143de576143de615765565b90506020020135613bcb565b600101614021565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561454a57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144709086908690600401615e5e565b602060405180830381865afa15801561448d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b19190615ebb565b6001600160e01b031916146111235760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610b31565b826001600160a01b031661455e838361472a565b6001600160a01b0316146111235760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610b31565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156146955760405162387b1360e81b81526001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853169063387b13009061465e90889088908790600401615d00565b600060405180830381600087803b15801561467857600080fd5b505af115801561468c573d6000803e3d6000fd5b50505050614723565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063c608c7f390608401600060405180830381600087803b15801561470f57600080fd5b505af11580156113e2573d6000803e3d6000fd5b5050505050565b60008060006147398585614746565b91509150610a3b816147b6565b60008082516041141561477d5760208301516040840151606085015160001a61477187828585614971565b945094505050506147af565b8251604014156147a7576020830151604084015161479c868383614a5e565b9350935050506147af565b506000905060025b9250929050565b60008160048111156147ca576147ca615ee5565b14156147d35750565b60018160048111156147e7576147e7615ee5565b14156148355760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b31565b600281600481111561484957614849615ee5565b14156148975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b31565b60038160048111156148ab576148ab615ee5565b14156149045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b31565b600481600481111561491857614918615ee5565b141561106e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b31565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156149a85750600090506003614a55565b8460ff16601b141580156149c057508460ff16601c14155b156149d15750600090506004614a55565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614a25573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614a4e57600060019250925050614a55565b9150600090505b94509492505050565b6000806001600160ff1b03831681614a7b60ff86901c601b615cd1565b9050614a8987828885614971565b935093505050935093915050565b60008083601f840112614aa957600080fd5b5081356001600160401b03811115614ac057600080fd5b6020830191508360208260051b85010111156147af57600080fd5b60008060208385031215614aee57600080fd5b82356001600160401b03811115614b0457600080fd5b614b1085828601614a97565b90969095509350505050565b6001600160a01b038116811461106e57600080fd5b8035614b3c81614b1c565b919050565b600080600080600060a08688031215614b5957600080fd5b8535614b6481614b1c565b94506020860135614b7481614b1c565b93506040860135614b8481614b1c565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b81811015614bd457835183529284019291840191600101614bb8565b50909695505050505050565b600060608284031215614bf257600080fd5b50919050565b60008083601f840112614c0a57600080fd5b5081356001600160401b03811115614c2157600080fd5b6020830191508360208285010111156147af57600080fd5b600080600060808486031215614c4e57600080fd5b614c588585614be0565b925060608401356001600160401b03811115614c7357600080fd5b614c7f86828701614bf8565b9497909650939450505050565b600060208284031215614c9e57600080fd5b8135614ca981614b1c565b9392505050565b600080600060608486031215614cc557600080fd5b8335614cd081614b1c565b92506020840135614ce081614b1c565b929592945050506040919091013590565b600060208284031215614d0357600080fd5b5035919050565b60008060008060408587031215614d2057600080fd5b84356001600160401b0380821115614d3757600080fd5b614d4388838901614a97565b90965094506020870135915080821115614d5c57600080fd5b50614d6987828801614a97565b95989497509550505050565b60008060008060008060008060c0898b031215614d9157600080fd5b8835614d9c81614b1c565b97506020890135614dac81614b1c565b9650604089013595506060890135945060808901356001600160401b0380821115614dd657600080fd5b614de28c838d01614a97565b909650945060a08b0135915080821115614dfb57600080fd5b50614e088b828c01614a97565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614e3857600080fd5b88356001600160401b0380821115614e4f57600080fd5b614e5b8c838d01614a97565b909a50985060208b0135915080821115614e7457600080fd5b614e808c838d01614a97565b909850965060408b0135915080821115614e9957600080fd5b614ea58c838d01614a97565b909650945060608b0135915080821115614dfb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614ef657614ef6614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef657614ef6614ebe565b60405160c081016001600160401b0381118282101715614ef657614ef6614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f6857614f68614ebe565b604052919050565b63ffffffff8116811461106e57600080fd5b8035614b3c81614f70565b60006001600160401b03821115614fa657614fa6614ebe565b5060051b60200190565b600082601f830112614fc157600080fd5b81356020614fd6614fd183614f8d565b614f40565b82815260059290921b84018101918181019086841115614ff557600080fd5b8286015b8481101561501957803561500c81614b1c565b8352918301918301614ff9565b509695505050505050565b600082601f83011261503557600080fd5b81356020615045614fd183614f8d565b82815260059290921b8401810191818101908684111561506457600080fd5b8286015b848110156150195780358352918301918301615068565b600060e0828403121561509157600080fd5b615099614ed4565b90506150a482614b31565b81526150b260208301614b31565b60208201526150c360408301614b31565b6040820152606082013560608201526150de60808301614f82565b608082015260a08201356001600160401b03808211156150fd57600080fd5b61510985838601614fb0565b60a084015260c084013591508082111561512257600080fd5b5061512f84828501615024565b60c08301525092915050565b60006020828403121561514d57600080fd5b81356001600160401b0381111561516357600080fd5b61516f8482850161507f565b949350505050565b60006020828403121561518957600080fd5b813560ff81168114614ca957600080fd5b6000604082840312156151ac57600080fd5b6151b4614efc565b905081356151c181614b1c565b815260208201356bffffffffffffffffffffffff811681146151e257600080fd5b602082015292915050565b6000602080838503121561520057600080fd5b82356001600160401b038082111561521757600080fd5b818501915085601f83011261522b57600080fd5b8135615239614fd182614f8d565b81815260059190911b8301840190848101908883111561525857600080fd5b8585015b83811015615332578035858111156152745760008081fd5b860160e0818c03601f190181131561528c5760008081fd5b615294614f1e565b89830135888111156152a65760008081fd5b6152b48e8c83870101614fb0565b825250604080840135898111156152cb5760008081fd5b6152d98f8d83880101615024565b8c8401525060606152eb818601614b31565b82840152608091506152ff8f83870161519a565b9083015261530f60c08501614f82565b9082015261531e838301614b31565b60a08201528552505091860191860161525c565b5098975050505050505050565b801515811461106e57600080fd5b60008060008060006080868803121561536557600080fd5b85356001600160401b038082111561537c57600080fd5b9087019060e0828a03121561539057600080fd5b909550602087013590808211156153a657600080fd5b506153b388828901614a97565b9095509350506040860135915060608601356153ce8161533f565b809150509295509295909350565b600080604083850312156153ef57600080fd5b82356153fa81614b1c565b9150602083013561540a81614b1c565b809150509250929050565b60006040828403121561542757600080fd5b61542f614efc565b905081356001600160401b038082111561544857600080fd5b818401915084601f83011261545c57600080fd5b813560208282111561547057615470614ebe565b615482601f8301601f19168201614f40565b9250818352868183860101111561549857600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a086880312156154d557600080fd5b85356154e081614b1c565b945060208601356154f081614b1c565b935060408601356001600160401b038082111561550c57600080fd5b61551889838a01615415565b9450606088013591508082111561552e57600080fd5b5061553b88828901615415565b95989497509295608001359392505050565b6000806040838503121561556057600080fd5b823561556b81614b1c565b915060208301356001600160401b0381111561558657600080fd5b61559285828601614fb0565b9150509250929050565b600081518084526020808501945080840160005b838110156155cc578151875295820195908201906001016155b0565b509495945050505050565b602081526000614ca9602083018461559c565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b614b1085828601614bf8565b6000806040838503121561563257600080fd5b823561563d81614b1c565b946020939093013593505050565b6000806000806080858703121561566157600080fd5b843561566c81614b1c565b935060208501359250604085013561568381614b1c565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156155cc5781516001600160a01b0316875295820195908201906001016156a7565b6040815260006156df6040830185615693565b82810360208401526112a0818561559c565b60008060006060848603121561570657600080fd5b833561571181614b1c565b925060208401356001600160401b0381111561572c57600080fd5b61573886828701615415565b925050604084013590509250925092565b60006060828403121561575b57600080fd5b614ca98383614be0565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156157a5576157a561577b565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126157f957600080fd5b9190910192915050565b6000808335601e1984360301811261581a57600080fd5b8301803591506001600160401b0382111561583457600080fd5b6020019150600581901b36038213156147af57600080fd5b60608101823561585b81614b1c565b6001600160a01b03908116835260208401359061587782614b1c565b166020830152604083013561588b81614f70565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156158df57600080fd5b8151614ca981614b1c565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b6000602082840312156159a357600080fd5b8151614ca98161533f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126157f957600080fd5b600060208284031215615a1e57600080fd5b8135614ca98161533f565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a0850152615a8460e0850182615693565b905060c083015184820360c08601526112a0828261559c565b602081526000614ca96020830184615a29565b602081526000825160e06020840152615acd610100840182615693565b90506020840151601f19848303016040850152615aea828261559c565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a0850152506080840151615b4260c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152610a3b565b60008060408385031215615b6f57600080fd5b8251615b7a8161533f565b6020939093015192949293505050565b82815260406020820152600061516f6040830184615a29565b600060208284031215615bb557600080fd5b5051919050565b600082601f830112615bcd57600080fd5b81516020615bdd614fd183614f8d565b82815260059290921b84018101918181019086841115615bfc57600080fd5b8286015b848110156150195780518352918301918301615c00565b60008060408385031215615c2a57600080fd5b82516001600160401b0380821115615c4157600080fd5b818501915085601f830112615c5557600080fd5b81516020615c65614fd183614f8d565b82815260059290921b84018101918181019089841115615c8457600080fd5b948201945b83861015615cab578551615c9c81614b1c565b82529482019490820190615c89565b91880151919650909350505080821115615cc457600080fd5b5061559285828601615bbc565b60008219821115615ce457615ce461577b565b500190565b600082821015615cfb57615cfb61577b565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615d3657600080fd5b8135614ca981614f70565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135615d6c81614b1c565b615d768183615d41565b50600181016020830135615d8981614b1c565b615d938183615d41565b506040830135615da281614f70565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6000615dd0368361507f565b92915050565b6020808252606e90820152600080516020615efc83398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b81811015615e9257858101830151858201606001528201615e76565b81811115615ea4576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615ecd57600080fd5b81516001600160e01b031981168114614ca957600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212202ded7bd47bfa76c728848b0701e85591019bc318e7ef7411423650af4d82b0a664736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212208473e2cda982935bccab1789bc9098533ac3b1ad2c056cc51cc1d5d1193ed6fd64736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0xcd8a1c3ba11cf5ecfa6267617243239504a98d90":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101665760003560e01c806379e041f2116100d1578063a80fc9bd1161008a578063d16544f011610064578063d16544f01461042c578063f26ee9d01461044c578063f2fde38b14610462578063fabc1cbc1461048257600080fd5b8063a80fc9bd146103c7578063b1538706146103f7578063ca9b21ae1461040c57600080fd5b806379e041f2146102f95780637fd4f8451461032657806380bc280c1461033c578063886f1195146103695780638da5cb5b14610389578063a7acab46146103a757600080fd5b80635740b89d116101235780635740b89d1461023a578063595c6a671461025a5780635ac86ab71461026f5780635c975abb146102af57806361bc221a146102ce578063715018a6146102e457600080fd5b806310d67a2f1461016b578063136439dd1461018d5780631878d1f1146101ad578063274b3df4146101f257806347e7ef24146101fa578063485cc9551461021a575b600080fd5b34801561017757600080fd5b5061018b6101863660046130d3565b6104a2565b005b34801561019957600080fd5b5061018b6101a83660046130f0565b61055e565b3480156101b957600080fd5b506101d573574839586746383753739573937593749373345781565b6040516001600160a01b0390911681526020015b60405180910390f35b61018b61069d565b34801561020657600080fd5b5061018b610215366004613109565b61088e565b34801561022657600080fd5b5061018b610235366004613135565b6108bc565b34801561024657600080fd5b5061018b61025536600461316e565b6109ea565b34801561026657600080fd5b5061018b610c5e565b34801561027b57600080fd5b5061029f61028a3660046131a9565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e9565b3480156102bb57600080fd5b506066545b6040519081526020016101e9565b3480156102da57600080fd5b506102c060975481565b3480156102f057600080fd5b5061018b610d25565b34801561030557600080fd5b506103196103143660046131cc565b610d39565b6040516101e99190613347565b34801561033257600080fd5b506102c060985481565b34801561034857600080fd5b506102c06103573660046130d3565b609e6020526000908152604090205481565b34801561037557600080fd5b506065546101d5906001600160a01b031681565b34801561039557600080fd5b506033546001600160a01b03166101d5565b3480156103b357600080fd5b5061018b6103c23660046130f0565b6113c6565b3480156103d357600080fd5b506103e76103e23660046130f0565b611561565b6040516101e99493929190613432565b34801561040357600080fd5b506103196115d3565b34801561041857600080fd5b506103e76104273660046130f0565b611624565b34801561043857600080fd5b5061018b610447366004613109565b611659565b34801561045857600080fd5b506102c060995481565b34801561046e57600080fd5b5061018b61047d3660046130d3565b611924565b34801561048e57600080fd5b5061018b61049d3660046130f0565b61199a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610519919061345b565b6001600160a01b0316336001600160a01b0316146105525760405162461bcd60e51b815260040161054990613478565b60405180910390fd5b61055b81611af6565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca91906134d0565b6105e65760405162461bcd60e51b8152600401610549906134ed565b6066548181161461065f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610549565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b606654156106bd5760405162461bcd60e51b815260040161054990613535565b6000341161070d5760405162461bcd60e51b815260206004820181905260248201527f6d73672076616c7565206d7573742062652067726561746572207468617420306044820152606401610549565b6040805160e081019091523390349042906000908060a08101808481526020016097600081548092919061074090613582565b90915550905281526001600160a01b03861660208083019190915273574839586746383753739573937593749373345760408084019190915260608301879052608090920185905282518101516000908152609c909152208151805182549394508493839190829060ff1916600183818111156107bf576107bf6131ee565b021790555060209182015160019190910155828101516002830180546001600160a01b03199081166001600160a01b03938416179091556040808601516003860180549093169084161790915560608086015160048601556080958601516005909501949094558551830151815190815291891692820192909252735748395867463837537395739375937493733457918101919091529081018590527fe28491c2da97a9923c92f6590a040dfc143fe636e8545356cdab0a796e1acefa91015b60405180910390a150505050565b606654156108ae5760405162461bcd60e51b815260040161054990613535565b6108b88282611659565b5050565b600054610100900460ff16158080156108dc5750600054600160ff909116105b806108f65750303b1580156108f6575060005460ff166001145b6109595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610549565b6000805460ff19166001179055801561097c576000805461ff0019166101001790555b610987836000611bed565b61099082611cd3565b60006098819055600160975560995580156109e5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60665415610a0a5760405162461bcd60e51b815260040161054990613535565b6001610a19604083018361359d565b9050101580610a3457506001610a2f828061359d565b905010155b80610a4e57506001610a49602083018361359d565b905010155b610aa45760405162461bcd60e51b815260206004820152602160248201527f4172726179206d7573742068617665206174206c6561737420312075706461746044820152606560f81b6064820152608401610549565b600080610ab083611d25565b915091508160001415610ad55760405162461bcd60e51b8152600401610549906135ed565b609954610ae3906001613617565b821115610b025760405162461bcd60e51b8152600401610549906135ed565b6099548111610b235760405162461bcd60e51b8152600401610549906135ed565b6000610b2f8385611e5b565b90506000610b4982610b44604088018861359d565b6121d5565b9050610b55828661249b565b805115610c57576097805460009182610b6d83613582565b909155506040805160a08101909152909150806060810180600081526020908101859052908252818101859052426040928301526000848152609d90915220815180518254839190829060ff191660018381811115610bce57610bce6131ee565b0217905550602091820151600190910155828101518051610bf5926002850192019061305e565b5060408201518160030155905050815160986000828254610c169190613617565b90915550506040517f09b30365986269e3939307e7ca7b7b7421a8ad08ef18bb766c668d27cbc2aef990610c4d908390859061362f565b60405180910390a1505b5050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cca91906134d0565b610ce65760405162461bcd60e51b8152600401610549906134ed565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610d2d61269b565b610d376000611cd3565b565b610d646040518060800160405280606081526020016060815260200160608152602001606081525090565b610d8f6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000808080875b878111610e4f576000818152609c602052604090206001015415610dc65784610dbe81613582565b955050610e3d565b6000818152609d602052604090206001015415610def5781610de781613582565b925050610e3d565b6000818152609a602052604090206001015415610e185783610e1081613582565b945050610e3d565b6000818152609b602052604090206001015415610e3d5782610e3981613582565b9350505b80610e4781613582565b915050610d96565b508367ffffffffffffffff811115610e6957610e69613650565b604051908082528060200260200182016040528015610ecf57816020015b6040805160e081018252600060a0820181815260c08301829052825260208083018290529282018190526060820181905260808201528252600019909201910181610e875790505b5085528167ffffffffffffffff811115610eeb57610eeb613650565b604051908082528060200260200182016040528015610f4a57816020015b6040805160c08101825260006080820181815260a083018290528252602080830182905292820181905260608201528252600019909201910181610f095790505b5060208601528267ffffffffffffffff811115610f6957610f69613650565b604051908082528060200260200182016040528015610fc857816020015b6040805160c08101825260006080820181815260a083018290528252602080830182905292820181905260608201528252600019909201910181610f875790505b5060408601528067ffffffffffffffff811115610fe757610fe7613650565b60405190808252806020026020018201604052801561104157816020015b6040805160a081018252600060608083018281526080840183905283526020830152918101919091528152602001906001900390816110055790505b506060860152506000925082915081905080875b8781116113b7576000818152609c602052604090206001015415611136576000818152609c602052604090819020815160e081019092528054829060a08201908390829060ff1660018111156110ad576110ad6131ee565b60018111156110be576110be6131ee565b81526001919091015460209182015290825260028301546001600160a01b039081169183019190915260038301541660408201526004820154606082015260059091015460809091015286518661111481613582565b97508151811061112657611126613666565b60200260200101819052506113a5565b6000818152609a6020526040902060010154156111f1576000818152609a602052604090819020815160c081019092528054829060808201908390829060ff166001811115611187576111876131ee565b6001811115611198576111986131ee565b815260019190910154602091820152908252600283015490820152600382015460ff161515604080830191909152600490920154606090910152870151856111df81613582565b96508151811061112657611126613666565b6000818152609d6020526040902060010154156112e9576000818152609d602052604090819020815160a081019092528054829060608201908390829060ff166001811115611242576112426131ee565b6001811115611253576112536131ee565b81526020016001820154815250508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112b457602002820191906000526020600020905b8154815260200190600101908083116112a0575b50505050508152602001600382015481525050866060015183806112d790613582565b94508151811061112657611126613666565b6000818152609b6020526040902060020154156113a0576000818152609b602052604090819020815160c081019092528054829060808201908390829060ff16600181111561133a5761133a6131ee565b600181111561134b5761134b6131ee565b815260019190910154602091820152908252600283015482820152600383015460ff16151560408301526004909201546060909101528701518461138e81613582565b95508151811061112657611126613666565b6113b7565b806113af81613582565b915050611055565b50939450505050505b92915050565b606654156113e65760405162461bcd60e51b815260040161054990613535565b600081116114365760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610549565b336000818152609e60205260409020548211156114a05760405162461bcd60e51b815260206004820152602260248201527f6e6f7420656e6f7567682070656e64696e6720776974686472617720616d6f756044820152611b9d60f21b6064820152608401610549565b30318211156114e85760405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206574682066756e647360601b6044820152606401610549565b6001600160a01b0381166000908152609e60205260408120805484929061151090849061367c565b9091555050604080516001600160a01b0383168152602081018490527f74b13e26477934df4349c96042c16ffb2ec5e0f902cdf60e4755711cd460ce99910160405180910390a16108b881836126f5565b609a6020526000908152604090819020815180830190925280549091908290829060ff166001811115611596576115966131ee565b60018111156115a7576115a76131ee565b815260019190910154602090910152600282015460038301546004909301549192909160ff9091169084565b6115fe6040518060800160405280606081526020016060815260200160608152602001606081525090565b61161f60985460016116109190613617565b6001609754610314919061367c565b905090565b609b6020526000908152604090819020815180830190925280549091908290829060ff166001811115611596576115966131ee565b606654156116795760405162461bcd60e51b815260040161054990613535565b6001600160a01b0382166116c75760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610549565b600081116117175760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610549565b6040516323b872dd60e01b81523360048201819052306024830152604482018390529083906001600160a01b038216906323b872dd906064016020604051808303816000875af115801561176f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179391906134d0565b6117d75760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610549565b6040805160e0810190915242906000908060a08101808481526020016097600081548092919061180690613582565b90915550905281526001600160a01b0380871660208084019190915290891660408084019190915260608301899052608090920185905282518101516000908152609c909152208151805182549394508493839190829060ff191660018381811115611874576118746131ee565b021790555060209182015160019190910155828101516002830180546001600160a01b03199081166001600160a01b03938416179091556040808601516003860180549093169084161790915560608086015160048601556080958601516005909501949094558551830151815190815289831693810193909352908a16908201529081018790527fe28491c2da97a9923c92f6590a040dfc143fe636e8545356cdab0a796e1acefa9101610c4d565b61192c61269b565b6001600160a01b0381166119915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610549565b61055b81611cd3565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a11919061345b565b6001600160a01b0316336001600160a01b031614611a415760405162461bcd60e51b815260040161054990613478565b606654198119606654191614611abf5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610549565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610692565b6001600160a01b038116611b845760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610549565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316158015611c0e57506001600160a01b03821615155b611c905760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610549565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26108b882611af6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806000198180611d37868061359d565b90501115611dbb57611d70611d4c868061359d565b6000818110611d5d57611d5d613666565b905060a00201600001602001358361280e565b9150611db8611d7f868061359d565b6001611d8b898061359d565b611d9692915061367c565b818110611da557611da5613666565b905060a002016000016020013582612824565b90505b6000611dca602087018761359d565b90501115611e0657611de2611d4c602087018761359d565b9150611e03611df4602087018761359d565b6001611d8b60208a018a61359d565b90505b6000611e15604087018761359d565b90501115611e5157611e2d611d4c604087018761359d565b9150611e4e611e3f604087018761359d565b6001611d8b60408a018a61359d565b90505b9094909350915050565b6060611e6a604083018361359d565b1590508015611e825750611e7e828061359d565b1590505b8015611e9a5750611e96602083018361359d565b1590505b15611eb457506040805160008152602081019091526113c0565b600080808080611ec7604088018861359d565b9050611ed6602089018961359d565b9050611ee2898061359d565b611eed929150613617565b611ef79190613617565b905060008167ffffffffffffffff811115611f1457611f14613650565b604051908082528060200260200182016040528015611f3d578160200160208202803683370190505b509050885b611f4c838b613617565b8110156121c857611f6060208a018a61359d565b905087108015611f98575080611f7960208b018b61359d565b89818110611f8957611f89613666565b905060a0020160000160200135145b15612000576001828581518110611fb157611fb1613666565b60200260200101906005811115611fca57611fca6131ee565b90816005811115611fdd57611fdd6131ee565b90525086611fea81613582565b9750508380611ff890613582565b9450506121b6565b61200a898061359d565b90508610801561203f5750806120208a8061359d565b8881811061203057612030613666565b905060a0020160000160200135145b1561209f57600482858151811061205857612058613666565b60200260200101906005811115612071576120716131ee565b90816005811115612084576120846131ee565b9052508561209181613582565b9650508380611ff890613582565b6120ac60408a018a61359d565b9050851080156120e45750806120c560408b018b61359d565b878181106120d5576120d5613666565b905060a0020160000160200135145b156121445760038285815181106120fd576120fd613666565b60200260200101906005811115612116576121166131ee565b90816005811115612129576121296131ee565b9052508461213681613582565b9550508380611ff890613582565b61217a604051806040016040528060158152602001743932b8bab2b9ba39903737ba1034b71037b93232b960591b815250612833565b60405162461bcd60e51b8152602060048201526011602482015270696e76616c696465204c3255706461746560781b6044820152606401610549565b806121c081613582565b915050611f42565b5098975050505050505050565b6060816121f15750604080516000815260208101909152612494565b6000808367ffffffffffffffff81111561220d5761220d613650565b604051908082528060200260200182016040528015612236578160200160208202803683370190505b5090506000805b87518110156123f157600388828151811061225a5761225a613666565b60200260200101516005811115612273576122736131ee565b14156123df57600087878461228781613582565b955081811061229857612298613666565b905060a002018036038101906122ae919061370b565b9050609954816000015160200151116122c757506123df565b6000816040015160058111156122df576122df6131ee565b148061230057506003816040015160058111156122fe576122fe6131ee565b145b80612320575060058160400151600581111561231e5761231e6131ee565b145b80612340575060028160400151600581111561233e5761233e6131ee565b145b1561239e576020810151848661235581613582565b97508151811061236757612367613666565b602090810291909101015260008160400151600581111561238a5761238a6131ee565b14156123995761239981612876565b6123dd565b60405162461bcd60e51b8152602060048201526014602482015273756e6b6e6f776e2072657175657374207479706560601b6044820152606401610549565b505b806123e981613582565b91505061223d565b5060008367ffffffffffffffff81111561240d5761240d613650565b604051908082528060200260200182016040528015612436578160200160208202803683370190505b50905060005b8481101561248d5783818151811061245657612456613666565b602002602001015182828151811061247057612470613666565b60209081029190910101528061248581613582565b91505061243c565b5093505050505b9392505050565b6000806000805b85518110156126935760018682815181106124bf576124bf613666565b602002602001015160058111156124d8576124d86131ee565b141561254957366124ec602087018761359d565b856124f681613582565b965081811061250757612507613666565b905060a0020190506099548160000160200135116125255750612681565b61252e816129fd565b6099805490600061253e83613582565b919050555050612681565b600486828151811061255d5761255d613666565b60200260200101516005811115612576576125766131ee565b14156125c95736612587868061359d565b8661259181613582565b97508181106125a2576125a2613666565b905060a0020190506099548160000160200135116125c05750612681565b61252e81612a43565b60038682815181106125dd576125dd613666565b602002602001015160058111156125f6576125f66131ee565b1415612643573661260a604087018761359d565b8461261481613582565b955081811061262557612625613666565b905060a00201905060995481600001602001351161252e5750612681565b60405162461bcd60e51b8152602060048201526013602482015272756e6b6e6f776e20757064617465207479706560681b6044820152606401610549565b8061268b81613582565b9150506124a2565b505050505050565b6033546001600160a01b03163314610d375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610549565b804710156127455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610549565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612792576040519150601f19603f3d011682016040523d82523d6000602084013e612797565b606091505b50509050806109e55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610549565b600081831061281d5781612494565b5090919050565b600081831161281d5781612494565b61055b81604051602401612847919061379b565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052612ba3565b806060015161055b5780516020908101516000818152609c9092526040808320815160e081019092528054929392829060a08201908390829060ff1660018111156128c3576128c36131ee565b60018111156128d4576128d46131ee565b81526001919091015460209182015290825260028301546001600160a01b039081168383015260038401548116604080850191909152600480860154606080870191909152600590960154608090950194909452858101519286015194860151905163a9059cbb60e01b815294821693850193909352602484019290925292935082169063a9059cbb906044016020604051808303816000875af1158015612980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a491906134d0565b5060208083015160408085015160608087015183516001600160a01b0395861681529490921694840194909452908201527fd94415916610c60b0e0e439fd308b171a6e28fad608830cf17f14ff5928e22799101610880565b735748395867463837537395739375937493733457612a2260808301606084016130d3565b6001600160a01b03161415612a3a5761055b81612bc4565b61055b81612dbf565b6000612a5760408301356060840135610d39565b9050600081604051602001612a6c9190613347565b60408051601f19818403018152828252805160209091012060c083019091529150429060009080608081018084815260200160976000815480929190612ab190613582565b90915550905281526020878101358183015260808801358614604080840191909152606090920185905282518101516000908152609b909152208151805182549394508493839190829060ff191660018381811115612b1257612b126131ee565b021790555060209182015160019091015582810151600283015560408084015160038401805491151560ff199092169190911790556060909301516004909201919091558201518282015191517fd16f202ac5905ff5d1851f4805ffe56d1212db32fa989881d0044b9cf0f7277692612b949282521515602082015260400190565b60405180910390a15050505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6040805160c081019091526080808301353031101591429160009190819081018084815260200160976000815480929190612bfe90613582565b909155509052815260208681013581830152851515604080840191909152606090920185905282518101516000908152609a909152208151805182549394508493839190829060ff191660018381811115612c5b57612c5b6131ee565b02179055506020918201516001919091015582810151600283015560408084015160038401805460ff191691151591909117905560609093015160049092019190915582518101518251908152851515918101919091527f0c4873525770dbb64515e9d3950131f79ed8f72ff147ff1723bbe2e77e3791aa910160405180910390a18215612db9576080840135609e6000612cfc60608801604089016130d3565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612d2b9190613617565b909155507fe40f985f6a88d7d060348dc647fb85bb6365eee1437a753cd67141bc3eda8fa99050612d6260608601604087016130d3565b609e6000612d766060890160408a016130d3565b6001600160a01b03166001600160a01b03168152602001908152602001600020546040516108809291906001600160a01b03929092168252602082015260400190565b50505050565b6000612dd160808301606084016130d3565b6040516370a0823160e01b81523060048201529091506000906080840135906001600160a01b038416906370a0823190602401602060405180830381865afa158015612e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4591906137f0565b6040805160c081019091529111159150429060009080608081018084815260200160976000815480929190612e7990613582565b909155509052815260208781013581830152851515604080840191909152606090920185905282518101516000908152609a909152208151805182549394508493839190829060ff191660018381811115612ed657612ed66131ee565b02179055506020918201516001919091015582810151600283015560408084015160038401805460ff191691151591909117905560609093015160049092019190915582518101518251908152851515918101919091527f0c4873525770dbb64515e9d3950131f79ed8f72ff147ff1723bbe2e77e3791aa910160405180910390a18215610c57576001600160a01b03841663a9059cbb612f7d60608801604089016130d3565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152608088013560248201526044016020604051808303816000875af1158015612fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff191906134d0565b507fa92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a61302360608701604088016130d3565b61303360808801606089016130d3565b604080516001600160a01b039384168152929091166020830152608088013590820152606001612b94565b828054828255906000526020600020908101928215613099579160200282015b8281111561309957825182559160200191906001019061307e565b506130a59291506130a9565b5090565b5b808211156130a557600081556001016130aa565b6001600160a01b038116811461055b57600080fd5b6000602082840312156130e557600080fd5b8135612494816130be565b60006020828403121561310257600080fd5b5035919050565b6000806040838503121561311c57600080fd5b8235613127816130be565b946020939093013593505050565b6000806040838503121561314857600080fd5b8235613153816130be565b91506020830135613163816130be565b809150509250929050565b60006020828403121561318057600080fd5b813567ffffffffffffffff81111561319757600080fd5b82016060818503121561249457600080fd5b6000602082840312156131bb57600080fd5b813560ff8116811461249457600080fd5b600080604083850312156131df57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b80516002811061322457634e487b7160e01b600052602160045260246000fd5b8252602090810151910152565b600081518084526020808501945080840160005b8381101561328e57815161325a888251613204565b8084015160408981019190915281015115156060808a01919091520151608088015260a09096019590820190600101613245565b509495945050505050565b600081518084526020808501945080840160005b8381101561328e578151875295820195908201906001016132ad565b600081518084526020808501808196508360051b8101915082860160005b8581101561333a57828403895281516080613303868351613204565b868201516040828189015261331a83890183613299565b9301516060979097019690965250988501989350908401906001016132e7565b5091979650505050505050565b6000602080835260a080840185516080808588015282825180855260c094508489019150868401935060005b818110156133cb578451613388848251613204565b808901516001600160a01b039081166040868101919091528201511660608086019190915281015185850152840151878401529387019391850191600101613373565b5050858901519550601f199450848882030160408901526133ec8187613231565b955050604088015192508387860301606088015261340a8584613231565b945060608801519250838786030181880152505061342883826132c9565b9695505050505050565b60a081016134408287613204565b60408201949094529115156060830152608090910152919050565b60006020828403121561346d57600080fd5b8151612494816130be565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b801515811461055b57600080fd5b6000602082840312156134e257600080fd5b8151612494816134c2565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6020808252601c908201527f5061757361626c653a20636f6e74726163742069732070617573656400000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006000198214156135965761359661356c565b5060010190565b6000808335601e198436030181126135b457600080fd5b83018035915067ffffffffffffffff8211156135cf57600080fd5b602001915060a0810236038213156135e657600080fd5b9250929050565b60208082526010908201526f496e76616c6964204c3255706461746560801b604082015260600190565b6000821982111561362a5761362a61356c565b500190565b8281526040602082015260006136486040830184613299565b949350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008282101561368e5761368e61356c565b500390565b6040516080810167ffffffffffffffff811182821017156136c457634e487b7160e01b600052604160045260246000fd5b60405290565b6040805190810167ffffffffffffffff811182821017156136c457634e487b7160e01b600052604160045260246000fd5b8035613706816134c2565b919050565b600081830360a081121561371e57600080fd5b613726613693565b604082121561373457600080fd5b61373c6136ca565b915083356002811061374d57600080fd5b808352506020840135602083015281815260408401356020820152606084013591506006821061377c57600080fd5b81604082015261378e608085016136fb565b6060820152949350505050565b600060208083528351808285015260005b818110156137c8578581018301518582016040015282016137ac565b818111156137da576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561380257600080fd5b505191905056fea2646970667358221220feb1fa713f0fcaca765df442d55e06cc1f199eca048cfa0686fdbfcf43a073cf64736f6c634300080c0033","storage":{}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x831f01b2aeb61d5d8c019704e62c25763057a8806c5c790bc8b4c99ee54ac8a7","0x9d":"0x1","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3","0xbf99e46535d3d55254422485a81ef89fb17142d8ad8144fcf02a6a4b9ac9f8e0":"0x860b6912c2d0337ef05bbc89b0c2cb6cbaeab4a5","0xd4c372f4124946d62b3adf99f94e072822ac8e56bc1b56fc1bcb0046127fe9b6":"0x860b6912c2d0337ef05bbc89b0c2cb6cbaeab4a5","0xd4c372f4124946d62b3adf99f94e072822ac8e56bc1b56fc1bcb0046127fe9b7":"0x0","0xf2fb818edda125e7fb93ac1bad32b4f9aa22d76c0234181862d9d9a2ee6e5d08":"0x64"}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0x1","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xd65ac9700cec4e530497617d02afdf0d5de3ed18466aca1578edcbce0d40ee16","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x2787cebc3eceaad2c5ffa9235bceafad371c5d755a4b2472049822fb4f98c4cf":"0x64","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0x74a9579f8366568b2792a7aa47988633896f9826ad6936da0f98ccff5c8ddab9":"0x0","0xac02fc4b95e25e4d2039d07a7ec79c323d4ec14f0cd7375b739e011a1bc7f187":"0x1","0xb091cfdd42f5e68a258727f8e7e987065f13fa68f4050431c96774a3f7299489":"0x9635f643e140090a9a8dcd712ed6285858cebef","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3","0xcc329ef22ac4a9d6ea67500cfb67ca4a1541c91282d785edae460e7275b4b11c":"0x1"}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220588d79746369ba6bc203e2ed869e37ff985f84ede6a035b19a6fa49703898aa064736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":56,"balance":"0x218ab64d0be30221284","code":"0x","storage":{}},"0xf5059a5d33d5853360d16c683c16e67980206f36":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106f1565b610118565b61005b61009336600461070c565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106f1565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b6060610285838360405180606001604052806027815260200161080b6027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f7565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051f565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055f565b60606001600160a01b0384163b6104825760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049d91906107bb565b600060405180830381855af49150503d80600081146104d8576040519150601f19603f3d011682016040523d82523d6000602084013e6104dd565b606091505b50915091506104ed828286610608565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b61052881610641565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c45760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610617575081610285565b8251156106275782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d7565b6001600160a01b0381163b6106ae5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e7565b80356001600160a01b03811681146106ec57600080fd5b919050565b60006020828403121561070357600080fd5b610285826106d5565b60008060006040848603121561072157600080fd5b61072a846106d5565b9250602084013567ffffffffffffffff8082111561074757600080fd5b818601915086601f83011261075b57600080fd5b81358181111561076a57600080fd5b87602082850101111561077c57600080fd5b6020830194508093505050509250925092565b60005b838110156107aa578181015183820152602001610792565b838111156103c05750506000910152565b600082516107cd81846020870161078f565b9190910192915050565b60208152600082518060208401526107f681604085016020870161078f565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202d8aef871a7506c5a3b3c27bcde2c65544a40c9d05e5fba361c75671607f864e64736f6c634300080c0033","storage":{"0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0x1c000000000000000000000000000000000000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xe801d84fa97b50751dbf25036d067dcf18858bf","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0xc3e53f4d16ae77db1c982e75a937b9f60fe63690"}}},"best_block_number":"0x20"} \ No newline at end of file diff --git a/local-interchain/cmd/local-ic/chains.go b/local-interchain/cmd/local-ic/chains.go deleted file mode 100644 index acaa99d2d..000000000 --- a/local-interchain/cmd/local-ic/chains.go +++ /dev/null @@ -1,61 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "os" - "path" - - "github.com/spf13/cobra" -) - -type chains struct { - Configs []string `json:"chain_configs" yaml:"chain_configs"` -} - -var chainsCmd = &cobra.Command{ - Use: "chains [config.(json|yaml)]", - Short: "List all current chains or outputs a current config information", - Args: cobra.RangeArgs(0, 1), - ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetFiles(), cobra.ShellCompDirectiveNoFileComp - }, - Run: func(cmd *cobra.Command, args []string) { - chainsDir := path.Join(GetDirectory(), "chains") - - if len(args) == 0 { - configs := chains{GetFiles()} - - bz, _ := json.MarshalIndent(configs, "", " ") - fmt.Printf("%s\n", bz) - } else { - config := args[0] - filePath := path.Join(chainsDir, config) - - fc, err := os.ReadFile(filePath) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - fmt.Println(string(fc)) - } - }, -} - -func GetFiles() []string { - chainsDir := path.Join(GetDirectory(), "chains") - - files, err := os.ReadDir(chainsDir) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - var fileNames []string - for _, file := range files { - fileNames = append(fileNames, file.Name()) - } - - return fileNames -} diff --git a/local-interchain/cmd/local-ic/interaction.go b/local-interchain/cmd/local-ic/interaction.go deleted file mode 100644 index b58c81de6..000000000 --- a/local-interchain/cmd/local-ic/interaction.go +++ /dev/null @@ -1,102 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - - "github.com/spf13/cobra" - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/handlers" -) - -const ( - FlagAPIEndpoint = "api-endpoint" - FlagNodeIndex = "node-index" -) - -func init() { - interactCmd.Flags().String(FlagAPIAddressOverride, "http://127.0.0.1:8080", "override the default API address") - interactCmd.Flags().String(FlagAuthKey, "a", "auth key to use") - interactCmd.Flags().IntP(FlagNodeIndex, "n", 0, "node index to interact with") -} - -var interactCmd = &cobra.Command{ - Use: "interact [chain_id] [interaction] [arguments...]", - Short: "Interact with a node", - Example: ` local-ic interact localcosmos-1 bin 'status --node=%RPC%' --api-endpoint=http://127.0.0.1:8080 - local-ic interact localcosmos-1 query bank balances cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr - local-ic interact localcosmos-1 get_channels - local-ic interact localcosmos-1 relayer-exec rly q channels localcosmos-1 -`, - Args: cobra.MinimumNArgs(2), - Aliases: []string{"i"}, - ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetFiles(), cobra.ShellCompDirectiveNoFileComp - }, - Run: func(cmd *cobra.Command, args []string) { - - ah := &handlers.ActionHandler{ - ChainId: args[0], - Action: args[1], - } - - if len(args) > 2 { - ah.Cmd = strings.Join(args[2:], " ") - } - - authKey, err := cmd.Flags().GetString(FlagAuthKey) - if err != nil { - panic(err) - } - - nodeIdx, err := cmd.Flags().GetInt(FlagNodeIndex) - if err != nil { - panic(err) - } - - ah.AuthKey = authKey - ah.NodeIndex = nodeIdx - - apiAddr, err := cmd.Flags().GetString(FlagAPIAddressOverride) - if err != nil { - panic(err) - } - - res := makeHttpReq(apiAddr, ah) - fmt.Println(res) - }, -} - -func makeHttpReq(apiEndpoint string, ah *handlers.ActionHandler) string { - client := &http.Client{} - - // curl -X POST -H "Content-Type: application/json" -d '{ - // "chain_id": "localjuno-1", - // "action": "query", - // "cmd": "bank balances juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl" - // }' http://127.0.0.1:8080/ - jsonData, err := json.Marshal(ah) - if err != nil { - panic(err) - } - - req, err := http.NewRequest("POST", apiEndpoint, bytes.NewReader(jsonData)) - if err != nil { - panic(err) - } - req.Header.Set("Content-Type", "application/json") - resp, err := client.Do(req) - if err != nil { - panic(err) - } - defer resp.Body.Close() - bodyText, err := io.ReadAll(resp.Body) - if err != nil { - panic(err) - } - - return string(bodyText) -} diff --git a/local-interchain/cmd/local-ic/main.go b/local-interchain/cmd/local-ic/main.go deleted file mode 100644 index 8a1e79052..000000000 --- a/local-interchain/cmd/local-ic/main.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/spf13/cobra" -) - -// set in the Makefile -var Version = "" - -func main() { - rootCmd.AddCommand(chainsCmd) - rootCmd.AddCommand(newChainCmd) - rootCmd.AddCommand(startCmd) - rootCmd.AddCommand(interactCmd) - rootCmd.AddCommand(&cobra.Command{ - Use: "version", - Aliases: []string{"ver"}, - Short: "Print the version of Local-IC", - Run: func(cmd *cobra.Command, args []string) { - fmt.Print(Version) - }, - }) - - if err := rootCmd.Execute(); err != nil { - fmt.Fprintf(os.Stderr, "error while executing your CLI. Err: %v\n", err) - os.Exit(1) - } -} diff --git a/local-interchain/cmd/local-ic/new_chain.go b/local-interchain/cmd/local-ic/new_chain.go deleted file mode 100644 index 37f53e521..000000000 --- a/local-interchain/cmd/local-ic/new_chain.go +++ /dev/null @@ -1,128 +0,0 @@ -package main - -import ( - "bufio" - "fmt" - "os" - "path" - "reflect" - "strconv" - "strings" - - "github.com/spf13/cobra" - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - ictypes "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -var reader = bufio.NewReader(os.Stdin) - -var newChainCmd = &cobra.Command{ - Use: "new-chain ", - Aliases: []string{"new", "new-config"}, - Short: "Create a new chain config", - Args: cobra.ExactArgs(1), - Run: func(cmd *cobra.Command, args []string) { - name := strings.TrimSuffix(args[0], ".json") - filePath := path.Join(GetDirectory(), "chains", fmt.Sprintf("%s.json", name)) - - text, _ := os.ReadFile(filePath) - if len(text) > 0 { - value := getOrDefault(fmt.Sprintf("File %s already exist at this location, override?", name), "false") - if res, _ := strconv.ParseBool(value); !res { - panic(fmt.Sprintf("File %s already exist", filePath)) - } - } - - var config types.ChainsConfig - var chains []ictypes.Chain - - for i := 1; i < 20; i++ { - fmt.Printf("\n===== Creating new chain #%d =====\n", i) - - name := getOrDefault("Name", "cosmos") - chainID := getOrDefault("Chain ID", "localchain-1") - binary := getOrDefault("App Binary", "gaiad") - bech32 := getOrDefault("Bech32 Prefix", "cosmos") - - c := ictypes.NewChainBuilder(name, chainID, binary, "token", bech32) - - denom := getOrDefault("Denom", "utoken") - c.SetDenom(denom) - c.SetGasPrices(getOrDefault("Gas Prices (comma separated)", "0.0"+denom)) - - c.SetIBCPaths(parseIBCPaths(getOrDefault("IBC Paths (comma separated)", ""))) - - c.SetDockerImage(ibc.DockerImage{ - Repository: getOrDefault("Docker Repo", "ghcr.io/strangelove-ventures/heighliner/gaia"), - Version: getOrDefault("Docker Tag / Branch Version", "v16.0.0"), - UidGid: "1025:1025", - }) - if i == 0 { - c.SetHostPortOverride(types.BaseHostPortOverride()) - } - - if err := c.Validate(); err != nil { - panic(err) - } - - c.SetChainDefaults() - - chains = append(chains, *c) - - res, err := strconv.ParseBool(getOrDefault[string]("\n\n\n === Add more chains? ===", "false")) - if err != nil || !res { - break - } - } - config.Chains = chains - - if err := config.SaveJSON(filePath); err != nil { - panic(err) - } - }, -} - -func parseIBCPaths(input string) []string { - if len(input) == 0 { - return []string{} - } - - return strings.Split(input, ",") -} - -func getOrDefault[T any](output string, defaultVal T) T { - defaultOutput := "" - - defaultType := reflect.TypeOf(defaultVal).Kind() - - switch defaultType { - case reflect.String: - defaultOutput = any(defaultVal).(string) - case reflect.Int: - defaultOutput = strconv.Itoa(any(defaultVal).(int)) - case reflect.Float32, reflect.Float64: - defaultOutput = fmt.Sprintf("%f", any(defaultVal).(float64)) - case reflect.Slice: - if reflect.TypeOf(defaultVal).Elem().Kind() == reflect.String { - defaultOutput = "[]" - } - } - - if defaultOutput == "" && defaultType == reflect.String { - defaultOutput = "''" - } - - fmt.Printf("- %s. (Default %v)\n>>> ", output, defaultOutput) - text, err := reader.ReadString('\n') - - if err != nil || text == "\n" { - return defaultVal - } - - if defaultType == reflect.String { - text = strings.ReplaceAll(text, "\n", "") - } - - return any(text).(T) -} diff --git a/local-interchain/cmd/local-ic/root.go b/local-interchain/cmd/local-ic/root.go deleted file mode 100644 index 7c44f4f66..000000000 --- a/local-interchain/cmd/local-ic/root.go +++ /dev/null @@ -1,79 +0,0 @@ -package main - -import ( - "fmt" - "log" - "os" - "path" - - "github.com/spf13/cobra" -) - -var ( - // This must be global for the Makefile to build properly (ldflags). - MakeFileInstallDirectory string -) - -var rootCmd = &cobra.Command{ - Use: "local-ic", - Short: "Your local IBC interchain of nodes program", - CompletionOptions: cobra.CompletionOptions{ - HiddenDefaultCmd: true, - }, - Run: func(cmd *cobra.Command, args []string) { - if err := cmd.Help(); err != nil { - log.Fatal(err) - } - }, -} - -func GetDirectory() string { - cwd, err := os.Getwd() - if err != nil { - log.Fatal(err) - } - - p := path.Join(cwd, "chains") - - // if the current directory has the 'chains' folder, use that. If not, use the default location. - if f, _ := os.Stat(p); f != nil && f.IsDir() { - files, err := os.ReadDir(p) - if err != nil { - log.Fatal(err) - } - - if len(files) > 0 { - return cwd - } - } - - // Config variable override for the ICTEST_HOME - if res := os.Getenv("ICTEST_HOME"); res != "" { - MakeFileInstallDirectory = res - } - - if MakeFileInstallDirectory == "" { - homeDir, err := os.UserHomeDir() - if err != nil { - log.Fatal(err) - } - - MakeFileInstallDirectory = path.Join(homeDir, "local-interchain") - } - - if err := directoryRequirementChecks(MakeFileInstallDirectory, "chains"); err != nil { - log.Fatal(err) - } - - return MakeFileInstallDirectory -} - -func directoryRequirementChecks(parent string, subDirectories ...string) error { - for _, subDirectory := range subDirectories { - if _, err := os.Stat(path.Join(parent, subDirectory)); os.IsNotExist(err) { - return fmt.Errorf("%s/ folder not found in %s", subDirectory, parent) - } - } - - return nil -} diff --git a/local-interchain/cmd/local-ic/start_chain.go b/local-interchain/cmd/local-ic/start_chain.go deleted file mode 100644 index d45906702..000000000 --- a/local-interchain/cmd/local-ic/start_chain.go +++ /dev/null @@ -1,132 +0,0 @@ -package main - -import ( - "fmt" - "os" - "path" - "path/filepath" - "strings" - - "github.com/spf13/cobra" - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain" - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -const ( - FlagAPIAddressOverride = "api-address" - FlagAPIPortOverride = "api-port" - - FlagRelayerImage = "relayer-image" - FlagRelayerVersion = "relayer-version" - FlagRelayerUidGid = "relayer-uidgid" - FlagRelayerStartupFlags = "relayer-startup-flags" - FlagAuthKey = "auth-key" -) - -var startCmd = &cobra.Command{ - Use: "start ", - Aliases: []string{"s", "run"}, - Short: "Starts up the chain of choice with the config name", - Example: `local-ic start base_ibc -ICTEST_HOME=. local-ic start mychain -local-ic start https://gist.githubusercontent.com/Reecepbcups/70bf59c82c797ead9a5430b8b9d8d852/raw/cecc7be35bcec8b976a5d92e78fd6d56de2e1aa1/cosmoshub_localic_config.json -local-ic start https://pastebin.com/raw/Ummk4DTM -`, - Args: cobra.ExactArgs(1), - Run: func(cmd *cobra.Command, args []string) { - configPath := args[0] - parentDir := GetDirectory() - - if path.IsAbs(configPath) { - dir, err := filepath.Abs(configPath) - if err != nil { - panic(err) - } - - parentDir = dir - configPath = filepath.Base(configPath) - } - - var config *types.Config - var err error - - if strings.HasPrefix(configPath, "http") { - config, err = interchain.LoadConfigFromURL(configPath) - if err != nil { - panic(err) - } - - // last part of the URL to be the test name - configPath = configPath[strings.LastIndex(configPath, "/")+1:] - } else { - configPath, err = GetConfigWithExtension(parentDir, configPath) - if err != nil { - panic(err) - } - - config, err = interchain.LoadConfig(parentDir, configPath) - if err != nil { - panic(err) - } - } - - apiAddr, _ := cmd.Flags().GetString(FlagAPIAddressOverride) - apiPort, _ := cmd.Flags().GetUint16(FlagAPIPortOverride) - - relayerImg := cmd.Flag(FlagRelayerImage).Value.String() - relayerVer := cmd.Flag(FlagRelayerVersion).Value.String() - relayerUidGid := cmd.Flag(FlagRelayerUidGid).Value.String() - relayerFlags := strings.Split(cmd.Flag(FlagRelayerStartupFlags).Value.String(), " ") - - interchain.StartChain(parentDir, configPath, &types.AppStartConfig{ - Address: apiAddr, - Port: apiPort, - Cfg: config, - - Relayer: types.Relayer{ - DockerImage: ibc.DockerImage{ - Repository: relayerImg, - Version: relayerVer, - UidGid: relayerUidGid, - }, - StartupFlags: relayerFlags, - }, - - AuthKey: cmd.Flag(FlagAuthKey).Value.String(), - }) - }, -} - -// GetConfigWithExtension returns the config with the file extension attached if one was not provided. -// If "hub" is passed it, it will search for hub.yaml, hub.yml, or hub.json. -// If an extension is already applied, it will use that. -func GetConfigWithExtension(parentDir, config string) (string, error) { - if path.Ext(config) != "" { - return config, nil - } - - extensions := []string{".yaml", ".yml", ".json"} - for _, ext := range extensions { - fp := path.Join(parentDir, interchain.ChainDir, config+ext) - if _, err := os.Stat(fp); err != nil { - continue - } - - return config + ext, nil - } - - return "", fmt.Errorf("could not find a file with an accepted extension: %s. (%+v)", config, extensions) -} - -func init() { - startCmd.Flags().String(FlagAPIAddressOverride, "127.0.0.1", "override the default API address") - startCmd.Flags().Uint16(FlagAPIPortOverride, 8080, "override the default API port") - - startCmd.Flags().String(FlagRelayerImage, "ghcr.io/cosmos/relayer", "override the docker relayer image") - startCmd.Flags().String(FlagRelayerVersion, "latest", "override the default relayer version") - startCmd.Flags().String(FlagRelayerUidGid, "100:1000", "override the default image UID:GID") - startCmd.Flags().String(FlagRelayerStartupFlags, "--block-history=100", "override the default relayer startup flags") - - startCmd.Flags().String(FlagAuthKey, "", "require an auth key to use the internal API") -} diff --git a/local-interchain/contracts/cw_ibc_example.wasm b/local-interchain/contracts/cw_ibc_example.wasm deleted file mode 100644 index 43448ef74..000000000 Binary files a/local-interchain/contracts/cw_ibc_example.wasm and /dev/null differ diff --git a/local-interchain/docs/REST_API.md b/local-interchain/docs/REST_API.md deleted file mode 100644 index d5b185560..000000000 --- a/local-interchain/docs/REST_API.md +++ /dev/null @@ -1,169 +0,0 @@ -# Interacting with the chains - -Since local-interchain exposes a REST API, you can interact with the chains using any language that supports HTTP requests. A default python client example can be found in the [python folder](../python/) and [rust](../rust/README.md). - -# Contents - -- [REST API](#rest-api) - - [Defaults](#defaults) - - [Environment Variables](#environment-variables) - - [Actions](#actions) - - [Node Actions](#node-actions) - - [Chain Query](#chain-query) - - [App Binary](#app-binary) - - [Execute](#execute) - - [Relaying Actions](#relaying-actions) - - [Relayer Execution](#relayer-execution) - - [Stop Relayer](#stop-relayer) - - [Start Relayer](#start-relayer) - - [Get Channels](#get-channels) - - [Using Actions](#using-actions) - - [Unix Curl Command](#unix-curl-command) - - [Python](#python-client) - ---- - -# REST API - -## Defaults - -By default, the API is served at . You can modify this before starting the binary with `--api-address` and `--api-port`. - -## Environment Variables - -`%RPC%`, `%HOME%`, and `%CHAIN_ID%` are supported in the configuration files and in this API anywhere. These are replaced with the chain's RPC address, the chain's home directory, and the chain's ID respectively. Useful for transactions and queries which may require such data. - ---- - -## Actions - -Local-Interchain supports the following list of actions on any node or relayer. These are all done through POST requests to the API, even if they are just fetching data. - -**NOTE** Action values may change in the future. Refer to [the API handler](../interchain/handlers/actions.go) for the latest options. - -## Node Actions - -### Chain Query - -- action values: "q", "query" -- Executes a query action on a specified chain. - -### App Binary - -- action values: "b", "bin", "binary" -- Description: Executes a binary action on the specified chain (ex: appd). - -### Execute - -- action values: "e", "exec", "execute" -- Description: Executes a general Linux action on the specified chain's docker instance (ex: ls -la). - -## Relaying Actions - -### Relayer Execution - -- action values: "relayer", "relayer-exec", "relayer_exec", "relayerExec" -- Description: Executes a relayer-specific action on the specified chain. - -### Stop Relayer - -- action values: "stop-relayer", "stop_relayer", "stopRelayer" -- Description: Stops the relayer associated with the specified chain. - -### Start Relayer - -- action values: "start-relayer", "start_relayer", "startRelayer" -- Description: Starts the relayer associated with the specified chain. - -### Get Channels - -- action values: "get_channels", "get-channels", "getChannels" -- Description: Retrieves the channels for the specified chain using the relayer. - ---- - -## Using Actions - -The following examples use the [chains/base.json](../chains/base.json) chain example (`local-ic start base`) - -### Unix Curl Command - - -```bash -# Get the total supply -curl -X POST -H "Content-Type: application/json" -d '{ - "chain_id": "localjuno-1", - "action": "query", - "cmd": "bank total" -}' http://127.0.0.1:8080/ -# {"supply":[{"denom":"ujuno","amount":"110020857635458"}],"pagination":{"next_key":null,"total":"0"}} - - -# Set the config for a chain's transactions to always use keyring-backend test -# as the default. (Persist for the entire runtime of a session) -curl -X POST -H "Content-Type: application/json" -d '{ - "chain_id": "localjuno-1", - "action": "binary", - "cmd": "config keyring-backend test" -}' http://127.0.0.1:8080/ - - -# Execute a Tx sending funds -# The key here 'acc0' was set by name in the genesis section of the chain's config. -curl -X POST -H "Content-Type: application/json" -d '{ - "chain_id": "localjuno-1", - "action": "binary", - "cmd": "tx bank send acc0 juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0 500ujuno --fees 5000ujuno --node %RPC% --chain-id=%CHAIN_ID% --yes --output json" -}' http://127.0.0.1:8080/ - - -# Querying said Tx hash returned from above. -# NOTE: -# - the cmd does not require 'query' (or 'q') as it is added automatically. -# - This Tx hash will not be available on your machine. -curl -X POST -H "Content-Type: application/json" -d '{ - "chain_id": "localjuno-1", - "action": "query", - "cmd": "tx 7C68B0E0AFF733D93636BAD69D645B11C9C11C5C883394E99658BFCC05BF20DD" -}' http://127.0.0.1:8080/ -``` - -### Python Client - -A full Python client can be found in the [python folder](../python/). This is just a snippet of code for example purposes. - -```python -# local-ic start juno_ibc - -import httpx # pip install httpx - -api = "http://127.0.0.1:8080/" - -# Pushes through any packets pending on channel-0 (both ways) -print( - httpx.post( - api, - json={ - "chain_id": "localjuno-1", - "action": "relayer-exec", - "cmd": "rly transact flush juno-ibc-1 channel-0", - }, - ).text -) - -# Queries all channels on the localjuno-1 chain -# returning a JSON object of them -print( - httpx.post( - api, - json={ - "chain_id": "localjuno-1", - "action": "relayer-exec", - "cmd": "rly q channels localjuno-1", - }, - ).json() -) -# {'chain_id': 'localjuno-1', 'channel_id': 'channel-0', 'client_id': '07-tendermint-0', 'connection_hops': ['connection-0'], 'counterparty': {'chain_id': 'localjuno-2', 'channel_id': 'channel-0', 'client_id': '07-tendermint-0', 'connection_id': 'connection-0', 'port_id': 'transfer'}, 'ordering': 'ORDER_UNORDERED', 'port_id': 'transfer', 'state': 'STATE_OPEN', 'version': 'ics20-1'} - -``` - \ No newline at end of file diff --git a/local-interchain/docs/WINDOWS.md b/local-interchain/docs/WINDOWS.md deleted file mode 100644 index f981815db..000000000 --- a/local-interchain/docs/WINDOWS.md +++ /dev/null @@ -1,113 +0,0 @@ -# Setup Windows Environment to Run Local Interchain - -This is a step-by-step guide to setup a Windows environment and add the missing dependencies to run Local Interchain - -**Local Interchain enables developers to :-** -- Quickly spin up a local testnet for any wasm chain. -- Test IBC connection compatibility on a high level between multiple local chains. -- Execute binary commands such as `tx decode` *[see example](../python/api_test.py)*. -- Store and execute wasm smart contracts *[see example](../python/daodao.py)*. -- Local RPC node + REST API which enables building scripts with any language. -- Configure chains to be launched within the testing environment, adjusting parameters such as gas options, number of validators, IBC paths, governance parameters, genesis accounts, and much more. -- Configure IBC relayers. - -Local Interchain is the optimal playground for developers to flexibly test chain infrastructure and smart contract development. - -This guide aims to configure a Windows OS environment to be compatible with Local Interchain. - -This will allow wasm chains to run locally on a Windows system which has been unprecedented until now. - -## Requirements - -1. Make sure the Windows version is compatible with [Docker](https://www.docker.com/). - -**Windows Desktop**: Win 7 or higher - -**Windows Server**: Windows Server 2016 or higher - -2. Enable Virtualization. -You can check if Virtualization is enabled by opening Task Manager and going to Performance as shown below. -If your Windows system is missing Hyper-V, you can follow [this guide](https://www.nakivo.com/blog/install-configure-hyper-v-manager/) to install and enable it. -![](https://i.imgur.com/8A6fRu0.png) - -3. Permissions to run software installers and write to Program Files. - -## Environment Setup - -### 1. Installing Docker -Make sure you have wsl installed, you can check by running **Windows PowerShell** as administrator and running `wsl --install` which would install wsl2 if missing. - -For Win 10 and Win 11, follow [this guide](https://docs.docker.com/desktop/install/windows-install/) to setup and install Docker Desktop on your Windows system. - -For Windows Server, Win 7 and Win 8/8.1, use this [installation guide](https://github.com/microsoft/docker/blob/master/docs/installation/windows.md) for installing Docker Toolbox. - -Confirm docker setup by running `docker version` in a cmd or a shell. - -### 2. Installing Git -In case, you do not have Git already installed, use [this link](https://git-scm.com/download/win) to setup Git on Windows. - -After installation, you will be able to run `git --version` in a cmd or a shell. - -*Note: The guide assumes you installed Git under C:/Program Files/Git. If you have chosen a different installation location then use it instead.* - -### 3. Installing Go -If you already have Go installed, run `go version` and make sure it is version1.19 or higher. - -In case, you have an older version or do not have Golang installed, go to [golang downloads](https://go.dev/dl/) and download the featured Windows installer *.wsi* - -After installation, open a new cmd or shell, and you will be able to run `go version` - -### 4. Downloading Make -Make is a tool which controls the generation of executables and other non-source files of a program from the source files. It is necessary for building *`makefiles`*. - -Make does not come with Windows, so we need to download the make binary which you can find provided by GNU [here](https://gnuwin32.sourceforge.net/packages/make.htm) and download the Binaries zip, or go to [this link](https://gnuwin32.sourceforge.net/downlinks/make-bin-zip.php) directly and begin downloading. - -1. Extract the downloaded zip file -2. Go to the *`bin`* folder, copy *`make.exe`* -3. Go to *`C:/Program Files/Git/mingw64/bin`* and paste *`make.exe`* -4. Through the control panel or your start menu, search and go to **Edit the system environment variables**, on Advanced tab, click Environment Variables, click Path and choose Edit, and add `C:\Program Files\Git\mingw64\bin` - -![](https://i.imgur.com/dyK2YMm.png) - -After finishing the steps above, open a new cmd or shell, and you will be able to run `make --version` - -### 5. Installing GCC -GCC is the GNU compiler collection and it is necessary for compiling [cgo](https://pkg.go.dev/cmd/cgo). - -GCC does not come with Windows, and the best compatible setup I've found was using [this guide](https://www.guru99.com/c-gcc-install.html) which works on both Windows Server and Windows Desktop including Win 11. - -1. Go to [codeblocks](http://www.codeblocks.org/downloads/binaries/) and select the Windows option, then download the `mingw-setup.exe` binary. -2. Start installation. -3. Keep default component selection. - -![](https://i.imgur.com/EeZUeJU.png) - -4. Choose installation folder and click Install. - -![](https://i.imgur.com/D25unIm.png) - -5. After installation, no need to run *Code::Blocks* and click Next then Finish. - -![](https://i.imgur.com/rvJmv9t.png) - -6. Go to your installation folder i.e. *`C:\Program Files\CodeBlocks\MinGW\bin`* and you should find **gcc.exe** -7. Through the control panel or your start menu, search and go to **Edit the system environment variables**, on Advanced tab, click Environment Variables, click Path and choose Edit, and add `C:\Program Files\CodeBlocks\MinGW\bin` (choose the path from step 4 + \MinGW\bin) - -After finishing the steps above, open a new cmd or shell, and you will be able to run `gcc --version` - -## Running Local Interchain - -1. Start the docker daemon by running **Docker Desktop** on Win 10/11 or using [**Docker Quickstart Terminal**](https://github.com/microsoft/docker/blob/master/docs/installation/windows.md#using-the-docker-quickstart-terminal) if you have installed Docker Toolbox. -2. Clone the Local Interchain Repo. -```bash -git clone https://github.com/strangelove-ventures/interchaintest.git -cd interchaintest/local-interchain -``` -3. Run `make install` -4. Run `local-ic start base.json` - -Wait for it to set up and go to *https://127.0.0.1:8080/info*, you should see each local chain running in its own docker container `docker ps` - -Now you are running a complete local wasm IBC-connected environment on a Windows operating system. - -Happy building! diff --git a/local-interchain/go.mod b/local-interchain/go.mod deleted file mode 100644 index c6d10f19d..000000000 --- a/local-interchain/go.mod +++ /dev/null @@ -1,275 +0,0 @@ -module github.com/strangelove-ventures/interchaintest/local-interchain - -go 1.22.2 - -replace ( - github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d - github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 - github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.2 //indirect - github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/strangelove-ventures/interchaintest/v8 v8.0.0-00010101000000-000000000000 => ../ - github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 -) - -require ( - cosmossdk.io/math v1.3.0 - github.com/cosmos/cosmos-sdk v0.50.8 - github.com/cosmos/go-bip39 v1.0.0 - github.com/go-playground/validator v9.31.0+incompatible - github.com/gorilla/mux v1.8.1 - github.com/spf13/cobra v1.8.0 - github.com/strangelove-ventures/interchaintest/v8 v8.0.0-00010101000000-000000000000 - github.com/stretchr/testify v1.9.0 - go.uber.org/zap v1.27.0 - gopkg.in/yaml.v3 v3.0.1 - -) - -require ( - cloud.google.com/go v0.112.1 // indirect - cloud.google.com/go/compute v1.25.1 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.6 // indirect - cloud.google.com/go/storage v1.38.0 // indirect - cosmossdk.io/api v0.7.5 // indirect - cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/core v0.11.0 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect - cosmossdk.io/errors v1.0.1 // indirect - cosmossdk.io/log v1.3.1 // indirect - cosmossdk.io/store v1.1.0 // indirect - cosmossdk.io/x/evidence v0.1.0 // indirect - cosmossdk.io/x/feegrant v0.1.0 // indirect - cosmossdk.io/x/tx v0.13.3 // indirect - cosmossdk.io/x/upgrade v0.1.3 // indirect - filippo.io/edwards25519 v1.0.0 // indirect - github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.2 // indirect - github.com/BurntSushi/toml v1.4.0 // indirect - github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect - github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect - github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/zstd v1.5.5 // indirect - github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect - github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect - github.com/avast/retry-go/v4 v4.5.1 // indirect - github.com/aws/aws-sdk-go v1.44.224 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect - github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/bits-and-blooms/bitset v1.10.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/chzyer/readline v1.5.1 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v1.1.0 // indirect - github.com/cockroachdb/redact v1.1.5 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v0.38.10 // indirect - github.com/cometbft/cometbft-db v0.10.0 // indirect - github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-db v1.0.2 // indirect - github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect - github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.5.0 // indirect - github.com/cosmos/iavl v1.1.2 // indirect - github.com/cosmos/ibc-go/modules/capability v1.0.0 // indirect - github.com/cosmos/ibc-go/v8 v8.3.2 // indirect - github.com/cosmos/ics23/go v0.10.0 // indirect - github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74 // indirect - github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect - github.com/danieljoos/wincred v1.1.2 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/deckarep/golang-set v1.8.0 // indirect - github.com/decred/base58 v1.0.4 // indirect - github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect - github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.9+incompatible // indirect - github.com/docker/go-connections v0.5.0 // indirect - github.com/docker/go-units v0.5.0 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/emicklei/dot v1.6.1 // indirect - github.com/ethereum/go-ethereum v1.14.5 // indirect - github.com/fatih/color v1.16.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/getsentry/sentry-go v0.27.0 // indirect - github.com/go-kit/kit v0.12.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.4.1 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/gobwas/httphead v0.1.0 // indirect - github.com/gobwas/pool v0.2.1 // indirect - github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/googleapis v1.4.1 // indirect - github.com/gogo/protobuf v1.3.3 // indirect - github.com/golang/glog v1.2.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/mock v1.6.0 // indirect - github.com/golang/protobuf v1.5.4 // indirect - github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/orderedcode v0.0.1 // indirect - github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.2 // indirect - github.com/gorilla/handlers v1.5.2 // indirect - github.com/gorilla/websocket v1.5.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect - github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect - github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect - github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.4 // indirect - github.com/hashicorp/go-hclog v1.5.0 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-metrics v0.5.3 // indirect - github.com/hashicorp/go-plugin v1.5.2 // indirect - github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.7.0 // indirect - github.com/hashicorp/golang-lru v1.0.2 // indirect - github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hashicorp/yamux v0.1.1 // indirect - github.com/hdevalence/ed25519consensus v0.1.0 // indirect - github.com/holiman/uint256 v1.2.4 // indirect - github.com/huandu/skiplist v1.2.0 // indirect - github.com/iancoleman/strcase v0.3.0 // indirect - github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 // indirect - github.com/improbable-eng/grpc-web v0.15.0 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/go-cid v0.4.1 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.7 // indirect - github.com/klauspost/cpuid/v2 v2.2.7 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/lib/pq v1.10.7 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-libp2p v0.31.0 // indirect - github.com/linxGnu/grocksdb v1.8.14 // indirect - github.com/magiconair/properties v1.8.7 // indirect - github.com/manifoldco/promptui v0.9.0 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect - github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect - github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20240603204351-26b456ae3afe // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.14.1 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect - github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.1.0 // indirect - github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.11.0 // indirect - github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.9.0 // indirect - github.com/multiformats/go-multihash v0.2.3 // indirect - github.com/multiformats/go-varint v0.0.7 // indirect - github.com/ncruces/go-strftime v0.1.9 // indirect - github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect - github.com/oklog/run v1.1.0 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc2 // indirect - github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect - github.com/pierrec/xxHash v0.1.5 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.19.0 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.52.2 // indirect - github.com/prometheus/procfs v0.13.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.32.0 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.18.2 // indirect - github.com/subosito/gotenv v1.6.0 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tidwall/btree v1.7.0 // indirect - github.com/tidwall/gjson v1.17.1 // indirect - github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect - github.com/tyler-smith/go-bip32 v1.0.0 // indirect - github.com/tyler-smith/go-bip39 v1.1.0 // indirect - github.com/ulikunitz/xz v0.5.11 // indirect - github.com/zondax/hid v0.9.2 // indirect - github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.3.8 // indirect - go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect - go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.24.0 // indirect - golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.22.0 // indirect - google.golang.org/api v0.169.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect - google.golang.org/grpc v1.64.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect - gopkg.in/go-playground/assert.v1 v1.2.1 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gotest.tools/v3 v3.5.1 // indirect - lukechampine.com/blake3 v1.2.1 // indirect - modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect - modernc.org/libc v1.52.1 // indirect - modernc.org/mathutil v1.6.0 // indirect - modernc.org/memory v1.8.0 // indirect - modernc.org/sqlite v1.30.1 // indirect - modernc.org/strutil v1.2.0 // indirect - modernc.org/token v1.1.0 // indirect - nhooyr.io/websocket v1.8.7 // indirect - pgregory.net/rapid v1.1.0 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect -) diff --git a/local-interchain/go.sum b/local-interchain/go.sum deleted file mode 100644 index 357f47c36..000000000 --- a/local-interchain/go.sum +++ /dev/null @@ -1,1881 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= -cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= -cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= -cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg= -cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= -cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= -cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= -cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= -cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= -cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= -cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= -cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= -cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= -cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= -cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= -cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= -cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= -cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= -cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= -cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= -cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= -cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= -filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= -github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= -github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= -github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= -github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= -github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= -github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= -github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= -github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= -github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/avast/retry-go/v4 v4.5.1 h1:AxIx0HGi4VZ3I02jr78j5lZ3M6x1E0Ivxa6b0pUUh7o= -github.com/avast/retry-go/v4 v4.5.1/go.mod h1:/sipNsvNB3RRuT5iNcb6h73nw3IBmXJ/H3XrCQYSOpc= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.44.224 h1:09CiaaF35nRmxrzWZ2uRq5v6Ghg/d2RiPjZnSgtt+RQ= -github.com/aws/aws-sdk-go v1.44.224/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= -github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= -github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= -github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= -github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= -github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= -github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw= -github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= -github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= -github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= -github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= -github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= -github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.10 h1:2ePuglchT+j0Iao+cfmt/nw5U7K2lnGDzXSUPGVdXaU= -github.com/cometbft/cometbft v0.38.10/go.mod h1:jHPx9vQpWzPHEAiYI/7EDKaB1NXhK6o3SArrrY8ExKc= -github.com/cometbft/cometbft-db v0.10.0 h1:VMBQh88zXn64jXVvj39tlu/IgsGR84T7ImjS523DCiU= -github.com/cometbft/cometbft-db v0.10.0/go.mod h1:7RR7NRv99j7keWJ5IkE9iZibUTKYdtepXTp7Ra0FxKk= -github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= -github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= -github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= -github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= -github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.8 h1:2UJHssUaGHTl4/dFp8xyREKAnfiRU6VVfqtKG9n8w5g= -github.com/cosmos/cosmos-sdk v0.50.8/go.mod h1:Zb+DgHtiByNwgj71IlJBXwOq6dLhtyAq3AgqpXm/jHo= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= -github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= -github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= -github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= -github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= -github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= -github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= -github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= -github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= -github.com/cosmos/ibc-go/v8 v8.3.2 h1:8X1oHHKt2Bh9hcExWS89rntLaCKZp2EjFTUSxKlPhGI= -github.com/cosmos/ibc-go/v8 v8.3.2/go.mod h1:WVVIsG39jGrF9Cjggjci6LzySyWGloz194sjTxiGNIE= -github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= -github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74 h1:6atU/xizTL10q6EprP7oRuvfgUP2F6puvutnVoE+FRc= -github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74/go.mod h1:h/RkwOppo5AJj+1pkQyfjqU1MPdpohD/S6oEeAXpGZY= -github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= -github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= -github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= -github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= -github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= -github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= -github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= -github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI= -github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.14.5 h1:szuFzO1MhJmweXjoM5nSAeDvjNUH3vIQoMzzQnfvjpw= -github.com/ethereum/go-ethereum v1.14.5/go.mod h1:VEDGGhSxY7IEjn98hJRFXl/uFvpRgbIIf2PpXiyGGgc= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= -github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= -github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -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= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= -github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= -github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator v9.31.0+incompatible h1:UA72EPEogEnq76ehGdEDp4Mit+3FDh548oRqwVgNsHA= -github.com/go-playground/validator v9.31.0+incompatible/go.mod h1:yrEkQXlcI+PugkyDjY2bRrL/UBU4f3rvrgkN3V8JEig= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= -github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= -github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= -github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk= -github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= -github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= -github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= -github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= -github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= -github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= -github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -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/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= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0= -github.com/hashicorp/go-getter v1.7.4/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= -github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= -github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= -github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= -github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= -github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= -github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= -github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= -github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= -github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= -github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= -github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= -github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= -github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= -github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= -github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= -github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= -github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= -github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= -github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= -github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= -github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= -github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-libp2p v0.31.0 h1:LFShhP8F6xthWiBBq3euxbKjZsoRajVEyBS9snfHxYg= -github.com/libp2p/go-libp2p v0.31.0/go.mod h1:W/FEK1c/t04PbRH3fA9i5oucu5YcgrG0JVoBWT1B7Eg= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= -github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= -github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= -github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20240603204351-26b456ae3afe h1:0fcCSfvBgbagEsEMkZuxgA3Ex7IN9i1Hon0fwgMLpQw= -github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20240603204351-26b456ae3afe/go.mod h1:Q5BxOd9FxJqYp4vCiLGVdetecPcWTmUQIu0bRigYosU= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= -github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= -github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= -github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= -github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= -github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= -github.com/multiformats/go-multiaddr v0.11.0 h1:XqGyJ8ufbCE0HmTDwx2kPdsrQ36AGPZNZX6s6xfJH10= -github.com/multiformats/go-multiaddr v0.11.0/go.mod h1:gWUm0QLR4thQ6+ZF6SXUw8YjtwQSPapICM+NmCkxHSM= -github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= -github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= -github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= -github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= -github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= -github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= -github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= -github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= -github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= -github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= -github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/oxyno-zeta/gomock-extra-matcher v1.2.0 h1:WPEclU0y0PMwUzdDcaKZvld4aXpa3fkzjiUMQdcBEHg= -github.com/oxyno-zeta/gomock-extra-matcher v1.2.0/go.mod h1:S0r7HmKeCGsHmvIVFMjKWwswb4+30nCNWbXRMBVPkaU= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= -github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= -github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= -github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= -github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= -github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= -github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= -github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= -github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= -github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.1.5-0.20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= -github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= -github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= -github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U= -github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= -github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= -github.com/tyler-smith/go-bip32 v1.0.0/go.mod h1:onot+eHknzV4BVPwrzqY5OoVpyCvnwD7lMawL5aQupE= -github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= -github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= -github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= -github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= -github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= -go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= -go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= -go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= -google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= -google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= -google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= -launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= -lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= -lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= -modernc.org/cc/v4 v4.21.2 h1:dycHFB/jDc3IyacKipCNSDrjIC0Lm1hyoWOZTRR20Lk= -modernc.org/cc/v4 v4.21.2/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= -modernc.org/ccgo/v4 v4.17.10 h1:6wrtRozgrhCxieCeJh85QsxkX/2FFrT9hdaWPlbn4Zo= -modernc.org/ccgo/v4 v4.17.10/go.mod h1:0NBHgsqTTpm9cA5z2ccErvGZmtntSM9qD2kFAs6pjXM= -modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= -modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= -modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= -modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= -modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI= -modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= -modernc.org/libc v1.52.1 h1:uau0VoiT5hnR+SpoWekCKbLqm7v6dhRL3hI+NQhgN3M= -modernc.org/libc v1.52.1/go.mod h1:HR4nVzFDSDizP620zcMCgjb1/8xk2lg5p/8yjfGv1IQ= -modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= -modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= -modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= -modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= -modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= -modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= -modernc.org/sqlite v1.30.1 h1:YFhPVfu2iIgUf9kuA1CR7iiHdcEEsI2i+yjRYHscyxk= -modernc.org/sqlite v1.30.1/go.mod h1:DUmsiWQDaAvU4abhc/N+djlom/L2o8f7gZ95RCvyoLU= -modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= -modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= -modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= -modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= -nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= -pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/local-interchain/interchain/config.go b/local-interchain/interchain/config.go deleted file mode 100644 index 1cd683f85..000000000 --- a/local-interchain/interchain/config.go +++ /dev/null @@ -1,230 +0,0 @@ -package interchain - -import ( - "encoding/json" - "fmt" - "io" - "log" - "net/http" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - types "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/util" - "gopkg.in/yaml.v3" - - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" -) - -const ChainDir = "chains" - -func LoadConfig(installDir, chainCfgFile string) (*types.Config, error) { - var config types.Config - - configFile := "base.json" - if chainCfgFile != "" { - configFile = chainCfgFile - } - - // A nested "chains" dir is required within the parent you specify. - chainsDir := filepath.Join(installDir, ChainDir) - cfgFilePath := filepath.Join(chainsDir, configFile) - - bz, err := os.ReadFile(cfgFilePath) - if err != nil { - return nil, err - } - - if strings.HasSuffix(chainCfgFile, ".json") { - if err = json.Unmarshal(bz, &config); err != nil { - return nil, fmt.Errorf("error unmarshalling json config: %w", err) - } - } else { - if err := yaml.Unmarshal(bz, &config); err != nil { - return nil, fmt.Errorf("error unmarshalling yaml config: %w", err) - } - } - - log.Println("Using directory:", installDir) - log.Println("Using chain config:", cfgFilePath) - - return setConfigDefaults(&config), nil -} - -func LoadConfigFromURL(url string) (*types.Config, error) { - resp, err := http.Get(url) - if err != nil { - log.Fatalln(err) - } - defer resp.Body.Close() - - body, err := io.ReadAll(resp.Body) - if err != nil { - log.Fatalln(err) - } - - var config types.Config - err = json.Unmarshal(body, &config) - if err != nil { - return &config, fmt.Errorf("error unmarshalling config: %w", err) - } - - return setConfigDefaults(&config), nil -} - -func setConfigDefaults(config *types.Config) *types.Config { - chains := config.Chains - - for i := range chains { - chain := chains[i] - chain.SetChainDefaults() - util.ReplaceStringValues(&chain, "%DENOM%", chain.Denom) - util.ReplaceStringValues(&chain, "%BIN%", chain.Binary) - util.ReplaceStringValues(&chain, "%CHAIN_ID%", chain.ChainID) - - chains[i] = chain - - if config.Chains[i].Debugging { - fmt.Printf("Loaded %v\n", config) - } - } - - return config -} - -// ConfigurationOverrides creates a map of config file overrides for filenames, their keys, and values. -func ConfigurationOverrides(cfg types.Chain) map[string]any { - var toml map[string]any - - switch cfg.ChainType { - case "cosmos": - toml = cosmosConfigOverride(cfg) - default: - toml = make(testutil.Toml, 0) - } - - for _, o := range cfg.ConfigFileOverrides { - for k, v := range o.Paths { - - // if o.File is empty, we only save the KV pair directly - if o.File == "" { - // "config_file_overrides": [ - // {"paths": {"--load-state": "state/avs-and-eigenlayer-deployed-anvil-state.json"}} - // ], - - toml[k] = v - continue - } - - // create file key if it does not exist - if _, ok := toml[o.File]; !ok { - toml[o.File] = make(testutil.Toml, 0) - } - - // if there is no path, save the KV directly without the header - if !strings.Contains(k, ".") { - toml[o.File].(testutil.Toml)[k] = v - continue - } - - // separate the path and key - path, key := strings.Split(k, ".")[0], strings.Split(k, ".")[1] - - // create path key if it does not exist - if _, ok := toml[o.File].(testutil.Toml)[path]; !ok { - toml[o.File].(testutil.Toml)[path] = testutil.Toml{} - } - - // save the new KV pair - toml[o.File].(testutil.Toml)[path].(testutil.Toml)[key] = v - } - } - - fmt.Println(cfg.ChainID, "Toml File", toml) - return toml -} - -func cosmosConfigOverride(cfg types.Chain) testutil.Toml { - blockTime := cfg.BlockTime - if _, err := time.ParseDuration(blockTime); err != nil { - panic(err) - } - - tomlCfg := testutil.Toml{ - "consensus": testutil.Toml{ - "timeout_commit": blockTime, - "timeout_propose": blockTime, - }, - } - - return testutil.Toml{"config/config.toml": tomlCfg} -} - -func CreateChainConfigs(cfg types.Chain) (ibc.ChainConfig, *interchaintest.ChainSpec) { - hostPorts := make(map[int]int, len(cfg.HostPortOverride)) - for k, v := range cfg.HostPortOverride { - internalPort, err := strconv.Atoi(k) - if err != nil { - panic(err) - } - externalPort, err := strconv.Atoi(v) - if err != nil { - panic(err) - } - - hostPorts[internalPort] = externalPort - } - - chainCfg := ibc.ChainConfig{ - Type: cfg.ChainType, - Name: cfg.Name, - ChainID: cfg.ChainID, - Bin: cfg.Binary, - Bech32Prefix: cfg.Bech32Prefix, - Denom: cfg.Denom, - CoinType: fmt.Sprintf("%d", cfg.CoinType), - GasPrices: cfg.GasPrices, - GasAdjustment: cfg.GasAdjustment, - TrustingPeriod: cfg.TrustingPeriod, - HostPortOverride: hostPorts, - - // TODO: Allow host mount in the future - NoHostMount: false, - ModifyGenesis: cosmos.ModifyGenesis(cfg.Genesis.Modify), - ConfigFileOverrides: ConfigurationOverrides(cfg), - EncodingConfig: nil, - - InterchainSecurityConfig: cfg.ICSVersionOverride, - } - - if cfg.DockerImage.Version == "" { - panic("DockerImage.Version is required in your config") - } - - if cfg.DockerImage.Repository != "" { - chainCfg.Images = []ibc.DockerImage{ - { - Repository: cfg.DockerImage.Repository, - Version: cfg.DockerImage.Version, - UidGid: cfg.DockerImage.UidGid, - }, - } - } - - chainSpecs := &interchaintest.ChainSpec{ - Name: cfg.Name, - Version: cfg.DockerImage.Version, - ChainName: cfg.ChainID, - ChainConfig: chainCfg, - NumValidators: &cfg.NumberVals, - NumFullNodes: &cfg.NumberNode, - } - - return chainCfg, chainSpecs -} diff --git a/local-interchain/interchain/faket.go b/local-interchain/interchain/faket.go deleted file mode 100644 index 964e1d9fa..000000000 --- a/local-interchain/interchain/faket.go +++ /dev/null @@ -1,60 +0,0 @@ -package interchain - -import ( - "fmt" - "testing" -) - -// This is a fake impl of testing.T so that ICtest is happy to use it for logging. - -type FakeI interface { - testing.T -} - -type FakeTesting struct { - FakeName string -} - -// impl all of testing.T for FakeTesting -func (t FakeTesting) Name() string { - return t.FakeName -} - -func (t FakeTesting) Cleanup(func()) { -} - -func (t FakeTesting) Skip(...any) { -} - -func (t FakeTesting) Parallel() { -} - -func (t FakeTesting) Failed() bool { - return false -} - -func (t FakeTesting) Skipped() bool { - return false -} - -func (t FakeTesting) Error(...any) { -} - -func (t FakeTesting) Errorf(format string, args ...any) { -} - -func (t FakeTesting) Fail() { -} - -func (t FakeTesting) FailNow() { -} - -func (t FakeTesting) Fatal(...any) { -} - -func (t FakeTesting) Helper() { -} - -func (t FakeTesting) Logf(format string, args ...any) { - fmt.Printf(format, args...) -} diff --git a/local-interchain/interchain/genesis.go b/local-interchain/interchain/genesis.go deleted file mode 100644 index 2d34f5975..000000000 --- a/local-interchain/interchain/genesis.go +++ /dev/null @@ -1,89 +0,0 @@ -package interchain - -import ( - "context" - "log" - "strings" - - sdk "github.com/cosmos/cosmos-sdk/types" - types "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -func AddGenesisKeysToKeyring(ctx context.Context, config *types.Config, chains []ibc.Chain) { - for idx, chain := range config.Chains { - switch chains[idx].(type) { - case *cosmos.CosmosChain: - chainObj := chains[idx].(*cosmos.CosmosChain) - for _, acc := range chain.Genesis.Accounts { - if acc.Mnemonic != "" { - if err := chainObj.RecoverKey(ctx, acc.Name, acc.Mnemonic); err != nil { - panic(err) - } - } - } - default: - continue - } - - } -} - -func PostStartupCommands(ctx context.Context, config *types.Config, chains []ibc.Chain) { - for idx, chain := range config.Chains { - switch chains[idx].(type) { - case *cosmos.CosmosChain: - chainObj := chains[idx].(*cosmos.CosmosChain) - - for _, cmd := range chain.Genesis.StartupCommands { - log.Println("Running startup command", chainObj.Config().ChainID, cmd) - - cmd = strings.ReplaceAll(cmd, "%HOME%", chainObj.Validators[0].HomeDir()) - cmd = strings.ReplaceAll(cmd, "%CHAIN_ID%", chainObj.Config().ChainID) - - stdout, stderr, err := chainObj.Exec(ctx, strings.Split(cmd, " "), []string{}) - - output := stdout - if len(output) == 0 { - output = stderr - } else if err != nil { - log.Println("Error running startup command", chainObj.Config().ChainID, cmd, err) - } - - log.Println("Startup command output", chainObj.Config().ChainID, cmd, string(output)) - } - } - - } -} - -func SetupGenesisWallets(config *types.Config, chains []ibc.Chain) map[ibc.Chain][]ibc.WalletAmount { - // iterate all chains chain's configs & setup accounts - additionalWallets := make(map[ibc.Chain][]ibc.WalletAmount) - for idx, chain := range config.Chains { - switch chains[idx].(type) { - case *cosmos.CosmosChain: - chainObj := chains[idx].(*cosmos.CosmosChain) - for _, acc := range chain.Genesis.Accounts { - amount, err := sdk.ParseCoinsNormalized(acc.Amount) - if err != nil { - panic(err) - } - - for _, coin := range amount { - additionalWallets[chainObj] = append(additionalWallets[chainObj], ibc.WalletAmount{ - Address: acc.Address, - Amount: coin.Amount, - Denom: coin.Denom, - }) - } - } - // case *ethereum.EthereumChain: - default: - continue - } - - } - return additionalWallets -} diff --git a/local-interchain/interchain/handlers/actions.go b/local-interchain/interchain/handlers/actions.go deleted file mode 100644 index d40a03c3a..000000000 --- a/local-interchain/interchain/handlers/actions.go +++ /dev/null @@ -1,284 +0,0 @@ -package handlers - -import ( - "context" - "encoding/json" - "fmt" - "net/http" - "strconv" - "strings" - - sdkmath "cosmossdk.io/math" - - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/util" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -type actions struct { - ctx context.Context - ic *interchaintest.Interchain - vals map[string][]*cosmos.ChainNode - cc map[string]*cosmos.CosmosChain - - relayer ibc.Relayer - eRep ibc.RelayerExecReporter - - authKey string -} - -type ActionHandler struct { - ChainId string `json:"chain_id"` - NodeIndex int `json:"node_index"` - Action string `json:"action"` - Cmd string `json:"cmd"` - AuthKey string `json:"auth_key,omitempty"` -} - -func NewActions( - ctx context.Context, ic *interchaintest.Interchain, - cosmosChains map[string]*cosmos.CosmosChain, vals map[string][]*cosmos.ChainNode, - relayer ibc.Relayer, eRep ibc.RelayerExecReporter, - authKey string, -) *actions { - return &actions{ - ctx: ctx, - ic: ic, - vals: vals, - cc: cosmosChains, - relayer: relayer, - eRep: eRep, - authKey: authKey, - } -} - -func (a *actions) PostActions(w http.ResponseWriter, r *http.Request) { - var ah ActionHandler - err := json.NewDecoder(r.Body).Decode(&ah) - if err != nil { - util.WriteError(w, fmt.Errorf("failed to decode json: %s", err)) - return - } - - if a.authKey != "" && ah.AuthKey != a.authKey { - util.WriteError(w, fmt.Errorf("invalid `auth_key`")) - return - } - - action := ah.Action - if action == "kill-all" { - dockerutil.KillAllInterchaintestContainers(a.ctx) - return - } - - chainId := ah.ChainId - if _, ok := a.vals[chainId]; !ok { - var chainIds []string - for k := range a.vals { - chainIds = append(chainIds, k) - } - - util.Write(w, []byte(fmt.Sprintf(`{"error":"chain_id '%s' not found. available chain ids: %v"}`, chainId, chainIds))) - return - } - - if len(a.vals[chainId]) <= ah.NodeIndex { - util.Write(w, []byte(fmt.Sprintf(`{"error":"node_index '%d' not found. nodes: %v"}`, ah.NodeIndex, len(a.vals[chainId])))) - return - } - - val := a.vals[chainId][ah.NodeIndex] - - ah.Cmd = strings.ReplaceAll(ah.Cmd, "%RPC%", fmt.Sprintf("tcp://%s:26657", val.HostName())) - ah.Cmd = strings.ReplaceAll(ah.Cmd, "%CHAIN_ID%", ah.ChainId) - ah.Cmd = strings.ReplaceAll(ah.Cmd, "%HOME%", val.HomeDir()) - - cmd := strings.Split(ah.Cmd, " ") - - // Output can only ever be 1 thing. So we check which is set, then se the output to the user. - var output []byte - var stdout, stderr []byte - - // parse out special commands if there are any. - cmdMap := make(map[string]string) - if strings.Contains(ah.Cmd, "=") { - for _, c := range strings.Split(ah.Cmd, ";") { - s := strings.Split(c, "=") - cmdMap[s[0]] = s[1] - } - } - - // Node / Docker Linux Actions - switch action { - case "q", "query": - stdout, stderr, err = val.ExecQuery(a.ctx, cmd...) - case "b", "bin", "binary": - stdout, stderr, err = val.ExecBin(a.ctx, cmd...) - case "e", "exec", "execute": - stdout, stderr, err = val.Exec(a.ctx, cmd, []string{}) - case "recover-key": - kn := cmdMap["keyname"] - if err := val.RecoverKey(a.ctx, kn, cmdMap["mnemonic"]); err != nil { - if !strings.Contains(err.Error(), "aborted") { - util.WriteError(w, fmt.Errorf("failed to recover key: %s", err)) - return - } - } - stdout = []byte(fmt.Sprintf(`{"recovered_key":"%s"}`, kn)) - case "overwrite-genesis-file": - if err := val.OverwriteGenesisFile(a.ctx, []byte(cmdMap["new_genesis"])); err != nil { - util.WriteError(w, fmt.Errorf("failed to override genesis file: %s", err)) - return - } - stdout = []byte(fmt.Sprintf(`{"overwrote_genesis_file":"%s"}`, val.ContainerID())) - case "add-full-nodes": - chain := a.cc[chainId] - - amt, err := strconv.Atoi(cmdMap["amount"]) - if err != nil { - util.WriteError(w, fmt.Errorf("failed to convert amount to int: %s", err)) - return - } - - if err := chain.AddFullNodes(a.ctx, nil, amt); err != nil { - util.WriteError(w, fmt.Errorf("failed to add full nodes: %w", err)) - return - } - - stdout = []byte(fmt.Sprintf(`{"added_full_node":"%s"}`, cmdMap["amount"])) - case "dump-contract-state": - stdout = dumpContractState(r, cmdMap, a, val) - case "faucet": - stdout = faucet(r, cmdMap, a.ctx, a, val) - } - - // Relayer Actions if the above is not used. - if len(stdout) == 0 && len(stderr) == 0 && err == nil { - switch action { - case "stop-relayer", "stop_relayer", "stopRelayer": - if err := a.relayerCheck(w, r); err != nil { - return - } - - err = a.relayer.StopRelayer(a.ctx, a.eRep) - - case "start-relayer", "start_relayer", "startRelayer": - if err := a.relayerCheck(w, r); err != nil { - return - } - - paths := strings.FieldsFunc(ah.Cmd, func(c rune) bool { - return c == ',' || c == ' ' - }) - err = a.relayer.StartRelayer(a.ctx, a.eRep, paths...) - - case "relayer", "relayer-exec", "relayer_exec", "relayerExec": - if err := a.relayerCheck(w, r); err != nil { - return - } - - if !strings.Contains(ah.Cmd, "--home") { - // does this ever change for any other relayer? - cmd = append(cmd, "--home", "/home/relayer") - } - - res := a.relayer.Exec(a.ctx, a.eRep, cmd, []string{}) - stdout = []byte(res.Stdout) - stderr = []byte(res.Stderr) - err = res.Err - - case "get_channels", "get-channels", "getChannels": - if err := a.relayerCheck(w, r); err != nil { - return - } - - res, err := a.relayer.GetChannels(a.ctx, a.eRep, chainId) - if err != nil { - util.WriteError(w, err) - return - } - - r, err := json.Marshal(res) - if err != nil { - util.WriteError(w, err) - return - } - stdout = r - } - } - - if len(stdout) > 0 { - output = stdout - } else if len(stderr) > 0 { - output = stderr - } else if err == nil { - output = []byte("{}") - } else { - output = []byte(fmt.Sprintf(`%s`, err)) - } - - // Send the response - util.Write(w, []byte(output)) -} - -func (a *actions) relayerCheck(w http.ResponseWriter, r *http.Request) error { - var err error = nil - - if a.relayer == nil { - util.Write(w, []byte(`{"error":"relayer not configured for this setup"}`)) - err = fmt.Errorf("relayer not configured for this setup") - } - - return err -} - -func dumpContractState(r *http.Request, cmdMap map[string]string, a *actions, val *cosmos.ChainNode) []byte { - contract, ok1 := cmdMap["contract"] - height, ok2 := cmdMap["height"] - if !ok1 || !ok2 { - return []byte(`{"error":"'contract' or 'height' not found in commands"}`) - } - - heightInt, err := strconv.ParseInt(height, 10, 64) - if err != nil { - return []byte(fmt.Sprintf(`{"error":"failed to convert height to int: %s"}`, height)) - } - - state, err := val.DumpContractState(a.ctx, contract, heightInt) - if err != nil { - return []byte(fmt.Sprintf(`{"error":"%s"}`, err)) - } - - jsonRes, err := json.Marshal(state.Models) - if err != nil { - return []byte(fmt.Sprintf(`{"error":"%s"}`, err)) - } - - return jsonRes -} - -func faucet(r *http.Request, cmdMap map[string]string, ctx context.Context, a *actions, val *cosmos.ChainNode) []byte { - amount, ok1 := cmdMap["amount"] - toAddr, ok2 := cmdMap["address"] - - if !ok1 || !ok2 { - return []byte(`{"error":"'amount' or 'address' not found in commands"}`) - } - - amt, ok := sdkmath.NewIntFromString(amount) - if !ok { - return []byte(fmt.Sprintf(`{"error":"failed to convert amount to int: %s"}`, amount)) - } - - if err := val.BankSend(ctx, "faucet", ibc.WalletAmount{ - Address: toAddr, - Amount: amt, - Denom: val.Chain.Config().Denom, - }); err != nil { - return []byte(fmt.Sprintf(`{"error":"%s"}`, err)) - } - - return []byte(fmt.Sprintf(`{"sent_funds":"%s"}`, amount)) -} diff --git a/local-interchain/interchain/handlers/chain_registry.go b/local-interchain/interchain/handlers/chain_registry.go deleted file mode 100644 index b98ac522e..000000000 --- a/local-interchain/interchain/handlers/chain_registry.go +++ /dev/null @@ -1,34 +0,0 @@ -package handlers - -import ( - "net/http" - "os" -) - -// If the chain_registry.json file is found within the current running directory, show it as an enpoint. -// Used in: spawn - -type chainRegistry struct { - DataJSON []byte `json:"data_json"` -} - -// NewChainRegistry creates a new chainRegistry with the JSON from the file at location. -func NewChainRegistry(loc string) *chainRegistry { - dataJSON, err := os.ReadFile(loc) - if err != nil { - panic(err) - } - - return &chainRegistry{ - DataJSON: dataJSON, - } -} - -func (cr chainRegistry) GetChainRegistry(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - if _, err := w.Write(cr.DataJSON); err != nil { - http.Error(w, "failed to write response", http.StatusInternalServerError) - } - -} diff --git a/local-interchain/interchain/handlers/info.go b/local-interchain/interchain/handlers/info.go deleted file mode 100644 index a5296122e..000000000 --- a/local-interchain/interchain/handlers/info.go +++ /dev/null @@ -1,231 +0,0 @@ -package handlers - -import ( - "context" - "encoding/json" - "fmt" - "net/http" - "net/url" - "os" - "path/filepath" - "strconv" - - types "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - util "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/util" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -type info struct { - Config *types.Config - InstallDir string - - // used to get information about state of the container - ctx context.Context - ic *interchaintest.Interchain - vals map[string][]*cosmos.ChainNode - relayer ibc.Relayer - eRep ibc.RelayerExecReporter - - cc map[string]*cosmos.CosmosChain - - chainId string -} - -func NewInfo( - cfg *types.Config, - installDir string, - ctx context.Context, - ic *interchaintest.Interchain, - cosmosChains map[string]*cosmos.CosmosChain, - vals map[string][]*cosmos.ChainNode, - relayer ibc.Relayer, - eRep ibc.RelayerExecReporter, -) *info { - return &info{ - Config: cfg, - InstallDir: installDir, - - ctx: ctx, - ic: ic, - vals: vals, - cc: cosmosChains, - relayer: relayer, - eRep: eRep, - } -} - -type GetInfo struct { - Logs types.MainLogs `json:"logs" yaml:"logs"` - Chains []types.Chain `json:"chains" yaml:"chains"` - Relay types.Relayer `json:"relayer" yaml:"relayer"` -} - -func (i *info) GetInfo(w http.ResponseWriter, r *http.Request) { - form := r.URL.Query() - - res, ok := form["request"] - if !ok { - get_logs(w, r, i) - return - } - - chainId, ok := form["chain_id"] - if !ok { - util.WriteError(w, fmt.Errorf("chain_id not found in query params")) - return - } - i.chainId = chainId[0] - - nodeIdx, ok := form["node_index"] - if !ok { - nodeIdx = []string{"0"} - } - - idx, err := strconv.Atoi(nodeIdx[0]) - if err != nil { - util.WriteError(w, fmt.Errorf("failed to convert node_index to int: %w", err)) - return - } - - if len(i.vals[i.chainId]) <= idx { - util.WriteError(w, fmt.Errorf("node_index '%d' not found. nodes: %v", idx, len(i.vals[i.chainId]))) - return - } - - val := i.vals[i.chainId][idx] - - switch res[0] { - case "logs": - get_logs(w, r, i) - case "config": - config(w, r, val) - case "name": - util.Write(w, []byte(val.Name())) - case "container_id": - util.Write(w, []byte(val.ContainerID())) - case "hostname": - util.Write(w, []byte(val.HostName())) - case "home_dir": - util.Write(w, []byte(val.HomeDir())) - case "is_above_sdk_47", "is_above_sdk_v47": - util.Write(w, []byte(strconv.FormatBool(val.IsAboveSDK47(i.ctx)))) - case "has_command": - hasCommand(w, r, form, i, val) - case "read_file": - readFile(w, r, form, i, val) - case "height": - height, _ := val.Height(i.ctx) - util.Write(w, []byte(strconv.Itoa(int(height)))) - case "build_information": - getBuildInfo(w, r, i, val) - case "genesis_file_content": - v, _ := val.GenesisFileContent(i.ctx) - util.Write(w, v) - case "peer": - util.Write(w, getPeer(i.ctx, val)) - default: - util.WriteError(w, fmt.Errorf("invalid get param: %s. does not exist", res[0])) - } -} - -func config(w http.ResponseWriter, r *http.Request, val *cosmos.ChainNode) { - cfg := val.Chain.Config() - jsonRes, err := MarshalIBCChainConfig(cfg) - if err != nil { - util.WriteError(w, fmt.Errorf("failed to marshal config: %w", err)) - return - } - - util.Write(w, []byte(jsonRes)) -} - -func hasCommand(w http.ResponseWriter, r *http.Request, form url.Values, i *info, val *cosmos.ChainNode) { - cmd, ok := form["command"] - if !ok { - util.WriteError(w, fmt.Errorf("command not found in query params")) - return - } - - util.Write(w, []byte(strconv.FormatBool(val.HasCommand(i.ctx, cmd[0])))) -} - -func readFile(w http.ResponseWriter, r *http.Request, form url.Values, i *info, val *cosmos.ChainNode) { - relPath, ok := form["relative_path"] - if !ok { - util.WriteError(w, fmt.Errorf("relPath not found in query params")) - return - } - - bz, err := val.ReadFile(i.ctx, relPath[0]) - if err != nil { - util.WriteError(w, err) - return - } - - util.Write(w, bz) -} - -func getBuildInfo(w http.ResponseWriter, r *http.Request, i *info, val *cosmos.ChainNode) { - bi := val.GetBuildInformation(i.ctx) - jsonRes, err := json.MarshalIndent(bi, "", " ") - if err != nil { - util.WriteError(w, err) - return - } - util.Write(w, []byte(jsonRes)) -} - -func get_logs(w http.ResponseWriter, r *http.Request, i *info) { - fp := filepath.Join(i.InstallDir, "configs", "logs.json") - - bz, err := os.ReadFile(fp) - if err != nil { - util.WriteError(w, err) - return - } - - var logs types.MainLogs - if err := json.Unmarshal(bz, &logs); err != nil { - util.WriteError(w, err) - return - } - - // hide mnemonics from query - chains := i.Config.Chains - for idx, chain := range chains { - updatedAccounts := []types.GenesisAccount{} - - for _, acc := range chain.Genesis.Accounts { - acc.Mnemonic = "hidden" - updatedAccounts = append(updatedAccounts, acc) - } - - chain.Genesis.Accounts = updatedAccounts - chains[idx] = chain - } - - info := GetInfo{ - Logs: logs, - Chains: chains, - Relay: i.Config.Relayer, - } - - jsonRes, err := json.MarshalIndent(info, "", " ") - if err != nil { - util.WriteError(w, err) - return - } - - util.Write(w, jsonRes) -} - -func getPeer(ctx context.Context, val *cosmos.ChainNode) []byte { - peer, err := val.NodeID(ctx) - if err != nil { - return []byte(fmt.Sprintf(`{"error":"%s"}`, err)) - } - - return []byte(peer + "@" + val.Chain.GetHostPeerAddress()) -} diff --git a/local-interchain/interchain/handlers/types.go b/local-interchain/interchain/handlers/types.go deleted file mode 100644 index 8889b241a..000000000 --- a/local-interchain/interchain/handlers/types.go +++ /dev/null @@ -1,43 +0,0 @@ -package handlers - -import ( - "encoding/json" - - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -type IbcChainConfigAlias struct { - Type string `json:"type" yaml:"type"` - Name string `json:"name" yaml:"name"` - ChainID string `json:"chain_id" yaml:"chain_id"` - Bin string `json:"bin" yaml:"bin"` - Bech32Prefix string `json:"bech32_prefix" yaml:"bech32_prefix"` - Denom string `json:"denom" yaml:"denom"` - CoinType string `json:"coin_type" yaml:"coin_type"` - GasPrices string `json:"gas_prices" yaml:"gas_prices"` - GasAdjustment float64 `json:"gas_adjustment" yaml:"gas_adjustment"` - TrustingPeriod string `json:"trusting_period" yaml:"trusting_period"` -} - -func (c *IbcChainConfigAlias) Marshal() ([]byte, error) { - return json.Marshal(c) -} - -func MarshalIBCChainConfig(cfg ibc.ChainConfig) ([]byte, error) { - jsonRes, err := json.MarshalIndent(IbcChainConfigAlias{ - Type: cfg.Type, - Name: cfg.Name, - ChainID: cfg.ChainID, - Bin: cfg.Bin, - Bech32Prefix: cfg.Bech32Prefix, - Denom: cfg.Denom, - CoinType: cfg.CoinType, - GasPrices: cfg.GasPrices, - GasAdjustment: cfg.GasAdjustment, - TrustingPeriod: cfg.TrustingPeriod, - }, "", " ") - if err != nil { - return nil, err - } - return jsonRes, nil -} diff --git a/local-interchain/interchain/handlers/uploader.go b/local-interchain/interchain/handlers/uploader.go deleted file mode 100644 index 6eb7e6151..000000000 --- a/local-interchain/interchain/handlers/uploader.go +++ /dev/null @@ -1,97 +0,0 @@ -package handlers - -import ( - "context" - "encoding/json" - "fmt" - "net/http" - "os" - "path/filepath" - - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/util" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" -) - -type upload struct { - ctx context.Context - vals map[string][]*cosmos.ChainNode - - authKey string -} - -type Uploader struct { - ChainId string `json:"chain_id"` - NodeIndex int `json:"node_index"` - FilePath string `json:"file_path"` - - // Upload-Type: cosmwasm only - KeyName string `json:"key_name,omitempty"` - AuthKey string `json:"auth_key,omitempty"` -} - -func NewUploader(ctx context.Context, vals map[string][]*cosmos.ChainNode, authKey string) *upload { - return &upload{ - ctx: ctx, - vals: vals, - authKey: authKey, - } -} - -func (u *upload) PostUpload(w http.ResponseWriter, r *http.Request) { - var upload Uploader - err := json.NewDecoder(r.Body).Decode(&upload) - if err != nil { - util.WriteError(w, err) - return - } - - if u.authKey != "" && u.authKey != upload.AuthKey { - util.WriteError(w, fmt.Errorf("invalid `auth_key`")) - return - } - - srcPath := upload.FilePath - if _, err := os.Stat(srcPath); os.IsNotExist(err) { - util.WriteError(w, fmt.Errorf("file %s does not exist on the source machine", srcPath)) - return - } - - chainId := upload.ChainId - if _, ok := u.vals[chainId]; !ok { - util.Write(w, []byte(fmt.Sprintf(`{"error":"chain_id %s not found"}`, chainId))) - return - } - - nodeIdx := upload.NodeIndex - if len(u.vals[chainId]) <= nodeIdx { - util.Write(w, []byte(fmt.Sprintf(`{"error":"node_index %d not found"}`, nodeIdx))) - return - } - - val := u.vals[chainId][nodeIdx] - - headerType := r.Header.Get("Upload-Type") - switch headerType { - case "cosmwasm": - // Upload & Store the contract on chain. - codeId, err := val.StoreContract(u.ctx, upload.KeyName, srcPath) - if err != nil { - util.WriteError(w, err) - return - } - - util.Write(w, []byte(fmt.Sprintf(`{"code_id":%s}`, codeId))) - return - default: - // Upload the file to the docker volume (val[0]). - _, file := filepath.Split(srcPath) - if err := val.CopyFile(u.ctx, srcPath, file); err != nil { - util.WriteError(w, fmt.Errorf(`{"error":"writing contract file to docker volume: %w"}`, err)) - return - } - - home := val.HomeDir() - fileLoc := filepath.Join(home, file) - util.Write(w, []byte(fmt.Sprintf(`{"success":"file uploaded to %s","location":"%s"}`, chainId, fileLoc))) - } -} diff --git a/local-interchain/interchain/ibc.go b/local-interchain/interchain/ibc.go deleted file mode 100644 index 76abae179..000000000 --- a/local-interchain/interchain/ibc.go +++ /dev/null @@ -1,75 +0,0 @@ -package interchain - -import ( - "context" - "fmt" - - types "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -func VerifyIBCPaths(ibcpaths map[string][]int) error { - for k, v := range ibcpaths { - if len(v) == 1 { - return fmt.Errorf("ibc path '%s' has only 1 chain", k) - } - if len(v) > 2 { - return fmt.Errorf("ibc path '%s' has more than 2 chains", k) - } - } - return nil -} - -// TODO: Allow for a single chain to IBC between multiple chains -func LinkIBCPaths(ibcpaths map[string][]int, chains []ibc.Chain, ic *interchaintest.Interchain, r ibc.Relayer) { - for path, c := range ibcpaths { - chain1 := chains[c[0]] - chain2 := chains[c[1]] - - interLink := interchaintest.InterchainLink{ - Chain1: chain1, - Chain2: chain2, - Path: path, - Relayer: r, - } - - ic = ic.AddLink(interLink) - } -} - -// TODO: Get all channels a chain is connected too. Map it to the said chain_id. Then output to Logs. -func GetChannelConnections(ctx context.Context, ibcpaths map[string][]int, chains []ibc.Chain, ic *interchaintest.Interchain, r ibc.Relayer, eRep ibc.RelayerExecReporter) []types.IBCChannel { - if len(ibcpaths) == 0 { - return []types.IBCChannel{} - } - - channels := []types.IBCChannel{} - - for _, c := range ibcpaths { - chain1 := chains[c[0]] - chain2 := chains[c[1]] - - channel1, err := ibc.GetTransferChannel(ctx, r, eRep, chain1.Config().ChainID, chain2.Config().ChainID) - if err != nil { - panic(err) - } - - channels = append(channels, types.IBCChannel{ - ChainID: chain1.Config().ChainID, - Channel: channel1, - }) - - // this a duplicate? - channel2, err := ibc.GetTransferChannel(ctx, r, eRep, chain2.Config().ChainID, chain1.Config().ChainID) - if err != nil { - panic(err) - } - channels = append(channels, types.IBCChannel{ - ChainID: chain2.Config().ChainID, - Channel: channel2, - }) - } - - return channels -} diff --git a/local-interchain/interchain/logs.go b/local-interchain/interchain/logs.go deleted file mode 100644 index 00c46dee6..000000000 --- a/local-interchain/interchain/logs.go +++ /dev/null @@ -1,94 +0,0 @@ -package interchain - -import ( - "encoding/json" - "os" - "path/filepath" - "time" - - types "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum/foundry" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" -) - -func WriteRunningChains(configsDir string, bz []byte) { - path := filepath.Join(configsDir, "configs") - if _, err := os.Stat(path); os.IsNotExist(err) { - if err := os.MkdirAll(path, os.ModePerm); err != nil { - panic(err) - } - } - - file := filepath.Join(path, "logs.json") - _ = os.WriteFile(file, bz, 0644) -} - -func DumpChainsInfoToLogs(configDir string, config *types.Config, chains []ibc.Chain, connections []types.IBCChannel) { - mainLogs := types.MainLogs{ - StartTime: uint64(time.Now().Unix()), - Chains: []types.LogOutput{}, - Channels: connections, - } - - // Iterate chain config & get the ibc chain's to save data to logs. - for idx, chain := range config.Chains { - - switch chains[idx].(type) { - case *cosmos.CosmosChain: - chainObj := chains[idx].(*cosmos.CosmosChain) - - ibcPaths := chain.IBCPaths - if ibcPaths == nil { - ibcPaths = []string{} - } - - log := types.LogOutput{ - ChainID: chainObj.Config().ChainID, - ChainName: chainObj.Config().Name, - RPCAddress: chainObj.GetHostRPCAddress(), - RESTAddress: chainObj.GetHostAPIAddress(), - GRPCAddress: chainObj.GetHostGRPCAddress(), - P2PAddress: chainObj.GetHostPeerAddress(), - IBCPath: ibcPaths, - } - - mainLogs.Chains = append(mainLogs.Chains, log) - case *foundry.AnvilChain: - chainObj := chains[idx].(*foundry.AnvilChain) - - log := types.LogOutput{ - ChainID: chainObj.Config().ChainID, - ChainName: chainObj.Config().Name, - RPCAddress: chainObj.GetHostRPCAddress(), - } - - mainLogs.Chains = append(mainLogs.Chains, log) - } - } - - bz, _ := json.MarshalIndent(mainLogs, "", " ") - WriteRunningChains(configDir, []byte(bz)) -} - -// == Zap Logger == -func getLoggerConfig() zap.Config { - config := zap.NewDevelopmentConfig() - - config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder - config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder - - return config -} - -func InitLogger() (*zap.Logger, error) { - config := getLoggerConfig() - logger, err := config.Build() - if err != nil { - return nil, err - } - - return logger, nil -} diff --git a/local-interchain/interchain/router/router.go b/local-interchain/interchain/router/router.go deleted file mode 100644 index c93bc3b87..000000000 --- a/local-interchain/interchain/router/router.go +++ /dev/null @@ -1,108 +0,0 @@ -package router - -import ( - "context" - "encoding/json" - "log" - "net/http" - "os" - "path/filepath" - - "github.com/gorilla/mux" - ictypes "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/util" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/handlers" -) - -type Route struct { - Path string `json:"path" yaml:"path"` - Methods []string `json:"methods" yaml:"methods"` -} - -func NewRouter( - ctx context.Context, - ic *interchaintest.Interchain, - config *ictypes.Config, - cosmosChains map[string]*cosmos.CosmosChain, - vals map[string][]*cosmos.ChainNode, - relayer ibc.Relayer, - authKey string, - eRep ibc.RelayerExecReporter, - installDir string, -) *mux.Router { - r := mux.NewRouter() - - infoH := handlers.NewInfo(config, installDir, ctx, ic, cosmosChains, vals, relayer, eRep) - r.HandleFunc("/info", infoH.GetInfo).Methods(http.MethodGet) - - wd, err := os.Getwd() - if err != nil { - panic(err) - } - - chainRegistryFile := filepath.Join(wd, "chain_registry.json") - if _, err := os.Stat(chainRegistryFile); err == nil { - crH := handlers.NewChainRegistry(chainRegistryFile) - r.HandleFunc("/chain_registry", crH.GetChainRegistry).Methods(http.MethodGet) - } else { - log.Printf("chain_registry.json not found in %s, not exposing endpoint.", wd) - } - - chainRegistryAssetsFile := filepath.Join(wd, "chain_registry_assets.json") - if _, err := os.Stat(chainRegistryAssetsFile); err == nil { - crH := handlers.NewChainRegistry(chainRegistryAssetsFile) - r.HandleFunc("/chain_registry_assets", crH.GetChainRegistry).Methods(http.MethodGet) - } else { - log.Printf("chain_registry_assets.json not found in %s, not exposing endpoint.", wd) - } - - actionsH := handlers.NewActions(ctx, ic, cosmosChains, vals, relayer, eRep, authKey) - r.HandleFunc("/", actionsH.PostActions).Methods(http.MethodPost) - - uploaderH := handlers.NewUploader(ctx, vals, authKey) - r.HandleFunc("/upload", uploaderH.PostUpload).Methods(http.MethodPost) - - availableRoutes := getAllMethods(*r) - r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - jsonRes, err := json.MarshalIndent(availableRoutes, "", " ") - if err != nil { - util.WriteError(w, err) - return - } - util.Write(w, jsonRes) - }).Methods(http.MethodGet) - - return r -} - -func getAllMethods(r mux.Router) []Route { - endpoints := make([]Route, 0) - - err := r.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error { - tpl, err1 := route.GetPathTemplate() - met, err2 := route.GetMethods() - if err1 != nil { - return err1 - } - if err2 != nil { - return err2 - } - - // fmt.Println(tpl, met) - endpoints = append(endpoints, Route{ - Path: tpl, - Methods: met, - }) - return nil - }) - - if err != nil { - panic(err) - } - - return endpoints -} diff --git a/local-interchain/interchain/start.go b/local-interchain/interchain/start.go deleted file mode 100644 index 607bc6f58..000000000 --- a/local-interchain/interchain/start.go +++ /dev/null @@ -1,301 +0,0 @@ -package interchain - -import ( - "context" - "fmt" - "log" - "math" - "net/http" - "os" - "os/signal" - "path" - "strings" - "sync" - "syscall" - - "github.com/gorilla/handlers" - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/router" - "github.com/strangelove-ventures/interchaintest/local-interchain/interchain/types" - "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - interchaintestrelayer "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "github.com/strangelove-ventures/interchaintest/v8/testutil" - "go.uber.org/zap" -) - -func StartChain(installDir, chainCfgFile string, ac *types.AppStartConfig) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - var relayer ibc.Relayer - var eRep *testreporter.RelayerExecReporter - - vals := make(map[string][]*cosmos.ChainNode) - ic := interchaintest.NewInterchain() - defer ic.Close() - - // Cleanup servers on ctrl+c signal - c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt, syscall.SIGTERM) - wg := sync.WaitGroup{} - wg.Add(1) - go func() { - defer wg.Done() - select { - case <-c: - fmt.Println("\nReceived signal to stop local-ic...") - removed := dockerutil.KillAllInterchaintestContainers(ctx) - for _, r := range removed { - fmt.Println(" - ", r) - } - cancel() - os.Exit(1) - case <-ctx.Done(): - fmt.Println("Context is done") - } - }() - - // Logger for ICTest functions only. - logger, err := InitLogger() - if err != nil { - panic(err) - } - - config := ac.Cfg - - config.Relayer = ac.Relayer - - WriteRunningChains(installDir, []byte("{}")) - - // ibc-path-name -> index of []cosmos.CosmosChain - ibcpaths := make(map[string][]int) - // providerChainId -> []consumerChainIds - icsPair := make(map[string][]string) - - chainSpecs := []*interchaintest.ChainSpec{} - - for idx, cfg := range config.Chains { - _, chainSpec := CreateChainConfigs(cfg) - chainSpecs = append(chainSpecs, chainSpec) - - if len(cfg.IBCPaths) > 0 { - for _, path := range cfg.IBCPaths { - ibcpaths[path] = append(ibcpaths[path], idx) - } - } - - if cfg.ICSConsumerLink != "" { - icsPair[cfg.ICSConsumerLink] = append(icsPair[cfg.ICSConsumerLink], cfg.ChainID) - } - } - - if err := VerifyIBCPaths(ibcpaths); err != nil { - log.Fatal("VerifyIBCPaths", err) - } - - // Create chain factory for all the chains - cf := interchaintest.NewBuiltinChainFactory(logger, chainSpecs) - - testName := GetTestName(chainCfgFile) - - chains, err := cf.Chains(testName) - if err != nil { - log.Fatal("cf.Chains", err) - } - - for _, chain := range chains { - ic = ic.AddChain(chain) - } - ic.AdditionalGenesisWallets = SetupGenesisWallets(config, chains) - - fakeT := FakeTesting{ - FakeName: testName, - } - - // Base setup - rep := testreporter.NewNopReporter() - eRep = rep.RelayerExecReporter(&fakeT) - - client, network := interchaintest.DockerSetup(fakeT) - - // setup a relayer if we have IBC paths to use. - if len(ibcpaths) > 0 || len(icsPair) > 0 { - rlyCfg := config.Relayer - - relayerType, relayerName := ibc.CosmosRly, "relay" - rf := interchaintest.NewBuiltinRelayerFactory( - relayerType, - logger, - interchaintestrelayer.CustomDockerImage( - rlyCfg.DockerImage.Repository, - rlyCfg.DockerImage.Version, - rlyCfg.DockerImage.UidGid, - ), - interchaintestrelayer.StartupFlags(rlyCfg.StartupFlags...), - ) - - // This also just needs the name. - relayer = rf.Build(fakeT, client, network) - ic = ic.AddRelayer(relayer, relayerName) - - // Add links between chains - LinkIBCPaths(ibcpaths, chains, ic, relayer) - } - - // Add Interchain Security chain pairs together - icsProviderPaths := make(map[string]ibc.Chain) - if len(icsPair) > 0 { - for provider, consumers := range icsPair { - var p, c ibc.Chain - - // a provider can have multiple consumers - for _, consumer := range consumers { - for _, chain := range chains { - if chain.Config().ChainID == provider { - p = chain - } - if chain.Config().ChainID == consumer { - c = chain - } - } - } - - pathName := fmt.Sprintf("%s-%s", p.Config().ChainID, c.Config().ChainID) - - logger.Info("Adding ICS pair", zap.String("provider", p.Config().ChainID), zap.String("consumer", c.Config().ChainID), zap.String("path", pathName)) - - icsProviderPaths[pathName] = p - - ic = ic.AddProviderConsumerLink(interchaintest.ProviderConsumerLink{ - Provider: p, - Consumer: c, - Relayer: relayer, - Path: pathName, - }) - } - } - - // Build all chains & begin. - err = ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ - TestName: testName, - Client: client, - NetworkID: network, - SkipPathCreation: false, - }) - if err != nil { - // calls the KillAllInterchaintestContainers(...) above - <-ctx.Done() - - logger.Fatal("ic.Build", zap.Error(err)) - } - - if relayer != nil && len(ibcpaths) > 0 { - paths := make([]string, 0, len(ibcpaths)) - for k := range ibcpaths { - paths = append(paths, k) - } - - if err := relayer.StartRelayer(ctx, eRep, paths...); err != nil { - log.Fatal("relayer.StartRelayer", err) - } - - defer func() { - if err := relayer.StopRelayer(ctx, eRep); err != nil { - log.Fatal("relayer.StopRelayer", err) - } - }() - } - - for _, chain := range chains { - if cosmosChain, ok := chain.(*cosmos.CosmosChain); ok { - chainID := cosmosChain.Config().ChainID - vals[chainID] = cosmosChain.Validators - } - } - - // ICS provider setup - if len(icsProviderPaths) > 0 { - logger.Info("ICS provider setup", zap.Any("icsProviderPaths", icsProviderPaths)) - - for ibcPath, chain := range icsProviderPaths { - if provider, ok := chain.(*cosmos.CosmosChain); ok { - if err := provider.FinishICSProviderSetup(ctx, relayer, eRep, ibcPath); err != nil { - log.Fatal("FinishICSProviderSetup", err) - } - } - } - } - - // Starts a non blocking REST server to take action on the chain. - go func() { - cosmosChains := map[string]*cosmos.CosmosChain{} - for _, chain := range chains { - if cosmosChain, ok := chain.(*cosmos.CosmosChain); ok { - cosmosChains[cosmosChain.Config().ChainID] = cosmosChain - } - } - - r := router.NewRouter(ctx, ic, config, cosmosChains, vals, relayer, ac.AuthKey, eRep, installDir) - - config.Server = types.RestServer{ - Host: ac.Address, - Port: fmt.Sprintf("%d", ac.Port), - } - - if config.Server.Host == "" { - config.Server.Host = "127.0.0.1" - } - if config.Server.Port == "" { - config.Server.Port = "8080" - } - - serverAddr := fmt.Sprintf("%s:%s", config.Server.Host, config.Server.Port) - - // Where ORIGIN_ALLOWED is like `scheme://dns[:port]`, or `*` (insecure) - corsHandler := handlers.CORS( - handlers.AllowedOrigins([]string{"*"}), - handlers.AllowedHeaders([]string{"*"}), - handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS", "DELETE"}), - handlers.AllowCredentials(), - handlers.ExposedHeaders([]string{"*"}), - ) - - if err := http.ListenAndServe(serverAddr, corsHandler(r)); err != nil { - log.Default().Println(err) - } - }() - - AddGenesisKeysToKeyring(ctx, config, chains) - - // run commands for each server after startup. Iterate chain configs - PostStartupCommands(ctx, config, chains) - - connections := GetChannelConnections(ctx, ibcpaths, chains, ic, relayer, eRep) - - // Save to logs.json file for runtime chain information. - DumpChainsInfoToLogs(installDir, config, chains, connections) - - log.Println("\nLocal-IC API is running on ", fmt.Sprintf("http://%s:%s", config.Server.Host, config.Server.Port)) - - if err = testutil.WaitForBlocks(ctx, math.MaxInt, chains[0]); err != nil { - // when the network is stopped / killed (ctrl + c), ignore error - if !strings.Contains(err.Error(), "post failed:") { - fmt.Println("WaitForBlocks StartChain: ", err) - } - } - - wg.Wait() -} - -func GetTestName(chainCfgFile string) string { - name := chainCfgFile - fExt := path.Ext(name) - if fExt != "" { - name = strings.ReplaceAll(chainCfgFile, fExt, "") - } - - return name + "ic" -} diff --git a/local-interchain/interchain/types/chain_builder.go b/local-interchain/interchain/types/chain_builder.go deleted file mode 100644 index ba7ae4939..000000000 --- a/local-interchain/interchain/types/chain_builder.go +++ /dev/null @@ -1,203 +0,0 @@ -package types - -import ( - "encoding/json" - "fmt" - "os" - "path/filepath" - - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "gopkg.in/yaml.v3" -) - -// NewChainBuilder creates a new Chain. -func NewChainBuilder(name, chainID, binary, denom, bech32 string) *Chain { - return &Chain{ - Name: name, - ChainID: chainID, - Binary: binary, - Denom: denom, - - TrustingPeriod: "336h", - Bech32Prefix: bech32, - ChainType: "cosmos", - CoinType: 118, - GasAdjustment: 2.0, - NumberVals: 1, - NumberNode: 0, - GasPrices: fmt.Sprintf("0.0%s", denom), - Debugging: false, - Genesis: Genesis{ - Accounts: []GenesisAccount{}, - Modify: []cosmos.GenesisKV{}, - StartupCommands: []string{}, - }, - } -} - -func (c *Chain) SetDenom(denom string) *Chain { - c.Denom = denom - return c -} - -func (c *Chain) SetDockerImage(dockerImage ibc.DockerImage) *Chain { - c.DockerImage = dockerImage - return c -} - -func (c *Chain) SetHostPortOverride(hostPortOverride map[string]string) *Chain { - c.HostPortOverride = hostPortOverride - return c -} - -func (c *Chain) SetGasPrices(gasPrices string) *Chain { - c.GasPrices = gasPrices - return c -} - -func (c *Chain) SetGasAdjustment(gasAdjustment float64) *Chain { - c.GasAdjustment = gasAdjustment - return c -} - -func (c *Chain) SetValidators(numberVals int) *Chain { - c.NumberVals = numberVals - return c -} - -func (c *Chain) SetNodes(numberNode int) *Chain { - c.NumberNode = numberNode - return c -} - -func (c *Chain) SetChainType(chainType string) *Chain { - c.ChainType = chainType - return c -} - -func (c *Chain) SetDebugging(debugging bool) *Chain { - c.Debugging = debugging - return c -} - -func (c *Chain) SetBlockTime(blockTime string) *Chain { - c.BlockTime = blockTime - return c -} - -func (c *Chain) SetTrustingPeriod(trustingPeriod string) *Chain { - c.TrustingPeriod = trustingPeriod - return c -} - -func (c *Chain) SetICSConsumerLink(icsConsumerLink string) *Chain { - c.ICSConsumerLink = icsConsumerLink - return c -} - -// SetIBCPaths hardcodes the set IBC paths array for the chain. -func (c *Chain) SetIBCPaths(ibcPaths []string) *Chain { - c.IBCPaths = ibcPaths - return c -} - -// SetChainsIBCLink appends the new IBC path to both chains -func (c *Chain) SetAppendedIBCPathLink(counterParty *Chain) *Chain { - ibcPath := fmt.Sprintf("%s_%s", c.ChainID, counterParty.ChainID) - c.IBCPaths = append(c.IBCPaths, ibcPath) - counterParty.IBCPaths = append(counterParty.IBCPaths, ibcPath) - return c -} - -func (c *Chain) SetGenesis(genesis Genesis) *Chain { - c.Genesis = genesis - return c -} - -func (c *Chain) SetDefaultSDKv47Genesis(numRandAcc int) *Chain { - c.Genesis = Genesis{ - Modify: []cosmos.GenesisKV{ - cosmos.NewGenesisKV("app_state.gov.params.voting_period", "3s"), - cosmos.NewGenesisKV("app_state.gov.params.max_deposit_period", "10s"), - cosmos.NewGenesisKV("app_state.gov.params.min_deposit.0.denom", c.Denom), - cosmos.NewGenesisKV("app_state.gov.params.min_deposit.0.amount", "1"), - }, - Accounts: append( - []GenesisAccount{ - NewGenesisAccount("acc0", c.Bech32Prefix, "25000000000%DENOM%", c.CoinType, - "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry", - ), - NewGenesisAccount("acc1", c.Bech32Prefix, "24000000000%DENOM%", c.CoinType, - "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise", - ), - }, - GenerateRandomAccounts(numRandAcc, c.Bech32Prefix, c.CoinType)..., - ), - } - return c -} - -func (c *Chain) SetStartupCommands(cmds ...string) *Chain { - c.Genesis.StartupCommands = cmds - return c -} - -func (c *Chain) SetConfigFileOverrides(configFileOverrides []ConfigFileOverrides) *Chain { - c.ConfigFileOverrides = configFileOverrides - return c -} - -func (c *Chain) SetBech32Prefix(bech32Prefix string) *Chain { - c.Bech32Prefix = bech32Prefix - c.SetRandomAccounts(5) - return c -} - -func (c *Chain) SetCoinType(num int) *Chain { - c.CoinType = num - c.SetRandomAccounts(5) - return c -} - -func (c *Chain) SetRandomAccounts(num int) *Chain { - c.Genesis.Accounts = GenerateRandomAccounts(num, c.Bech32Prefix, c.CoinType) - return c -} - -func (c *Chain) SaveJSON(filePath string) error { - config := new(ChainsConfig) - config.Chains = append(config.Chains, *c) - - if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil { - return err - } - - bz, err := json.MarshalIndent(config, "", " ") - if err != nil { - return err - } - - return os.WriteFile(filePath, bz, 0777) -} - -func (c *Chain) SaveYAML(filePath string) error { - config := new(ChainsConfig) - config.Chains = append(config.Chains, *c) - - bz, err := yaml.Marshal(config) - if err != nil { - return err - } - - return os.WriteFile(filePath, bz, 0777) -} - -func BaseHostPortOverride() map[string]string { - return map[string]string{ - "26656": "26656", - "26657": "26657", - "1317": "1317", - "9090": "9090", - } -} diff --git a/local-interchain/interchain/types/chains.go b/local-interchain/interchain/types/chains.go deleted file mode 100644 index 2d4ee81ba..000000000 --- a/local-interchain/interchain/types/chains.go +++ /dev/null @@ -1,74 +0,0 @@ -package types - -import ( - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" -) - -func ChainCosmosHub(chainID string) *Chain { - chain := NewChainBuilder("gaia", chainID, "gaiad", "uatom", "cosmos").SetDebugging(true) - chain.SetBech32Prefix("cosmos") - chain.SetBlockTime("500ms") - chain.SetDockerImage(ibc.DockerImage{ - Version: "v16.0.0", - }) - chain.SetDefaultSDKv47Genesis(5) - return chain -} - -func ChainEthereum() *Chain { - eth := NewChainBuilder("ethereum", "31337", "anvil", "wei", "0x").SetDebugging(true) - eth.SetChainType("ethereum"). - SetCoinType(60). - SetBech32Prefix("0x"). - SetGasPrices("0"). - SetTrustingPeriod("0"). - SetGasAdjustment(0). - SetDockerImage(ibc.DockerImage{ - Repository: "ghcr.io/foundry-rs/foundry", - Version: "latest", - }). - SetHostPortOverride(map[string]string{ - "8545": "8545", - }). - SetGenesis(Genesis{}). - SetConfigFileOverrides([]ConfigFileOverrides{ - { - Paths: testutil.Toml{ - "--load-state": "../../chains/state/avs-and-eigenlayer-deployed-anvil-state.json", - }, - }, - }) - return eth -} - -func ChainJuno(chainID string) *Chain { - chain := NewChainBuilder("juno", chainID, "junod", "ujuno", "juno").SetDebugging(true) - chain.SetBlockTime("500ms") - chain.SetDockerImage(ibc.DockerImage{ - Version: "v21.0.0", - }) - chain.SetDefaultSDKv47Genesis(5) - chain.SetStartupCommands("%BIN% keys add example-key-after --keyring-backend test --home %HOME%") - return chain -} - -func ChainStargaze() *Chain { - chain := NewChainBuilder("stargaze", "localstars-1", "starsd", "ustars", "stars").SetDebugging(true) - chain.SetBlockTime("500ms") - chain.SetDockerImage(ibc.DockerImage{ - Version: "v13.0.0", - }) - chain.SetDefaultSDKv47Genesis(5) - return chain -} - -func ChainOsmosis() *Chain { - chain := NewChainBuilder("osmosis", "localosmo-1", "osmosisd", "uosmo", "osmo").SetDebugging(true) - chain.SetBlockTime("500ms") - chain.SetDockerImage(ibc.DockerImage{ - Version: "v25.0.0", - }) - chain.SetDefaultSDKv47Genesis(5) - return chain -} diff --git a/local-interchain/interchain/types/chains_test.go b/local-interchain/interchain/types/chains_test.go deleted file mode 100644 index cde3730ce..000000000 --- a/local-interchain/interchain/types/chains_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package types - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestChainsGeneration(t *testing.T) { - t.Run("single chain runs", func(t *testing.T) { - require.NoError(t, ChainEthereum().SaveJSON("chains/gen-ethereum.json")) - require.NoError(t, ChainStargaze().SaveJSON("chains/gen-stargaze.json")) - require.NoError(t, ChainCosmosHub("localcosmos-1").SaveJSON("chains/gen-cosmoshub.json")) - require.NoError(t, ChainOsmosis().SaveJSON("chains/gen-osmosis.json")) - require.NoError(t, ChainJuno("localjuno-1").SaveYAML("chains/gen-juno.yml")) - }) - - t.Run("2 IBC connected chains", func(t *testing.T) { - j1, j2 := ChainJuno("localjuno-1"), ChainJuno("localjuno-2") - j1.SetAppendedIBCPathLink(j2) - - require.NoError(t, NewChainsConfig(j1, j2).SaveJSON("chains/gen-juno-ibc.json")) - }) - - t.Run("4 way IBC setup", func(t *testing.T) { - hub := ChainCosmosHub("localhub-1") - hub2 := ChainCosmosHub("localhub-2") - juno1 := ChainJuno("localjuno-1") - osmo1 := ChainOsmosis() - - hub.SetAppendedIBCPathLink(hub2).SetAppendedIBCPathLink(juno1) - hub2.SetAppendedIBCPathLink(juno1) - osmo1.SetAppendedIBCPathLink(hub).SetAppendedIBCPathLink(juno1) - - require.NoError(t, NewChainsConfig(hub, hub2, juno1, osmo1).SaveJSON("chains/gen-4-ibc.json")) - }) - -} diff --git a/local-interchain/interchain/types/genesis.go b/local-interchain/interchain/types/genesis.go deleted file mode 100644 index a0c15f5eb..000000000 --- a/local-interchain/interchain/types/genesis.go +++ /dev/null @@ -1,93 +0,0 @@ -package types - -import ( - "fmt" - - addresscodec "github.com/cosmos/cosmos-sdk/codec/address" - "github.com/cosmos/cosmos-sdk/crypto/hd" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - sdk "github.com/cosmos/cosmos-sdk/types" - moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" - "github.com/cosmos/go-bip39" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" -) - -type GenesisAccount struct { - Name string `json:"name"` - Amount string `json:"amount"` - Address string `json:"address"` - Mnemonic string `json:"mnemonic"` -} - -type Genesis struct { - // Only apart of my fork for now. - Modify []cosmos.GenesisKV `json:"modify,omitempty" yaml:"modify,omitempty"` // 'key' & 'val' in the config. - - Accounts []GenesisAccount `json:"accounts,omitempty" yaml:"accounts,omitempty"` - - // A list of commands which run after chains are good to go. - StartupCommands []string `json:"startup_commands,omitempty" yaml:"startup_commands,omitempty"` -} - -func NewGenesisAccount(name, bech32, coins string, coinType int, mnemonic string) GenesisAccount { - if coins == "" { - coins = "100000%DENOM%" - } - - if mnemonic == "" { - entropy, _ := bip39.NewEntropy(256) - mnemonic, _ = bip39.NewMnemonic(entropy) - } - - return GenesisAccount{ - Name: name, - Amount: coins, - Address: MnemonicToAddress(mnemonic, bech32, uint32(coinType)), - Mnemonic: mnemonic, - } -} - -func GenerateRandomAccounts(num int, prefix string, coinType int) []GenesisAccount { - accounts := []GenesisAccount{} - - for i := 0; i < num; i++ { - entropy, _ := bip39.NewEntropy(256) - mnemonic, _ := bip39.NewMnemonic(entropy) - - addr := MnemonicToAddress(mnemonic, prefix, uint32(coinType)) - - accounts = append(accounts, GenesisAccount{ - Name: fmt.Sprintf("user%d", i), - Amount: "100000%DENOM%", - Address: addr, - Mnemonic: mnemonic, - }) - - } - - return accounts -} - -func MnemonicToAddress(mnemonic, prefix string, coinType uint32) string { - e := moduletestutil.MakeTestEncodingConfig() - - kr := keyring.NewInMemory(e.Codec) - - bip44Path := fmt.Sprintf("m/%d'/%d'/0'/0/0", sdk.Purpose, coinType) - r, err := kr.NewAccount("tempkey", mnemonic, "", bip44Path, hd.Secp256k1) - if err != nil { - panic(err) - } - - bz, err := r.GetAddress() - if err != nil { - panic(err) - } - - bech32Addr, err := addresscodec.NewBech32Codec(prefix).BytesToString(bz) - if err != nil { - panic(err) - } - - return bech32Addr -} diff --git a/local-interchain/interchain/types/types.go b/local-interchain/interchain/types/types.go deleted file mode 100644 index 6235fa426..000000000 --- a/local-interchain/interchain/types/types.go +++ /dev/null @@ -1,187 +0,0 @@ -package types - -import ( - "encoding/json" - "fmt" - "os" - "path/filepath" - - "github.com/go-playground/validator" - "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" - "gopkg.in/yaml.v3" -) - -type Config struct { - Chains []Chain `json:"chains" yaml:"chains"` - Relayer Relayer `json:"relayer" yaml:"relayer"` - Server RestServer `json:"server" yaml:"server"` -} - -type AppStartConfig struct { - Address string - Port uint16 - Cfg *Config - Relayer Relayer - AuthKey string // optional password for API interaction -} - -type RestServer struct { - Host string `json:"host" yaml:"host"` - Port string `json:"port" yaml:"port"` -} - -type Relayer struct { - DockerImage ibc.DockerImage `json:"docker_image" yaml:"docker_image"` - StartupFlags []string `json:"startup_flags" yaml:"startup_flags"` -} - -type IBCChannel struct { - ChainID string `json:"chain_id" yaml:"chain_id"` - Channel *ibc.ChannelOutput `json:"channel" yaml:"channel"` -} - -// ConfigFileOverrides overrides app toml configuration files. -type ConfigFileOverrides struct { - File string `json:"file,omitempty" yaml:"file,omitempty"` - Paths testutil.Toml `json:"paths" yaml:"paths"` -} - -type Chain struct { - Name string `json:"name" yaml:"name" validate:"min=1"` - ChainID string `json:"chain_id" yaml:"chain_id" validate:"min=3"` - DockerImage ibc.DockerImage `json:"docker_image" yaml:"docker_image" validate:"url"` - GasPrices string `json:"gas_prices" yaml:"gas_prices"` - GasAdjustment float64 `json:"gas_adjustment" yaml:"gas_adjustment"` - Genesis Genesis `json:"genesis,omitempty" yaml:"genesis,omitempty"` - ConfigFileOverrides []ConfigFileOverrides `json:"config_file_overrides,omitempty" yaml:"config_file_overrides,omitempty"` - IBCPaths []string `json:"ibc_paths,omitempty" yaml:"ibc_paths,omitempty"` - NumberVals int `json:"number_vals" yaml:"number_vals" validate:"gte=1"` - NumberNode int `json:"number_node" yaml:"number_node"` - ChainType string `json:"chain_type" yaml:"chain_type" validate:"min=1"` - CoinType int `json:"coin_type" yaml:"coin_type" validate:"gt=0"` - Binary string `json:"binary" yaml:"binary" validate:"min=1"` - Bech32Prefix string `json:"bech32_prefix" yaml:"bech32_prefix" validate:"min=1"` - Denom string `json:"denom" yaml:"denom" validate:"min=1"` - TrustingPeriod string `json:"trusting_period" yaml:"trusting_period"` - Debugging bool `json:"debugging" yaml:"debugging"` - BlockTime string `json:"block_time,omitempty" yaml:"block_time,omitempty"` - HostPortOverride map[string]string `json:"host_port_override,omitempty" yaml:"host_port_override,omitempty"` - ICSConsumerLink string `json:"ics_consumer_link,omitempty" yaml:"ics_consumer_link,omitempty"` - ICSVersionOverride ibc.ICSConfig `json:"ics_version_override,omitempty" yaml:"ics_version_override,omitempty"` -} - -func (chain *Chain) Validate() error { - validate := validator.New() - return validate.Struct(chain) -} - -func (chain *Chain) SetChainDefaults() { - if chain.ChainType == "" { - chain.ChainType = "cosmos" - } - - if chain.CoinType == 0 { - chain.CoinType = 118 - } - - if chain.DockerImage.UidGid == "" { - chain.DockerImage.UidGid = "1025:1025" - } - - if chain.NumberVals == 0 { - chain.NumberVals = 1 - } - - if chain.TrustingPeriod == "" { - chain.TrustingPeriod = "112h" - } - - if chain.BlockTime == "" { - chain.BlockTime = "2s" - } - - if chain.IBCPaths == nil { - chain.IBCPaths = []string{} - } - - // Genesis - if chain.Genesis.StartupCommands == nil { - chain.Genesis.StartupCommands = []string{} - } - if chain.Genesis.Accounts == nil { - chain.Genesis.Accounts = []GenesisAccount{} - } - if chain.Genesis.Modify == nil { - chain.Genesis.Modify = []cosmos.GenesisKV{} - } - - if chain.Binary == "" { - panic("'binary' is required in your config for " + chain.ChainID) - } - if chain.Denom == "" { - panic("'denom' is required in your config for " + chain.ChainID) - } - if chain.Bech32Prefix == "" { - panic("'bech32_prefix' is required in your config for " + chain.ChainID) - } -} - -// ChainsConfig is the chain configuration for the file. -type ChainsConfig struct { - Chains []Chain `json:"chains" yaml:"chains"` -} - -func NewChainsConfig(chains ...*Chain) ChainsConfig { - updatedChains := make([]Chain, len(chains)) - for i, chain := range chains { - updatedChains[i] = *chain - } - - return ChainsConfig{ - Chains: updatedChains, - } -} - -// SaveJSON saves the chains config to a file. -func (cfg ChainsConfig) SaveJSON(file string) error { - if err := os.MkdirAll(filepath.Dir(file), 0777); err != nil { - return fmt.Errorf("failed to create directory: %w", err) - } - - bz, err := json.MarshalIndent(cfg, "", " ") - if err != nil { - return fmt.Errorf("failed to marshal chains config: %w", err) - } - - return os.WriteFile(file, bz, 0777) -} - -// SaveYAML saves the chains config to a file. -func (cfg ChainsConfig) SaveYAML(file string) error { - bz, err := yaml.Marshal(cfg) - if err != nil { - return fmt.Errorf("failed to marshal chains config: %w", err) - } - - return os.WriteFile(file, bz, 0777) -} - -// MainLogs is the main runtime log file of the application. -type MainLogs struct { - StartTime uint64 `json:"start_time" yaml:"start_time"` - Chains []LogOutput `json:"chains" yaml:"chains"` - Channels []IBCChannel `json:"ibc_channels" yaml:"ibc_channels"` -} - -// LogOutput is a subsection of the chains information for the parent logs. -type LogOutput struct { - ChainID string `json:"chain_id" yaml:"chain_id"` - ChainName string `json:"chain_name" yaml:"chain_name"` - RPCAddress string `json:"rpc_address" yaml:"rpc_address"` - RESTAddress string `json:"rest_address" yaml:"rest_address"` - GRPCAddress string `json:"grpc_address" yaml:"grpc_address"` - P2PAddress string `json:"p2p_address" yaml:"p2p_address"` - IBCPath []string `json:"ibc_paths" yaml:"ibc_paths"` -} diff --git a/local-interchain/interchain/util/http_writer.go b/local-interchain/interchain/util/http_writer.go deleted file mode 100644 index 1c978a90d..000000000 --- a/local-interchain/interchain/util/http_writer.go +++ /dev/null @@ -1,16 +0,0 @@ -package util - -import ( - "log" - "net/http" -) - -func Write(w http.ResponseWriter, bz []byte) { - if _, err := w.Write(bz); err != nil { - log.Default().Println(err) - } -} - -func WriteError(w http.ResponseWriter, err error) { - Write(w, []byte(`{"error": "`+err.Error()+`"}`)) -} diff --git a/local-interchain/interchain/util/replace.go b/local-interchain/interchain/util/replace.go deleted file mode 100644 index 12f24a85e..000000000 --- a/local-interchain/interchain/util/replace.go +++ /dev/null @@ -1,40 +0,0 @@ -package util - -import ( - "reflect" - "strings" -) - -// Replaces all string values within a complex struct. -func ReplaceStringValues(data interface{}, oldStr, replacement string) { - replaceStringFields(reflect.ValueOf(data), oldStr, replacement) -} - -func replaceStringFields(value reflect.Value, oldStr, replacement string) { - switch value.Kind() { - case reflect.Ptr: - if value.IsNil() { - return - } - replaceStringFields(value.Elem(), oldStr, replacement) - case reflect.Struct: - for i := 0; i < value.NumField(); i++ { - field := value.Field(i) - replaceStringFields(field, oldStr, replacement) - } - case reflect.Slice, reflect.Array: - for i := 0; i < value.Len(); i++ { - replaceStringFields(value.Index(i), oldStr, replacement) - } - case reflect.String: - currentStr := value.String() - if strings.Contains(currentStr, oldStr) { - updatedStr := strings.Replace(currentStr, oldStr, replacement, -1) - value.SetString(updatedStr) - } - case reflect.Map: - for _, key := range value.MapKeys() { - replaceStringFields(value.MapIndex(key), oldStr, replacement) - } - } -} diff --git a/local-interchain/python/README.md b/local-interchain/python/README.md deleted file mode 100644 index 879124c87..000000000 --- a/local-interchain/python/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Python - -The python local-interchain interaction client / driver. - -## Running - -```bash -cd python - -# or setup your own virtualenv -pip install -r requirements.txt --break-system-packages - -local-ic start juno_ibc - -python3 api_test.py -``` \ No newline at end of file diff --git a/local-interchain/python/api_test.py b/local-interchain/python/api_test.py deleted file mode 100644 index 807ec3841..000000000 --- a/local-interchain/python/api_test.py +++ /dev/null @@ -1,122 +0,0 @@ -# flake8: noqa -""" -This test the rest server to ensures it functions properly. - -local-ic start base -""" - -import time - -from helpers.testing import poll_for_start -from helpers.transactions import RequestBuilder -from util_base import API_URL - -chain_id = "localjuno-1" -sleep_seconds = 3 - - -rb = RequestBuilder(API_URL, chain_id, sleep_seconds, log_output=True) - - -def main(): - poll_for_start(API_URL, waitSeconds=300) - - bin_test() - tx_test() - - -# Test to ensure the base layer works and returns data properly -def bin_test(): - res = rb.binary("keys list --keyring-backend=test --output=json") - assert len(res) > 0 - - res = rb.binary( - "tx decode ClMKUQobL2Nvc21vcy5nb3YudjFiZXRhMS5Nc2dWb3RlEjIIpwISK2p1bm8xZGM3a2MyZzVrZ2wycmdmZHllZGZ6MDl1YTlwZWo1eDNsODc3ZzcYARJmClAKRgofL2Nvc21vcy5jcnlwdG8uc2VjcDI1NmsxLlB1YktleRIjCiECxjGMmYp4MlxxfFWi9x4u+jOleJVde3Cru+HnxAVUJmgSBAoCCH8YNBISCgwKBXVqdW5vEgMyMDQQofwEGkDPE4dCQ4zUh6LIB9wqNXDBx+nMKtg0tEGiIYEH8xlw4H8dDQQStgAe6xFO7I/oYVSWwa2d9qUjs9qyB8r+V0Gy", - ignore_pause=True, - ) - print(res) - assert res == { - "body": { - "messages": [ - { - "@type": "/cosmos.gov.v1beta1.MsgVote", - "proposal_id": "295", - "voter": "juno1dc7kc2g5kgl2rgfdyedfz09ua9pej5x3l877g7", - "option": "VOTE_OPTION_YES", - } - ], - "memo": "", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [], - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "AsYxjJmKeDJccXxVovceLvozpXiVXXtwq7vh58QFVCZo", - }, - "mode_info": {"single": {"mode": "SIGN_MODE_LEGACY_AMINO_JSON"}}, - "sequence": "52", - } - ], - "fee": { - "amount": [{"denom": "ujuno", "amount": "204"}], - "gas_limit": "81441", - "payer": "", - "granter": "", - }, - "tip": None, - }, - "signatures": [ - "zxOHQkOM1IeiyAfcKjVwwcfpzCrYNLRBoiGBB/MZcOB/HQ0EErYAHusRTuyP6GFUlsGtnfalI7PasgfK/ldBsg==" - ], - } - - rb.binary("config keyring-backend test") - assert rb.binary("config") == { - "chain-id": "", - "keyring-backend": "test", - "output": "text", - "node": "tcp://localhost:26657", - "broadcast-mode": "sync", - "gas": "", - "gas-prices": "", - "gas-adjustment": "", - "fees": "", - "fee-granter": "", - "fee-payer": "", - "note": "", - } - - assert len(rb.binary("keys list --output=json")) > 0 - - # this query returns a dict with supply as the key, validate it is there - assert "supply" in rb.query("bank total") - - d = rb.query( - "bank balances juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0 --output=json" - ) - assert len(d["balances"]) == 0 - - -# Test to ensure Transactions and getting that data returns properly -def tx_test(): - res = rb.binary( - "tx bank send acc0 juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0 500ujuno --fees 5000ujuno --node %RPC% --chain-id=%CHAIN_ID% --yes --output json --keyring-backend=test" - ) - assert res["code"] == 0 - - tx_data = rb.query_tx(res) - print(tx_data) - - bal = rb.query( - "bank balances juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0 --output=json" - ) - print(bal) - assert len(bal["balances"]) > 0 - - -if __name__ == "__main__": - main() diff --git a/local-interchain/python/daodao.py b/local-interchain/python/daodao.py deleted file mode 100644 index b89d83046..000000000 --- a/local-interchain/python/daodao.py +++ /dev/null @@ -1,100 +0,0 @@ -""" -Steps: -- Download contracts from the repo based off release version -- Ensure ictest is started for a chain -- Upload to JUNO (store) and init -- Connect together or what ever' -- Profit -""" - -import os - -from helpers import CosmWasm -from helpers.testing import poll_for_start -from helpers.transactions import RequestBuilder -from util_base import API_URL - -KEY_NAME = "acc0" -chain_id = "localjuno-1" - - -def main(): - poll_for_start(API_URL, waitSeconds=300) - - rb = RequestBuilder(API_URL, chain_id) - rb.binary("config keyring-backend test") - - absolute_path = os.path.abspath(__file__) - parent_dir = os.path.dirname(os.path.dirname(absolute_path)) - contracts_dir = os.path.join(parent_dir, "contracts") - - CosmWasm.download_mainnet_daodao_contracts() - - # == Create contract object & upload == - dao_proposal_single = CosmWasm(API_URL, chain_id).store_contract( - KEY_NAME, os.path.join(contracts_dir, "dao_proposal_single.wasm") - ) - - dao_voting_native_staked = CosmWasm(API_URL, chain_id).store_contract( - KEY_NAME, os.path.join(contracts_dir, "dao_voting_native_staked.wasm") - ) - - dao_core = CosmWasm(API_URL, chain_id).store_contract( - KEY_NAME, - os.path.join(contracts_dir, "dao_core.wasm"), - ) - - # https://github.com/DA0-DA0/dao-contracts/blob/main/scripts/create-v2-dao-native-voting.sh - module_msg = { - "allow_revoting": False, - "max_voting_period": {"time": 604800}, - "close_proposal_on_execution_failure": True, - "pre_propose_info": {"anyone_may_propose": {}}, - "only_members_execute": True, - "threshold": { - "threshold_quorum": { - "quorum": {"percent": "0.20"}, - "threshold": {"majority": {}}, - } - }, - } - encoded_prop_msg = CosmWasm.base64_encode_msg(module_msg) - - voting_msg = '{"owner":{"core_module":{}},"denom":"ujuno"}' - encoded_voting_msg = CosmWasm.base64_encode_msg(voting_msg) - - cw_core_init_msg = CosmWasm.remove_msg_spaces( - { - "admin": "juno1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk", - "automatically_add_cw20s": True, - "automatically_add_cw721s": True, - "description": "V2_DAO", - "name": "V2_DAO", - "proposal_modules_instantiate_info": [ - { - "admin": {"core_module": {}}, - "code_id": dao_proposal_single.code_id, - "label": "v2_dao", - "msg": f"{encoded_prop_msg}", - } - ], - "voting_module_instantiate_info": { - "admin": {"core_module": {}}, - "code_id": dao_voting_native_staked.code_id, - "label": "test_v2_dao-cw-native-voting", - "msg": f"{encoded_voting_msg}", - }, - } - ).decode("utf-8") - - dao_core.instantiate_contract( - account_key=KEY_NAME, - code_id=dao_core.code_id, - msg=cw_core_init_msg, - label="dao_core", - ) - print(f"{dao_core.address=}") - - -if __name__ == "__main__": - main() diff --git a/local-interchain/python/helpers/__init__.py b/local-interchain/python/helpers/__init__.py deleted file mode 100644 index feedd8bc1..000000000 --- a/local-interchain/python/helpers/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# flake8: noqa F401 - -from .cosmwasm import CosmWasm -from .transactions import * diff --git a/local-interchain/python/helpers/cosmwasm.py b/local-interchain/python/helpers/cosmwasm.py deleted file mode 100644 index 44fe83d09..000000000 --- a/local-interchain/python/helpers/cosmwasm.py +++ /dev/null @@ -1,294 +0,0 @@ -# flake8: noqa - -import json -import os -from base64 import b64decode, b64encode - -from httpx import get, post - -from helpers.file_cache import Cache -from helpers.transactions import RequestBuilder, get_transaction_response - -fp = os.path.realpath(__file__) -root_dir = os.path.dirname(os.path.dirname(os.path.dirname(fp))) -contracts_storage_dir = os.path.join(root_dir, "contracts") - - -def upload_contract(rb: RequestBuilder, key_name: str, abs_path: str) -> dict: - print(f"[upload_file] ({rb.chain_id}) {abs_path}") - - payload = { - "chain_id": rb.chain_id, - "key_name": key_name, - "file_path": abs_path, - } - - url = rb.api - if url.endswith("/"): - url += "upload" - else: - url += "/upload" - - # Setting "Upload-Type": "cosmwasm" uploads the file and stores it on the chain. - res = post( - url, - json=payload, - headers={"Content-Type": "application/json", "Upload-Type": "cosmwasm"}, - timeout=120, - ) - - if res.status_code != 200: - return {"error": res.text} - - return json.loads(res.text.replace("\n", "")) - - -class CosmWasm: - def __init__(self, api: str, chain_id: str, addr_override: str = ""): - self.api = api # http://127.0.0.1:8080 - self.chain_id = chain_id - - self.code_id: int = -1 - self.address = addr_override - - self.rb = RequestBuilder(self.api, self.chain_id) - - self.default_flag_set = "--home=%HOME% --node=%RPC% --chain-id=%CHAIN_ID% --yes --output=json --keyring-backend=test --gas=auto --gas-adjustment=2.0" - - # the last obtained Tx hash - self.tx_hash = "" - - def get_latest_tx_hash(self) -> str: - return self.tx_hash - - def store_contract(self, key_name: str, abs_path: str) -> "CosmWasm": - ictest_chain_start = Cache.get_chain_start_time_from_logs() - if ictest_chain_start == -1: - ictest_chain_start = 0 - Cache.reset_contracts_cache_json() - - contracts = Cache.get_cache_or_default({}, ictest_chain_start) - sha1 = Cache.get_file_hash(abs_path, self.chain_id) - if sha1 in contracts["file_cache"]: - self.code_id = contracts["file_cache"][sha1] - sub_file_path = abs_path.split("/")[-1] - print(f"[Cache] CodeID={self.code_id} for {sub_file_path}") - return self - - res = upload_contract(self.rb, key_name, abs_path) - if "error" in res: - raise Exception(res["error"]) - - self.code_id = Cache.update_cache(contracts, res["code_id"], sha1) - return self - - def instantiate_contract( - self, - account_key: str, - code_id: int | str, - msg: str | dict, - label: str, - admin: str | None = None, - flags: str = "", - ) -> "CosmWasm": - # not sure if we want this logic or not... - if len(self.address) > 0: - raise Exception("Contract address already set") - - if admin is None and "--no-admin" not in flags: - flags += "--no-admin" - - if isinstance(msg, dict): - msg = json.dumps(msg, separators=(",", ":")) - - cmd = f"""tx wasm instantiate {code_id} {msg} --label={label} --from={account_key} {self.default_flag_set} {flags}""" - res = self.rb.binary(cmd) - - tx_res = get_transaction_response(res) - - # issue, such as signature verification or lack of fees etc - if tx_res.RawLog and len(tx_res.RawLog) > 5: - print(tx_res.RawLog) - - if len(tx_res.TxHash) == 0: - print("Tx execute error", res) - - contract_addr = CosmWasm.get_contract_address(self.rb, tx_res.TxHash) - print(f"[instantiate_contract] {label} {contract_addr}") - - self.tx_hash = tx_res.TxHash - self.address = contract_addr - return self - - def execute_contract( - self, - account_key: str, - msg: str | dict, - flags: str = "", - ) -> "CosmWasm": - if isinstance(msg, dict): - msg = json.dumps(msg, separators=(",", ":")) - - # TODO: self.default_flag_set fails here for some reason... - cmd = f"tx wasm execute {self.address} {msg} --from={account_key} --keyring-backend=test --home=%HOME% --node=%RPC% --chain-id=%CHAIN_ID% --yes --gas=auto --gas-adjustment=2.0" - print("[execute_contract]", cmd) - res = self.rb.binary(cmd) - print(res) - - tx_res = get_transaction_response(res) - - if tx_res.RawLog and len(tx_res.RawLog) > 5: - print(tx_res.RawLog) - - self.tx_hash = tx_res.TxHash - - return self - - def query_contract(self, msg: str | dict) -> dict: - if isinstance(msg, dict): - msg = json.dumps(msg, separators=(",", ":")) - - cmd = f"query wasm contract-state smart {self.address} {msg}" - res = self.rb.query(cmd) - return res - - @staticmethod - def base64_encode_msg(msg: str | dict): - if isinstance(msg, str): - msg = dict(json.loads(msg)) - - return b64encode(CosmWasm.remove_msg_spaces(msg)).decode("utf-8") - - @staticmethod - def remove_msg_spaces(msg: dict): - return json.dumps(msg, separators=(",", ":")).encode("utf-8") - - @staticmethod - def get_contract_address(rb: RequestBuilder, tx_hash: str) -> str: - res_json = rb.query(f"tx {tx_hash} --output=json") - - try: - code = int(res_json["code"]) - except: - code = -1 - - if code != 0: - raw = res_json["raw_log"] - return raw - - contract_addr = "" - for event in res_json["logs"][0]["events"]: - for attr in event["attributes"]: - if attr["key"] == "_contract_address": - contract_addr = attr["value"] - break - - return contract_addr - - @staticmethod - def download_base_contracts(): - files = [ - "https://github.com/CosmWasm/cw-plus/releases/latest/download/cw20_base.wasm", - "https://github.com/CosmWasm/cw-plus/releases/latest/download/cw4_group.wasm", - "https://github.com/CosmWasm/cw-nfts/releases/latest/download/cw721_base.wasm", - ] - - for url in files: - name = url.split("/")[-1] - file_path = os.path.join(contracts_storage_dir, name) - - if os.path.exists(file_path): - continue - - print(f"Downloading {name} to {file_path}") - res = get(url, follow_redirects=True) - with open(file_path, "wb") as f: - f.write(res.content) - - @staticmethod - def download_mainnet_daodao_contracts(): - # From https://github.com/DA0-DA0/dao-contracts/releases - # v2.1.0 # noqa - files = """cw20_base.wasm 2443 - cw20_stake.wasm 2444 - cw20_stake_external_rewards.wasm 2445 - cw20_stake_reward_distributor.wasm 2446 - cw4_group.wasm 2447 - cw721_base.wasm 2448 - cw_admin_factory.wasm 2449 - cw_fund_distributor.wasm 2450 - cw_payroll_factory.wasm 2451 - cw_token_swap.wasm 2452 - cw_vesting.wasm 2453 - dao_core.wasm 2454 - dao_migrator.wasm 2455 - dao_pre_propose_approval_single.wasm 2456 - dao_pre_propose_approver.wasm 2457 - dao_pre_propose_multiple.wasm 2458 - dao_pre_propose_single.wasm 2459 - dao_proposal_condorcet.wasm 2460 - dao_proposal_multiple.wasm 2461 - dao_proposal_single.wasm 2462 - dao_voting_cw20_staked.wasm 2463 - dao_voting_cw4.wasm 2464 - dao_voting_cw721_staked.wasm 2465 - dao_voting_native_staked.wasm 2466""" - - for contract_file in files.split("\n"): - name, code_id = contract_file.strip().split(" ") - - file_path = os.path.join(contracts_storage_dir, name) - if os.path.exists(file_path): - continue - - print(f"Downloading {name}") - response = get( - f"https://api.juno.strange.love/cosmwasm/wasm/v1/code/{code_id}", - headers={ - "accept": "application/json", - }, - timeout=60, - ) - resp = response.json() - - binary = b64decode(resp["data"]) - with open(file_path, "wb") as f: - f.write(binary) - - -if __name__ == "__main__": - CosmWasm.download_base_contracts() - - cw = CosmWasm(api="http://127.0.0.1:8080", chain_id="localjuno-1") - - cw.store_contract("acc0", os.path.join(contracts_storage_dir, "cw721_base.wasm")) - - cw.instantiate_contract( - "acc0", - cw.code_id, - { - "name": "name", - "symbol": "NFT", - # account in base.json genesis (acc0) # noqa - "minter": "juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl", - }, - label="contract", - flags="", - ) - print(cw.tx_hash) - print(cw.address) - - cw.execute_contract( - "acc0", - { - "mint": { - "token_id": "1", - "owner": "juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl", - "token_uri": "https://reece.sh", - } - }, - flags="--output=json", - ) - - print(cw.query_contract({"contract_info": {}})) - print(cw.query_contract({"all_nft_info": {"token_id": "1"}})) diff --git a/local-interchain/python/helpers/example_req.bash b/local-interchain/python/helpers/example_req.bash deleted file mode 100644 index c523e2a68..000000000 --- a/local-interchain/python/helpers/example_req.bash +++ /dev/null @@ -1,52 +0,0 @@ - -MAKE_REQUEST() { - curl http://127.0.0.1:8080/ --include --header "Content-Type: application/json" -X $1 --data "$2" -} - -MAKE_GET() { - curl http://127.0.0.1:8080/info --include --header "Content-Type: application/json" -X GET --data "$1" -} - -# Example with Auth -# MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"q","cmd":"bank balances juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0","auth_key":"mySecretKeyExample"}' - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"q","cmd":"bank total"}' - -## ---- test interacting with multiple nodes (0 and 1) -- -MAKE_REQUEST POST '{"chain_id":"localjuno-1","node_index":0, "action":"bin","cmd":"keys add testKey1 --keyring-backend=test"}' -MAKE_REQUEST POST '{"chain_id":"localjuno-1", "action":"bin","cmd":"keys list --keyring-backend=test"}' # default is 0 - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","node_index":1, "action":"bin","cmd":"keys add testKey1 --keyring-backend=test"}' -MAKE_REQUEST POST '{"chain_id":"localjuno-1","node_index":1, "action":"bin","cmd":"keys list --keyring-backend=test"}' - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","node_index":999, "action":"bin","cmd":"keys list --keyring-backend=test"}' # fails -## ---- - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"get_channels"}' - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"relayer-exec","cmd":"rly q channels localjuno-1"}' - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"relayer-exec","cmd":"rly keys list localjuno-1"}' - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"relayer-exec","cmd":"rly keys add localjuno-1 testkey"}' - - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"relayer-exec","cmd":"rly paths list"}' -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"relayer-exec","cmd":"rly transact flush juno-ibc-1 channel-1"}' - -# wasm contract relaying. -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"relayer-exec","cmd":"rly transact channel juno-ibc-1 --src-port transfer --dst-port transfer --order unordered --version ics20-1"}' - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"stop"}' -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"start","cmd":"juno-ibc-1"}' - -MAKE_REQUEST POST '{"action":"kill-all"}' - - -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"q","cmd":"bank balances juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0"}' -MAKE_REQUEST POST '{"chain_id":"localjuno-1","action":"faucet","cmd":"amount=100;address=juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0"}' - -# Get requests from info -curl -G -d "chain_id=localjuno-1" -d "request=peer" http://127.0.0.1:8080/info -curl -G -d "chain_id=localjuno-1" -d "request=height" http://127.0.0.1:8080/info -curl -G -d "chain_id=localjuno-1" -d "request=genesis_file_content" http://127.0.0.1:8080/info \ No newline at end of file diff --git a/local-interchain/python/helpers/file_cache.py b/local-interchain/python/helpers/file_cache.py deleted file mode 100644 index ee5be5f50..000000000 --- a/local-interchain/python/helpers/file_cache.py +++ /dev/null @@ -1,87 +0,0 @@ -# flakes8: noqa E501 -import hashlib -import json -import os - -fp = os.path.realpath(__file__) -root_dir = os.path.dirname(os.path.dirname(os.path.dirname(fp))) -contracts_storage_dir = os.path.join(root_dir, "contracts") - -contracts_json_path = os.path.join(root_dir, "configs", "contracts.json") -logs_path = os.path.join(root_dir, "configs", "logs.json") - - -class Cache: - @staticmethod - def reset_contracts_cache_json(): - if not os.path.exists(contracts_json_path): - os.makedirs(os.path.dirname(contracts_json_path), exist_ok=True) - with open(contracts_json_path, "w") as f: - f.write(json.dumps({"start_time": 0, "file_cache": {}})) - - @staticmethod - def get_chain_start_time_from_logs() -> int: - with open(logs_path, "r") as f: - logs = dict(json.load(f)) - - res = logs.get("start_time", -1) - if isinstance(res, str): - res = res.replace("\n", "") - - return int(res) - - @staticmethod - def get_cache_or_default(contracts: dict, ictest_chain_start: int) -> dict: - cache_time: str | int = 0 - if os.path.exists(contracts_json_path): - os.makedirs(os.path.dirname(contracts_json_path), exist_ok=True) - with open(contracts_json_path, "r") as f: - c = dict(json.load(f)) - cache_time = c.get("start_time", 0) - if isinstance(cache_time, str): - cache_time = cache_time.replace("\n", "") - - if cache_time == 0 or cache_time != ictest_chain_start: - # reset cache, and set cache time to current interchain_test time - contracts["start_time"] = ictest_chain_start - contracts["file_cache"] = {} - - # write to file - with open(contracts_json_path, "w") as f: - json.dump(contracts, f, indent=4) - - with open(contracts_json_path, "r") as f: - contracts = json.load(f) - - return contracts - - @staticmethod - def update_cache(contracts: dict, code_id: str | int, sha_hash: str) -> int: - contracts["file_cache"][sha_hash] = int(code_id) - with open(contracts_json_path, "w") as f: - json.dump(contracts, f, indent=4) - return int(code_id) - - @staticmethod - def get_file_hash(rel_file_path: str, chain_id: str) -> str: - buffer = 65536 - sha1 = hashlib.sha1(usedforsecurity=False) - - file_path = os.path.join(contracts_storage_dir, rel_file_path) - - if not os.path.exists(file_path): - raise FileNotFoundError(f"File not found: {file_path}") - - sha1.update(chain_id.replace("-", "").encode("utf-8")) - with open(file_path, "rb") as f: - while True: - bz = f.read(buffer) - if not bz: - break - sha1.update(bz) - - return sha1.hexdigest() - - -# We always run this to start. -Cache.reset_contracts_cache_json() diff --git a/local-interchain/python/helpers/relayer.py b/local-interchain/python/helpers/relayer.py deleted file mode 100644 index d24d825bd..000000000 --- a/local-interchain/python/helpers/relayer.py +++ /dev/null @@ -1,74 +0,0 @@ -import json - -import httpx - - -class Relayer: - def __init__(self, api: str, chain_id: str, log_output: bool = False): - self.api = api - self.chain_id = chain_id - self.log_output = log_output - - def execute(self, cmd: str, return_text: bool = False) -> dict: - if self.api == "": - raise Exception("send_request URL is empty") - - payload = { - "chain_id": self.chain_id, - "action": "relayer-exec", - "cmd": cmd, - } - - if self.log_output: - print("[relayer]", payload["cmd"]) - - res = httpx.post( - self.api, - json=payload, - headers={"Content-Type": "application/json"}, - timeout=120, - ) - - if return_text: - return {"text": res.text} - - try: - # Is there ever a case this does not work? - return json.loads(res.text) - except Exception: - return {"parse_error": res.text} - - def create_wasm_connection( - self, path: str, src: str, dst: str, order: str, version: str - ): - if not src.startswith("wasm."): - src = f"wasm.{src}" - - if not dst.startswith("wasm."): - dst = f"wasm.{dst}" - - self.execute( - f"rly tx channel {path} --src-port {src} --dst-port {dst} --order {order} --version {version}" - ) - - def flush(self, path: str, channel: str, log_output: bool = False) -> dict: - res = self.execute( - f"rly transact flush {path} {channel}", - ) - if log_output: - print(res) - - return res - - def get_channels(self) -> dict: - payload = { - "chain_id": self.chain_id, - "action": "get_channels", - } - - res = httpx.post( - self.api, - json=payload, - headers={"Content-Type": "application/json"}, - ) - return json.loads(res.text) diff --git a/local-interchain/python/helpers/testing.py b/local-interchain/python/helpers/testing.py deleted file mode 100644 index 3cd52987c..000000000 --- a/local-interchain/python/helpers/testing.py +++ /dev/null @@ -1,17 +0,0 @@ -import time - -import httpx - - -def poll_for_start(API_URL: str, waitSeconds=300): - for i in range(waitSeconds + 1): - try: - httpx.get(API_URL) - return - except Exception: - if i % 5 == 0: - print(f"waiting for server to start (iter:{i}) ({API_URL})") - - time.sleep(1) - - raise Exception("Local-IC REST API Server did not start") diff --git a/local-interchain/python/helpers/transactions.py b/local-interchain/python/helpers/transactions.py deleted file mode 100644 index 1be3e0c0f..000000000 --- a/local-interchain/python/helpers/transactions.py +++ /dev/null @@ -1,178 +0,0 @@ -import json -from dataclasses import dataclass -from enum import Enum -from time import sleep - -from httpx import post - - -def get_tx_hash(res: str | dict) -> str: - # String is a JSON blob, but was input as a string - if isinstance(res, str): - try: - res = json.loads(res) - except Exception: - pass - - tx_hash = "" - if isinstance(res, dict): - tx_hash = res["txhash"] - else: - tx_hash = res - - return tx_hash - - -class RequestType(Enum): - BIN = "bin" - QUERY = "query" - EXEC = "exec" - - -@dataclass(frozen=True) -class RequestBase: - URL: str - chain_id: str - request_type: RequestType - - -# TODO: type handler this better with a dataclass -@dataclass -class TransactionResponse: - TxHash: str = "" - RawLog: str | None = "" - - -@dataclass -class ActionHandler: - chain_id: str = "" - action: str = "" - cmd: str = "" - - def __init__(self, chain_id: str, action: str, cmd: str): - self.chain_id = chain_id - self.action = action - self.cmd = cmd - - def to_json(self) -> dict: - return { - "chain_id": self.chain_id, - "action": self.action, - "cmd": self.cmd, - } - - -class RequestBuilder: - # sleep_sec only applies if the request cmd starts with 'tx' - def __init__( - self, api: str, chain_id: str, sleep_sec: int = 6, log_output: bool = False - ): - self.api = api - self.chain_id = chain_id - self.log = log_output - self.sleep_sec = sleep_sec - - if self.api == "": - raise Exception("RequestBuilder api is empty") - - if self.chain_id == "": - raise Exception("RequestBuilder chain_id is empty") - - def binary(self, cmd: str, ignore_pause=False, log_output: bool = False) -> dict: - rb = RequestBase(self.api, self.chain_id, RequestType.BIN) - return send_request( - rb, - self.sleep_sec, - cmd, - ignore_pause, - log_output=(log_output if log_output else self.log), - ) - - def query(self, cmd: str, log_output: bool = False) -> dict: - if cmd.lower().startswith("query "): - cmd = cmd[6:] - elif cmd.lower().startswith("q "): - cmd = cmd[2:] - - rb = RequestBase(self.api, self.chain_id, RequestType.QUERY) - return send_request( - rb, 0, cmd, log_output=(log_output if log_output else self.log) - ) - - # What / when is response? - def query_tx(self, response: str | dict, log_output: bool = False) -> dict: - tx_hash = get_tx_hash(response) - if len(tx_hash) == 0: - return {"error": "tx_hash is empty"} - - res = self.query( - f"tx {tx_hash} --output json", - log_output=(log_output if log_output else self.log), - ) - return {"tx": res} - - -def send_request( - base: RequestBase, - sleep_sec: int, - cmd: str = "", - ignore_pause: bool = False, - return_text: bool = False, - log_output: bool = False, -) -> dict: - if base.request_type == RequestType.QUERY: - if cmd.lower().startswith("query "): - cmd = cmd[6:] - elif cmd.lower().startswith("q "): - cmd = cmd[2:] - - payload = ActionHandler(base.chain_id, base.request_type.value, cmd).to_json() - - if log_output: - print("[send_request data]", payload) - - res = post( - base.URL, - json=payload, - headers={"Content-Type": "application/json"}, - ) - - if cmd.startswith("tx") and not ignore_pause: - sleep(sleep_sec) - - if log_output: - if res.text != "{}": - print("[send_request resp]", res.text) - - # This is messy, clean up - if return_text: - return {"text": res.text} - - try: - # Is there ever a case this does not work? - return json.loads(res.text) - except Exception: - return {"parse_error": res.text} - - -def get_transaction_response(send_req_res: str | dict) -> TransactionResponse: - txr = TransactionResponse() - - if isinstance(send_req_res, str): - try: - json.loads(send_req_res) - except Exception: - txr.RawLog = send_req_res - return txr - - txr.TxHash = json.loads(send_req_res)["txhash"] - - if isinstance(send_req_res, dict): - thash = send_req_res.get("txhash") - txr.TxHash = thash if thash is not None else "" - txr.RawLog = send_req_res.get("raw_log") - - if txr.TxHash is None: - raise Exception("No txHash found", send_req_res) - - return txr diff --git a/local-interchain/python/ibc_contract.py b/local-interchain/python/ibc_contract.py deleted file mode 100644 index 604a39fce..000000000 --- a/local-interchain/python/ibc_contract.py +++ /dev/null @@ -1,134 +0,0 @@ -# flake8: noqa -# -# Shows how to relay between contracts - -""". - -pip install httpx - -Steps: -- Compile https://github.com/0xekez/cw-ibc-example -- Copy to ./contracts/cw_ibc_example.wasm - -- local-ic start ibc_juno - -- Init both contracts -- Create a channel/connection between both (counter-1 version) -- Execute on a contract -- -> sends a packet to the other contract and inc the counter -- Query the counter to ensure it increased. -""" - -import os -from typing import Collection - -from helpers.cosmwasm import CosmWasm -from helpers.relayer import Relayer -from helpers.testing import poll_for_start -from helpers.transactions import RequestBuilder -from util_base import API_URL - -WASM_FILE_NAME = "cw_ibc_example.wasm" - -KEY_NAME = "acc0" -KEY_NAME2 = "second0" - -chain_id = "localjuno-1" -chain_id2 = "localjuno-2" - - -def setup_env(rbs: Collection[RequestBuilder]): - for rb in rbs: - rb.binary("config keyring-backend test") - rb.binary("config output json") - - -def main(): - absolute_path = os.path.abspath(__file__) - parent_dir = os.path.dirname(os.path.dirname(absolute_path)) - contracts_dir = os.path.join(parent_dir, "contracts") - - relayer = Relayer(API_URL, chain_id) - - poll_for_start(API_URL, waitSeconds=300) - - if True: - print("⚙️ Setting env configuration") - setup_env( - [ - RequestBuilder(api=API_URL, chain_id=chain_id, log_output=True), - RequestBuilder(api=API_URL, chain_id=chain_id2, log_output=True), - ] - ) - - print("\n📝 Storing Contracts") - contract_1 = CosmWasm(API_URL, chain_id) - contract_2 = CosmWasm(API_URL, chain_id2) - - contract_1.store_contract(KEY_NAME, os.path.join(contracts_dir, WASM_FILE_NAME)) - contract_2.store_contract( - KEY_NAME2, os.path.join(contracts_dir, WASM_FILE_NAME) - ) - - print("\n🪞 Instantiate Contracts on both chains") - contract_1.instantiate_contract( - account_key=KEY_NAME, - code_id=contract_1.code_id, - msg="{}", - label="contractA", - flags="", - ) - contract_2.instantiate_contract( - account_key=KEY_NAME2, - code_id=contract_1.code_id, - msg="{}", - label="contractB", - flags="", - ) - - print("\n📤 Create Contract Connection") - relayer.create_wasm_connection( - path="juno-ibc-1", - src=contract_1.address, - dst=contract_2.address, - order="unordered", - version="counter-1", - ) - else: - # If we already uploaded the contracts and instantiated them - # we can just skip the above steps. - contract_1 = CosmWasm( - API_URL, - chain_id, - addr_override="juno14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9skjuwg8", - ) - contract_2 = CosmWasm( - API_URL, - chain_id2, - addr_override="juno14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9skjuwg8", - ) - - print("\n📖 Checking Channels") - print(relayer.get_channels()) - - # 'Increment {}' execute on chain b, check chainA after. - print("\n⚔️ Execute increment") - contract_2.execute_contract( - account_key=KEY_NAME2, msg={"increment": {"channel": "channel-1"}} - ) - - print("\n📨 Flush Packets...") - relayer.flush("juno-ibc-1", "channel-1", log_output=True) - - # Ensure the Tx count increased += 1 - if True: - print("\n❓ Query Count") - contract1_res = contract_1.query_contract( - {"get_count": {"channel": "channel-1"}} - ) - print(f"{contract1_res=}") - assert contract1_res["data"]["count"] == 1 - - -if __name__ == "__main__": - main() diff --git a/local-interchain/python/requirements.txt b/local-interchain/python/requirements.txt deleted file mode 100644 index 79228389f..000000000 --- a/local-interchain/python/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -httpx \ No newline at end of file diff --git a/local-interchain/python/util_base.py b/local-interchain/python/util_base.py deleted file mode 100644 index 0567f1d44..000000000 --- a/local-interchain/python/util_base.py +++ /dev/null @@ -1,40 +0,0 @@ -import argparse -import json -import os - -current_dir = os.path.dirname(os.path.realpath(__file__)) -parent_dir = os.path.dirname(current_dir) - -contracts_path = os.path.join(parent_dir, "contracts") - -contracts_json_path = os.path.join(parent_dir, "configs", "contracts.json") - - -# create contracts folder if not already -if not os.path.exists(contracts_path): - os.makedirs(contracts_path, exist_ok=True) - -HOST = "127.0.0.1" -PORT = 8080 - -# == Setup global parsers == -parser = argparse.ArgumentParser( - prog="api_test.py", - description="Test the rest server to ensure it functions properly.", -) - -parser.add_argument( - "--api-address", - type=str, - default=HOST, - help="The host/address to use for the rest server.", -) -parser.add_argument( - "--api-port", - type=int, - default=PORT, - help="The port to use for the rest server.", -) -args = parser.parse_args() - -API_URL = f"http://{args.api_address}:{args.api_port}" diff --git a/local-interchain/rust/.gitignore b/local-interchain/rust/.gitignore deleted file mode 100644 index 1de565933..000000000 --- a/local-interchain/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target \ No newline at end of file diff --git a/local-interchain/rust/Cargo.lock b/local-interchain/rust/Cargo.lock deleted file mode 100644 index ab653ffea..000000000 --- a/local-interchain/rust/Cargo.lock +++ /dev/null @@ -1,1756 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "autocfg" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - -[[package]] -name = "backtrace" -version = "0.3.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "bech32" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bnum" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" - -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" - -[[package]] -name = "cc" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "cosmwasm-crypto" -version = "1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd50718a2b6830ce9eb5d465de5a018a12e71729d66b70807ce97e6dd14f931d" -dependencies = [ - "digest 0.10.7", - "ecdsa", - "ed25519-zebra", - "k256", - "rand_core 0.6.4", - "thiserror", -] - -[[package]] -name = "cosmwasm-derive" -version = "1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "242e98e7a231c122e08f300d9db3262d1007b51758a8732cd6210b3e9faa4f3a" -dependencies = [ - "syn 1.0.109", -] - -[[package]] -name = "cosmwasm-std" -version = "1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c1556156fdf892a55cced6115968b961eaaadd6f724a2c2cb7d1e168e32dd3" -dependencies = [ - "base64", - "bech32", - "bnum", - "cosmwasm-crypto", - "cosmwasm-derive", - "derivative", - "forward_ref", - "hex", - "schemars", - "serde", - "serde-json-wasm", - "sha2 0.10.8", - "static_assertions", - "thiserror", -] - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "der" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "encoding_rs" -version = "0.8.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "forward_ref" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-core", - "futures-io", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" -dependencies = [ - "equivalent", - "hashbrown 0.14.5", -] - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "js-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "k256" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2 0.10.8", - "signature", -] - -[[package]] -name = "libc" -version = "0.2.155" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "localic-bin" -version = "0.0.1" -dependencies = [ - "cosmwasm-std", - "localic-std", - "reqwest", - "serde_json", - "thiserror", - "tokio", -] - -[[package]] -name = "localic-std" -version = "0.0.1" -dependencies = [ - "cosmwasm-std", - "reqwest", - "serde_json", - "thiserror", - "tokio", -] - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" -dependencies = [ - "hermit-abi", - "libc", - "wasi", - "windows-sys 0.52.0", -] - -[[package]] -name = "native-tls" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "object" -version = "0.36.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "openssl" -version = "0.10.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pin-project-lite" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - -[[package]] -name = "proc-macro2" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "redox_syscall" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "system-configuration", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64", -] - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "schemars" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 2.0.72", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "serde" -version = "1.0.204" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-json-wasm" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.204" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "serde_json" -version = "1.0.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tempfile" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" -dependencies = [ - "cfg-if", - "fastrand", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "thiserror" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "tinyvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.39.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "url" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.72", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" - -[[package]] -name = "web-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/local-interchain/rust/Cargo.toml b/local-interchain/rust/Cargo.toml deleted file mode 100644 index b5b20fc65..000000000 --- a/local-interchain/rust/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[workspace] -members = ["main", "localic-std"] - -[workspace.dependencies] -reqwest = { version = "0.11.20", features = ["blocking", "json"]} -tokio = { version = "1.32.0", features = ["full"] } -serde_json = {version = "1.0.107"} -cosmwasm-std = "1.4.0" -thiserror = { version = "1.0.31" } - -localic-std = { path = "./localic-std"} \ No newline at end of file diff --git a/local-interchain/rust/Makefile b/local-interchain/rust/Makefile deleted file mode 100644 index 57def1e5f..000000000 --- a/local-interchain/rust/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -build-bin: - @echo "Building rust interchain..." - @cargo build --release - -run-bin: build-bin - @./target/release/localic-bin \ No newline at end of file diff --git a/local-interchain/rust/README.md b/local-interchain/rust/README.md deleted file mode 100644 index ec7915460..000000000 --- a/local-interchain/rust/README.md +++ /dev/null @@ -1,215 +0,0 @@ -# Rust Github CI - -Leveraging Local-Interchain, rust contract developers can now test their contracts in a rust based e2e environment with a simple CI pipeline. - -## Example - -[Example Contract Repo](https://github.com/Reecepbcups/interchaintest-rust-example) - -## Setup - -**requirements** - setup a standard git repository (like the example) for a cosmwasm contract. A good base is [cw-template](https://github.com/CosmWasm/cw-template). - -```bash -# create base directory -mkdir interchaintest -cd interchaintest - -# generate the testing binary -cargo init --name e2e_testing - -# add required dependencies to Cargo.toml -cargo add cosmwasm-std -cargo add localic-std --git https://github.com/strangelove-ventures/interchaintest - -# create the 2 sub directories -mkdir chains configs - -# add a customizable SDK v47 chain config to the chains directory -echo '{ - "chains": [ - { - "name": "juno", - "chain_id": "localjuno-1", - "denom": "ujuno", - "binary": "junod", - "bech32_prefix": "juno", - "docker_image": { - "repository": "ghcr.io/cosmoscontracts/juno-e2e", - "version": "v17.0.0" - }, - "gas_prices": "0ujuno", - "chain_type": "cosmos", - "coin_type": 118, - "trusting_period": "112h", - "gas_adjustment": 2.0, - "number_vals": 1, - "number_node": 0, - "debugging": true, - "block_time": "500ms", - "genesis": { - "modify": [ - { - "key": "app_state.gov.params.voting_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.max_deposit_period", - "value": "15s" - }, - { - "key": "app_state.gov.params.min_deposit.0.denom", - "value": "ujuno" - }, - { - "key": "app_state.gov.params.min_deposit.0.amount", - "value": "1" - } - ], - "accounts": [ - { - "name": "acc0", - "address": "juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl", - "amount": "10000000000%DENOM%", - "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" - }, - { - "name": "acc1", - "address": "juno1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk", - "amount": "10000000000%DENOM%", - "mnemonic": "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" - } - ], - "startup_commands": [ - "%BIN% keys add example-key-after --keyring-backend test --home %HOME%" - ] - } - } - ] -}' > chains/juno.json -``` - -## CI Configuration - -Add the following configuration to your workflows directory. - -```bash -mkdir .github/workflows -``` - -```yaml -# contract-e2e.yml -name: contract-e2e - -on: - # run on every PR and merge to main. - pull_request: - push: - branches: [ master, main ] - -# Ensures that only a single workflow per PR will run at a time. -# Cancels in-progress jobs if new commit is pushed. -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -env: - GO_VERSION: 1.21 - -jobs: - # Builds local-interchain binary - build: - runs-on: ubuntu-latest - name: build - steps: - - name: Checkout interchaintest - uses: actions/checkout@v4 - with: - repository: strangelove-ventures/interchaintest - path: interchaintest - # ref: 'reece/rust' # branch, commit, tag - - - name: Setup go ${{ env.GO_VERSION }} - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GO_VERSION }} - - - name: build local-interchain - run: cd interchaintest/local-interchain && go mod tidy && make install - - - name: Upload localic artifact - uses: actions/upload-artifact@v3 - with: - name: local-ic - path: ~/go/bin/local-ic - - contract-e2e: - needs: build - name: contract e2e - runs-on: ubuntu-latest - # defaults: - # run: - # working-directory: ./nested-path-here - strategy: - fail-fast: false - - steps: - - name: checkout this repo (contracts) - uses: actions/checkout@v3 - - - name: Install latest toolchain - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - target: wasm32-unknown-unknown - override: true - - - name: Download Tarball Artifact - uses: actions/download-artifact@v3 - with: - name: local-ic - path: /tmp - - - name: Make local-ic executable - run: chmod +x /tmp/local-ic - - # TODO: modify me to match your setup - - name: Compile contract - run: make compile - - # TODO: You can change `juno` here to any config in the chains/ directory - # The `&` at the background allows it to run in the background of the CI pipeline. - - name: Start background ibc local-interchain - run: ICTEST_HOME=./interchaintest /tmp/local-ic start juno --api-port 8080 & - - # TODO: run the rust binary e2e test. (scripts, makefile, or just work here.) - - name: Run Rust E2E Script - run: make run-test - - - name: Cleanup - run: killall local-ic && exit 0 -``` - -## Makefile - -The following is an example makefile for the above CI. You can also use bash scripts or just files in the root directory. - -```makefile -#!/usr/bin/make -f -VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//') -COMMIT := $(shell git log -1 --format='%H') - -CURRENT_DIR := $(shell pwd) -BASE_DIR := $(shell basename $(CURRENT_DIR)) - -compile: - @echo "Compiling Contract $(COMMIT)..." - @docker run --rm -v "$(CURRENT_DIR)":/code \ - --mount type=volume,source="$(BASE_DIR)_cache",target=/code/target \ - --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/rust-optimizer:0.12.13 - -run-test: - cd interchaintest && cargo run --package e2e_testing --bin e2e_testing -``` diff --git a/local-interchain/rust/localic-std/Cargo.toml b/local-interchain/rust/localic-std/Cargo.toml deleted file mode 100644 index 49fc124d0..000000000 --- a/local-interchain/rust/localic-std/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "localic-std" -version = "0.0.1" -edition = "2021" -authors = ["Strangelove Developers"] - -[lib] -name = "localic_std" -path = "./src/lib.rs" - -[dependencies] -reqwest.workspace = true -tokio.workspace = true -serde_json.workspace = true -cosmwasm-std.workspace = true -thiserror.workspace = true diff --git a/local-interchain/rust/localic-std/Makefile b/local-interchain/rust/localic-std/Makefile deleted file mode 100644 index 7fc60e6fd..000000000 --- a/local-interchain/rust/localic-std/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -.PHONY: lint -lint: - @echo "Running linter..." - @cargo fmt --all - @cargo clippy -- -D warnings - @cargo clippy -- -W clippy::pedantic -W clippy::correctness -W clippy::branches_sharing_code \ No newline at end of file diff --git a/local-interchain/rust/localic-std/src/errors.rs b/local-interchain/rust/localic-std/src/errors.rs deleted file mode 100644 index 59c03e020..000000000 --- a/local-interchain/rust/localic-std/src/errors.rs +++ /dev/null @@ -1,43 +0,0 @@ -use thiserror::Error; - -#[derive(Error, Debug, Clone)] -pub enum LocalError { - #[error("{{msg}}")] - Custom { msg: String }, - - #[error("This err returned is NotImplemented")] - NotImplemented {}, - - #[error("the transaction hash was not found.")] - TxHashNotFound {}, - - #[error("file upload failed for path: {path}. reason: {reason}")] - UploadFailed { path: String, reason: String }, - - #[error("transaction was not successful. status: {code_status}. log: {raw_log}")] - TxNotSuccessful { code_status: i64, raw_log: String }, - - #[error("contract address not found. {events}")] - ContractAddressNotFound { events: String }, - - #[error("key_bech32 failed. reason: {reason}")] - KeyBech32Failed { reason: String }, - - #[error("This CosmWasm object has no value for: {value_type}")] - CWValueIsNone { value_type: String }, - - #[error("API URL is not found.")] - ApiNotFound {}, - - #[error("Chain ID is not found.")] - ChainIdNotFound {}, - - #[error("The local-interchain API server did not start in time.")] - ServerDidNotStart {}, - - #[error("Could not find the SDK status code in the Tx data. {reason}. tx_res: {tx_res}")] - SdkTransactionStatusCodeNotFound { reason: String, tx_res: String }, - - #[error("Could not get filesystem files. {error}")] - GetFilesError { error: String }, -} diff --git a/local-interchain/rust/localic-std/src/filesystem.rs b/local-interchain/rust/localic-std/src/filesystem.rs deleted file mode 100644 index 92b7dfb5d..000000000 --- a/local-interchain/rust/localic-std/src/filesystem.rs +++ /dev/null @@ -1,25 +0,0 @@ -use crate::{errors::LocalError, transactions::ChainRequestBuilder}; - -/// # Errors -/// -/// Returns `Err` if the files can not be found. -pub fn get_files(rb: &ChainRequestBuilder, absolute_path: &str) -> Result, LocalError> { - let cmd: String = format!("ls {absolute_path}"); - let res = rb.exec(cmd.as_str(), true); - - if let Some(err) = res["error"].as_str() { - return Err(LocalError::GetFilesError { - error: err.to_string(), - }); - }; - - let text = res["text"].as_str(); - - let Some(text) = text else { return Ok(vec![]) }; - - Ok(text - .split('\n') - .filter(|s| !s.is_empty()) - .map(std::string::ToString::to_string) - .collect()) -} diff --git a/local-interchain/rust/localic-std/src/lib.rs b/local-interchain/rust/localic-std/src/lib.rs deleted file mode 100644 index 722b42fd6..000000000 --- a/local-interchain/rust/localic-std/src/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub mod errors; -pub mod filesystem; -pub mod polling; -pub mod transactions; -pub mod types; - -pub mod node; -pub mod relayer; - -pub mod modules; diff --git a/local-interchain/rust/localic-std/src/modules/bank.rs b/local-interchain/rust/localic-std/src/modules/bank.rs deleted file mode 100644 index 3413445cf..000000000 --- a/local-interchain/rust/localic-std/src/modules/bank.rs +++ /dev/null @@ -1,41 +0,0 @@ -use cosmwasm_std::Coin; -use serde_json::Value; - -use crate::{errors::LocalError, transactions::ChainRequestBuilder, types::get_coin_from_json}; - -/// # Errors -/// -/// Returns `Err` if the transaction fails (ex: not enough balance, fees, or gas). -pub fn send( - rb: &ChainRequestBuilder, - from_key: &str, - to_address: &str, - tokens: &[Coin], - fee: &Coin, -) -> Result { - let str_coins = tokens - .iter() - .map(|coin| format!("{}{}", coin.amount, coin.denom)) - .collect::>() - .join(","); - - let cmd = - format!("tx bank send {from_key} {to_address} {str_coins} --fees={fee} --output=json"); - rb.tx(&cmd, true) -} - -pub fn get_balance(req_builder: &ChainRequestBuilder, address: &str) -> Vec { - let res = req_builder.query(&format!("q bank balances {address}"), false); - let Some(balances) = res["balances"].as_array() else { return vec![] }; - - let coins: Vec = balances.iter().map(get_coin_from_json).collect(); - coins -} - -pub fn get_total_supply(req_builder: &ChainRequestBuilder) -> Vec { - let res = req_builder.query("q bank total", false); - let Some(supplies) = res["supply"].as_array() else { return vec![] }; - - let coins: Vec = supplies.iter().map(get_coin_from_json).collect(); - coins -} diff --git a/local-interchain/rust/localic-std/src/modules/cosmwasm.rs b/local-interchain/rust/localic-std/src/modules/cosmwasm.rs deleted file mode 100644 index 4044731a2..000000000 --- a/local-interchain/rust/localic-std/src/modules/cosmwasm.rs +++ /dev/null @@ -1,319 +0,0 @@ -use std::path::{Path, PathBuf}; - -use serde_json::Value; - -use crate::{ - errors::LocalError, - relayer::Relayer, - transactions::ChainRequestBuilder, - types::{Contract, TransactionResponse}, -}; - -#[derive(Clone)] -pub struct CosmWasm<'a> { - rb: &'a ChainRequestBuilder, - - pub file_path: Option, - pub code_id: Option, - pub contract_addr: Option, -} - -impl CosmWasm<'_> { - #[must_use] - pub fn new(rb: &ChainRequestBuilder) -> CosmWasm { - CosmWasm { - rb, - file_path: None, - code_id: None, - contract_addr: None, - } - } - - #[must_use] - pub fn new_from_existing( - rb: &ChainRequestBuilder, - file_path: Option, - code_id: Option, - contract_addr: Option, - ) -> CosmWasm { - CosmWasm { - rb, - file_path, - code_id, - contract_addr, - } - } - - /// # Errors - /// - /// Returns `Err` if the `code_id` is not found when uploading the contract. - pub fn store(&mut self, key_name: &str, abs_path: &Path) -> Result { - // TODO: add cache - println!( - "uploading contract to {}: {}", - self.rb.chain_id.as_str(), - abs_path.to_str().unwrap_or_default() - ); - match self.rb.upload_contract(key_name, abs_path) { - Ok(code_id) => { - self.code_id = Some(code_id); - self.file_path = Some(abs_path.to_path_buf()); - Ok(code_id) - } - Err(e) => Err(e), - } - } - - /// # Errors - /// - /// Returns `Err` if the contract address is not found in the transaction logs. - pub fn instantiate( - &mut self, - account_key: &str, - msg: &str, - label: &str, - admin: Option<&str>, - flags: &str, - ) -> Result { - let code_id: u64 = match &self.code_id { - Some(code) => code.to_owned(), - None => { - return Err(LocalError::CWValueIsNone { - value_type: "code_id".to_string(), - }) - } - }; - - match contract_instantiate(self.rb, account_key, code_id, msg, label, admin, flags) { - Ok(contract) => { - self.contract_addr = Some(contract.address.clone()); - Ok(contract) - } - Err(e) => Err(e), - } - } - - /// # Errors - /// - /// Returns `Err` if the sdk status code can not be found in the JSON blob. - pub fn execute( - &self, - account_key: &str, - msg: &str, - flags: &str, - ) -> Result { - let contract_addr: &str = match &self.contract_addr { - Some(addr) => addr.as_ref(), - None => { - return Err(LocalError::CWValueIsNone { - value_type: "contract_addr".to_string(), - }) - } - }; - contract_execute(self.rb, contract_addr, account_key, msg, flags) - } - - /// # Panics - /// - /// Panics if the contract address already set in the `CosmWasm` object. - #[must_use] - pub fn query(&self, msg: &str) -> Value { - let contract_addr: &str = match &self.contract_addr { - Some(addr) => addr.as_ref(), - None => panic!("contract_addr is none"), - }; - contract_query(self.rb, contract_addr, msg) - } - - // make a query request which uses a serde_json::Value as the msg - #[must_use] - pub fn query_value(&self, msg: &Value) -> Value { - self.query(msg.to_string().as_str()) - } - - /// # Errors - /// - /// Returns `Err` if the contract address is not found in the transaction logs. - pub fn create_wasm_connection( - &self, - r: &Relayer, - path: &str, - dst: &CosmWasm, - order: &str, - version: &str, - ) -> Result { - let contract_addr: String = match &self.contract_addr { - Some(addr) => addr.to_string(), - None => { - return Err(LocalError::CWValueIsNone { - value_type: "contract_addr".to_string(), - }) - } - }; - - let dst_contract_addr: String = match &dst.contract_addr { - Some(addr) => addr.to_string(), - None => { - return Err(LocalError::CWValueIsNone { - value_type: "dst.contract_addr".to_string(), - }) - } - }; - - let src: String = format!("wasm.{}", contract_addr.as_str()); - let dst = format!("wasm.{}", dst_contract_addr.as_str()); - - r.create_channel(path, src.as_str(), dst.as_str(), order, version) - } -} - -/// # Errors -/// -/// Returns `Err` if the transaction fails or the contract address is not found. -pub fn contract_instantiate( - rb: &ChainRequestBuilder, - account_key: &str, - code_id: u64, - msg: &str, - label: &str, - admin: Option<&str>, - flags: &str, -) -> Result { - let mut updated_flags = flags.to_string(); - if let Some(admin) = admin { - updated_flags = format!("{flags} --admin={admin}"); - } else if !flags.contains("--no-admin") { - updated_flags = format!("{flags} --no-admin"); - } - - updated_flags = updated_flags.trim().to_string(); - - let mut cmd = format!("tx wasm instantiate {code_id} {msg} --label={label} --from={account_key} --output=json --gas=auto --gas-adjustment=3.0"); - if !updated_flags.is_empty() { - cmd = format!("{cmd} {updated_flags}"); - } - - let res = rb.tx(cmd.as_str(), false)?; - - let tx_hash: Option = rb.get_tx_hash(&res); - let raw_log: Option = rb.get_raw_log(&res); - - if raw_log.is_some() { - println!("raw_log: {}", raw_log.unwrap_or_default()); - } - - let contract_addr = get_contract_address(rb, tx_hash.clone().unwrap_or_default().as_str()); - match contract_addr { - Ok(contract_addr) => Ok(Contract { - address: contract_addr, - tx_hash: tx_hash.unwrap_or_default(), - admin: admin.map(std::string::ToString::to_string), - }), - Err(e) => Err(e), - } -} - -/// # Errors -/// -/// Returns `Err` if the SDK response code can not be found in the transaction data. -pub fn contract_execute( - rb: &ChainRequestBuilder, - contract_addr: &str, - account_key: &str, - msg: &str, - flags: &str, -) -> Result { - let mut cmd = format!("tx wasm execute {contract_addr} {msg} --from={account_key} {flags}"); - cmd = cmd.trim().to_string(); - - let updated_flags = flags.to_string(); - if !updated_flags.is_empty() { - cmd = format!("{cmd} {updated_flags}"); - } - - let res = match rb.tx(cmd.as_str(), false) { - Ok(res) => res, - Err(e) => { - return Err(e); - } - }; - - let tx_hash = rb.get_tx_hash(&res); - let raw_log = rb.get_raw_log(&res); - - let status_code = match rb.get_sdk_status_code(&res) { - Ok(code_id) => code_id, - Err(e) => { - return Err(e); - } - }; - - if let Some(tx_raw_log) = &raw_log { - println!("raw_log: {tx_raw_log}"); - } - - Ok(TransactionResponse { - status_code, - tx_hash, - raw_log, - }) -} - -#[must_use] -pub fn contract_query(rb: &ChainRequestBuilder, contract_addr: &str, msg: &str) -> Value { - let cmd = format!("query wasm contract-state smart {contract_addr} {msg}",); - rb.query(&cmd, false) -} - -/// # Errors -/// -/// Returns `Err` if the contract address is not found in the transaction logs. -pub fn get_contract_address(rb: &ChainRequestBuilder, tx_hash: &str) -> Result { - let mut last_error = LocalError::ContractAddressNotFound { - events: String::new(), - }; - for _ in 0..5 { - let res = get_contract(rb, tx_hash); - if res.is_ok() { - return res; - } - - let Some(err) = res.err() else { continue }; - last_error = err; - std::thread::sleep(std::time::Duration::from_secs(1)); - } - - Err(last_error) -} - -fn get_contract(rb: &ChainRequestBuilder, tx_hash: &str) -> Result { - let res = rb.query_tx_hash(tx_hash); - - let code = res["code"].as_i64().unwrap_or_default(); - if code != 0 { - let raw = res["raw_log"].as_str().unwrap_or_default(); - return Err(LocalError::TxNotSuccessful { - code_status: code, - raw_log: raw.to_string(), - }); - } - - for event in res["logs"][0]["events"].as_array().iter() { - for attr in event.iter() { - for attr_values in attr["attributes"].as_array().iter() { - for attr in attr_values.iter() { - if let Some(key) = attr["key"].as_str() { - if key.contains("contract_address") { - let contract_address = attr["value"].as_str().unwrap_or_default(); - return Ok(contract_address.to_string()); - } - } - } - } - } - } - - Err(LocalError::ContractAddressNotFound { - events: res.to_string(), - }) -} diff --git a/local-interchain/rust/localic-std/src/modules/gov.rs b/local-interchain/rust/localic-std/src/modules/gov.rs deleted file mode 100644 index 4d4e57092..000000000 --- a/local-interchain/rust/localic-std/src/modules/gov.rs +++ /dev/null @@ -1,9 +0,0 @@ -use serde_json::Value; - -use crate::transactions::ChainRequestBuilder; - -#[must_use] -pub fn get_proposal(req_builder: &ChainRequestBuilder, proposal_id: u64) -> Value { - let cmd = format!("q gov proposal {proposal_id}"); - req_builder.query(cmd.as_str(), false) -} diff --git a/local-interchain/rust/localic-std/src/modules/mod.rs b/local-interchain/rust/localic-std/src/modules/mod.rs deleted file mode 100644 index 2367b7115..000000000 --- a/local-interchain/rust/localic-std/src/modules/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod bank; -pub mod cosmwasm; -pub mod gov; diff --git a/local-interchain/rust/localic-std/src/node.rs b/local-interchain/rust/localic-std/src/node.rs deleted file mode 100644 index 0f2fc0236..000000000 --- a/local-interchain/rust/localic-std/src/node.rs +++ /dev/null @@ -1,196 +0,0 @@ -// ref: chain_node.go -use crate::{errors::LocalError, transactions::ChainRequestBuilder, types::RequestType}; -use serde_json::{json, Value}; - -// TODO: -// pub fn VoteOnProposal(rb: &ChainRequestBuilder, proposal_id: String, vote: String) -> String { -// pub fn SubmitProposal(key_name: String, proposal_json_path: Pathbuf) -// pub fn UpgradeProposal(key_name: String, upgradeheight, title, description, deposit) -// pub fn UnsafeResetAll(rb: &ChainRequestBuilder) -> String { - -#[derive(Clone)] -pub struct Chain<'a> { - rb: &'a ChainRequestBuilder, -} - -impl Chain<'_> { - #[must_use] - pub fn new(rb: &ChainRequestBuilder) -> Chain { - Chain { rb } - } - - fn info_builder(&self, request: &str, extra_params: Option<&[(&str, &str)]>) -> String { - let query_params: Vec<(&str, &str)> = { - let mut params = vec![ - ("chain_id", self.rb.chain_id.as_str()), - ("request", request), - ]; - - if let Some(extra_params) = extra_params { - params.extend_from_slice(extra_params); - } - - params - }; - let query_params: &[(&str, &str)] = query_params.as_slice(); - - let res = self - .rb - .client - .get(format!("{}/info", self.rb.api).as_str()) - .query(query_params) - .send() - .unwrap() - .text() - .unwrap(); - res - } - - // actions - #[must_use] - pub fn recover_key(&self, key_name: &str, mnemonic: &str) -> Value { - let cmd = format!("keyname={key_name};mnemonic={mnemonic}"); - self.rb - .send_request(RequestType::RecoverKey, cmd.as_str(), false) - } - - #[must_use] - pub fn overwrite_genesis_file(&self, content: &str) -> Value { - let cmd = format!("new_genesis={content}"); - self.rb - .send_request(RequestType::OverwriteGenesisFile, cmd.as_str(), false) - } - - #[must_use] - pub fn dump_contract_state(&self, contract_addr: &str, height: u64) -> Value { - let cmd = format!("contract={contract_addr};height={height}"); - self.rb - .send_request(RequestType::DumpContractState, cmd.as_str(), false) - } - - #[must_use] - pub fn set_peers(&self, peers: &str) -> Value { - let cmd = format!("new_peers={peers}"); - self.rb - .send_request(RequestType::SetNewPeers, cmd.as_str(), false) - } - - /// `add_full_node` adds a full node to the network. A full node must already be running on the same network. - #[must_use] - pub fn add_full_node(&self, amount: u64) -> Value { - let cmd = format!("amount={amount}"); - self.rb - .send_request(RequestType::AddFullNodes, cmd.as_str(), false) - } - - /// # Errors - /// - /// Returns `Err` if the key bech32 fails on the node. - pub fn account_key_bech_32(&self, key_name: &str) -> Result { - self.key_bech32(key_name, "") - } - - /// # Errors - /// - /// Returns `Err` if the key bech32 fails on the node. - pub fn key_bech32(&self, key_name: &str, bech_prefix: &str) -> Result { - let mut cmd = - format!("keys show --address {key_name} --home=%HOME% --keyring-backend=test"); - - if !bech_prefix.is_empty() { - cmd = format!("{cmd} --bech {bech_prefix}"); - } - - let res = &self.rb.bin(cmd.as_str(), true); - let text = res["text"].to_string(); - if text.contains("Error:") { - return Err(LocalError::KeyBech32Failed { - reason: res["text"].to_string(), - }); - } - - if !text.is_empty() { - let text = text.replace("\\n", ""); - let text = text.replace('\"', ""); - return Ok(text); - } - - Err(LocalError::KeyBech32Failed { - reason: res["error"].to_string(), - }) - } - - #[must_use] - pub fn get_chain_config(&self) -> Value { - let res = self.info_builder("config", None); - - match serde_json::from_str::(&res) { - Ok(res) => res, - Err(_) => { - json!({}) - } - } - } - - #[must_use] - pub fn get_name(&self) -> String { - self.info_builder("name", None) - } - - #[must_use] - pub fn get_container_id(&self) -> String { - self.info_builder("container_id", None) - } - - #[must_use] - pub fn get_host_name(&self) -> String { - self.info_builder("hostname", None) - } - - #[must_use] - pub fn get_genesis_file_content(&self) -> Option { - match self.info_builder("genesis_file_content", None).as_str() { - "" => None, - res => Some(res.to_string()), - } - } - - #[must_use] - pub fn get_home_dir(&self) -> String { - self.info_builder("home_dir", None) - } - - #[must_use] - pub fn get_height(&self) -> u64 { - let res = self.info_builder("height", None); - res.parse::().unwrap_or(0) - } - - #[must_use] - pub fn read_file(&self, relative_path: &str) -> String { - self.info_builder("read_file", Some(&[("relative_path", relative_path)])) - } - - #[must_use] - pub fn is_above_sdk_v47(&self) -> bool { - let res = self.info_builder("is_above_sdk_v47", None); - res.parse::().unwrap_or(false) - } - - #[must_use] - pub fn has_command(&self, command: &str) -> String { - self.info_builder("has_command", Some(&[("command", command)])) - } - - #[must_use] - pub fn get_build_information(&self) -> Value { - let res = self.info_builder("build_information", None); - - match serde_json::from_str::(&res) { - Ok(res) => res, - Err(_) => { - json!({}) - } - } - } -} diff --git a/local-interchain/rust/localic-std/src/polling.rs b/local-interchain/rust/localic-std/src/polling.rs deleted file mode 100644 index 70c2140fa..000000000 --- a/local-interchain/rust/localic-std/src/polling.rs +++ /dev/null @@ -1,21 +0,0 @@ -use reqwest::blocking::Client as BClient; - -use crate::errors::LocalError; - -/// Polls the API URL for a response. If the response is successful, then the server is running. -/// # Errors -/// -/// If the server does not start within the `wait_seconds`, then an error is returned. -pub fn poll_for_start(c: &BClient, api_url: &str, wait_seconds: u32) -> Result<(), LocalError> { - for i in 0..wait_seconds { - if c.get(api_url).send().is_ok() { - return Ok(()); - } - println!("waiting for server to start (iter:{i}) ({api_url})"); - std::thread::sleep(std::time::Duration::from_secs(1)); - } - - Err(LocalError::ServerDidNotStart {}) -} - -// TODO: polling for a future block (wait_until) delta diff --git a/local-interchain/rust/localic-std/src/relayer.rs b/local-interchain/rust/localic-std/src/relayer.rs deleted file mode 100644 index a509b5ab9..000000000 --- a/local-interchain/rust/localic-std/src/relayer.rs +++ /dev/null @@ -1,166 +0,0 @@ -use serde_json::Value; - -use crate::{errors::LocalError, transactions::ChainRequestBuilder}; - -#[derive(Clone)] -pub struct Relayer<'a> { - rb: &'a ChainRequestBuilder, -} - -#[derive(Clone, Debug)] -pub struct Channel { - pub channel_id: String, - pub connection_hops: Vec, - pub counterparty: Counterparty, - pub ordering: String, - pub port_id: String, - pub state: String, - pub version: String, -} - -#[derive(Clone, Debug)] -pub struct Counterparty { - pub channel_id: String, - pub port_id: String, -} - -impl Relayer<'_> { - #[must_use] - pub fn new(rb: &ChainRequestBuilder) -> Relayer { - Relayer { rb } - } - - /// # Errors - /// - /// Returns `Err` if the relayer is not able to execute the command. - pub fn execute(&self, cmd: &str, return_text: bool) -> Result { - let payload = serde_json::json!({ - "chain_id": self.rb.chain_id, - "action": "relayer-exec", - "cmd": cmd, - }); - - let res = self - .rb - .client - .post(&self.rb.api) - .json(&payload) - .header("Accept", "Content-Type: application/json") - .header("Content-Type", "Content-Type: application/json") - .send(); - - if return_text { - let res_text = match res { - Ok(res) => res.text().unwrap_or_default(), - Err(e) => return Err(LocalError::Custom { msg: e.to_string() }), - }; - - return Ok(serde_json::json!({ - "text": res_text, - })); - } - - match res { - Ok(res) => Ok(res.json().unwrap_or_default()), - Err(e) => Err(LocalError::Custom { msg: e.to_string() }), - } - } - - /// # Errors - /// - /// Returns `Err` if the relayer is not able to flush packets between 2 contracts. - pub fn flush(&self, path: &str, channel: &str) -> Result { - let cmd = format!("rly transact flush {path} {channel}"); - self.execute(cmd.as_str(), false) - } - - /// # Errors - /// - /// Returns `Err` if the relayer is not able to create the channel between 2 channels. - pub fn create_channel( - &self, - path: &str, - src: &str, - dst: &str, - order: &str, - version: &str, - ) -> Result { - let source: String = src.to_string(); - let destination: String = dst.to_string(); - - let cmd = format!( - "rly tx channel {path} --src-port {source} --dst-port {destination} --order {order} --version {version}", - ); - - self.execute(cmd.as_str(), false) - } - - /// # Errors - /// - /// Returns `Err` if the relayer is not able to return the channels. - /// - /// # Panics - /// - /// Panics if the relayer is not able to return the channels. - pub fn get_channels(&self, chain_id: &str) -> Result, LocalError> { - let payload = serde_json::json!({ - "chain_id": chain_id, - "action": "get_channels", - }); - - let res = self.rb.client.post(&self.rb.api).json(&payload).send(); - if let Err(res) = res { - return Err(LocalError::Custom { - msg: res.to_string(), - }); - } - - let channel_json: Value = match res { - Ok(res) => res.json().unwrap_or_default(), - Err(e) => return Err(LocalError::Custom { msg: e.to_string() }), - }; - - let mut channels: Vec = Vec::new(); - - let Some(c) = channel_json.as_array() else { - return Err(LocalError::Custom { - msg: "channel_json is not an array".to_string(), - }) - }; - - for channel in c { - let channel_id = channel["channel_id"] - .as_str() - .unwrap_or_default() - .to_string(); - let connection_hops = channel["connection_hops"].as_array().unwrap(); - let mut hops: Vec = Vec::new(); - for hop in connection_hops { - hops.push(hop.as_str().unwrap().to_string()); - } - let counterparty = channel["counterparty"].as_object().unwrap(); - let counterparty_channel_id = counterparty["channel_id"].as_str().unwrap().to_string(); - let counterparty_port_id = counterparty["port_id"].as_str().unwrap().to_string(); - let counterparty = Counterparty { - channel_id: counterparty_channel_id, - port_id: counterparty_port_id, - }; - let ordering = channel["ordering"].as_str().unwrap().to_string(); - let port_id = channel["port_id"].as_str().unwrap().to_string(); - let state = channel["state"].as_str().unwrap().to_string(); - let version = channel["version"].as_str().unwrap().to_string(); - let channel = Channel { - channel_id, - connection_hops: hops, - counterparty, - ordering, - port_id, - state, - version, - }; - channels.push(channel); - } - - Ok(channels) - } -} diff --git a/local-interchain/rust/localic-std/src/transactions.rs b/local-interchain/rust/localic-std/src/transactions.rs deleted file mode 100644 index a137e5904..000000000 --- a/local-interchain/rust/localic-std/src/transactions.rs +++ /dev/null @@ -1,385 +0,0 @@ -use std::path::Path; - -use reqwest::blocking::{Client, RequestBuilder}; -use serde_json::Value; - -use crate::{ - errors::LocalError, - types::{ActionHandler, RequestType}, -}; - -#[derive(Debug)] -pub struct ChainRequestBuilder { - pub client: Client, - pub api: String, - pub chain_id: String, - log_output: bool, -} - -impl ChainRequestBuilder { - /// # Errors - /// - /// Returns `Err` if the `api` or `chain_id` is empty. - pub fn new( - api: String, - chain_id: String, - log_output: bool, - ) -> Result { - if api.is_empty() { - return Err(LocalError::ApiNotFound {}); - } - if chain_id.is_empty() { - return Err(LocalError::ChainIdNotFound {}); - } - - Ok(ChainRequestBuilder { - client: Client::new(), - api, - chain_id, - log_output, - }) - } - - // app binary commands - #[must_use] - pub fn binary(&self, cmd: &str, return_text: bool) -> Value { - self.send_request(RequestType::Bin, cmd, return_text) - } - #[must_use] - pub fn bin(&self, cmd: &str, return_text: bool) -> Value { - self.binary(cmd, return_text) - } - - // app query commands - #[must_use] - pub fn query(&self, cmd: &str, return_text: bool) -> Value { - self.send_request(RequestType::Query, cmd, return_text) - } - #[must_use] - pub fn q(&self, cmd: &str, return_text: bool) -> Value { - self.query(cmd, return_text) - } - - // container execution commands - #[must_use] - pub fn execute(&self, cmd: &str, return_text: bool) -> Value { - self.send_request(RequestType::Exec, cmd, return_text) - } - #[must_use] - pub fn exec(&self, cmd: &str, return_text: bool) -> Value { - self.execute(cmd, return_text) - } - - /// # Errors - /// - /// Returns `Err` if the transaction fails. - pub fn transaction(&self, cmd: &str, get_data: bool) -> Result { - let command = set_missing_required_args( - cmd, - vec![ - "--node=%RPC%", - "--chain-id=%CHAIN_ID%", - "--keyring-backend=test", - "--home=%HOME%", - ], - ); - - let command = if command.contains("--yes") { - command - } else { - format!("{command} --yes") - }; - - let res = self.binary(command.as_str(), false); - if !get_data { - return Ok(res); - } - - let Some(tx_hash) = self.get_tx_hash(&res) else { return Err(LocalError::TxHashNotFound {}) }; - - for _ in 0..5 { - let data = self.query_tx_hash(&tx_hash); - - if !data.to_string().starts_with("{\"error\":") { - return Ok(data); - } - - std::thread::sleep(std::time::Duration::from_secs(1)); - } - - Err(LocalError::TxHashNotFound {}) - } - - /// # Errors - /// - /// Returns `Err` if the transaction fails. - pub fn tx(&self, cmd: &str, get_data: bool) -> Result { - self.transaction(cmd, get_data) - } - - #[must_use] - pub fn decode_transaction(&self, protobuf_bytes: &str, use_hex: bool) -> Value { - let mut cmd = format!("tx decode {protobuf_bytes}"); - if use_hex { - cmd = format!("{cmd} --hex"); - } - - self.binary(cmd.as_str(), false) - } - #[must_use] - pub fn get_tx_hash(&self, tx_res: &Value) -> Option { - let tx_hash = tx_res["txhash"].as_str(); - tx_hash.map(std::string::ToString::to_string) - } - - /// # Errors - /// - /// Returns `Err` if the transaction status code is not found. - pub fn get_sdk_status_code(&self, tx_res: &Value) -> Result { - let status_id = tx_res["code"].as_u64(); - match status_id { - Some(code) => Ok(code), - None => Err(LocalError::SdkTransactionStatusCodeNotFound { - reason: "'code' not found in Tx JSON response.".to_string(), - tx_res: tx_res.to_string(), - }), - } - } - - #[must_use] - pub fn get_raw_log(&self, tx_res: &Value) -> Option { - let raw_log = tx_res["raw_log"].as_str(); - let res = raw_log.map(std::string::ToString::to_string); - res.filter(|res| !(res.is_empty() || res == "[]")) - } - - #[must_use] - pub fn query_tx_hash(&self, tx_hash: &str) -> Value { - if tx_hash.is_empty() { - return serde_json::json!({ - "error": "tx_hash cannot be empty", - }); - } - - let cmd = format!("tx {tx_hash} --output=json"); - self.query(&cmd, false) - } - - /// # Errors - /// - /// Returns `Err` if the file does not exist or if the file path is not valid. - pub fn upload_file( - &self, - abs_path: &Path, - return_text: bool, - ) -> Result { - let file: String = match abs_path.to_str() { - Some(file) => file.to_string(), - None => { - return Err(LocalError::UploadFailed { - path: match abs_path.to_str() { - Some(path) => path.to_string(), - None => String::new(), - }, - reason: "file path is not valid".to_string(), - }); - } - }; - if !abs_path.exists() { - return Err(LocalError::UploadFailed { - path: file, - reason: "file does not exist".to_string(), - }); - } - - let payload = serde_json::json!({ - "chain_id": &self.chain_id, - "file_path": file, - }); - - let url = self.api.to_string(); - let url = if url.ends_with('/') { - url + "upload" - } else { - url + "/upload" - }; - - let header: &str = if return_text { - "Content-Type: text/plain" - } else { - "Content-Type: application/json" - }; - - Ok(self - .client - .post(url) - .json(&payload) - .header("Accept", header) - .header("Content-Type", header)) - } - - /// # Errors - /// - /// Returns `Err` if the contract is not uploaded. - pub fn upload_contract(&self, key_name: &str, abs_path: &Path) -> Result { - let Some(file) = abs_path.to_str() else { - return Err(LocalError::UploadFailed { - path: match abs_path.to_str() { - Some(path) => path.to_string(), - None => String::new(), - }, - reason: "file path is not valid".to_string(), - }); - }; - - let payload = serde_json::json!({ - "chain_id": &self.chain_id, - "file_path": file, - "key_name": key_name, - }); - - let req = self.upload_file(abs_path, false)?; - - let req = req.json(&payload).header("Upload-Type", "cosmwasm"); - - let resp = match req.send() { - Ok(resp) => resp, - Err(err) => { - return Err(LocalError::UploadFailed { - path: file.to_string(), - reason: err.to_string(), - }); - } - }; - match resp.text() { - Ok(text) => { - if text.contains("error") { - return Err(LocalError::UploadFailed { - path: file.to_string(), - reason: text, - }); - } - - // convert text to json - let json = match serde_json::from_str::(&text) { - Ok(json) => json, - Err(err) => { - return Err(LocalError::UploadFailed { - path: file.to_string(), - reason: err.to_string(), - }); - } - }; - - // get code_id from json - let Some(code_id) = json["code_id"].as_u64() else { - return Err(LocalError::UploadFailed { - path: file.to_string(), - reason: "code_id not found".to_string(), - }); - }; - - // return code_id - Ok(code_id) - } - Err(err) => Err(LocalError::UploadFailed { - path: file.to_string(), - reason: err.to_string(), - }), - } - } - - #[must_use] - pub fn send_request( - &self, - request_type: RequestType, - command: &str, - return_text: bool, - ) -> Value { - let mut cmd: String = command.to_string(); - if request_type == RequestType::Query { - if cmd.to_lowercase().starts_with("query ") { - cmd = cmd[6..].to_string(); - } else if cmd.to_lowercase().starts_with("q ") { - cmd = cmd[2..].to_string(); - } - }; - - // return JSON if we we did not override that. - if !return_text && (request_type == RequestType::Query || request_type == RequestType::Bin) - { - cmd = set_missing_required_args( - cmd.as_str(), - vec!["--node=%RPC%", "--chain-id=%CHAIN_ID%", "--output=json"], - ); - } - - // Build the request payload - let payload = ActionHandler::new(self.chain_id.clone(), request_type, cmd).to_json(); - - if self.log_output { - println!("[send_request payload]: {payload}"); - } - - let mut rb = self.client.post(&self.api).json(&payload); - - let content_type = if return_text { - "text/plain" - } else { - "application/json" - }; - - rb = rb - .header("Content-Type", content_type) - .header("Accept", content_type); - - let res = match rb.send() { - Ok(res) => res, - Err(err) => { - return return_text_json("", Some(err.to_string())); - } - }; - let text = res.text(); - - if return_text { - return return_text_json(text.unwrap_or_default().as_str(), None); - } - - match text { - Ok(text) => match serde_json::from_str::(&text) { - Ok(json) => json, - Err(err) => return_text_json(text.as_str(), Some(err.to_string())), - }, - Err(err) => return_text_json("", Some(err.to_string())), - } - } -} - -fn return_text_json(text: &str, err: Option) -> Value { - serde_json::json!({ - "text": &text, - "error": match err.unwrap_or_default() { - err if err.is_empty() => None, - err => Some(err), - }, - }) -} - -/// Sets missing command arguments that are required (such as the chain-id, keyring-backend, node, etc). -/// `required` elements must contain an '=' sign to be valid. -fn set_missing_required_args(cmd: &str, required: Vec<&str>) -> String { - let mut command = cmd.to_string(); - - for arg in required { - let parsed_args: String = match arg.split_once('=') { - Some((a, b)) => format!("{a} {b}"), - None => panic!("{arg} must have an '=' sign to be value in the `required` argument"), - }; - - if !command.contains(arg) && !command.contains(parsed_args.as_str()) { - command = format!("{command} {arg}"); - } - } - - command -} diff --git a/local-interchain/rust/localic-std/src/types.rs b/local-interchain/rust/localic-std/src/types.rs deleted file mode 100644 index 2519bc316..000000000 --- a/local-interchain/rust/localic-std/src/types.rs +++ /dev/null @@ -1,131 +0,0 @@ -use std::fmt; - -use cosmwasm_std::{Coin, Uint128}; -use reqwest::blocking::Client; - -#[derive(Debug, PartialEq, Eq, Clone)] -pub enum RequestType { - Bin, - Query, - Exec, - // custom - RecoverKey, - OverwriteGenesisFile, - SetNewPeers, - AddFullNodes, - DumpContractState, -} -impl RequestType { - #[must_use] - pub fn as_str(&self) -> &'static str { - // match handlers/actions.go - match self { - RequestType::Bin => "bin", - RequestType::Query => "query", - RequestType::Exec => "exec", - RequestType::RecoverKey => "recover-key", - RequestType::OverwriteGenesisFile => "overwrite-genesis-file", - RequestType::SetNewPeers => "set-peers", - RequestType::AddFullNodes => "add-full-nodes", - RequestType::DumpContractState => "dump-contract-state", - } - } -} - -#[derive(Debug, Clone)] -pub struct RequestBase { - pub client: Client, - pub url: String, - pub chain_id: String, - pub request_type: RequestType, -} - -impl RequestBase { - #[must_use] - pub fn new( - client: Client, - url: String, - chain_id: String, - request_type: RequestType, - ) -> RequestBase { - RequestBase { - client, - url, - chain_id, - request_type, - } - } -} - -pub struct ActionHandler { - pub chain_id: String, - pub action: RequestType, - pub cmd: String, -} - -impl ActionHandler { - #[must_use] - pub fn new(chain_id: String, action: RequestType, cmd: String) -> ActionHandler { - ActionHandler { - chain_id, - action, - cmd, - } - } - - #[must_use] - pub fn to_json_str(&self) -> String { - let escaped_cmd = self.cmd.replace('\"', "\\\""); - - let json = format!( - r#"{{"chain_id":"{}","action":"{}","cmd":"{}"}}"#, - self.chain_id, - self.action.as_str(), - escaped_cmd - ); - json - } - - #[must_use] - pub fn to_json(&self) -> serde_json::Value { - let json = self.to_json_str(); - let json: serde_json::Value = serde_json::from_str(&json).unwrap_or_default(); - json - } -} - -#[derive(Debug, PartialEq, Eq)] -pub struct TransactionResponse { - pub status_code: u64, - pub tx_hash: Option, - pub raw_log: Option, -} - -impl fmt::Display for TransactionResponse { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "status: {:?} tx_hash: {:?}, rawlog: {:?}", - self.status_code, self.tx_hash, self.raw_log - ) - } -} - -#[derive(Debug, PartialEq, Eq)] -pub struct Contract { - pub address: String, - pub tx_hash: String, - pub admin: Option, -} - -#[must_use] -pub fn get_coin_from_json(value: &serde_json::Value) -> Coin { - let amount = value["amount"].as_str().unwrap_or_default(); - let denom = value["denom"].as_str().unwrap_or_default(); - let amount = amount.parse::().unwrap_or_default(); - - Coin { - denom: denom.to_string(), - amount, - } -} diff --git a/local-interchain/rust/main/Cargo.toml b/local-interchain/rust/main/Cargo.toml deleted file mode 100644 index 2b37eb9bf..000000000 --- a/local-interchain/rust/main/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "localic-bin" -version = "0.0.1" -edition = "2021" -authors = ["Strangelove Developers"] - -[[bin]] -name = "localic-bin" -path = "src/main.rs" - -[dependencies] -reqwest.workspace = true -tokio.workspace = true -serde_json.workspace = true -cosmwasm-std.workspace = true -thiserror.workspace = true - -localic-std.workspace = true \ No newline at end of file diff --git a/local-interchain/rust/main/src/base.rs b/local-interchain/rust/main/src/base.rs deleted file mode 100644 index c320c5cde..000000000 --- a/local-interchain/rust/main/src/base.rs +++ /dev/null @@ -1,41 +0,0 @@ -use std::path; - -// Use clap to parse args in the future -pub const API_URL: &str = "http://127.0.0.1:8080"; - -/// local-interchain/rust directory -/// # Panics -/// -/// Will panic if the current directory path is not found. -#[must_use] -pub fn get_current_dir() -> path::PathBuf { - match std::env::current_dir() { - Ok(p) => p, - Err(e) => panic!("Could not get current dir: {e}"), - } -} - -/// local-interchain directory -/// # Panics -/// -/// Will panic if the `local_interchain` directory is not found in the parent path. -#[must_use] -pub fn get_local_interchain_dir() -> path::PathBuf { - let current_dir = get_current_dir(); - let Some(parent_dir) = current_dir.parent() else { panic!("Could not get parent dir") }; - parent_dir.to_path_buf() -} - -/// local-interchain/contracts directory -#[must_use] -pub fn get_contract_path() -> path::PathBuf { - get_local_interchain_dir().join("contracts") -} - -/// local-interchain/configs/contract.json file -#[must_use] -pub fn get_contract_cache_path() -> path::PathBuf { - get_local_interchain_dir() - .join("configs") - .join("contract.json") -} diff --git a/local-interchain/rust/main/src/main.rs b/local-interchain/rust/main/src/main.rs deleted file mode 100644 index 5c7bf4911..000000000 --- a/local-interchain/rust/main/src/main.rs +++ /dev/null @@ -1,314 +0,0 @@ -#![allow(dead_code, unused_must_use)] - -// Import base libraries -use cosmwasm_std::Coin; -use cosmwasm_std::Uint128; -use reqwest::blocking::Client; -use serde_json::json; - -// Import Local-Interchain std library methods -use localic_std::filesystem::get_files; -use localic_std::node::Chain; -use localic_std::polling::poll_for_start; -use localic_std::relayer::Relayer; -use localic_std::transactions::ChainRequestBuilder; - -// Import Local-Interchain SDK modules -use localic_std::modules::bank::{get_balance, get_total_supply, send}; -use localic_std::modules::cosmwasm::CosmWasm; - -// base helpers for this binary -pub mod base; -use base::{ - get_contract_cache_path, get_contract_path, get_current_dir, get_local_interchain_dir, API_URL, -}; - -// local-ic start juno_ibc -// cargo run --package localic-bin --bin localic-bin -fn main() { - poll_for_start(&Client::new(), API_URL, 300); - - let rb: ChainRequestBuilder = - match ChainRequestBuilder::new(API_URL.to_string(), "localjuno-1".to_string(), true) { - Ok(rb) => rb, - Err(err) => { - panic!("ChainRequestBuilder failed: {err:?}"); - } - }; - let node_a: Chain = Chain::new(&rb); - - let rb2: ChainRequestBuilder = - match ChainRequestBuilder::new(API_URL.to_string(), "localjuno-2".to_string(), true) { - Ok(rb) => rb, - Err(err) => { - panic!("ChainRequestBuilder failed: {err:?}"); - } - }; - - test_paths(&rb); - test_queries(&rb); - test_binary(&rb); - test_bank_send(&rb); - - test_ibc_contract_relaying(&node_a, &rb, &rb2); - test_node_information(&node_a); - test_node_actions(&node_a); -} - -fn test_ibc_contract_relaying(node: &Chain, rb1: &ChainRequestBuilder, rb2: &ChainRequestBuilder) { - // local-ic start juno_ibc - let file_path = get_contract_path().join("cw_ibc_example.wasm"); - let key1 = "acc0"; - let key2 = "second0"; - - let relayer = Relayer::new(rb2); - - let mut contract_a = CosmWasm::new(rb1); - let mut contract_b = CosmWasm::new(rb2); - - let c1_store = contract_a.store(key1, &file_path); - let c2_store = contract_b.store(key2, &file_path); - assert_eq!( - c1_store.unwrap_or_default(), - contract_a.code_id.unwrap_or_default() - ); - assert_eq!( - c2_store.unwrap_or_default(), - contract_b.code_id.unwrap_or_default() - ); - - let ca = contract_a.instantiate(key1, "{}", "contractA", None, ""); - let cb = contract_b.instantiate(key2, "{}", "contractB", None, ""); - println!("contract_a: {ca:?}"); - println!("contract_b: {cb:?}"); - - // example: manual relayer connection - // let wc = relayer.create_channel( - // "juno-ibc-1", - // format!("wasm.{}", &contract_a.contract_addr.as_ref().unwrap()).as_str(), - // format!("wasm.{}", &contract_b.contract_addr.as_ref().unwrap()).as_str(), - // "unordered", - // "counter-1", - // ); - - contract_a.create_wasm_connection( - &relayer, - "juno-ibc-1", - &contract_b, - "unordered", - "counter-1", - ); - - let channels = relayer.get_channels(rb1.chain_id.as_str()); - println!("channels: {channels:?}"); - - let channel_id = "channel-1"; - - // then execute on the contract - let res = contract_b.execute( - key2, - json!({"increment":{"channel":channel_id}}) - .to_string() - .as_str(), - "--gas-adjustment=3.0", - ); - println!("\ncw2.execute_contract: {res:?}"); - - // flush packets - println!( - "relayer.flush: {:?}", - relayer.flush("juno-ibc-1", channel_id) - ); - - let query_res = contract_a.query_value(&json!({"get_count":{"channel":channel_id}})); - println!("\nquery_res: {query_res:?}"); - assert_eq!(query_res, serde_json::json!({"data":{"count":1}})); - - // dump the contracts state to JSON - let height = node.get_height(); - let dump_res = node.dump_contract_state(&contract_a.contract_addr.as_ref().unwrap(), height); - println!("dump_res: {dump_res:?}"); -} - -fn test_node_actions(node: &Chain) { - let keyname = "abc"; - let words = "offer excite scare peanut rally speak suggest unit reflect whale cloth speak joy unusual wink session effort hidden angry envelope click race allow buffalo"; - let expected_addr = "juno1cp8wps50zemt3x5tn3sgqh3x93rlt8cw6tkgx4"; - - let res = node.recover_key(keyname, words); - println!("res: {res:?}"); - - let acc = node.account_key_bech_32("abc"); - println!("acc: {acc:?}"); - assert_eq!(acc.unwrap_or_default(), expected_addr); - - let res = node.overwrite_genesis_file(r#"{"test":{}}"#); - println!("res: {res:?}"); - node.get_genesis_file_content(); // verify this is updated - - // TODO: keep this disabled for now. The chain must already have a full node running to not err. - // let res = node.add_full_node(1); - // println!("res: {:?}", res); -} - -fn test_node_information(node: &Chain) { - let v = node.account_key_bech_32("acc0"); - assert_eq!( - v.unwrap_or_default(), - "juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl" - ); - - let v = node.account_key_bech_32("fake-key987"); - assert!(v.is_err()); - - node.get_chain_config(); - - assert!(node.get_name().starts_with("localjuno-1-val-0")); - node.get_container_id(); - node.get_host_name(); - node.get_genesis_file_content(); - node.get_home_dir(); - node.get_height(); - node.read_file("./config/app.toml"); - node.is_above_sdk_v47(); - node.has_command("genesis"); // false with sdk 45 - node.has_command("tx"); // every bin has this - let res = node.get_build_information(); // every bin has this - println!( - "res: {}", - res["cosmos_sdk_version"].as_str().unwrap_or_default() - ); - - // TODO: test: - // get_proposal(rb, "1"); -} - -fn test_paths(rb: &ChainRequestBuilder) { - println!("current_dir: {:?}", get_current_dir()); - println!("local_interchain_dir: {:?}", get_local_interchain_dir()); - println!("contract_path: {:?}", get_contract_path()); - println!("contract_json_path: {:?}", get_contract_cache_path()); - - // upload Makefile to the chain's home dir - let arb_file = get_current_dir().join("Makefile"); - match rb.upload_file(&arb_file, true) { - Ok(rb) => { - let res = match rb.send() { - Ok(r) => r, - Err(err) => { - panic!("upload_file failed on request send {err:?}"); - } - }; - let body = match res.text() { - Ok(body) => body, - Err(err) => { - panic!("upload_file failed on response body {err:?}"); - } - }; - println!("body: {body:?}"); - assert_eq!(body, "{\"success\":\"file uploaded to localjuno-1\",\"location\":\"/var/cosmos-chain/localjuno-1/Makefile\"}"); - } - Err(err) => { - panic!("upload_file failed {err:?}"); - } - }; - - let files = match get_files(rb, "/var/cosmos-chain/localjuno-1") { - Ok(files) => files, - Err(err) => { - panic!("get_files failed {err:?}"); - } - }; - - assert!(files.contains(&"Makefile".to_string())); - assert!(files.contains(&"config".to_string())); - assert!(files.contains(&"data".to_string())); - assert!(files.contains(&"keyring-test".to_string())); - println!("files: {files:?}"); -} - -fn test_bank_send(rb: &ChainRequestBuilder) { - let before_bal = get_balance(rb, "juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0"); - - let res = send( - rb, - "acc0", - "juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0", - &[Coin { - denom: "ujuno".to_string(), - amount: Uint128::new(5), - }], - &Coin { - denom: "ujuno".to_string(), - amount: Uint128::new(5000), - }, - ); - match res { - Ok(res) => { - println!("res: {res}"); - } - Err(err) => { - println!("err: {err}"); - } - } - - let after_amount = get_balance(rb, "juno10r39fueph9fq7a6lgswu4zdsg8t3gxlq670lt0"); - - println!("before: {before_bal:?}"); - println!("after: {after_amount:?}"); -} - -fn test_queries(rb: &ChainRequestBuilder) { - test_all_accounts(rb); - let c = get_total_supply(rb); - println!("total supply: {c:?}"); -} -fn test_binary(rb: &ChainRequestBuilder) { - rb.binary("config", false); - get_keyring_accounts(rb); - - let decoded = rb.decode_transaction("ClMKUQobL2Nvc21vcy5nb3YudjFiZXRhMS5Nc2dWb3RlEjIIpwISK2p1bm8xZGM3a2MyZzVrZ2wycmdmZHllZGZ6MDl1YTlwZWo1eDNsODc3ZzcYARJmClAKRgofL2Nvc21vcy5jcnlwdG8uc2VjcDI1NmsxLlB1YktleRIjCiECxjGMmYp4MlxxfFWi9x4u+jOleJVde3Cru+HnxAVUJmgSBAoCCH8YNBISCgwKBXVqdW5vEgMyMDQQofwEGkDPE4dCQ4zUh6LIB9wqNXDBx+nMKtg0tEGiIYEH8xlw4H8dDQQStgAe6xFO7I/oYVSWwa2d9qUjs9qyB8r+V0Gy", false); - println!("decoded: {decoded:?}"); -} - -fn test_all_accounts(rb: &ChainRequestBuilder) { - let res = rb.query("q auth accounts", false); - println!("res: {res}"); - - let Some(accounts) = res["accounts"].as_array() else { - println!("No accounts found."); - return; - }; - - for account in accounts.iter() { - let acc_type = account["@type"].as_str().unwrap_or_default(); - - let addr: &str = match acc_type { - // "/cosmos.auth.v1beta1.ModuleAccount" => account["base_account"]["address"] - "/cosmos.auth.v1beta1.ModuleAccount" => account.get("base_account").unwrap()["address"] - .as_str() - .unwrap_or_default(), - _ => account["address"].as_str().unwrap_or_default(), - }; - - println!("{acc_type}: {addr}"); - } -} - -fn get_keyring_accounts(rb: &ChainRequestBuilder) { - let accounts = rb.binary("keys list --keyring-backend=test", false); - - let addrs = accounts["addresses"].as_array(); - addrs.map_or_else( - || { - println!("No accounts found."); - }, - |addrs| { - for acc in addrs.iter() { - let name = acc["name"].as_str().unwrap_or_default(); - let address = acc["address"].as_str().unwrap_or_default(); - println!("Key '{name}': {address}"); - } - }, - ); -} diff --git a/local-interchain/ts/README.md b/local-interchain/ts/README.md deleted file mode 100644 index c4b831fc1..000000000 --- a/local-interchain/ts/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Typescript - -Using CosmJS, you can write e2e test on top of interchaintest / local-interchain - -## How to run - -```bash -# install local-ic if not already -cd local-interchain -make install - -# move into the typescript directory -cd ts - -npm i - -# starts a cosmoshub testnet on :26657 -local-ic start cosmoshub - -# runs a basic test -npm run start -``` \ No newline at end of file diff --git a/local-interchain/ts/package-lock.json b/local-interchain/ts/package-lock.json deleted file mode 100644 index 8fbf555c8..000000000 --- a/local-interchain/ts/package-lock.json +++ /dev/null @@ -1,1134 +0,0 @@ -{ - "name": "ts", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@cosmjs/stargate": "^0.32.4" - }, - "devDependencies": { - "tsx": "^4.16.5", - "typescript": "^5.5.4" - } - }, - "node_modules/@confio/ics23": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@confio/ics23/-/ics23-0.6.8.tgz", - "integrity": "sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==", - "dependencies": { - "@noble/hashes": "^1.0.0", - "protobufjs": "^6.8.8" - } - }, - "node_modules/@cosmjs/amino": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.4.tgz", - "integrity": "sha512-zKYOt6hPy8obIFtLie/xtygCkH9ZROiQ12UHfKsOkWaZfPQUvVbtgmu6R4Kn1tFLI/SRkw7eqhaogmW/3NYu/Q==", - "dependencies": { - "@cosmjs/crypto": "^0.32.4", - "@cosmjs/encoding": "^0.32.4", - "@cosmjs/math": "^0.32.4", - "@cosmjs/utils": "^0.32.4" - } - }, - "node_modules/@cosmjs/crypto": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.32.4.tgz", - "integrity": "sha512-zicjGU051LF1V9v7bp8p7ovq+VyC91xlaHdsFOTo2oVry3KQikp8L/81RkXmUIT8FxMwdx1T7DmFwVQikcSDIw==", - "dependencies": { - "@cosmjs/encoding": "^0.32.4", - "@cosmjs/math": "^0.32.4", - "@cosmjs/utils": "^0.32.4", - "@noble/hashes": "^1", - "bn.js": "^5.2.0", - "elliptic": "^6.5.4", - "libsodium-wrappers-sumo": "^0.7.11" - } - }, - "node_modules/@cosmjs/encoding": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.4.tgz", - "integrity": "sha512-tjvaEy6ZGxJchiizzTn7HVRiyTg1i4CObRRaTRPknm5EalE13SV+TCHq38gIDfyUeden4fCuaBVEdBR5+ti7Hw==", - "dependencies": { - "base64-js": "^1.3.0", - "bech32": "^1.1.4", - "readonly-date": "^1.0.0" - } - }, - "node_modules/@cosmjs/json-rpc": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.4.tgz", - "integrity": "sha512-/jt4mBl7nYzfJ2J/VJ+r19c92mUKF0Lt0JxM3MXEJl7wlwW5haHAWtzRujHkyYMXOwIR+gBqT2S0vntXVBRyhQ==", - "dependencies": { - "@cosmjs/stream": "^0.32.4", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/math": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.4.tgz", - "integrity": "sha512-++dqq2TJkoB8zsPVYCvrt88oJWsy1vMOuSOKcdlnXuOA/ASheTJuYy4+oZlTQ3Fr8eALDLGGPhJI02W2HyAQaw==", - "dependencies": { - "bn.js": "^5.2.0" - } - }, - "node_modules/@cosmjs/proto-signing": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.4.tgz", - "integrity": "sha512-QdyQDbezvdRI4xxSlyM1rSVBO2st5sqtbEIl3IX03uJ7YiZIQHyv6vaHVf1V4mapusCqguiHJzm4N4gsFdLBbQ==", - "dependencies": { - "@cosmjs/amino": "^0.32.4", - "@cosmjs/crypto": "^0.32.4", - "@cosmjs/encoding": "^0.32.4", - "@cosmjs/math": "^0.32.4", - "@cosmjs/utils": "^0.32.4", - "cosmjs-types": "^0.9.0" - } - }, - "node_modules/@cosmjs/socket": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.32.4.tgz", - "integrity": "sha512-davcyYziBhkzfXQTu1l5NrpDYv0K9GekZCC9apBRvL1dvMc9F/ygM7iemHjUA+z8tJkxKxrt/YPjJ6XNHzLrkw==", - "dependencies": { - "@cosmjs/stream": "^0.32.4", - "isomorphic-ws": "^4.0.1", - "ws": "^7", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/stargate": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.4.tgz", - "integrity": "sha512-usj08LxBSsPRq9sbpCeVdyLx2guEcOHfJS9mHGCLCXpdAPEIEQEtWLDpEUc0LEhWOx6+k/ChXTc5NpFkdrtGUQ==", - "dependencies": { - "@confio/ics23": "^0.6.8", - "@cosmjs/amino": "^0.32.4", - "@cosmjs/encoding": "^0.32.4", - "@cosmjs/math": "^0.32.4", - "@cosmjs/proto-signing": "^0.32.4", - "@cosmjs/stream": "^0.32.4", - "@cosmjs/tendermint-rpc": "^0.32.4", - "@cosmjs/utils": "^0.32.4", - "cosmjs-types": "^0.9.0", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/stream": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.4.tgz", - "integrity": "sha512-Gih++NYHEiP+oyD4jNEUxU9antoC0pFSg+33Hpp0JlHwH0wXhtD3OOKnzSfDB7OIoEbrzLJUpEjOgpCp5Z+W3A==", - "dependencies": { - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/tendermint-rpc": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.4.tgz", - "integrity": "sha512-MWvUUno+4bCb/LmlMIErLypXxy7ckUuzEmpufYYYd9wgbdCXaTaO08SZzyFM5PI8UJ/0S2AmUrgWhldlbxO8mw==", - "dependencies": { - "@cosmjs/crypto": "^0.32.4", - "@cosmjs/encoding": "^0.32.4", - "@cosmjs/json-rpc": "^0.32.4", - "@cosmjs/math": "^0.32.4", - "@cosmjs/socket": "^0.32.4", - "@cosmjs/stream": "^0.32.4", - "@cosmjs/utils": "^0.32.4", - "axios": "^1.6.0", - "readonly-date": "^1.0.0", - "xstream": "^11.14.0" - } - }, - "node_modules/@cosmjs/utils": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.4.tgz", - "integrity": "sha512-D1Yc+Zy8oL/hkUkFUL/bwxvuDBzRGpc4cF7/SkdhxX4iHpSLgdOuTt1mhCh9+kl6NQREy9t7SYZ6xeW5gFe60w==" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/node": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", - "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", - "dependencies": { - "undici-types": "~6.13.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", - "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cosmjs-types": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.9.0.tgz", - "integrity": "sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ==" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/elliptic": { - "version": "6.5.6", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.6.tgz", - "integrity": "sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", - "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/libsodium-sumo": { - "version": "0.7.14", - "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.14.tgz", - "integrity": "sha512-2nDge6qlAjcwyslAhWfVumlkeSNK5+WCfKa2/VEq9prvlT5vP2FR0m0o5hmKaYqfsZ4TQVj5czQsimZvXDB1CQ==" - }, - "node_modules/libsodium-wrappers-sumo": { - "version": "0.7.14", - "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.14.tgz", - "integrity": "sha512-0lm7ZwN5a95J2yUi8R1rgQeeaVDIWnvNzgVmXmZswis4mC+bQtbDrB+QpJlL4qklaKx3hVpJjoc6ubzJFiv64Q==", - "dependencies": { - "libsodium-sumo": "^0.7.14" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/protobufjs": { - "version": "6.11.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", - "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/readonly-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/readonly-date/-/readonly-date-1.0.0.tgz", - "integrity": "sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ==" - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/symbol-observable": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", - "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tsx": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.5.tgz", - "integrity": "sha512-ArsiAQHEW2iGaqZ8fTA1nX0a+lN5mNTyuGRRO6OW3H/Yno1y9/t1f9YOI1Cfoqz63VAthn++ZYcbDP7jPflc+A==", - "dev": true, - "dependencies": { - "esbuild": "~0.21.5", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xstream": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/xstream/-/xstream-11.14.0.tgz", - "integrity": "sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw==", - "dependencies": { - "globalthis": "^1.0.1", - "symbol-observable": "^2.0.3" - } - } - } -} diff --git a/local-interchain/ts/package.json b/local-interchain/ts/package.json deleted file mode 100644 index 8ac8d9d8e..000000000 --- a/local-interchain/ts/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "devDependencies": { - "tsx": "^4.16.5", - "typescript": "^5.5.4" - }, - "scripts": { - "testnet": "local-ic start juno_ibc", - "start": "npx tsx src/index.ts" - }, - "dependencies": { - "@cosmjs/stargate": "^0.32.4" - } -} diff --git a/local-interchain/ts/src/driver.ts b/local-interchain/ts/src/driver.ts deleted file mode 100644 index 88927672e..000000000 --- a/local-interchain/ts/src/driver.ts +++ /dev/null @@ -1,175 +0,0 @@ -export class Chain { - api: string; - chainID: string; - - // api is the local-interchain API address (:8080 by default) - constructor(api: string, chainID: string) { - this.api = api; - this.chainID = chainID; - - if(!api || !chainID) { - throw new Error("API or chainID not provided"); - } - - if (!api.startsWith("http")) { - throw new Error("API must be a valid http address"); - } - } - - // generalized makeRequest function to perform actions on the API - async makeRequest(action: string, command: string, isJSON?: boolean): Promise { - return makeRequest(this.api, this.chainID, action, command, isJSON); - } - - // perform a query command on the application daemon - async query(command: string, isJSON?: boolean): Promise { - return makeRequest(this.api, this.chainID, "query", command, isJSON) - } - - // execute a binary command within the container (i.e. the content after appd in the command) - async binary(command: string, isJSON?: boolean): Promise { - return makeRequest(this.api, this.chainID, "bin", command, isJSON) - } - - // execute a shell command within the container - async shell_exec(command: string, isJSON?: boolean): Promise { - return makeRequest(this.api, this.chainID, "exec", command, isJSON) - } - - // === RELAYER === - async relayer_stop(): Promise { - return makeRequest(this.api, this.chainID, "stop-relayer", "", true) - } - async relayer_start(): Promise { - return makeRequest(this.api, this.chainID, "start-relayer", "", true) - } - async relayer_exec(command: string, isJSON?: boolean): Promise { - return makeRequest(this.api, this.chainID, "relayer-exec", command, isJSON) - } - async relayer_get_channels(): Promise { - return makeRequest(this.api, this.chainID, "get_channels", "", true) - } - - // === COSMWASM === - async wasmStoreFile(absFilePath: string, keyName: string): Promise { - return storeFile(this.api, this.chainID, absFilePath, keyName); - } - - // === OTHER === - async storeFile(absFilePath: string): Promise { - return storeFile(this.api, this.chainID, absFilePath); - } - - async faucet(address: string, amount: number | string): Promise { - if (typeof amount === "string") { - amount = parseInt(amount); - } - - return makeRequest(this.api, this.chainID, "faucet", `amount=${amount};address=${address}`, true) - } - - async getPeer(): Promise { - return makeInfoRequest(this.api, this.chainID, "peer", false); - } - - async recoverKey(keyName: string, mnemonic: string | string[]): Promise { - if (Array.isArray(mnemonic)) { - mnemonic = mnemonic.join(" "); - } - - return makeRequest(this.api, this.chainID, "recover-key", `keyname=${keyName};mnemonic=${mnemonic}`, true) - } - - async addFullNode(amount: string | number): Promise { - if (typeof amount === "string") { - amount = parseInt(amount); - } - return makeRequest(this.api, this.chainID, "add-full-nodes", `amount=${amount}`, true) - } - - async killAll(): Promise { - return makeRequest(this.api, this.chainID, "kill-all", "", true) - } -} - -// startup -// every 5 seconds, try and poll if the RPCAddr is up. After pollingLimit, exit. -export async function pollForStart(addr: string, maxRetriesLimit: number) { - let tries = 0; - while (tries < maxRetriesLimit) { - tries++; - try { - await fetch(addr); - console.log(`${addr} is up. Starting...`); - break; - } catch (err) { - console.log(`${addr} is not up. Trying again in 5 seconds...`); - await new Promise((r) => setTimeout(r, 5000)); - } - } -} - -export async function makeRequest(api: string, chainID: string, action: string, command: string, isJSON: boolean = true): Promise { - let resp = await fetch(api, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - 'chain_id': chainID, - 'action': action, - 'cmd': command - }) - }); - - if (isJSON) { - return await resp.json(); - } - return await resp.text(); -} - -// set keyName if you are storing a cosmwasm contract. Else, leave it blank. -export async function storeFile(api: string, chainID: string, absFilePath: string, keyName?: string): Promise { - const isCosmWasm = keyName && keyName.length > 0; - - if (!api.endsWith("/")) { - api = api + "/"; - } - api = api + "upload"; - - let headers: any = { - 'Content-Type': 'application/json', - } - if (isCosmWasm) { - headers['Upload-Type'] = 'cosmwasm'; - } - - let body: any = { - 'chain_id': chainID, - 'file_path': absFilePath, - } - if (isCosmWasm) { - body['key_name'] = keyName; - } - - let resp = await fetch(api, { - method: 'POST', - headers: headers, - body: JSON.stringify(body) - }); - - return await resp.json(); -} - -export async function makeInfoRequest(api: string, chainID: string, request: string, isJSON: boolean = true): Promise { - if (!api.endsWith("/info")) { - api = api + "/info"; - } - - let resp = await fetch(`${api}?chain_id=${chainID}&request=${request}`); - - if (isJSON) { - return await resp.json(); - } - return await resp.text(); -} \ No newline at end of file diff --git a/local-interchain/ts/src/index.ts b/local-interchain/ts/src/index.ts deleted file mode 100644 index 4c5811d93..000000000 --- a/local-interchain/ts/src/index.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { SigningStargateClient, SigningStargateClientOptions, GasPrice } from '@cosmjs/stargate'; -import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing"; -import path from 'path'; - -import { Chain, pollForStart, makeRequest } from './driver'; - -// local-ic start juno_ibc - -// juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl -const Mnemonic = "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" -const RPCAddr = "http://127.0.0.1:26657" -const WalletPrefix = "juno" -const Denom = "ujuno" - - // local-interchain -const APIAddr = "http://127.0.0.1:8080" -const ChainID = "localjuno-1" - -// Files -const localInterchainDir = path.dirname(path.dirname(__dirname)) -const contract = path.join(localInterchainDir, "contracts", "cw_ibc_example.wasm") -const randomFile = path.join(localInterchainDir, "README.md") - -// npm run start -async function main() { - // Poll for the RPC address to be up - await pollForStart(APIAddr, 25); - - await localICInteractions(new Chain(APIAddr, ChainID), contract, randomFile); - - await CosmJSInteractions(); - - console.log("Test successful"); -} - -async function localICInteractions(chain: Chain, abcWasmFileLoc: string, absRandomFileLoc: string): Promise { - await chain.binary("config keyring-backend test") - await chain.binary("config output json") - - // verify query request 2 different ways - let total = await chain.makeRequest("query", "bank total") - console.log("total", total) - exitIfEmpty(total, "total") - - let total2 = await chain.query("bank total") - console.log("total2", total2) - exitIfEmpty(total2, "total2") - - if (total.supply[0].denom !== total2.supply[0].denom) { - console.log("Query results are not the same. Exiting..."); - process.exit(1); - } - - if (parseInt(total.supply[0].amount) === 0) { - console.log("bank total is 0. Exiting..."); - process.exit(1); - } - - // faucet - const faucetToAddr = "juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl" - let beforeBal = await chain.query(`bank balances ${faucetToAddr}`) - let prevBal: number = parseInt(beforeBal.balances[0].amount) - - const faucetAmt = 787 - let faucet = await chain.faucet(faucetToAddr, faucetAmt) - console.log("faucet", faucet) - - let newBal = await chain.query(`bank balances ${faucetToAddr}`) - if (parseInt(newBal.balances[0].amount) !== prevBal + faucetAmt) { - console.log("Faucet failed. Exiting..."); - process.exit(1); - } - - // CosmWasm - console.log("Storing wasm file...") - let cwRes = await chain.wasmStoreFile(abcWasmFileLoc, "faucet") - console.log("cwRes", cwRes) - exitIfEmpty(cwRes.code_id, "codeID") - - // Random file - let miscFile = await chain.storeFile(absRandomFileLoc) - console.log("miscFile", miscFile) - let dockerFileLoc = miscFile.location - - // Verify file contents are there - let readFile = await chain.shell_exec(`cat ${dockerFileLoc}`, false) - exitIfEmpty(readFile, "readFile") - - // get peer - let peer = await chain.getPeer() - console.log("peer", peer) - exitIfEmpty(peer, "peer") - - // relayer channels - let channels = await chain.relayer_get_channels() - console.log("channels", channels) - if (channels.length === 0) { - console.log("No channels found. Exiting..."); - process.exit(1); - } - - // relayer exec - let rlyBal = await chain.relayer_exec(`rly q balance ${ChainID} --output=json`) - console.log("rlyBal", rlyBal) - exitIfEmpty(rlyBal, "rlyBal") - - let recoverKey = await chain.recoverKey("mynewkey", - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art", - ); - console.log("recoverKey", recoverKey) - exitIfEmpty(recoverKey, "recoverKey") - - // query key address with bin - let key = await chain.binary("keys show mynewkey -a", false) - console.log("key", key) - exitIfEmpty(key, "key") - - // Add full node - let addNode = await chain.addFullNode(1) - console.log("addNode", addNode) - exitIfEmpty(addNode, "addNode") -} - -async function CosmJSInteractions(): Promise { - // create a wallet out of a mnemonic - const wallet = await DirectSecp256k1HdWallet.fromMnemonic(Mnemonic, { prefix: WalletPrefix }); - const [account] = await wallet.getAccounts(); - - // setup connection to the network with signing for said wallet - // if you only need queries, you can use SigningStargateClient.connect(...) - const options: SigningStargateClientOptions = { - gasPrice: GasPrice.fromString("0.0025"+Denom), - }; - - const client = await SigningStargateClient.connectWithSigner(RPCAddr, wallet, options).then((client) => { - console.log(`Successfully connected to node ${RPCAddr}`); - return client; - }).catch((err) => { - if (err.toString().includes("fetch failed")) { - console.log(`Error: ensure the testnet is running and the RPC address (${RPCAddr}) is correct.`); - process.exit(1); - } else { - console.log(err); - } - - return undefined; - }); - - if (client === undefined) { - console.log("SigningStargateClient is undefined. Exiting..."); - process.exit(1); - } - - // Grab the accounts balance - const balance = await client.getBalance(account.address, Denom) - console.log(`${account.address} balance: ${balance.amount}${Denom}`); - - // Validate the account has a balance > 0. - if (parseInt(balance.amount) === 0) { - console.log("Account balance is 0. Exiting..."); - process.exit(1); - } - - // send a token to itself - const sendAmount = { - denom: Denom, - amount: "1", - }; - - const recipient = account.address; - const sender = account.address; - - console.log(`Sending ${sendAmount.amount}${sendAmount.denom} from ${sender} to ${recipient}`); - - const result = await client.sendTokens(sender, recipient, [sendAmount], 1000, "my testing memo"); - - console.log(`Sent. Transaction hash: ${result.transactionHash} at height: ${result?.height}`); - - const tx = await client.getTx(result.transactionHash); - console.log(`Transaction: code:${tx?.code}, rawLog: ${tx?.rawLog}`); - - if (tx?.code !== 0) { - console.log("Transaction failed. Exiting..."); - process.exit(1); - } -} - -export function exitIfEmpty(data: any, name: string) { - if (!data || data === "") { - console.log(`${name} is empty. Exiting...`); - process.exit(1); - } -} - -main(); \ No newline at end of file diff --git a/local-interchain/ts/tsconfig.json b/local-interchain/ts/tsconfig.json deleted file mode 100644 index 8bb6097f8..000000000 --- a/local-interchain/ts/tsconfig.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/mocktesting/t_test.go b/mocktesting/t_test.go index 3f0bdba41..b632e44cd 100644 --- a/mocktesting/t_test.go +++ b/mocktesting/t_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/strangelove-ventures/interchaintest/v8/mocktesting" + "github.com/strangelove-ventures/interchaintest/v9/mocktesting" "github.com/stretchr/testify/require" ) diff --git a/penumbra.go b/penumbra.go index 872d4ab39..739bb6ff4 100644 --- a/penumbra.go +++ b/penumbra.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/chain/penumbra" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) // ErrPclientdInitialization is returned if the CreateClientNode call fails while initializing a new instance of diff --git a/proto/buf.gen.penumbra.yaml b/proto/buf.gen.penumbra.yaml index 39f594f5f..f62fa2903 100644 --- a/proto/buf.gen.penumbra.yaml +++ b/proto/buf.gen.penumbra.yaml @@ -2,7 +2,7 @@ version: v1 managed: enabled: true go_package_prefix: - default: github.com/strangelove-ventures/interchaintest/v8/chain + default: github.com/strangelove-ventures/interchaintest/v9/chain except: - buf.build/cosmos/ibc - github.com/cometbft/cometbft @@ -10,4 +10,4 @@ managed: plugins: - name: gocosmos out: . - opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types,Mgoogle/protobuf/timestamp.proto=github.com/cosmos/gogoproto/types \ No newline at end of file + opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types,Mgoogle/protobuf/timestamp.proto=github.com/cosmos/gogoproto/types diff --git a/relayer/docker.go b/relayer/docker.go index 7db3a95fb..9cc45b756 100644 --- a/relayer/docker.go +++ b/relayer/docker.go @@ -15,9 +15,9 @@ import ( "github.com/docker/docker/pkg/stdcopy" "go.uber.org/zap" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" ) const ( diff --git a/relayer/hermes/hermes_commander.go b/relayer/hermes/hermes_commander.go index add6400e1..72da5d8b4 100644 --- a/relayer/hermes/hermes_commander.go +++ b/relayer/hermes/hermes_commander.go @@ -5,12 +5,12 @@ import ( "encoding/json" "fmt" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" "go.uber.org/zap" - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" + ibcexported "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types" + "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types" ) var _ relayer.RelayerCommander = &commander{} diff --git a/relayer/hermes/hermes_relayer.go b/relayer/hermes/hermes_relayer.go index 47f7f4577..7c0b8637a 100644 --- a/relayer/hermes/hermes_relayer.go +++ b/relayer/hermes/hermes_relayer.go @@ -11,8 +11,8 @@ import ( "github.com/docker/docker/client" "github.com/pelletier/go-toml" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" "go.uber.org/zap" ) diff --git a/relayer/hermes/hermes_wallet.go b/relayer/hermes/hermes_wallet.go index 8d02c62a6..f3098b82f 100644 --- a/relayer/hermes/hermes_wallet.go +++ b/relayer/hermes/hermes_wallet.go @@ -1,6 +1,6 @@ package hermes -import "github.com/strangelove-ventures/interchaintest/v8/ibc" +import "github.com/strangelove-ventures/interchaintest/v9/ibc" var _ ibc.Wallet = &Wallet{} diff --git a/relayer/hyperspace.zip b/relayer/hyperspace.zip new file mode 100644 index 000000000..000c4afa0 Binary files /dev/null and b/relayer/hyperspace.zip differ diff --git a/relayer/hyperspace/hyperspace_commander.go b/relayer/hyperspace/hyperspace_commander.go deleted file mode 100644 index 6ce5b3f02..000000000 --- a/relayer/hyperspace/hyperspace_commander.go +++ /dev/null @@ -1,381 +0,0 @@ -// Package hyperspace provides an interface to the hyperspace relayer running in a Docker container. -package hyperspace - -import ( - "context" - "fmt" - "path" - - ibcexported "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - types23 "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" - "github.com/misko9/go-substrate-rpc-client/v4/signature" - "github.com/pelletier/go-toml/v2" - "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "go.uber.org/zap" -) - -// hyperspaceCommander satisfies relayer.RelayerCommander. -type hyperspaceCommander struct { - log *zap.Logger - paths map[string]*pathConfiguration - extraStartFlags []string -} - -// pathConfiguration represents the concept of a "path" which is implemented at the interchain test level rather -// than the hyperspace level. -type pathConfiguration struct { - chainA, chainB pathChainConfig -} - -// pathChainConfig holds all values that will be required when interacting with a path. -type pathChainConfig struct { - chainID string -} - -func (hyperspaceCommander) Name() string { - return "hyperspace" -} - -func (hyperspaceCommander) DockerUser() string { - return "1000:1000" // docker run -it --rm --entrypoint echo ghcr.io/cosmos/relayer "$(id -u):$(id -g)" -} - -func (c *hyperspaceCommander) AddChainConfiguration(containerFilePath, homeDir string) []string { - fmt.Println("[hyperspace] AddChainConfiguration ", containerFilePath, homeDir) - //c.chainConfigPaths = append(c.chainConfigPaths, containerFilePath) - return []string{ - "hyperspace", - "-h", - } -} - -// Hyperspace doesn't not have this functionality -func (hyperspaceCommander) AddKey(chainID, keyName, coinType, signingAlgorithm, homeDir string) []string { - panic("[AddKey] Do not call me") -} - -func (c *hyperspaceCommander) CreateChannel(pathName string, opts ibc.CreateChannelOptions, homeDir string) []string { - fmt.Println("[hyperspace] CreateChannel", pathName, homeDir) - _, ok := c.paths[pathName] - if !ok { - panic(fmt.Sprintf("path %s not found", pathName)) - } - return []string{ - "hyperspace", - "create-channel", - "--config-a", - configPath(homeDir, c.paths[pathName].chainA.chainID), - "--config-b", - configPath(homeDir, c.paths[pathName].chainB.chainID), - "--config-core", - path.Join(homeDir, "core.config"), - "--port-id", - opts.SourcePortName, - "--order", - "unordered", - "--version", - opts.Version, - } -} - -func (c *hyperspaceCommander) CreateClients(pathName string, opts ibc.CreateClientOptions, homeDir string) []string { - fmt.Println("[hyperspace] CreateClients", pathName, opts, homeDir) - _, ok := c.paths[pathName] - if !ok { - panic(fmt.Sprintf("path %s not found", pathName)) - } - return []string{ - "hyperspace", - "create-clients", - "--config-a", - configPath(homeDir, c.paths[pathName].chainA.chainID), - "--config-b", - configPath(homeDir, c.paths[pathName].chainB.chainID), - "--config-core", - path.Join(homeDir, "core.config"), - "--port-id", - "transfer", - "--order", - "unordered", - } -} - -// TODO: Implement if available in hyperspace relayer -func (hyperspaceCommander) CreateClient(srcChainID, dstChainID, pathName string, opts ibc.CreateClientOptions, homeDir string) []string { - panic("[CreateClient] Not Implemented") -} - -func (c *hyperspaceCommander) CreateConnections(pathName, homeDir string) []string { - fmt.Println("[hyperspace] CreateConnections", pathName, homeDir) - _, ok := c.paths[pathName] - if !ok { - panic(fmt.Sprintf("path %s not found", pathName)) - } - return []string{ - "hyperspace", - "create-connection", - "--config-a", - configPath(homeDir, c.paths[pathName].chainA.chainID), - "--config-b", - configPath(homeDir, c.paths[pathName].chainB.chainID), - "--config-core", - path.Join(homeDir, "core.config"), - "--delay-period", - "1", - } -} - -// Hyperspace doesn't not have this functionality -func (hyperspaceCommander) FlushAcknowledgements(pathName, channelID, homeDir string) []string { - panic("[FlushAcknowledgements] Do not call me") -} - -// Hyperspace doesn't not have this functionality -func (hyperspaceCommander) FlushPackets(pathName, channelID, homeDir string) []string { - panic("[FlushPackets] Do not call me") -} - -// GeneratePath establishes an in memory path representation. The concept does not exist in hyperspace. -func (c *hyperspaceCommander) GeneratePath(srcChainID, dstChainID, pathName, homeDir string) []string { - if c.paths == nil { - c.paths = map[string]*pathConfiguration{} - } - c.paths[pathName] = &pathConfiguration{ - chainA: pathChainConfig{ - chainID: srcChainID, - }, - chainB: pathChainConfig{ - chainID: dstChainID, - }, - } - return []string{"true"} -} - -// Hyperspace does not have paths, just two configs -func (hyperspaceCommander) UpdatePath(pathName, homeDir string, opts ibc.PathUpdateOptions) []string { - panic("[UpdatePath] Do not call me") - -} - -// Prints chain config which is populated by hyperspace -// Ideally, there should be a command from hyperspace to get this output -func (hyperspaceCommander) GetChannels(chainID, homeDir string) []string { - fmt.Println("[hyperspace] Get Channels") - configFilePath := path.Join(homeDir, chainID+".config") - return []string{ - "cat", - configFilePath, - } -} - -// Prints chain config which is populated by hyperspace -// Ideally, there should be a command from hyperspace to get this output -func (hyperspaceCommander) GetConnections(chainID, homeDir string) []string { - fmt.Println("[hyperspace] Get Connections") - configFilePath := path.Join(homeDir, chainID+".config") - return []string{ - "cat", - configFilePath, - } -} - -// Prints chain config which is populated by hyperspace -// Ideally, there should be a command from hyperspace to get this output -func (hyperspaceCommander) GetClients(chainID, homeDir string) []string { - fmt.Println("[hyperspace] Get Clients") - configFilePath := path.Join(homeDir, chainID+".config") - return []string{ - "cat", - configFilePath, - } -} - -// Hyperspace does not have link cmd, call create clients, create connection, and create channel -func (hyperspaceCommander) LinkPath(pathName, homeDir string, channelOpts ibc.CreateChannelOptions, clientOpt ibc.CreateClientOptions) []string { - panic("[LinkPath] Do not use me") -} - -// There is no hyperspace call to restore the key, so this can't return an executable. -// HyperspaceRelayer's RestoreKey will restore the key in the chain's config file -func (hyperspaceCommander) RestoreKey(chainID, bech32Prefix, coinType, signingAlgorithm, mnemonic, homeDir string) []string { - panic("[RestoreKey] Do not use me") -} - -// hyperspace can only start 1 path -func (c *hyperspaceCommander) StartRelayer(homeDir string, pathNames ...string) []string { - fmt.Println("[hyperspace] StartRelayer", homeDir, pathNames) - if len(pathNames) != 1 { - panic("Hyperspace's StartRelayer list of paths can only have 1 path") - } - pathName := pathNames[0] - _, ok := c.paths[pathName] - if !ok { - panic(fmt.Sprintf("path %s not found", pathName)) - } - return []string{ - "hyperspace", - "relay", - "--config-a", - configPath(homeDir, c.paths[pathName].chainA.chainID), - "--config-b", - configPath(homeDir, c.paths[pathName].chainB.chainID), - "--config-core", - path.Join(homeDir, "core.config"), - } -} - -// Hyperspace doesn't not have this functionality -func (hyperspaceCommander) UpdateClients(pathName, homeDir string) []string { - panic("[UpdateClients] Do not use me") -} - -func (hyperspaceCommander) ConfigContent(ctx context.Context, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { - fmt.Println("[hyperspace] ConfigContent", cfg, keyName, rpcAddr, grpcAddr) - HyperspaceRelayerChainConfig := ChainConfigToHyperspaceRelayerChainConfig(cfg, keyName, rpcAddr, grpcAddr) - bytes, err := toml.Marshal(HyperspaceRelayerChainConfig) - if err != nil { - return nil, err - } - return bytes, nil -} - -func (hyperspaceCommander) DefaultContainerImage() string { - return HyperspaceDefaultContainerImage -} - -func (hyperspaceCommander) DefaultContainerVersion() string { - return HyperspaceDefaultContainerVersion -} - -// There is no hyperspace call to add key, so there is no stdout to parse. -// DockerRelayer's RestoreKey will restore the key in the chain's config file -func (hyperspaceCommander) ParseAddKeyOutput(stdout, stderr string) (ibc.Wallet, error) { - panic("[ParseAddKeyOutput] Do not call me") -} - -// There is no hyperspace call to restore the key, so there is no stdout to parse. -// DockerRelayer's RestoreKey will restore the key in the chain's config file -func (hyperspaceCommander) ParseRestoreKeyOutput(stdout, stderr string) string { - panic("[ParseRestoreKeyOutput] Do not call me") -} - -type ChannelsOutput struct { - Channels [][]string `toml:"channel_whitelist"` -} - -// Parses output of chain config which is populated by hyperspace -// Ideally, there should be a command from hyperspace to get this output -func (hyperspaceCommander) ParseGetChannelsOutput(stdout, stderr string) ([]ibc.ChannelOutput, error) { - var cfg ChannelsOutput - err := toml.Unmarshal([]byte(stdout), &cfg) - if err != nil { - return nil, err - } - - outputs := make([]ibc.ChannelOutput, 0) - for _, channel := range cfg.Channels { - outputs = append(outputs, ibc.ChannelOutput{ - State: "", - Ordering: "", - Counterparty: ibc.ChannelCounterparty{ // TODO: retrieve from hyperspace - PortID: "", - ChannelID: "", - }, - ConnectionHops: []string{}, - Version: "", - PortID: channel[1], - ChannelID: channel[0], - }) - } - return outputs, nil -} - -type ConnectionsOutput struct { - ConnectionID string `toml:"connection_id"` - ClientID string `toml:"client_id"` -} - -// Parses output of chain config which is populated by hyperspace -// Ideally, there should be a command from hyperspace to get this output -// Only supports 1 connection and limited info -func (hyperspaceCommander) ParseGetConnectionsOutput(stdout, stderr string) (ibc.ConnectionOutputs, error) { - var cfg ConnectionsOutput - err := toml.Unmarshal([]byte(stdout), &cfg) - if err != nil { - return nil, err - } - - return ibc.ConnectionOutputs{ - &ibc.ConnectionOutput{ - ID: cfg.ConnectionID, - ClientID: cfg.ClientID, - Versions: []*ibcexported.Version{ - { - Identifier: "", - Features: []string{}, - }, - }, - State: "", - Counterparty: &ibcexported.Counterparty{ - ClientId: "", - ConnectionId: "", - Prefix: types23.MerklePrefix{ - KeyPrefix: []byte{}, - }, - }, - DelayPeriod: "0", - }, - }, nil -} - -type ClientOutput struct { - ChainID string `toml:"chain_id"` - ClientID string `toml:"client_id"` -} - -// Parses output of chain config which is populated by hyperspace -// Ideally, there should be a command from hyperspace to get this output -// Only supports 1 client -func (hyperspaceCommander) ParseGetClientsOutput(stdout, stderr string) (ibc.ClientOutputs, error) { - var cfg ClientOutput - err := toml.Unmarshal([]byte(stdout), &cfg) - if err != nil { - return nil, err - } - - return ibc.ClientOutputs{ - &ibc.ClientOutput{ - ClientID: cfg.ClientID, - ClientState: ibc.ClientState{ - ChainID: cfg.ChainID, - }, - }, - }, nil -} - -func (hyperspaceCommander) Init(homeDir string) []string { - fmt.Println("[hyperspace] Init", homeDir) - // Return hyperspace help to ensure hyperspace binary is accessible - return []string{ - "hyperspace", - "-h", - } -} - -func (hyperspaceCommander) CreateWallet(keyName, address, mnemonic string) ibc.Wallet { - kp, err := signature.KeyringPairFromSecret(mnemonic, polkadot.Ss58Format) - if err != nil { - return NewWallet("", "", "") - } - return NewWallet("", kp.Address, mnemonic) -} - -func (hyperspaceCommander) Flush(pathName, channelID, homeDir string) []string { - panic("flush implemented in hyperspace not the commander") -} - -func configPath(homeDir, chainID string) string { - chainConfigFile := chainID + ".config" - return path.Join(homeDir, chainConfigFile) -} diff --git a/relayer/hyperspace/hyperspace_config.go b/relayer/hyperspace/hyperspace_config.go deleted file mode 100644 index 8004d05af..000000000 --- a/relayer/hyperspace/hyperspace_config.go +++ /dev/null @@ -1,144 +0,0 @@ -package hyperspace - -import ( - "fmt" - "strconv" - "strings" - - "github.com/cosmos/cosmos-sdk/crypto/hd" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - bip32 "github.com/tyler-smith/go-bip32" - bip39 "github.com/tyler-smith/go-bip39" -) - -type HyperspaceRelayerCoreConfig struct { - PrometheusEndpoint string -} - -type HyperspaceRelayerSubstrateChainConfig struct { - Type string `toml:"type"` - Name string `toml:"name"` - ParaID uint32 `toml:"para_id"` - ParachainRPCURL string `toml:"parachain_rpc_url"` - RelayChainRPCURL string `toml:"relay_chain_rpc_url"` - BeefyActivation uint32 `toml:"beefy_activation_block"` - CommitmentPrefix string `toml:"commitment_prefix"` - PrivateKey string `toml:"private_key"` - SS58Version uint8 `toml:"ss58_version"` - FinalityProtocol string `toml:"finality_protocol"` - KeyType string `toml:"key_type"` - ChannelWhitelist []string `toml:"channel_whitelist"` -} - -type KeyEntry struct { - PublicKey string `toml:"public_key"` - PrivateKey string `toml:"private_key"` - Account string `toml:"account"` - Address []byte `toml:"address"` -} - -type HyperspaceRelayerCosmosChainConfig struct { - Type string `toml:"type"` - Name string `toml:"name"` - RPCUrl string `toml:"rpc_url"` - GRPCUrl string `toml:"grpc_url"` - WebsocketUrl string `toml:"websocket_url"` - ChainID string `toml:"chain_id"` - AccountPrefix string `toml:"account_prefix"` - FeeDenom string `toml:"fee_denom"` - FeeAmount string `toml:"fee_amount"` - GasLimit uint64 `toml:"gas_limit"` - StorePrefix string `toml:"store_prefix"` - MaxTxSize uint64 `toml:"max_tx_size"` - WasmChecksum string `toml:"wasm_checksum"` - Mnemonic string `toml:"mnemonic"` - ChannelWhitelist []string `toml:"channel_whitelist"` -} - -const ( - HyperspaceDefaultContainerImage = "hyperspace" - HyperspaceDefaultContainerVersion = "local" -) - -func GenKeyEntry(bech32Prefix, coinType, mnemonic string) KeyEntry { - coinType64, err := strconv.ParseUint(coinType, 10, 32) - if err != nil { - return KeyEntry{} - } - algo := keyring.SignatureAlgo(hd.Secp256k1) - hdPath := hd.CreateHDPath(uint32(coinType64), 0, 0).String() - - // create master key and derive first key for keyring - derivedPriv, err := algo.Derive()(mnemonic, "", hdPath) - if err != nil { - return KeyEntry{} - } - - privKey := algo.Generate()(derivedPriv) - address := types.AccAddress(privKey.PubKey().Address()) - bech32Addr := types.MustBech32ifyAddressBytes(bech32Prefix, address) - - // Derive extended private key - seed := bip39.NewSeed(mnemonic, "") - masterKey, _ := bip32.NewMasterKey(seed) - purposeKey, _ := masterKey.NewChildKey(0x8000002C) // 44' - coinTypeKey, _ := purposeKey.NewChildKey(0x80000000 + uint32(coinType64)) // 118' - accountKey, _ := coinTypeKey.NewChildKey(0x80000000) // 0' - changeKey, _ := accountKey.NewChildKey(0) // 0 - indexKey, _ := changeKey.NewChildKey(0) // 0 - - return KeyEntry{ - PublicKey: indexKey.PublicKey().B58Serialize(), // i.e. "xpub6GNKSnPmR5zN3Ef3EqYkSJTZzjzGecb1n1SqJRUNnoFPsyxviG7QyoVzjEjP3gfqRu7AvRrEZMfXJazz8pZgmYP6yvvdRqC2pWmWpeQTMBP" - PrivateKey: indexKey.B58Serialize(), // i.e. "xprvA3Ny3GrsaiS4pkaa8p1k5AWqSi9nF9sAQnXEW34mETiR1BdnAioAS1BWsx3uAXKT3NbY6cpY2mQL6N7R8se1GVHqNkpjwc7rv5VRaQ9x8EB" - Account: bech32Addr, // i.e. "cosmos1pyxjp07wc207l7jecyr3wcmq9cr54tqwhcwugm" - Address: address.Bytes(), // i.e. [9, 13, 32, 191, 206, 194, 159, 239, 250, 89, 193, 7, 23, 99, 96, 46, 7, 74, 172, 14] - } -} -func ChainConfigToHyperspaceRelayerChainConfig(chainConfig ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) interface{} { - chainType := chainConfig.Type - if chainType == "polkadot" || chainType == "parachain" || chainType == "relaychain" { - chainType = "parachain" - } - - if chainType == "parachain" { - addrs := strings.Split(rpcAddr, ",") - paraRpcAddr := rpcAddr - relayRpcAddr := grpcAddr - if len(addrs) > 1 { - paraRpcAddr, relayRpcAddr = addrs[0], addrs[1] - } - return HyperspaceRelayerSubstrateChainConfig{ - Type: chainType, - Name: chainConfig.Name, - ParaID: 2000, - ParachainRPCURL: strings.Replace(strings.Replace(paraRpcAddr, "http", "ws", 1), "9933", "27451", 1), - RelayChainRPCURL: strings.Replace(strings.Replace(relayRpcAddr, "http", "ws", 1), "9933", "27451", 1), - CommitmentPrefix: "0x6962632f", - PrivateKey: "//Alice", - SS58Version: polkadot.Ss58Format, - KeyType: "sr25519", - FinalityProtocol: "Grandpa", - } - } else if chainType == "cosmos" { - wsUrl := strings.Replace(rpcAddr, "http", "ws", 1) + "/websocket" - return HyperspaceRelayerCosmosChainConfig{ - Type: chainType, - Name: chainConfig.Name, - ChainID: chainConfig.ChainID, - AccountPrefix: chainConfig.Bech32Prefix, - FeeDenom: "stake", - FeeAmount: "4000", - GasLimit: 10_000_000, - GRPCUrl: "http://" + grpcAddr, - RPCUrl: rpcAddr, - StorePrefix: "ibc", - MaxTxSize: 200000, - WebsocketUrl: wsUrl, - } - } else { - panic(fmt.Sprintf("unsupported chain type %s", chainType)) - } -} diff --git a/relayer/hyperspace/hyperspace_relayer.go b/relayer/hyperspace/hyperspace_relayer.go deleted file mode 100644 index c956dae23..000000000 --- a/relayer/hyperspace/hyperspace_relayer.go +++ /dev/null @@ -1,201 +0,0 @@ -// Package hyperspace provides an interface to the hyperspace relayer running in a Docker container. -package hyperspace - -import ( - "context" - "fmt" - "path" - "time" - - "github.com/docker/docker/client" - "github.com/pelletier/go-toml/v2" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "go.uber.org/zap" -) - -var _ ibc.Relayer = &HyperspaceRelayer{} - -// ******* DockerRelayer methods that will panic in hyperspace commander, no overrides yet ******* -// FlushAcknowledgements() - no hyperspace implementation yet -// FlushPackets() - no hypersapce implementation yet -// UpdatePath() - hyperspace doesn't understand paths, may not be needed. -// UpdateClients() - no hyperspace implementation yet -// AddKey() - no hyperspace implementation yet - -// HyperspaceRelayer is the ibc.Relayer implementation for github.com/ComposableFi/hyperspace. -type HyperspaceRelayer struct { - // Embedded DockerRelayer so commands just work. - *relayer.DockerRelayer -} - -func NewHyperspaceRelayer(log *zap.Logger, testName string, cli *client.Client, networkID string, options ...relayer.RelayerOpt) *HyperspaceRelayer { - c := hyperspaceCommander{log: log} - - dr, err := relayer.NewDockerRelayer(context.TODO(), log, testName, cli, networkID, &c, options...) - if err != nil { - panic(err) // TODO: return - } - - c.extraStartFlags = dr.GetExtraStartupFlags() - - coreConfig := HyperspaceRelayerCoreConfig{ - PrometheusEndpoint: "", - } - bytes, err := toml.Marshal(coreConfig) - if err != nil { - panic(err) // TODO: return - } - err = dr.WriteFileToHomeDir(context.TODO(), "core.config", bytes) - if err != nil { - panic(err) // TODO: return - } - - r := &HyperspaceRelayer{ - DockerRelayer: dr, - } - - return r -} - -// HyperspaceCapabilities returns the set of capabilities of the Cosmos relayer. -// -// Note, this API may change if the rly package eventually needs -// to distinguish between multiple rly versions. -func HyperspaceCapabilities() map[relayer.Capability]bool { - // RC1 matches the full set of capabilities as of writing. - return nil // relayer.FullCapabilities() -} - -// LinkPath performs the operations that happen when a path is linked. This includes creating clients, creating connections -// and establishing a channel. This happens across multiple operations rather than a single link path cli command. -// Parachains need a Polkadot epoch/session before starting, do not link in interchain.Build() -func (r *HyperspaceRelayer) LinkPath(ctx context.Context, rep ibc.RelayerExecReporter, pathName string, channelOpts ibc.CreateChannelOptions, clientOpts ibc.CreateClientOptions) error { - if err := r.CreateClients(ctx, rep, pathName, clientOpts); err != nil { - return err - } - - if err := r.CreateConnections(ctx, rep, pathName); err != nil { - return err - } - - if err := r.CreateChannel(ctx, rep, pathName, channelOpts); err != nil { - return err - } - - return nil -} - -func (r *HyperspaceRelayer) RestoreKey(ctx context.Context, rep ibc.RelayerExecReporter, cfg ibc.ChainConfig, keyName, mnemonic string) error { - addrBytes := "" - chainID := cfg.ChainID - chainType := cfg.Type - - chainConfigFile := chainID + ".config" - config, err := r.GetRelayerChainConfig(ctx, chainConfigFile, chainType) - if err != nil { - return err - } - switch chainType { - case "cosmos": - config.(*HyperspaceRelayerCosmosChainConfig).Mnemonic = mnemonic - case "polkadot": - config.(*HyperspaceRelayerSubstrateChainConfig).PrivateKey = mnemonic - } - - err = r.SetRelayerChainConfig(ctx, chainConfigFile, config) - if err != nil { - return err - } - - r.AddWallet(chainID, NewWallet(chainID, addrBytes, mnemonic)) - - return nil -} - -func (r *HyperspaceRelayer) SetClientContractHash(ctx context.Context, rep ibc.RelayerExecReporter, cfg ibc.ChainConfig, hash string) error { - chainID := cfg.ChainID - chainType := cfg.Type - chainConfigFile := chainID + ".config" - config, err := r.GetRelayerChainConfig(ctx, chainConfigFile, chainType) - if err != nil { - return err - } - switch chainType { - case "cosmos": - config.(*HyperspaceRelayerCosmosChainConfig).WasmChecksum = hash - } - - return r.SetRelayerChainConfig(ctx, chainConfigFile, config) -} - -func (r *HyperspaceRelayer) PrintCoreConfig(ctx context.Context, rep ibc.RelayerExecReporter) error { - cmd := []string{ - "cat", - path.Join(r.HomeDir(), "core.config"), - } - - ctx, cancel := context.WithTimeout(ctx, time.Minute) - defer cancel() - res := r.Exec(ctx, rep, cmd, nil) - if res.Err != nil { - return res.Err - } - fmt.Println(string(res.Stdout)) - return nil -} - -func (r *HyperspaceRelayer) PrintConfigs(ctx context.Context, rep ibc.RelayerExecReporter, chainID string) error { - cmd := []string{ - "cat", - path.Join(r.HomeDir(), chainID+".config"), - } - - ctx, cancel := context.WithTimeout(ctx, time.Minute) - defer cancel() - res := r.Exec(ctx, rep, cmd, nil) - if res.Err != nil { - return res.Err - } - fmt.Println(string(res.Stdout)) - return nil -} - -func (r *HyperspaceRelayer) GetRelayerChainConfig( - ctx context.Context, - filePath string, - chainType string, -) (interface{}, error) { - configRaw, err := r.ReadFileFromHomeDir(ctx, filePath) - if err != nil { - return nil, err - } - - switch chainType { - case "cosmos": - var config HyperspaceRelayerCosmosChainConfig - if err := toml.Unmarshal(configRaw, &config); err != nil { - return nil, fmt.Errorf("failed to unmarshal %s: %w", filePath, err) - } - return &config, nil - case "polkadot": - var config HyperspaceRelayerSubstrateChainConfig - if err := toml.Unmarshal(configRaw, &config); err != nil { - return nil, fmt.Errorf("failed to unmarshal %s: %w", filePath, err) - } - return &config, nil - } - return nil, fmt.Errorf("unsupported chain config: %s", chainType) -} -func (r *HyperspaceRelayer) SetRelayerChainConfig( - ctx context.Context, - filePath string, - config interface{}, -) error { - bytes, err := toml.Marshal(config) - if err != nil { - return err - } - - return r.WriteFileToHomeDir(ctx, filePath, bytes) -} diff --git a/relayer/hyperspace/hyperspace_test.go b/relayer/hyperspace/hyperspace_test.go deleted file mode 100644 index 0007558eb..000000000 --- a/relayer/hyperspace/hyperspace_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package hyperspace_test - -import ( - "testing" - - "github.com/strangelove-ventures/interchaintest/v8/relayer/hyperspace" - "github.com/stretchr/testify/require" -) - -func TestKeys(t *testing.T) { - bech32Prefix := "cosmos" - coinType := "118" - mnemonic := "taste shoot adapt slow truly grape gift need suggest midnight burger horn whisper hat vast aspect exit scorpion jewel axis great area awful blind" - - expectedKeyEntry := hyperspace.KeyEntry{ - PublicKey: "xpub6G1GwQBqWwXuCRhri9q1JzxZ9eMWFazo2ssoZNkAsqusDTT6MPUXiPaXMJS9v4RVaSmYPhA1HK5RCD7WPutmUn3eeqXduM142X7YRVBx8bn", - PrivateKey: "xprvA31vXtewgZybywdPc8Hzws1pbcX1r8GwfexCkzLZKWNtLf7worAHAbG3W3F1SagK47ng5877ihXkDvmNfZnVHSGw7Ad1JkzyPTKEtSpmSxa", - Address: []byte{69, 6, 166, 110, 97, 215, 215, 210, 224, 48, 93, 126, 44, 86, 4, 36, 109, 137, 43, 242}, - Account: "cosmos1g5r2vmnp6lta9cpst4lzc4syy3kcj2lj0nuhmy", - } - - keyEntry := hyperspace.GenKeyEntry(bech32Prefix, coinType, mnemonic) - require.Equal(t, expectedKeyEntry.PublicKey, keyEntry.PublicKey, "PublicKey is wrong") - require.Equal(t, expectedKeyEntry.PrivateKey, keyEntry.PrivateKey, "PrivateKey is wrong") - require.Equal(t, expectedKeyEntry.Account, keyEntry.Account, "Account is wrong") - require.Equal(t, expectedKeyEntry.Address, keyEntry.Address, "Address is wrong") -} diff --git a/relayer/hyperspace/wallet.go b/relayer/hyperspace/wallet.go deleted file mode 100644 index 58093453a..000000000 --- a/relayer/hyperspace/wallet.go +++ /dev/null @@ -1,44 +0,0 @@ -package hyperspace - -import ( - "github.com/strangelove-ventures/interchaintest/v8/ibc" -) - -var _ ibc.Wallet = &HyperspaceWallet{} - -type WalletModel struct { - Mnemonic string `json:"mnemonic"` - Address string `json:"address"` -} - -type HyperspaceWallet struct { - mnemonic string - address string - keyName string -} - -func NewWallet(keyname string, address string, mnemonic string) *HyperspaceWallet { - return &HyperspaceWallet{ - mnemonic: mnemonic, - address: address, - keyName: keyname, - } -} - -func (w *HyperspaceWallet) KeyName() string { - return w.keyName -} - -func (w *HyperspaceWallet) FormattedAddress() string { - return w.address -} - -// Get mnemonic, only used for relayer wallets -func (w *HyperspaceWallet) Mnemonic() string { - return w.mnemonic -} - -// Get Address -func (w *HyperspaceWallet) Address() []byte { - return []byte(w.address) -} diff --git a/relayer/options.go b/relayer/options.go index 1231ef837..797ca7c94 100644 --- a/relayer/options.go +++ b/relayer/options.go @@ -1,7 +1,7 @@ package relayer import ( - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) // RelayerOpt is a functional option for configuring a relayer. diff --git a/relayer/rly/cosmos_relayer.go b/relayer/rly/cosmos_relayer.go index d6debbcf8..8368b8f2f 100644 --- a/relayer/rly/cosmos_relayer.go +++ b/relayer/rly/cosmos_relayer.go @@ -9,8 +9,8 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" "go.uber.org/zap" ) diff --git a/relayer/rly/wallet.go b/relayer/rly/wallet.go index 84a58e80c..854f1c435 100644 --- a/relayer/rly/wallet.go +++ b/relayer/rly/wallet.go @@ -1,7 +1,7 @@ package rly import ( - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) var _ ibc.Wallet = &RlyWallet{} diff --git a/relayerfactory.go b/relayerfactory.go index c6b52cf5f..b2552608e 100644 --- a/relayerfactory.go +++ b/relayerfactory.go @@ -4,11 +4,12 @@ import ( "fmt" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/relayer" - "github.com/strangelove-ventures/interchaintest/v8/relayer/hermes" - "github.com/strangelove-ventures/interchaintest/v8/relayer/hyperspace" - "github.com/strangelove-ventures/interchaintest/v8/relayer/rly" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/relayer" + "github.com/strangelove-ventures/interchaintest/v9/relayer/hermes" + + // "github.com/strangelove-ventures/interchaintest/v9/relayer/hyperspace" + "github.com/strangelove-ventures/interchaintest/v9/relayer/rly" "go.uber.org/zap" ) @@ -64,14 +65,14 @@ func (f *builtinRelayerFactory) Build( ) f.setRelayerVersion(r.ContainerImage()) return r - case ibc.Hyperspace: - return hyperspace.NewHyperspaceRelayer( - f.log, - t.Name(), - cli, - networkID, - f.options..., - ) + // case ibc.Hyperspace: + // return hyperspace.NewHyperspaceRelayer( + // f.log, + // t.Name(), + // cli, + // networkID, + // f.options..., + // ) case ibc.Hermes: r := hermes.NewHermesRelayer(f.log, t.Name(), cli, networkID, f.options...) f.setRelayerVersion(r.ContainerImage()) diff --git a/tempdir_test.go b/tempdir_test.go index e358be411..7a0586686 100644 --- a/tempdir_test.go +++ b/tempdir_test.go @@ -6,8 +6,8 @@ import ( "strings" "testing" - interchaintest "github.com/strangelove-ventures/interchaintest/v8" - "github.com/strangelove-ventures/interchaintest/v8/mocktesting" + interchaintest "github.com/strangelove-ventures/interchaintest/v9" + "github.com/strangelove-ventures/interchaintest/v9/mocktesting" "github.com/stretchr/testify/require" ) diff --git a/test_setup.go b/test_setup.go index c9517bbfa..a9ea60766 100644 --- a/test_setup.go +++ b/test_setup.go @@ -8,9 +8,9 @@ import ( "time" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" ) const ( diff --git a/test_user.go b/test_user.go index 3862881fa..ecfb10ff4 100644 --- a/test_user.go +++ b/test_user.go @@ -6,9 +6,9 @@ import ( "testing" "cosmossdk.io/math" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" - "github.com/strangelove-ventures/interchaintest/v8/ibc" - "github.com/strangelove-ventures/interchaintest/v8/testutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/ibc" + "github.com/strangelove-ventures/interchaintest/v9/testutil" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" ) diff --git a/testreporter/messages_test.go b/testreporter/messages_test.go index 1e7afe70b..cf83a8f3c 100644 --- a/testreporter/messages_test.go +++ b/testreporter/messages_test.go @@ -6,7 +6,7 @@ import ( "time" "github.com/google/go-cmp/cmp" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" ) diff --git a/testreporter/reporter_test.go b/testreporter/reporter_test.go index 47499a1dd..f230995a4 100644 --- a/testreporter/reporter_test.go +++ b/testreporter/reporter_test.go @@ -8,8 +8,8 @@ import ( "time" "github.com/google/go-cmp/cmp" - "github.com/strangelove-ventures/interchaintest/v8/mocktesting" - "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v9/mocktesting" + "github.com/strangelove-ventures/interchaintest/v9/testreporter" "github.com/stretchr/testify/require" ) diff --git a/testutil/poll_for_state.go b/testutil/poll_for_state.go index 2386d0476..4ca79c601 100644 --- a/testutil/poll_for_state.go +++ b/testutil/poll_for_state.go @@ -7,7 +7,7 @@ import ( "strings" "github.com/davecgh/go-spew/spew" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" ) var ErrNotFound = errors.New("not found") diff --git a/testutil/poll_for_state_test.go b/testutil/poll_for_state_test.go index b7be3b848..d48a99ea5 100644 --- a/testutil/poll_for_state_test.go +++ b/testutil/poll_for_state_test.go @@ -6,7 +6,7 @@ import ( "fmt" "testing" - "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v9/ibc" "github.com/stretchr/testify/require" ) diff --git a/testutil/toml.go b/testutil/toml.go index 9ad325dc2..ec4a11d60 100644 --- a/testutil/toml.go +++ b/testutil/toml.go @@ -8,7 +8,7 @@ import ( "github.com/BurntSushi/toml" "github.com/docker/docker/client" - "github.com/strangelove-ventures/interchaintest/v8/dockerutil" + "github.com/strangelove-ventures/interchaintest/v9/dockerutil" "go.uber.org/zap" )