diff --git a/accounts/abi/type.go b/accounts/abi/type.go index 7f74907a84..7465072b51 100644 --- a/accounts/abi/type.go +++ b/accounts/abi/type.go @@ -59,6 +59,8 @@ type Type struct { TupleElems []*Type // Type information of all tuple fields TupleRawNames []string // Raw field name of all tuple fields TupleType reflect.Type // Underlying struct of the tuple + + InternalType string } var ( @@ -223,6 +225,7 @@ func NewType(t string, internalType string, components []ArgumentMarshaling) (ty return Type{}, fmt.Errorf("unsupported arg type: %s", t) } + typ.InternalType = internalType return } diff --git a/cmd/geth/forgecmd.go b/cmd/geth/forgecmd.go index d5ba8c6562..99d7e421b4 100644 --- a/cmd/geth/forgecmd.go +++ b/cmd/geth/forgecmd.go @@ -8,10 +8,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/suave/artifacts" "github.com/urfave/cli/v2" ) @@ -33,7 +33,7 @@ var ( // 2. The name of the precompile. addr := args.Get(0) if !strings.HasPrefix(addr, "0x") { - mAddr, ok := artifacts.SuaveMethods[addr] + mAddr, ok := vm.GetRuntime().GetAddrFromName(addr) if !ok { return fmt.Errorf("unknown precompile name '%s'", addr) } diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 9f8d7a9623..7580edd109 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -40,13 +40,6 @@ type PrecompiledContract interface { Run(input []byte) ([]byte, error) // Run runs the precompiled contract } -// SuavePrecompiledContract is an optional interface for precompiled Suave contracts. -// During confidential execution the contract will be called with their RunConfidential method. -type SuavePrecompiledContract interface { - PrecompiledContract - RunConfidential(context *SuaveContext, input []byte) ([]byte, error) -} - // PrecompiledContractsHomestead contains the default set of pre-compiled Ethereum // contracts used in the Frontier and Homestead releases. var PrecompiledContractsHomestead = map[common.Address]PrecompiledContract{ @@ -83,31 +76,6 @@ var PrecompiledContractsIstanbul = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{9}): &blake2F{}, } -// PrecompiledContractsSuave contains the default set of pre-compiled SUAVE VM -// contracts used in the suave testnet. It's a superset of Berlin precompiles. -// Confidential contracts (implementing SuavePrecompiledContract) -// are ran with their respective RunConfidential in confidential setting -var PrecompiledContractsSuave = map[common.Address]SuavePrecompiledContract{ - isConfidentialAddress: &isConfidentialPrecompile{}, - confidentialInputsAddress: &confidentialInputsPrecompile{}, - - confStoreStoreAddress: newConfStoreStore(), - confStoreRetrieveAddress: newConfStoreRetrieve(), - - newBidAddress: newNewBid(), - fetchBidsAddress: newFetchBids(), - extractHintAddress: &extractHint{}, - - signEthTransactionAddress: &signEthTransaction{}, - simulateBundleAddress: &simulateBundle{}, - buildEthBlockAddress: &buildEthBlock{}, - submitEthBlockBidToRelayAddress: &submitEthBlockBidToRelay{}, - submitBundleJsonRPCAddress: &submitBundleJsonRPC{}, - fillMevShareBundleAddress: &fillMevShareBundle{}, - - ethcallAddr: ðCallPrecompile{}, -} - // PrecompiledContractsBerlin contains the default set of pre-compiled Ethereum // contracts used in the Berlin release. var PrecompiledContractsBerlin = map[common.Address]PrecompiledContract{ @@ -137,7 +105,6 @@ var PrecompiledContractsBLS = map[common.Address]PrecompiledContract{ } var ( - PrecompiledAddressesSuave []common.Address PrecompiledAddressesBerlin []common.Address PrecompiledAddressesIstanbul []common.Address PrecompiledAddressesByzantium []common.Address @@ -157,9 +124,6 @@ func init() { for k := range PrecompiledContractsBerlin { PrecompiledAddressesBerlin = append(PrecompiledAddressesBerlin, k) } - for k := range PrecompiledContractsSuave { - PrecompiledAddressesSuave = append(PrecompiledAddressesSuave, k) - } } // ActivePrecompiles returns the precompiles enabled with the current configuration. @@ -178,7 +142,7 @@ func ActivePrecompiles(rules params.Rules) []common.Address { } if rules.IsSuave { - return append(basePrecompiles, PrecompiledAddressesSuave...) + return append(basePrecompiles, dd.addrs...) } return basePrecompiles diff --git a/core/vm/contracts_suave.go b/core/vm/contracts_suave.go index 9310dbddb7..23487a037c 100644 --- a/core/vm/contracts_suave.go +++ b/core/vm/contracts_suave.go @@ -1,7 +1,6 @@ package vm import ( - "errors" "fmt" "strings" @@ -10,7 +9,6 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/suave/artifacts" suave "github.com/ethereum/go-ethereum/suave/core" ) @@ -20,9 +18,7 @@ var ( ) var ( - isConfidentialAddress = common.HexToAddress("0x42010000") - errIsConfidentialInvalidInputLength = errors.New("invalid input length") - + isConfidentialAddress = common.HexToAddress("0x42010000") confidentialInputsAddress = common.HexToAddress("0x42010001") confStoreStoreAddress = common.HexToAddress("0x42020000") @@ -40,28 +36,16 @@ func (c *isConfidentialPrecompile) RequiredGas(input []byte) uint64 { return 0 // incurs only the call cost (100) } -func (c *isConfidentialPrecompile) Run(input []byte) ([]byte, error) { - if len(input) == 1 { - // The precompile was called *directly* confidentially, and the result was cached - return 1 - if input[0] == 0x01 { - return []byte{0x01}, nil - } else { - return nil, errors.New("incorrect value passed in") - } - } - - if len(input) > 1 { - return nil, errIsConfidentialInvalidInputLength - } +func (c *isConfidentialPrecompile) Name() string { + return "isConfidential" +} - return []byte{0x00}, nil +func (c *isConfidentialPrecompile) Address() common.Address { + return isConfidentialAddress } -func (c *isConfidentialPrecompile) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - if len(input) != 0 { - return nil, errIsConfidentialInvalidInputLength - } - return []byte{0x01}, nil +func (c *isConfidentialPrecompile) Do(suaveContext *SuaveContext) (bool, error) { + return true, nil } type confidentialInputsPrecompile struct{} @@ -70,55 +54,42 @@ func (c *confidentialInputsPrecompile) RequiredGas(input []byte) uint64 { return 0 // incurs only the call cost (100) } -func (c *confidentialInputsPrecompile) Run(input []byte) ([]byte, error) { - return nil, errors.New("not available in this suaveContext") +func (c *confidentialInputsPrecompile) Address() common.Address { + return confidentialInputsAddress } -func (c *confidentialInputsPrecompile) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { +func (c *confidentialInputsPrecompile) Name() string { + return "confidentialInputs" +} + +func (c *confidentialInputsPrecompile) Do(suaveContext *SuaveContext) ([]byte, error) { return suaveContext.ConfidentialInputs, nil } /* Confidential store precompiles */ type confStoreStore struct { - inoutAbi abi.Method -} - -func newConfStoreStore() *confStoreStore { - inoutAbi := mustParseMethodAbi(`[{"inputs":[{"type":"bytes16"}, {"type":"bytes16"}, {"type":"string"}, {"type":"bytes"}],"name":"store","outputs":[],"stateMutability":"nonpayable","type":"function"}]`, "store") - - return &confStoreStore{inoutAbi} } func (c *confStoreStore) RequiredGas(input []byte) uint64 { return uint64(100 * len(input)) } -func (c *confStoreStore) Run(input []byte) ([]byte, error) { - return nil, errors.New("not available in this suaveContext") +func (c *confStoreStore) Name() string { + return "confidentialStoreStore" } -func (c *confStoreStore) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - if len(suaveContext.CallerStack) == 0 { - return []byte("not allowed"), errors.New("not allowed in this suaveContext") - } - - unpacked, err := c.inoutAbi.Inputs.Unpack(input) - if err != nil { - return []byte(err.Error()), err - } - - bidId := unpacked[0].(types.BidId) - key := unpacked[1].(string) - data := unpacked[2].([]byte) +func (c *confStoreStore) Address() common.Address { + return confStoreStoreAddress +} - if err := c.runImpl(suaveContext, bidId, key, data); err != nil { - return []byte(err.Error()), err - } - return nil, nil +func (c *confStoreStore) Do(suaveContext *SuaveContext, bidId suave.BidId, key string, data []byte) error { + fmt.Println("_SSSSS") + return c.runImpl(suaveContext, bidId, key, data) } func (c *confStoreStore) runImpl(suaveContext *SuaveContext, bidId suave.BidId, key string, data []byte) error { + fmt.Println("_YYYY") bid, err := suaveContext.Backend.ConfidentialStore.FetchBidById(bidId) if err != nil { return suave.ErrBidNotFound @@ -145,34 +116,22 @@ func (c *confStoreStore) runImpl(suaveContext *SuaveContext, bidId suave.BidId, type confStoreRetrieve struct{} -func newConfStoreRetrieve() *confStoreRetrieve { - return &confStoreRetrieve{} -} - func (c *confStoreRetrieve) RequiredGas(input []byte) uint64 { return 100 } -func (c *confStoreRetrieve) Run(input []byte) ([]byte, error) { - return nil, errors.New("not available in this suaveContext") +func (c *confStoreRetrieve) Address() common.Address { + return confStoreRetrieveAddress } -func (c *confStoreRetrieve) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - if len(suaveContext.CallerStack) == 0 { - return []byte("not allowed"), errors.New("not allowed in this suaveContext") - } - - unpacked, err := artifacts.SuaveAbi.Methods["retrieve"].Inputs.Unpack(input) - if err != nil { - return []byte(err.Error()), err - } - - bidId := unpacked[0].(suave.BidId) - key := unpacked[1].(string) - +func (c *confStoreRetrieve) Do(suaveContext *SuaveContext, bidId suave.BidId, key string) ([]byte, error) { return c.runImpl(suaveContext, bidId, key) } +func (c *confStoreRetrieve) Name() string { + return "confidentialStoreRetrieve" +} + func (c *confStoreRetrieve) runImpl(suaveContext *SuaveContext, bidId suave.BidId, key string) ([]byte, error) { bid, err := suaveContext.Backend.ConfidentialStore.FetchBidById(bidId) if err != nil { @@ -199,39 +158,22 @@ func (c *confStoreRetrieve) runImpl(suaveContext *SuaveContext, bidId suave.BidI /* Bid precompiles */ type newBid struct { - inoutAbi abi.Method -} - -func newNewBid() *newBid { - inoutAbi := mustParseMethodAbi(`[{ "inputs": [ { "internalType": "uint64", "name": "decryptionCondition", "type": "uint64" }, { "internalType": "address[]", "name": "allowedPeekers", "type": "address[]" }, { "internalType": "string", "name": "BidType", "type": "string" } ], "name": "newBid", "outputs": [ { "components": [ { "internalType": "Suave.BidId", "name": "id", "type": "bytes16" }, { "internalType": "Suave.BidId", "name": "salt", "type": "bytes16" }, { "internalType": "uint64", "name": "decryptionCondition", "type": "uint64" }, { "internalType": "address[]", "name": "allowedPeekers", "type": "address[]" } ], "internalType": "struct Suave.Bid", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }]`, "newBid") - - return &newBid{inoutAbi} } func (c *newBid) RequiredGas(input []byte) uint64 { return 1000 } -func (c *newBid) Run(input []byte) ([]byte, error) { - return input, nil +func (c *newBid) Name() string { + return "newBid" } -func (c *newBid) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - unpacked, err := c.inoutAbi.Inputs.Unpack(input) - if err != nil { - return []byte(err.Error()), err - } - version := unpacked[2].(string) - - decryptionCondition := unpacked[0].(uint64) - allowedPeekers := unpacked[1].([]common.Address) - - bid, err := c.runImpl(suaveContext, version, decryptionCondition, allowedPeekers, []common.Address{}) - if err != nil { - return []byte(err.Error()), err - } +func (c *newBid) Address() common.Address { + return newBidAddress +} - return c.inoutAbi.Outputs.Pack(bid) +func (c *newBid) Do(suaveContext *SuaveContext, decryptionCondition uint64, allowedPeekers []common.Address, allowedStores []common.Address, version string) (*types.Bid, error) { + return c.runImpl(suaveContext, version, decryptionCondition, allowedPeekers, allowedStores) } func (c *newBid) runImpl(suaveContext *SuaveContext, version string, decryptionCondition uint64, allowedPeekers []common.Address, allowedStores []common.Address) (*types.Bid, error) { @@ -254,38 +196,22 @@ func (c *newBid) runImpl(suaveContext *SuaveContext, version string, decryptionC } type fetchBids struct { - inoutAbi abi.Method } -func newFetchBids() *fetchBids { - inoutAbi := mustParseMethodAbi(`[ { "inputs": [ { "internalType": "uint64", "name": "cond", "type": "uint64" }, { "internalType": "string", "name": "namespace", "type": "string" } ], "name": "fetchBids", "outputs": [ { "components": [ { "internalType": "Suave.BidId", "name": "id", "type": "bytes16" }, { "internalType": "Suave.BidId", "name": "salt", "type": "bytes16" }, { "internalType": "uint64", "name": "decryptionCondition", "type": "uint64" }, { "internalType": "address[]", "name": "allowedPeekers", "type": "address[]" }, { "internalType": "address[]", "name": "allowedStores", "type": "address[]" }, { "internalType": "string", "name": "version", "type": "string" } ], "internalType": "struct Suave.Bid[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" } ]`, "fetchBids") - - return &fetchBids{inoutAbi} +func (c *fetchBids) Name() string { + return "fetchBids" } func (c *fetchBids) RequiredGas(input []byte) uint64 { return 1000 } -func (c *fetchBids) Run(input []byte) ([]byte, error) { - return input, nil +func (c *fetchBids) Address() common.Address { + return fetchBidsAddress } -func (c *fetchBids) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - unpacked, err := c.inoutAbi.Inputs.Unpack(input) - if err != nil { - return []byte(err.Error()), err - } - - targetBlock := unpacked[0].(uint64) - namespace := unpacked[1].(string) - - bids, err := c.runImpl(suaveContext, targetBlock, namespace) - if err != nil { - return []byte(err.Error()), err - } - - return c.inoutAbi.Outputs.Pack(bids) +func (c *fetchBids) Do(suaveContext *SuaveContext, targetBlock uint64, namespace string) ([]types.Bid, error) { + return c.runImpl(suaveContext, targetBlock, namespace) } func (c *fetchBids) runImpl(suaveContext *SuaveContext, targetBlock uint64, namespace string) ([]types.Bid, error) { @@ -317,73 +243,3 @@ func formatPeekerError(format string, args ...any) ([]byte, error) { err := fmt.Errorf(format, args...) return []byte(err.Error()), err } - -type suaveRuntime struct { - suaveContext *SuaveContext -} - -var _ SuaveRuntime = &suaveRuntime{} - -func (b *suaveRuntime) ethcall(contractAddr common.Address, input []byte) ([]byte, error) { - return (ðCallPrecompile{}).runImpl(b.suaveContext, contractAddr, input) -} - -func (b *suaveRuntime) buildEthBlock(blockArgs types.BuildBlockArgs, bid types.BidId, namespace string) ([]byte, []byte, error) { - return (&buildEthBlock{}).runImpl(b.suaveContext, blockArgs, bid, namespace) -} - -func (b *suaveRuntime) confidentialInputs() ([]byte, error) { - return nil, nil -} - -func (b *suaveRuntime) confidentialStoreRetrieve(bidId types.BidId, key string) ([]byte, error) { - return (&confStoreRetrieve{}).runImpl(b.suaveContext, bidId, key) -} - -func (b *suaveRuntime) confidentialStoreStore(bidId types.BidId, key string, data []byte) error { - return (&confStoreStore{}).runImpl(b.suaveContext, bidId, key, data) -} - -func (b *suaveRuntime) signEthTransaction(txn []byte, chainId string, signingKey string) ([]byte, error) { - return (&signEthTransaction{}).runImpl(txn, chainId, signingKey) -} - -func (b *suaveRuntime) extractHint(bundleData []byte) ([]byte, error) { - return (&extractHint{}).runImpl(b.suaveContext, bundleData) -} - -func (b *suaveRuntime) fetchBids(cond uint64, namespace string) ([]types.Bid, error) { - bids, err := (&fetchBids{}).runImpl(b.suaveContext, cond, namespace) - if err != nil { - return nil, err - } - return bids, nil -} - -func (b *suaveRuntime) newBid(decryptionCondition uint64, allowedPeekers []common.Address, allowedStores []common.Address, BidType string) (types.Bid, error) { - bid, err := (&newBid{}).runImpl(b.suaveContext, BidType, decryptionCondition, allowedPeekers, allowedStores) - if err != nil { - return types.Bid{}, err - } - return *bid, nil -} - -func (b *suaveRuntime) simulateBundle(bundleData []byte) (uint64, error) { - num, err := (&simulateBundle{}).runImpl(b.suaveContext, bundleData) - if err != nil { - return 0, err - } - return num.Uint64(), nil -} - -func (b *suaveRuntime) submitEthBlockBidToRelay(relayUrl string, builderBid []byte) ([]byte, error) { - return (&submitEthBlockBidToRelay{}).runImpl(b.suaveContext, relayUrl, builderBid) -} - -func (b *suaveRuntime) fillMevShareBundle(bidId types.BidId) ([]byte, error) { - return (&fillMevShareBundle{}).runImpl(b.suaveContext, bidId) -} - -func (b *suaveRuntime) submitBundleJsonRPC(url string, method string, params []byte) ([]byte, error) { - return (&submitBundleJsonRPC{}).runImpl(b.suaveContext, url, method, params) -} diff --git a/core/vm/contracts_suave_eth.go b/core/vm/contracts_suave_eth.go index efd4ea1943..1f1d45b54d 100644 --- a/core/vm/contracts_suave_eth.go +++ b/core/vm/contracts_suave_eth.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "encoding/json" - "errors" "fmt" "io" "math/big" @@ -18,8 +17,6 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/suave/artifacts" - suave "github.com/ethereum/go-ethereum/suave/core" "github.com/flashbots/go-boost-utils/bls" "github.com/flashbots/go-boost-utils/ssz" "github.com/holiman/uint256" @@ -51,15 +48,15 @@ func (c *signEthTransaction) RequiredGas(input []byte) uint64 { return 1000 } -func (c *signEthTransaction) Run(input []byte) ([]byte, error) { - return nil, errors.New("not available in this context") +func (c *signEthTransaction) Name() string { + return "signEthTransaction" } -func (c *signEthTransaction) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - return nil, errors.New("not available in this context") +func (c *signEthTransaction) Address() common.Address { + return signEthTransactionAddress } -func (c *signEthTransaction) runImpl(txn []byte, chainId string, signingKey string) ([]byte, error) { +func (c *signEthTransaction) Do(suaveContext *SuaveContext, txn []byte, chainId string, signingKey string) ([]byte, error) { key, err := crypto.HexToECDSA(signingKey) if err != nil { return nil, fmt.Errorf("key not formatted properly: %w", err) @@ -99,24 +96,23 @@ func (c *simulateBundle) RequiredGas(input []byte) uint64 { return 10000 } -func (c *simulateBundle) Run(input []byte) ([]byte, error) { - return input, nil +func (c *simulateBundle) Name() string { + return "simulateBundle" } -func (c *simulateBundle) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - egp, err := c.runImpl(suaveContext, input) - if err != nil { - return []byte(err.Error()), err - } +func (c *simulateBundle) Address() common.Address { + return simulateBundleAddress +} - return artifacts.SuaveAbi.Methods["simulateBundle"].Outputs.Pack(egp.Uint64()) +func (c *simulateBundle) Do(suaveContext *SuaveContext, input []byte) (uint64, error) { + return c.runImpl(suaveContext, input) } -func (c *simulateBundle) runImpl(suaveContext *SuaveContext, input []byte) (*big.Int, error) { +func (c *simulateBundle) runImpl(suaveContext *SuaveContext, input []byte) (uint64, error) { var bundle types.SBundle err := json.Unmarshal(input, &bundle) if err != nil { - return nil, err + return 0, err } ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Second)) @@ -124,15 +120,15 @@ func (c *simulateBundle) runImpl(suaveContext *SuaveContext, input []byte) (*big envelope, err := suaveContext.Backend.ConfidentialEthBackend.BuildEthBlock(ctx, nil, bundle.Txs) if err != nil { - return nil, err + return 0, err } if envelope.ExecutionPayload.GasUsed == 0 { - return nil, err + return 0, err } egp := new(big.Int).Div(envelope.BlockValue, big.NewInt(int64(envelope.ExecutionPayload.GasUsed))) - return egp, nil + return egp.Uint64(), nil } type extractHint struct{} @@ -141,18 +137,15 @@ func (c *extractHint) RequiredGas(input []byte) uint64 { return 10000 } -func (c *extractHint) Run(input []byte) ([]byte, error) { - return input, nil +func (c *extractHint) Name() string { + return "extractHint" } -func (c *extractHint) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - unpacked, err := artifacts.SuaveAbi.Methods["extractHint"].Inputs.Unpack(input) - if err != nil { - return []byte(err.Error()), err - } - - bundleBytes := unpacked[0].([]byte) +func (c *extractHint) Address() common.Address { + return extractHintAddress +} +func (c *extractHint) Do(suaveContext *SuaveContext, bundleBytes []byte) ([]byte, error) { return c.runImpl(suaveContext, bundleBytes) } @@ -179,6 +172,10 @@ func (c *extractHint) runImpl(suaveContext *SuaveContext, bundleBytes []byte) ([ return hintBytes, nil } +var ( + ethcallAddr = common.HexToAddress("0x0000000000000000000000000000000042100003") +) + type ethCallPrecompile struct{} func (e *ethCallPrecompile) RequiredGas(input []byte) uint64 { @@ -186,8 +183,16 @@ func (e *ethCallPrecompile) RequiredGas(input []byte) uint64 { return 10000 } -func (e *ethCallPrecompile) Run(input []byte) ([]byte, error) { - return input, nil +func (e *ethCallPrecompile) Name() string { + return "ethcall" +} + +func (e *ethCallPrecompile) Address() common.Address { + return ethcallAddr +} + +func (e *ethCallPrecompile) Do(suaveContext *SuaveContext, contractAddr common.Address, input []byte) ([]byte, error) { + return e.runImpl(suaveContext, contractAddr, input) } func (e *ethCallPrecompile) runImpl(suaveContext *SuaveContext, contractAddr common.Address, input []byte) ([]byte, error) { @@ -206,62 +211,16 @@ func (c *buildEthBlock) RequiredGas(input []byte) uint64 { return 10000 } -func (c *buildEthBlock) Run(input []byte) ([]byte, error) { - return input, nil +func (c *buildEthBlock) Name() string { + return "buildEthBlock" } -func (c *buildEthBlock) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - unpacked, err := artifacts.SuaveAbi.Methods["buildEthBlock"].Inputs.Unpack(input) - if err != nil { - return formatPeekerError("could not unpack inputs: %w", err) - } - - // blockArgs := unpacked[0].(types.BuildBlockArgs) - blockArgsRaw := unpacked[0].(struct { - Slot uint64 "json:\"slot\"" - ProposerPubkey []uint8 "json:\"proposerPubkey\"" - Parent common.Hash "json:\"parent\"" - Timestamp uint64 "json:\"timestamp\"" - FeeRecipient common.Address "json:\"feeRecipient\"" - GasLimit uint64 "json:\"gasLimit\"" - Random common.Hash "json:\"random\"" - Withdrawals []struct { - Index uint64 "json:\"index\"" - Validator uint64 "json:\"validator\"" - Address common.Address "json:\"Address\"" - Amount uint64 "json:\"amount\"" - } "json:\"withdrawals\"" - }) - - blockArgs := types.BuildBlockArgs{ - Slot: blockArgsRaw.Slot, - Parent: blockArgsRaw.Parent, - Timestamp: blockArgsRaw.Timestamp, - FeeRecipient: blockArgsRaw.FeeRecipient, - GasLimit: blockArgsRaw.GasLimit, - Random: blockArgsRaw.Random, - ProposerPubkey: blockArgsRaw.ProposerPubkey, - Withdrawals: types.Withdrawals{}, - } - - for _, w := range blockArgsRaw.Withdrawals { - blockArgs.Withdrawals = append(blockArgs.Withdrawals, &types.Withdrawal{ - Index: w.Index, - Validator: w.Validator, - Address: w.Address, - Amount: w.Amount, - }) - } - - bidId := unpacked[1].(suave.BidId) - namespace := unpacked[2].(string) - - bidBytes, envelopeBytes, err := c.runImpl(suaveContext, blockArgs, bidId, namespace) - if err != nil { - return formatPeekerError("could not unpack merged bid ids: %w", err) - } +func (c *buildEthBlock) Address() common.Address { + return buildEthBlockAddress +} - return artifacts.SuaveAbi.Methods["buildEthBlock"].Outputs.Pack(bidBytes, envelopeBytes) +func (c *buildEthBlock) Do(suaveContext *SuaveContext, blockArgs types.BuildBlockArgs, bidId types.BidId, namespace string) ([]byte, []byte, error) { + return c.runImpl(suaveContext, blockArgs, bidId, namespace) } func (c *buildEthBlock) runImpl(suaveContext *SuaveContext, blockArgs types.BuildBlockArgs, bidId types.BidId, namespace string) ([]byte, []byte, error) { @@ -437,19 +396,15 @@ func (c *submitEthBlockBidToRelay) RequiredGas(input []byte) uint64 { return 1000 } -func (c *submitEthBlockBidToRelay) Run(input []byte) ([]byte, error) { - return input, nil +func (c *submitEthBlockBidToRelay) Name() string { + return "submitEthBlockBidToRelay" } -func (c *submitEthBlockBidToRelay) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - unpacked, err := artifacts.SuaveAbi.Methods["submitEthBlockBidToRelay"].Inputs.Unpack(input) - if err != nil { - return formatPeekerError("could not unpack inputs: %w", err) - } - - relayUrl := unpacked[0].(string) - builderBidJson := unpacked[1].([]byte) +func (c *submitEthBlockBidToRelay) Address() common.Address { + return submitEthBlockBidToRelayAddress +} +func (c *submitEthBlockBidToRelay) Do(suaveContext *SuaveContext, relayUrl string, builderBidJson []byte) ([]byte, error) { return c.runImpl(suaveContext, relayUrl, builderBidJson) } @@ -536,15 +491,15 @@ func (c *submitBundleJsonRPC) RequiredGas(input []byte) uint64 { return 1000 } -func (c *submitBundleJsonRPC) Run(input []byte) ([]byte, error) { - return nil, errors.New("not available in this context") +func (c *submitBundleJsonRPC) Name() string { + return "submitBundleJsonRPC" } -func (c *submitBundleJsonRPC) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - return nil, errors.New("not available in this context") +func (c *submitBundleJsonRPC) Address() common.Address { + return submitBundleJsonRPCAddress } -func (c *submitBundleJsonRPC) runImpl(suaveContext *SuaveContext, url string, method string, params []byte) ([]byte, error) { +func (c *submitBundleJsonRPC) Do(suaveContext *SuaveContext, url string, method string, params []byte) ([]byte, error) { ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(3*time.Second)) defer cancel() @@ -602,15 +557,15 @@ func (c *fillMevShareBundle) RequiredGas(input []byte) uint64 { return 1000 } -func (c *fillMevShareBundle) Run(input []byte) ([]byte, error) { - return nil, errors.New("not available in this context") +func (c *fillMevShareBundle) Address() common.Address { + return fillMevShareBundleAddress } -func (c *fillMevShareBundle) RunConfidential(suaveContext *SuaveContext, input []byte) ([]byte, error) { - return nil, errors.New("not available in this context") +func (c *fillMevShareBundle) Name() string { + return "fillMevShareBundle" } -func (c *fillMevShareBundle) runImpl(suaveContext *SuaveContext, bidId types.BidId) ([]byte, error) { +func (c *fillMevShareBundle) Do(suaveContext *SuaveContext, bidId types.BidId) ([]byte, error) { bid, err := suaveContext.Backend.ConfidentialStore.FetchBidById(bidId) if err != nil { return nil, err diff --git a/core/vm/contracts_suave_runtime_adapter.go b/core/vm/contracts_suave_runtime_adapter.go deleted file mode 100644 index 54105247f8..0000000000 --- a/core/vm/contracts_suave_runtime_adapter.go +++ /dev/null @@ -1,546 +0,0 @@ -// Code generated by suave/gen. DO NOT EDIT. -// Hash: 23a6dd8b9b224b11b8baea19a80c55c7787c50c0eb2fc69727e66d615c913483 -package vm - -import ( - "fmt" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/suave/artifacts" - "github.com/mitchellh/mapstructure" -) - -var ( - errFailedToUnpackInput = fmt.Errorf("failed to decode input") - errFailedToDecodeField = fmt.Errorf("failed to decode field") - errFailedToPackOutput = fmt.Errorf("failed to encode output") -) - -type SuaveRuntime interface { - buildEthBlock(blockArgs types.BuildBlockArgs, bidId types.BidId, namespace string) ([]byte, []byte, error) - confidentialInputs() ([]byte, error) - confidentialStoreRetrieve(bidId types.BidId, key string) ([]byte, error) - confidentialStoreStore(bidId types.BidId, key string, data1 []byte) error - ethcall(contractAddr common.Address, input1 []byte) ([]byte, error) - extractHint(bundleData []byte) ([]byte, error) - fetchBids(cond uint64, namespace string) ([]types.Bid, error) - fillMevShareBundle(bidId types.BidId) ([]byte, error) - newBid(decryptionCondition uint64, allowedPeekers []common.Address, allowedStores []common.Address, bidType string) (types.Bid, error) - signEthTransaction(txn []byte, chainId string, signingKey string) ([]byte, error) - simulateBundle(bundleData []byte) (uint64, error) - submitBundleJsonRPC(url string, method string, params []byte) ([]byte, error) - submitEthBlockBidToRelay(relayUrl string, builderBid []byte) ([]byte, error) -} - -type SuaveRuntimeAdapter struct { - impl SuaveRuntime -} - -func (b *SuaveRuntimeAdapter) buildEthBlock(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["buildEthBlock"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - blockArgs types.BuildBlockArgs - bidId types.BidId - namespace string - ) - - if err = mapstructure.Decode(unpacked[0], &blockArgs); err != nil { - err = errFailedToDecodeField - return - } - - if err = mapstructure.Decode(unpacked[1], &bidId); err != nil { - err = errFailedToDecodeField - return - } - - namespace = unpacked[2].(string) - - var ( - output1 []byte - output2 []byte - ) - - if output1, output2, err = b.impl.buildEthBlock(blockArgs, bidId, namespace); err != nil { - return - } - - result, err = artifacts.SuaveAbi.Methods["buildEthBlock"].Outputs.Pack(output1, output2) - if err != nil { - err = errFailedToPackOutput - return - } - return result, nil - -} - -func (b *SuaveRuntimeAdapter) confidentialInputs(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["confidentialInputs"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var () - - var ( - output1 []byte - ) - - if output1, err = b.impl.confidentialInputs(); err != nil { - return - } - - result = output1 - return result, nil - -} - -func (b *SuaveRuntimeAdapter) confidentialStoreRetrieve(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["confidentialStoreRetrieve"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - bidId types.BidId - key string - ) - - if err = mapstructure.Decode(unpacked[0], &bidId); err != nil { - err = errFailedToDecodeField - return - } - - key = unpacked[1].(string) - - var ( - output1 []byte - ) - - if output1, err = b.impl.confidentialStoreRetrieve(bidId, key); err != nil { - return - } - - result = output1 - return result, nil - -} - -func (b *SuaveRuntimeAdapter) confidentialStoreStore(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["confidentialStoreStore"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - bidId types.BidId - key string - data1 []byte - ) - - if err = mapstructure.Decode(unpacked[0], &bidId); err != nil { - err = errFailedToDecodeField - return - } - - key = unpacked[1].(string) - data1 = unpacked[2].([]byte) - - var () - - if err = b.impl.confidentialStoreStore(bidId, key, data1); err != nil { - return - } - - return nil, nil - -} - -func (b *SuaveRuntimeAdapter) ethcall(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["ethcall"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - contractAddr common.Address - input1 []byte - ) - - contractAddr = unpacked[0].(common.Address) - input1 = unpacked[1].([]byte) - - var ( - output1 []byte - ) - - if output1, err = b.impl.ethcall(contractAddr, input1); err != nil { - return - } - - result, err = artifacts.SuaveAbi.Methods["ethcall"].Outputs.Pack(output1) - if err != nil { - err = errFailedToPackOutput - return - } - return result, nil - -} - -func (b *SuaveRuntimeAdapter) extractHint(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["extractHint"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - bundleData []byte - ) - - bundleData = unpacked[0].([]byte) - - var ( - output1 []byte - ) - - if output1, err = b.impl.extractHint(bundleData); err != nil { - return - } - - result = output1 - return result, nil - -} - -func (b *SuaveRuntimeAdapter) fetchBids(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["fetchBids"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - cond uint64 - namespace string - ) - - cond = unpacked[0].(uint64) - namespace = unpacked[1].(string) - - var ( - bid []types.Bid - ) - - if bid, err = b.impl.fetchBids(cond, namespace); err != nil { - return - } - - result, err = artifacts.SuaveAbi.Methods["fetchBids"].Outputs.Pack(bid) - if err != nil { - err = errFailedToPackOutput - return - } - return result, nil - -} - -func (b *SuaveRuntimeAdapter) fillMevShareBundle(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["fillMevShareBundle"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - bidId types.BidId - ) - - if err = mapstructure.Decode(unpacked[0], &bidId); err != nil { - err = errFailedToDecodeField - return - } - - var ( - encodedBundle []byte - ) - - if encodedBundle, err = b.impl.fillMevShareBundle(bidId); err != nil { - return - } - - result = encodedBundle - return result, nil - -} - -func (b *SuaveRuntimeAdapter) newBid(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["newBid"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - decryptionCondition uint64 - allowedPeekers []common.Address - allowedStores []common.Address - bidType string - ) - - decryptionCondition = unpacked[0].(uint64) - allowedPeekers = unpacked[1].([]common.Address) - allowedStores = unpacked[2].([]common.Address) - bidType = unpacked[3].(string) - - var ( - bid types.Bid - ) - - if bid, err = b.impl.newBid(decryptionCondition, allowedPeekers, allowedStores, bidType); err != nil { - return - } - - result, err = artifacts.SuaveAbi.Methods["newBid"].Outputs.Pack(bid) - if err != nil { - err = errFailedToPackOutput - return - } - return result, nil - -} - -func (b *SuaveRuntimeAdapter) signEthTransaction(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["signEthTransaction"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - txn []byte - chainId string - signingKey string - ) - - txn = unpacked[0].([]byte) - chainId = unpacked[1].(string) - signingKey = unpacked[2].(string) - - var ( - output1 []byte - ) - - if output1, err = b.impl.signEthTransaction(txn, chainId, signingKey); err != nil { - return - } - - result, err = artifacts.SuaveAbi.Methods["signEthTransaction"].Outputs.Pack(output1) - if err != nil { - err = errFailedToPackOutput - return - } - return result, nil - -} - -func (b *SuaveRuntimeAdapter) simulateBundle(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["simulateBundle"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - bundleData []byte - ) - - bundleData = unpacked[0].([]byte) - - var ( - output1 uint64 - ) - - if output1, err = b.impl.simulateBundle(bundleData); err != nil { - return - } - - result, err = artifacts.SuaveAbi.Methods["simulateBundle"].Outputs.Pack(output1) - if err != nil { - err = errFailedToPackOutput - return - } - return result, nil - -} - -func (b *SuaveRuntimeAdapter) submitBundleJsonRPC(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["submitBundleJsonRPC"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - url string - method string - params []byte - ) - - url = unpacked[0].(string) - method = unpacked[1].(string) - params = unpacked[2].([]byte) - - var ( - output1 []byte - ) - - if output1, err = b.impl.submitBundleJsonRPC(url, method, params); err != nil { - return - } - - result = output1 - return result, nil - -} - -func (b *SuaveRuntimeAdapter) submitEthBlockBidToRelay(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result - - unpacked, err = artifacts.SuaveAbi.Methods["submitEthBlockBidToRelay"].Inputs.Unpack(input) - if err != nil { - err = errFailedToUnpackInput - return - } - - var ( - relayUrl string - builderBid []byte - ) - - relayUrl = unpacked[0].(string) - builderBid = unpacked[1].([]byte) - - var ( - output1 []byte - ) - - if output1, err = b.impl.submitEthBlockBidToRelay(relayUrl, builderBid); err != nil { - return - } - - result = output1 - return result, nil - -} diff --git a/core/vm/contracts_suave_test.go b/core/vm/contracts_suave_test.go index fa817c6ad5..731eaceaf3 100644 --- a/core/vm/contracts_suave_test.go +++ b/core/vm/contracts_suave_test.go @@ -2,19 +2,11 @@ package vm import ( "context" - "math/big" - "regexp" - "strings" "testing" - "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/beacon/engine" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/suave/artifacts" suave "github.com/ethereum/go-ethereum/suave/core" "github.com/ethereum/go-ethereum/suave/cstore" "github.com/stretchr/testify/require" @@ -72,101 +64,7 @@ func (m *mockSuaveBackend) Subscribe() (<-chan cstore.DAMessage, context.CancelF func (m *mockSuaveBackend) Publish(cstore.DAMessage) {} -var dummyBlockContext = BlockContext{ - CanTransfer: func(StateDB, common.Address, *big.Int) bool { return true }, - Transfer: func(StateDB, common.Address, common.Address, *big.Int) {}, - BlockNumber: big.NewInt(0), -} - -func TestSuavePrecompileStub(t *testing.T) { - // This test ensures that the Suave precompile stubs work as expected - // for encoding/decoding. - mockSuaveBackend := &mockSuaveBackend{} - stubEngine := cstore.NewConfidentialStoreEngine(mockSuaveBackend, mockSuaveBackend, cstore.MockSigner{}, cstore.MockChainSigner{}) - - reqTx := types.NewTx(&types.ConfidentialComputeRequest{ - ConfidentialComputeRecord: types.ConfidentialComputeRecord{ - ExecutionNode: common.Address{}, - }, - }) - - suaveContext := SuaveContext{ - Backend: &SuaveExecutionBackend{ - ConfidentialStore: stubEngine.NewTransactionalStore(reqTx), - ConfidentialEthBackend: mockSuaveBackend, - }, - ConfidentialComputeRequestTx: reqTx, - } - - statedb, _ := state.New(types.EmptyRootHash, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) - vmenv := NewConfidentialEVM(suaveContext, dummyBlockContext, TxContext{}, statedb, params.AllEthashProtocolChanges, Config{IsConfidential: true}) - - // The objective of the unit test is to make sure that the encoding of the precompile - // inputs works as expected from the ABI specification. Thus, we will skip any errors - // that are generated by the logic of the precompile. - // Note: Once code generated is in place, we can remove this and only test the - // encodings in isolation outside the logic. - expectedErrors := []string{ - // json error when the precompile expects to decode a json object encoded as []byte - // in the precompile input. - "invalid character", - "not allowed to store", - "not allowed to retrieve", - "unknown bid version", - // error from a precompile that expects to make an http request from an input value. - "could not send request to relay", - // error in 'buildEthBlock' when it expects to retrieve bids in abi format from the - // confidential store. - "could not unpack merged bid ids", - "no caller of confidentialStoreRetrieve (0000000000000000000000000000000042020001) is allowed on 00000000000000000000000000000000", - "precompile fillMevShareBundle (0000000000000000000000000000000043200001) not allowed on 00000000000000000000000000000000", - "no caller of confidentialStoreStore (0000000000000000000000000000000042020000) is allowed on 00000000000000000000000000000000", - "precompile buildEthBlock (0000000000000000000000000000000042100001) not allowed on 00000000000000000000000000000000", - } - - expectedVariableErrors := []*regexp.Regexp{ - regexp.MustCompile("key not formatted properly: invalid hex character.*in private key"), - } - - for name, addr := range artifacts.SuaveMethods { - abiMethod, ok := artifacts.SuaveAbi.Methods[name] - if !ok { - t.Fatalf("abi method '%s' not found", name) - } - - inputVals := abi.GenerateRandomTypeForMethod(abiMethod) - - packedInput, err := abiMethod.Inputs.Pack(inputVals...) - require.NoError(t, err) - - _, _, err = vmenv.Call(AccountRef(common.Address{}), addr, packedInput, 100000000, big.NewInt(0)) - if err != nil { - found := false - for _, expectedError := range expectedErrors { - if strings.Contains(err.Error(), expectedError) { - found = true - break - } - } - - if found { - continue - } - - for _, expectedErrRe := range expectedVariableErrors { - if expectedErrRe.Match([]byte(err.Error())) { - found = true - break - } - } - if !found { - t.Fatal(err) - } - } - } -} - -func newTestBackend(t *testing.T) *suaveRuntime { +func newTestContext(t *testing.T) *SuaveContext { confStore := cstore.NewLocalConfidentialStore() confEngine := cstore.NewConfidentialStoreEngine(confStore, &cstore.MockTransport{}, cstore.MockSigner{}, cstore.MockChainSigner{}) @@ -179,28 +77,28 @@ func newTestBackend(t *testing.T) *suaveRuntime { }, }) - b := &suaveRuntime{ - suaveContext: &SuaveContext{ - Backend: &SuaveExecutionBackend{ - ConfidentialStore: confEngine.NewTransactionalStore(reqTx), - ConfidentialEthBackend: &mockSuaveBackend{}, - }, - ConfidentialComputeRequestTx: reqTx, + b := &SuaveContext{ + Backend: &SuaveExecutionBackend{ + ConfidentialStore: confEngine.NewTransactionalStore(reqTx), + ConfidentialEthBackend: &mockSuaveBackend{}, }, + ConfidentialComputeRequestTx: reqTx, } return b } func TestSuave_BidWorkflow(t *testing.T) { - b := newTestBackend(t) + suaveContext := newTestContext(t) - bid5, err := b.newBid(5, []common.Address{{0x1}}, nil, "a") + newBid := &newBid{} + + bid5, err := newBid.Do(suaveContext, 5, []common.Address{{0x1}}, []common.Address{}, "a") require.NoError(t, err) - bid10, err := b.newBid(10, []common.Address{{0x1}}, nil, "a") + bid10, err := newBid.Do(suaveContext, uint64(10), []common.Address{{0x1}}, []common.Address{}, "a") require.NoError(t, err) - bid10b, err := b.newBid(10, []common.Address{{0x1}}, nil, "a") + bid10b, err := newBid.Do(suaveContext, uint64(10), []common.Address{{0x1}}, []common.Address{}, "a") require.NoError(t, err) cases := []struct { @@ -209,13 +107,15 @@ func TestSuave_BidWorkflow(t *testing.T) { bids []types.Bid }{ {0, "a", []types.Bid{}}, - {5, "a", []types.Bid{bid5}}, - {10, "a", []types.Bid{bid10, bid10b}}, + {5, "a", []types.Bid{*bid5}}, + {10, "a", []types.Bid{*bid10, *bid10b}}, {11, "a", []types.Bid{}}, } + fetchBids := &fetchBids{} + for _, c := range cases { - bids, err := b.fetchBids(c.cond, c.namespace) + bids, err := fetchBids.Do(suaveContext, c.cond, c.namespace) require.NoError(t, err) require.ElementsMatch(t, c.bids, bids) @@ -223,33 +123,37 @@ func TestSuave_BidWorkflow(t *testing.T) { } func TestSuave_ConfStoreWorkflow(t *testing.T) { - b := newTestBackend(t) + suaveContext := newTestContext(t) callerAddr := common.Address{0x1} data := []byte{0x1} + confStoreStore := &confStoreStore{} + confStoreRetrieve := &confStoreRetrieve{} + newBid := &newBid{} + // cannot store a value for a bid that does not exist - err := b.confidentialStoreStore(types.BidId{}, "key", data) + err := confStoreStore.Do(suaveContext, types.BidId{}, "key", data) require.Error(t, err) - bid, err := b.newBid(5, []common.Address{callerAddr}, nil, "a") + bid, err := newBid.Do(suaveContext, 5, []common.Address{callerAddr}, nil, "a") require.NoError(t, err) // cannot store the bid if the caller is not allowed to - err = b.confidentialStoreStore(bid.Id, "key", data) + err = confStoreStore.Do(suaveContext, bid.Id, "key", data) require.Error(t, err) // now, the caller is allowed to store the bid - b.suaveContext.CallerStack = append(b.suaveContext.CallerStack, &callerAddr) - err = b.confidentialStoreStore(bid.Id, "key", data) + suaveContext.CallerStack = append(suaveContext.CallerStack, &callerAddr) + err = confStoreStore.Do(suaveContext, bid.Id, "key", data) require.NoError(t, err) - val, err := b.confidentialStoreRetrieve(bid.Id, "key") + val, err := confStoreRetrieve.Do(suaveContext, bid.Id, "key") require.NoError(t, err) require.Equal(t, data, val) // cannot retrieve the value if the caller is not allowed to - b.suaveContext.CallerStack = []*common.Address{} - _, err = b.confidentialStoreRetrieve(bid.Id, "key") + suaveContext.CallerStack = []*common.Address{} + _, err = confStoreRetrieve.Do(suaveContext, bid.Id, "key") require.Error(t, err) } diff --git a/core/vm/dispatch.go b/core/vm/dispatch.go new file mode 100644 index 0000000000..05217515a9 --- /dev/null +++ b/core/vm/dispatch.go @@ -0,0 +1,437 @@ +package vm + +import ( + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "reflect" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/mitchellh/mapstructure" +) + +type DispatchTable struct { + methods map[common.Address]*runtimeMethod + + // addrs stores an index of the addresses of the precompiled contracts + addrs []common.Address +} + +type runtimeMethod struct { + name string + addr common.Address + + method *abi.Method + + // sv is a reflect reference to the struct + sv reflect.Value + + // fv is the reference to the run function + fv reflect.Value + + // reqT is a list of input types for the run function + // The first parameter is the pointer receiver type for the struct + reqT []reflect.Type +} + +func NewDispatchTable() *DispatchTable { + return &DispatchTable{ + methods: make(map[common.Address]*runtimeMethod), + addrs: []common.Address{}, + } +} + +// SuavePrecompiledContract is an optional interface for precompiled Suave contracts. +// During confidential execution the contract will be called with their RunConfidential method. +type SuavePrecompiledContract interface { + RequiredGas(input []byte) uint64 + Address() common.Address + Name() string +} + +type SuavePrecompiledContractWrapper2 struct { + ctx *SuaveContext + addr common.Address + dispatcher *DispatchTable +} + +func (s *SuavePrecompiledContractWrapper2) RequiredGas(input []byte) uint64 { + return 0 +} + +func (s *SuavePrecompiledContractWrapper2) Run(input []byte) ([]byte, error) { + return s.dispatcher.Run(s.ctx, s.addr, input) +} + +func (d *DispatchTable) Wrap(ctx *SuaveContext, addr common.Address) *SuavePrecompiledContractWrapper2 { + return &SuavePrecompiledContractWrapper2{ + ctx: ctx, + addr: addr, + dispatcher: d, + } +} + +type PrecompileMethod struct { + *abi.Method + Addr common.Address +} + +func (d *DispatchTable) GetAddrFromName(name string) (common.Address, bool) { + for _, m := range d.methods { + if m.name == name { + return m.addr, true + } + } + return common.Address{}, false +} + +func (d *DispatchTable) GetMethods() []*PrecompileMethod { + res := make([]*PrecompileMethod, 0, len(d.methods)) + for _, method := range d.methods { + res = append(res, &PrecompileMethod{Method: method.method, Addr: method.addr}) + } + return res +} + +func (d *DispatchTable) IsPrecompile(addr common.Address) bool { + for _, a := range d.addrs { + if a == addr { + return true + } + } + return false +} + +func (d *DispatchTable) packAndRun(suaveContext *SuaveContext, methodName string, args ...interface{}) ([]interface{}, error) { + // find the method by name + var method *runtimeMethod + for _, m := range d.methods { + if m.name == methodName { + method = m + break + } + } + if method == nil { + return nil, fmt.Errorf("runtime method %s not found", methodName) + } + + // pack the input + input, err := method.method.Inputs.Pack(args...) + if err != nil { + return nil, err + } + + // run the method + output, err := d.Run(suaveContext, method.addr, input) + if err != nil { + return nil, err + } + + // unpack the output + outputs, err := method.method.Outputs.Unpack(output) + if err != nil { + return nil, err + } + + return outputs, nil +} + +func (d *DispatchTable) Run(suaveContext *SuaveContext, addr common.Address, input []byte) ([]byte, error) { + method, ok := d.methods[addr] + if !ok { + return nil, fmt.Errorf("runtime method %s not found", addr) + } + + log.Info("runtime.Handle", "name", method.name) + + if metrics.EnabledExpensive { + metrics.GetOrRegisterMeter("suave/runtime/"+method.name, nil).Mark(1) + + now := time.Now() + defer func() { + metrics.GetOrRegisterTimer("suave/runtime/"+method.name+"/duration", nil).Update(time.Since(now)) + }() + } + + inNum := len(method.reqT) + + inArgs := make([]reflect.Value, inNum) + inArgs[0] = method.sv + inArgs[1] = reflect.ValueOf(suaveContext) + + if inNum != 2 { + // decode the input parameters + inputs, err := method.method.Inputs.Unpack(input) + if err != nil { + return nil, err + } + + for i := 0; i < inNum-2; i++ { + if typ := method.reqT[i+2]; typ.Kind() == reflect.Struct { + val := reflect.New(typ) + if err = mapstructure.Decode(inputs[i], val.Interface()); err != nil { + return nil, err + } + inArgs[i+2] = val.Elem() + } else { + inArgs[i+2] = reflect.ValueOf(inputs[i]) + } + } + } + + // make the execution call + output := method.fv.Call(inArgs) + if err := getError(output[len(output)-1]); err != nil { + return nil, err + } + + // encode the output as ABI + paramOutput := make([]interface{}, len(output)-1) + for i := 0; i < len(output)-1; i++ { + paramOutput[i] = output[i].Interface() + } + + outputBytes, err := method.method.Outputs.Pack(paramOutput...) + if err != nil { + return nil, err + } + return outputBytes, nil +} + +type PrecompileWithName interface { + Name() string +} + +func (d *DispatchTable) Register(fn SuavePrecompiledContract) error { + // reflect and generate the type of the 'Do' function + typ := reflect.TypeOf(fn) + + var funcName string + if fn, ok := fn.(PrecompileWithName); ok { + funcName = fn.Name() + } else { + funcName = typ.Elem().Name() + } + + if metrics.EnabledExpensive { + metrics.GetOrRegisterMeter("suave/runtime/"+funcName, nil).Mark(1) + + now := time.Now() + defer func() { + metrics.GetOrRegisterTimer("suave/runtime/"+funcName+"/duration", nil).Update(time.Since(now)) + }() + } + + methodName := "Do" + methodTyp, found := typ.MethodByName(methodName) + if !found { + return fmt.Errorf("Method %s not found on the interface ('%s')", methodName, funcName) + } + + // It needs at least one input parameter, the suave context. + numIns := methodTyp.Type.NumIn() + if numIns == 1 { // 1 parameter is the receiver + return fmt.Errorf("Method %s must have at least one input parameter ('%s')", methodName, funcName) + } + if methodTyp.Type.In(1) != reflect.TypeOf(&SuaveContext{}) { + return fmt.Errorf("First input parameter of method %s must be a *SuaveContext ('%s')", methodName, funcName) + } + + // It needs at least one output parameter (the internal error) and must + // be the last parameter + numOuts := methodTyp.Type.NumOut() + if numOuts == 0 { + return fmt.Errorf("Method %s must have at least one output parameter ('%s')", methodName, funcName) + } + if !isErrorType(methodTyp.Type.Out(numOuts - 1)) { + return fmt.Errorf("Last output parameter of method %s must be an error ('%s')", methodName, funcName) + } + + // Get the input arguments of the function. The first parameter + // is the pointer receiver for the struct + inTypes := []reflect.Type{} + for i := 0; i < numIns; i++ { + inTypes = append(inTypes, methodTyp.Func.Type().In(i)) + } + + // Get the out arguments expect for the last error type + outTypes := []reflect.Type{} + for i := 0; i < numOuts-1; i++ { + outTypes = append(outTypes, methodTyp.Func.Type().Out(i)) + } + + abiM := &abiField{ + Type: "function", + Name: funcName, + Inputs: convertStructToABITypes(reflectStructFromTypes(inTypes[2:])), + Outputs: convertStructToABITypes(reflectStructFromTypes(outTypes)), + } + + raw, err := json.Marshal([]*abiField{abiM}) + if err != nil { + return err + } + + var abi abi.ABI + if err := json.Unmarshal(raw, &abi); err != nil { + return err + } + method, ok := abi.Methods[funcName] + if !ok { + return fmt.Errorf("Method %s not found on the abi", funcName) + } + + log.Debug("runtime registered", "name", funcName, "sig", method.Sig, "id", hex.EncodeToString(method.ID)) + + d.methods[fn.Address()] = &runtimeMethod{ + name: funcName, + method: &method, + reqT: inTypes, + addr: fn.Address(), + sv: reflect.ValueOf(fn), + fv: methodTyp.Func, + } + d.addrs = append(d.addrs, fn.Address()) + return nil +} + +func (d *DispatchTable) MustRegister(fn SuavePrecompiledContract) { + if err := d.Register(fn); err != nil { + panic(err) + } +} + +var errt = reflect.TypeOf((*error)(nil)).Elem() + +func isErrorType(t reflect.Type) bool { + return t.Implements(errt) +} + +func isBytesTyp(t reflect.Type) bool { + return (t.Kind() == reflect.Slice || t.Kind() == reflect.Array) && t.Elem().Kind() == reflect.Uint8 +} + +type abiField struct { + Type string `json:"type"` + Name string `json:"name"` + Inputs []arguments `json:"inputs,omitempty"` + Outputs []arguments `json:"outputs,omitempty"` +} + +type arguments struct { + Name string `json:"name"` + Type string `json:"type"` + InternalType string `json:"internalType,omitempty"` + Components []arguments `json:"components,omitempty"` + Indexed bool `json:"indexed,omitempty"` +} + +func convertStructToABITypes(typ reflect.Type) []arguments { + if typ.Kind() != reflect.Struct { + panic("not a struct") + } + + numFields := typ.NumField() + fields := make([]arguments, numFields) + + for i := 0; i < numFields; i++ { + field := typ.Field(i) + + fields[i] = arguments{ + Name: field.Name, + } + + var typeSuffix string + subType := field.Type + + INFER: + for { + if isBytesTyp(subType) { + // type []byte or [n]byte, it is decoded + // as a simple type + break INFER + } + + switch subType.Kind() { + case reflect.Slice: + typeSuffix += "[]" + case reflect.Array: + typeSuffix += fmt.Sprintf("[%d]", subType.Len()) + case reflect.Ptr: + default: + break INFER + } + + subType = subType.Elem() + } + + if subType.Kind() == reflect.Struct { + fields[i].Components = convertStructToABITypes(subType) + fields[i].Type = "tuple" + typeSuffix + } else { + // parse basic type + var basicType string + switch subType.Kind() { + case reflect.Bool: + basicType = "bool" + case reflect.Slice: // []byte + basicType = "bytes" + case reflect.Array: // [n]byte + if subType.Len() == 20 { + // TODO: we could improve this by checking if the type + // is common.Address{} + basicType = "address" + } else { + basicType = fmt.Sprintf("bytes%d", subType.Len()) + } + case reflect.String: + basicType = "string" + case reflect.Uint64: + basicType = "uint64" + default: + panic(fmt.Errorf("unknown type: %s", subType.Kind())) + } + fields[i].Type = basicType + typeSuffix + } + + nameTyp := subType.Name() + if nameTyp != "" && subType.Name() != subType.Kind().String() { + // skip basic types for Address and Hash since those are native + if nameTyp != "Address" && nameTyp != "Hash" { + fields[i].InternalType = nameTyp + } + } + } + + return fields +} + +func reflectStructFromTypes(argTypes []reflect.Type) reflect.Type { + structFields := make([]reflect.StructField, len(argTypes)) + for i, argType := range argTypes { + structFields[i] = reflect.StructField{ + Name: fmt.Sprintf("Param%d", i+1), + Type: argType, + } + } + + return reflect.StructOf(structFields) +} + +func getError(v reflect.Value) error { + if v.IsNil() { + return nil + } + + extractedErr, ok := v.Interface().(error) + if !ok { + return errors.New("invalid type assertion, unable to extract error") + } + + return extractedErr +} diff --git a/core/vm/dispatch_test.go b/core/vm/dispatch_test.go new file mode 100644 index 0000000000..9d56a70bbc --- /dev/null +++ b/core/vm/dispatch_test.go @@ -0,0 +1,35 @@ +package vm + +import ( + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/stretchr/testify/require" +) + +func TestDispatch_Example(t *testing.T) { + d := NewDispatchTable() + d.MustRegister(&testPrecompile{}) + + out, err := d.packAndRun(nil, "testPrecompile", uint64(1)) + require.NoError(t, err) + require.Equal(t, uint64(11), out[0]) +} + +type testPrecompile struct{} + +func (t *testPrecompile) Do(ctx *SuaveContext, input uint64) (uint64, error) { + return input + 10, nil +} + +func (t *testPrecompile) RequiredGas(input []byte) uint64 { + return 0 +} + +func (t *testPrecompile) Name() string { + return "testPrecompile" +} + +func (t *testPrecompile) Address() common.Address { + return common.Address{} +} diff --git a/core/vm/evm.go b/core/vm/evm.go index beacaaa074..b1482c8cf9 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -40,15 +40,35 @@ type ( GetHashFunc func(uint64) common.Hash ) +var dd *DispatchTable + +func init() { + dd = NewDispatchTable() + dd.MustRegister(&isConfidentialPrecompile{}) + dd.MustRegister(&confStoreStore{}) + dd.MustRegister(&confStoreRetrieve{}) + dd.MustRegister(ðCallPrecompile{}) + dd.MustRegister(&newBid{}) + dd.MustRegister(&fetchBids{}) + dd.MustRegister(&submitEthBlockBidToRelay{}) + dd.MustRegister(&buildEthBlock{}) + dd.MustRegister(&extractHint{}) + dd.MustRegister(&simulateBundle{}) + dd.MustRegister(&confidentialInputsPrecompile{}) + dd.MustRegister(&submitBundleJsonRPC{}) + dd.MustRegister(&signEthTransaction{}) + dd.MustRegister(&fillMevShareBundle{}) +} + +func GetRuntime() *DispatchTable { + return dd +} + func (evm *EVM) precompile(addr common.Address) (PrecompiledContract, bool) { // First check confidential precompiles, only then continue to the regular ones if evm.chainRules.IsSuave { - if p, ok := PrecompiledContractsSuave[addr]; ok { - if evm.Config.IsConfidential { - suaveContext := NewRuntimeSuaveContext(evm, addr) - return NewSuavePrecompiledContractWrapper(addr, suaveContext, p), true - } - return p, ok + if dd.IsPrecompile(addr) && evm.Config.IsConfidential { + return dd.Wrap(evm.SuaveContext, addr), true } } var precompiles map[common.Address]PrecompiledContract diff --git a/core/vm/suave.go b/core/vm/suave.go index 34c726e3cb..1a0610e805 100644 --- a/core/vm/suave.go +++ b/core/vm/suave.go @@ -3,14 +3,11 @@ package vm import ( "crypto/ecdsa" "fmt" - "time" "golang.org/x/exp/slices" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/suave/artifacts" suave "github.com/ethereum/go-ethereum/suave/core" "github.com/flashbots/go-boost-utils/bls" ) @@ -53,99 +50,6 @@ func NewRuntimeSuaveContext(evm *EVM, caller common.Address) *SuaveContext { } } -// Implements PrecompiledContract for confidential smart contracts -type SuavePrecompiledContractWrapper struct { - addr common.Address - suaveContext *SuaveContext - contract SuavePrecompiledContract -} - -func NewSuavePrecompiledContractWrapper(addr common.Address, suaveContext *SuaveContext, contract SuavePrecompiledContract) *SuavePrecompiledContractWrapper { - return &SuavePrecompiledContractWrapper{addr: addr, suaveContext: suaveContext, contract: contract} -} - -func (p *SuavePrecompiledContractWrapper) RequiredGas(input []byte) uint64 { - return p.contract.RequiredGas(input) -} - -var ( - ethcallAddr = common.HexToAddress("0x0000000000000000000000000000000042100003") -) - -func (p *SuavePrecompiledContractWrapper) Run(input []byte) ([]byte, error) { - stub := &SuaveRuntimeAdapter{ - impl: &suaveRuntime{ - suaveContext: p.suaveContext, - }, - } - - if metrics.EnabledExpensive { - precompileName := artifacts.PrecompileAddressToName(p.addr) - metrics.GetOrRegisterMeter("suave/runtime/"+precompileName, nil).Mark(1) - - now := time.Now() - defer func() { - metrics.GetOrRegisterTimer("suave/runtime/"+precompileName+"/duration", nil).Update(time.Since(now)) - }() - } - - var ret []byte - var err error - - switch p.addr { - case isConfidentialAddress: - ret, err = (&isConfidentialPrecompile{}).RunConfidential(p.suaveContext, input) - - case confidentialInputsAddress: - ret, err = (&confidentialInputsPrecompile{}).RunConfidential(p.suaveContext, input) - - case confStoreStoreAddress: - ret, err = stub.confidentialStoreStore(input) - - case confStoreRetrieveAddress: - ret, err = stub.confidentialStoreRetrieve(input) - - case newBidAddress: - ret, err = stub.newBid(input) - - case fetchBidsAddress: - ret, err = stub.fetchBids(input) - - case extractHintAddress: - ret, err = stub.extractHint(input) - - case signEthTransactionAddress: - ret, err = stub.signEthTransaction(input) - - case simulateBundleAddress: - ret, err = stub.simulateBundle(input) - - case buildEthBlockAddress: - ret, err = stub.buildEthBlock(input) - - case fillMevShareBundleAddress: - ret, err = stub.fillMevShareBundle(input) - - case submitBundleJsonRPCAddress: - ret, err = stub.submitBundleJsonRPC(input) - - case submitEthBlockBidToRelayAddress: - ret, err = stub.submitEthBlockBidToRelay(input) - - case ethcallAddr: - ret, err = stub.ethcall(input) - - default: - err = fmt.Errorf("precompile %s not found", p.addr) - } - - if err != nil && ret == nil { - ret = []byte(err.Error()) - } - - return ret, err -} - // Returns the caller func checkIsPrecompileCallAllowed(suaveContext *SuaveContext, precompile common.Address, bid suave.Bid) (common.Address, error) { anyPeekerAllowed := slices.Contains(bid.AllowedPeekers, suave.AllowedPeekerAny) @@ -167,7 +71,7 @@ func checkIsPrecompileCallAllowed(suaveContext *SuaveContext, precompile common. // Special case for confStore as those are implicitly allowed if !isPrecompileAllowed && precompile != confStoreStoreAddress && precompile != confStoreRetrieveAddress { - return common.Address{}, fmt.Errorf("precompile %s (%x) not allowed on %x", artifacts.PrecompileAddressToName(precompile), precompile, bid.Id) + return common.Address{}, fmt.Errorf("precompile %s (%x) not allowed on %x", precompile, precompile, bid.Id) } for i := len(suaveContext.CallerStack) - 1; i >= 0; i-- { @@ -180,5 +84,5 @@ func checkIsPrecompileCallAllowed(suaveContext *SuaveContext, precompile common. } } - return common.Address{}, fmt.Errorf("no caller of %s (%x) is allowed on %x", artifacts.PrecompileAddressToName(precompile), precompile, bid.Id) + return common.Address{}, fmt.Errorf("no caller of %s (%x) is allowed on %x", precompile, precompile, bid.Id) } diff --git a/suave/artifacts/Suave.sol/Suave.json b/suave/artifacts/Suave.sol/Suave.json index 1bb8dd8f07..c2a029d75a 100644 --- a/suave/artifacts/Suave.sol/Suave.json +++ b/suave/artifacts/Suave.sol/Suave.json @@ -120,6 +120,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "IS_CONFIDENTIAL", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "IS_CONFIDENTIAL_ADDR", @@ -197,12 +210,468 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "slot", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "proposerPubkey", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "parent", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "address", + "name": "feeRecipient", + "type": "address" + }, + { + "internalType": "uint64", + "name": "gasLimit", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "random", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "validator", + "type": "uint64" + }, + { + "internalType": "address", + "name": "Address", + "type": "address" + }, + { + "internalType": "uint64", + "name": "amount", + "type": "uint64" + } + ], + "internalType": "struct Suave.Withdrawal[]", + "name": "withdrawals", + "type": "tuple[]" + } + ], + "internalType": "struct Suave.BuildBlockArgs", + "name": "param1", + "type": "tuple" + }, + { + "internalType": "Suave.BidId", + "name": "param2", + "type": "bytes16" + }, + { + "internalType": "string", + "name": "param3", + "type": "string" + } + ], + "name": "buildEthBlock", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "confidentialInputs", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "Suave.BidId", + "name": "param1", + "type": "bytes16" + }, + { + "internalType": "string", + "name": "param2", + "type": "string" + } + ], + "name": "confidentialStoreRetrieve", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "Suave.BidId", + "name": "param1", + "type": "bytes16" + }, + { + "internalType": "string", + "name": "param2", + "type": "string" + }, + { + "internalType": "bytes", + "name": "param3", + "type": "bytes" + } + ], + "name": "confidentialStoreStore", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "param1", + "type": "address" + }, + { + "internalType": "bytes", + "name": "param2", + "type": "bytes" + } + ], + "name": "ethcall", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "param1", + "type": "bytes" + } + ], + "name": "extractHint", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "param1", + "type": "uint64" + }, + { + "internalType": "string", + "name": "param2", + "type": "string" + } + ], + "name": "fetchBids", + "outputs": [ + { + "components": [ + { + "internalType": "Suave.BidId", + "name": "id", + "type": "bytes16" + }, + { + "internalType": "Suave.BidId", + "name": "salt", + "type": "bytes16" + }, + { + "internalType": "uint64", + "name": "decryptionCondition", + "type": "uint64" + }, + { + "internalType": "address[]", + "name": "allowedPeekers", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "allowedStores", + "type": "address[]" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + } + ], + "internalType": "struct Suave.Bid[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "Suave.BidId", + "name": "param1", + "type": "bytes16" + } + ], + "name": "fillMevShareBundle", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isConfidential", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "param1", + "type": "uint64" + }, + { + "internalType": "address[]", + "name": "param2", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "param3", + "type": "address[]" + }, + { + "internalType": "string", + "name": "param4", + "type": "string" + } + ], + "name": "newBid", + "outputs": [ + { + "components": [ + { + "internalType": "Suave.BidId", + "name": "id", + "type": "bytes16" + }, + { + "internalType": "Suave.BidId", + "name": "salt", + "type": "bytes16" + }, + { + "internalType": "uint64", + "name": "decryptionCondition", + "type": "uint64" + }, + { + "internalType": "address[]", + "name": "allowedPeekers", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "allowedStores", + "type": "address[]" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + } + ], + "internalType": "struct Suave.Bid", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "param1", + "type": "bytes" + }, + { + "internalType": "string", + "name": "param2", + "type": "string" + }, + { + "internalType": "string", + "name": "param3", + "type": "string" + } + ], + "name": "signEthTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "param1", + "type": "bytes" + } + ], + "name": "simulateBundle", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "param1", + "type": "string" + }, + { + "internalType": "string", + "name": "param2", + "type": "string" + }, + { + "internalType": "bytes", + "name": "param3", + "type": "bytes" + } + ], + "name": "submitBundleJsonRPC", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "param1", + "type": "string" + }, + { + "internalType": "bytes", + "name": "param2", + "type": "bytes" + } + ], + "name": "submitEthBlockBidToRelay", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" } ], "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600436106100f45760003560e01c8063b61b127d11610096578063c91e11df11610070578063c91e11df14610183578063d91525db1461018e578063f0608b1c14610199578063f6ab3de5146101a457600080fd5b8063b61b127d14610162578063b7817da01461016d578063bc50c0051461017857600080fd5b80637320cb17116100d25780637320cb1714610136578063744795b914610141578063751afe2c1461014c57806394804c691461015757600080fd5b806301c19530146100f9578063040e51831461012057806369094cbc1461012b575b600080fd5b610104634320000181565b6040516001600160a01b03909116815260200160405180910390f35b610104634210000381565b610104634201000181565b610104634203000081565b610104634010000181565b610104634210003781565b610104634210000181565b610104634210000081565b610104634202000081565b610104634210000281565b610104634203000181565b610104634201000081565b610104634300000181565b61010463420200018156fea164736f6c6343000813000a" + "object": "0x73000000000000000000000000000000000000000030146080604052600436106101d95760003560e01c80637c108a441161010e578063b61b127d116100ac578063d91525db1161007b578063d91525db1461030f578063f0608b1c146103bf578063f6ab3de5146103ca578063fb4f1e0d146103d557600080fd5b8063b61b127d14610393578063b7817da01461039e578063bc50c005146103a9578063c91e11df146103b457600080fd5b806394804c69116100e857806394804c6914610340578063a90a6c5f1461034b578063ae9a604014610360578063b2c1714c1461037357600080fd5b80637c108a441461030f5780638735d6171461031a57806392649e7d1461032d57600080fd5b80633b7fb4131161017b578063727bb5c711610155578063727bb5c7146102cd5780637320cb17146102ee578063744795b9146102f9578063751afe2c1461030457600080fd5b80633b7fb4131461028f5780634f563141146102a257806369094cbc146102c257600080fd5b80630e38f337116101b75780630e38f3371461023c57806320f16c3e1461025457806336cb97fd1461027457806337a5686a1461027c57600080fd5b806301c19530146101de578063023e8e2f14610206578063040e518314610231575b600080fd5b6101e9634320000181565b6040516001600160a01b0390911681526020015b60405180910390f35b610219610214366004610f84565b6103e8565b6040516001600160401b0390911681526020016101fd565b6101e9634210000381565b6102446104b6565b60405190151581526020016101fd565b610267610262366004610f84565b610561565b6040516101fd9190611008565b61026761061e565b61026761028a366004611022565b6106c4565b61026761029d3660046110ad565b61078c565b6102b56102b03660046111a4565b610837565b6040516101fd91906112ff565b6101e9634201000181565b6102e06102db3660046113ea565b610934565b6040516101fd929190611508565b6101e9634203000081565b6101e9634010000181565b6101e9634210003781565b6101e9634201000081565b61026761032836600461152d565b610a04565b61026761033b36600461154a565b610aac565b6101e9634210000181565b61035e6103593660046115a4565b610b77565b005b61026761036e3660046115e0565b610c3d565b6103866103813660046115fe565b610ce8565b6040516101fd919061161c565b6101e9634210000081565b6101e9634202000081565b6101e9634210000281565b6101e9634203000181565b6101e9634300000181565b6101e9634202000181565b6102676103e336600461154a565b610da7565b600080600063421000006001600160a01b03168460405160200161040c9190611008565b60408051601f19818403018152908290526104269161167e565b600060405180830381855afa9150503d8060008114610461576040519150601f19603f3d011682016040523d82523d6000602084013e610466565b606091505b50915091508161049a576342100000816040516375fff46760e01b815260040161049192919061169a565b60405180910390fd5b808060200190518101906104ae91906116c9565b949350505050565b604080516000808252602082019283905291829182916342010000916104db9161167e565b600060405180830381855afa9150503d8060008114610516576040519150601f19603f3d011682016040523d82523d6000602084013e61051b565b606091505b509150915081610546576342010000816040516375fff46760e01b815260040161049192919061169a565b8080602001905181019061055a91906116e6565b9250505090565b606060008063421000376001600160a01b0316846040516020016105859190611008565b60408051601f198184030181529082905261059f9161167e565b600060405180830381855afa9150503d80600081146105da576040519150601f19603f3d011682016040523d82523d6000602084013e6105df565b606091505b50915091508161060a576342100037816040516375fff46760e01b815260040161049192919061169a565b808060200190518101906104ae919061174d565b6040805160008082526020820192839052606092909182916342010001916106459161167e565b600060405180830381855afa9150503d8060008114610680576040519150601f19603f3d011682016040523d82523d6000602084013e610685565b606091505b5091509150816106b0576342010001816040516375fff46760e01b815260040161049192919061169a565b8080602001905181019061055a919061174d565b606060008063421000026001600160a01b031685856040516020016106ea929190611508565b60408051601f19818403018152908290526107049161167e565b600060405180830381855afa9150503d806000811461073f576040519150601f19603f3d011682016040523d82523d6000602084013e610744565b606091505b50915091508161076f576342100002816040516375fff46760e01b815260040161049192919061169a565b80806020019051810190610783919061174d565b95945050505050565b606060008063421000036001600160a01b031685856040516020016107b292919061169a565b60408051601f19818403018152908290526107cc9161167e565b600060405180830381855afa9150503d8060008114610807576040519150601f19603f3d011682016040523d82523d6000602084013e61080c565b606091505b50915091508161076f576342100003816040516375fff46760e01b815260040161049192919061169a565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b0316878787876040516020016108909493929190611781565b60408051601f19818403018152908290526108aa9161167e565b600060405180830381855afa9150503d80600081146108e5576040519150601f19603f3d011682016040523d82523d6000602084013e6108ea565b606091505b509150915081610915576342030000816040516375fff46760e01b815260040161049192919061169a565b8080602001905181019061092991906118fe565b979650505050505050565b60608060008063421000016001600160a01b031687878760405160200161095d93929190611999565b60408051601f19818403018152908290526109779161167e565b600060405180830381855afa9150503d80600081146109b2576040519150601f19603f3d011682016040523d82523d6000602084013e6109b7565b606091505b5091509150816109e2576342100001816040516375fff46760e01b815260040161049192919061169a565b808060200190518101906109f69190611a6e565b935093505050935093915050565b604080516001600160801b03198316602082015260609160009182916343200001910160408051601f1981840301815290829052610a419161167e565b600060405180830381855afa9150503d8060008114610a7c576040519150601f19603f3d011682016040523d82523d6000602084013e610a81565b606091505b50915091508161060a576343200001816040516375fff46760e01b815260040161049192919061169a565b606060008063430000016001600160a01b0316868686604051602001610ad493929190611ac7565b60408051601f1981840301815290829052610aee9161167e565b600060405180830381855afa9150503d8060008114610b29576040519150601f19603f3d011682016040523d82523d6000602084013e610b2e565b606091505b509150915081610b59576343000001816040516375fff46760e01b815260040161049192919061169a565b80806020019051810190610b6d919061174d565b9695505050505050565b60008063420200006001600160a01b0316858585604051602001610b9d93929190611b00565b60408051601f1981840301815290829052610bb79161167e565b600060405180830381855afa9150503d8060008114610bf2576040519150601f19603f3d011682016040523d82523d6000602084013e610bf7565b606091505b509150915081610c22576342020000816040516375fff46760e01b815260040161049192919061169a565b80806020019051810190610c369190611b23565b5050505050565b606060008063420200016001600160a01b03168585604051602001610c63929190611b37565b60408051601f1981840301815290829052610c7d9161167e565b600060405180830381855afa9150503d8060008114610cb8576040519150601f19603f3d011682016040523d82523d6000602084013e610cbd565b606091505b50915091508161076f576342020001816040516375fff46760e01b815260040161049192919061169a565b606060008063420300016001600160a01b03168585604051602001610d0e929190611b5a565b60408051601f1981840301815290829052610d289161167e565b600060405180830381855afa9150503d8060008114610d63576040519150601f19603f3d011682016040523d82523d6000602084013e610d68565b606091505b509150915081610d93576342030001816040516375fff46760e01b815260040161049192919061169a565b808060200190518101906107839190611b7c565b606060008063401000016001600160a01b0316868686604051602001610dcf93929190611ac7565b60408051601f1981840301815290829052610de99161167e565b600060405180830381855afa9150503d8060008114610e24576040519150601f19603f3d011682016040523d82523d6000602084013e610e29565b606091505b509150915081610b59576340100001816040516375fff46760e01b815260040161049192919061169a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715610e8c57610e8c610e54565b60405290565b60405161010081016001600160401b0381118282101715610e8c57610e8c610e54565b60405160c081016001600160401b0381118282101715610e8c57610e8c610e54565b604051601f8201601f191681016001600160401b0381118282101715610eff57610eff610e54565b604052919050565b60006001600160401b03821115610f2057610f20610e54565b50601f01601f191660200190565b600082601f830112610f3f57600080fd5b8135610f52610f4d82610f07565b610ed7565b818152846020838601011115610f6757600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215610f9657600080fd5b81356001600160401b03811115610fac57600080fd5b6104ae84828501610f2e565b60005b83811015610fd3578181015183820152602001610fbb565b50506000910152565b60008151808452610ff4816020860160208601610fb8565b601f01601f19169290920160200192915050565b60208152600061101b6020830184610fdc565b9392505050565b6000806040838503121561103557600080fd5b82356001600160401b038082111561104c57600080fd5b61105886838701610f2e565b9350602085013591508082111561106e57600080fd5b5061107b85828601610f2e565b9150509250929050565b6001600160a01b038116811461109a57600080fd5b50565b80356110a881611085565b919050565b600080604083850312156110c057600080fd5b82356110cb81611085565b915060208301356001600160401b038111156110e657600080fd5b61107b85828601610f2e565b6001600160401b038116811461109a57600080fd5b80356110a8816110f2565b60006001600160401b0382111561112b5761112b610e54565b5060051b60200190565b600082601f83011261114657600080fd5b81356020611156610f4d83611112565b82815260059290921b8401810191818101908684111561117557600080fd5b8286015b8481101561119957803561118c81611085565b8352918301918301611179565b509695505050505050565b600080600080608085870312156111ba57600080fd5b84356111c5816110f2565b935060208501356001600160401b03808211156111e157600080fd5b6111ed88838901611135565b9450604087013591508082111561120357600080fd5b61120f88838901611135565b9350606087013591508082111561122557600080fd5b5061123287828801610f2e565b91505092959194509250565b600081518084526020808501945080840160005b838110156112775781516001600160a01b031687529582019590820190600101611252565b509495945050505050565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c060608501526112cc60c085018261123e565b9050608083015184820360808601526112e5828261123e565b91505060a083015184820360a08601526107838282610fdc565b60208152600061101b6020830184611282565b600082601f83011261132357600080fd5b81356020611333610f4d83611112565b82815260079290921b8401810191818101908684111561135257600080fd5b8286015b84811015611199576080818903121561136f5760008081fd5b611377610e6a565b8135611382816110f2565b815281850135611391816110f2565b818601526040828101356113a481611085565b908201526060828101356113b7816110f2565b90820152835291830191608001611356565b6001600160801b03198116811461109a57600080fd5b80356110a8816113c9565b6000806000606084860312156113ff57600080fd5b83356001600160401b038082111561141657600080fd5b90850190610100828803121561142b57600080fd5b611433610e92565b61143c83611107565b815260208301358281111561145057600080fd5b61145c89828601610f2e565b6020830152506040830135604082015261147860608401611107565b60608201526114896080840161109d565b608082015261149a60a08401611107565b60a082015260c083013560c082015260e0830135828111156114bb57600080fd5b6114c789828601611312565b60e08301525094506114db602087016113df565b935060408601359150808211156114f157600080fd5b506114fe86828701610f2e565b9150509250925092565b60408152600061151b6040830185610fdc565b82810360208401526107838185610fdc565b60006020828403121561153f57600080fd5b813561101b816113c9565b60008060006060848603121561155f57600080fd5b83356001600160401b038082111561157657600080fd5b61158287838801610f2e565b9450602086013591508082111561159857600080fd5b6114db87838801610f2e565b6000806000606084860312156115b957600080fd5b83356115c4816113c9565b925060208401356001600160401b038082111561159857600080fd5b600080604083850312156115f357600080fd5b82356110cb816113c9565b6000806040838503121561161157600080fd5b82356110cb816110f2565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561167157603f1988860301845261165f858351611282565b94509285019290850190600101611643565b5092979650505050505050565b60008251611690818460208701610fb8565b9190910192915050565b6001600160a01b03831681526040602082018190526000906104ae90830184610fdc565b80516110a8816110f2565b6000602082840312156116db57600080fd5b815161101b816110f2565b6000602082840312156116f857600080fd5b8151801515811461101b57600080fd5b600082601f83011261171957600080fd5b8151611727610f4d82610f07565b81815284602083860101111561173c57600080fd5b6104ae826020830160208701610fb8565b60006020828403121561175f57600080fd5b81516001600160401b0381111561177557600080fd5b6104ae84828501611708565b6001600160401b03851681526080602082015260006117a3608083018661123e565b82810360408401526117b5818661123e565b905082810360608401526109298185610fdc565b80516110a8816113c9565b600082601f8301126117e557600080fd5b815160206117f5610f4d83611112565b82815260059290921b8401810191818101908684111561181457600080fd5b8286015b8481101561119957805161182b81611085565b8352918301918301611818565b600060c0828403121561184a57600080fd5b611852610eb5565b905061185d826117c9565b815261186b602083016117c9565b602082015261187c604083016116be565b604082015260608201516001600160401b038082111561189b57600080fd5b6118a7858386016117d4565b606084015260808401519150808211156118c057600080fd5b6118cc858386016117d4565b608084015260a08401519150808211156118e557600080fd5b506118f284828501611708565b60a08301525092915050565b60006020828403121561191057600080fd5b81516001600160401b0381111561192657600080fd5b6104ae84828501611838565b600081518084526020808501945080840160005b8381101561127757815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611946565b606081526001600160401b038451166060820152600060208501516101008060808501526119cb610160850183610fdc565b9150604087015160a085015260608701516119f160c08601826001600160401b03169052565b5060808701516001600160a01b03811660e08601525060a08701516001600160401b03811685830152505060c086015161012084015260e0860151838203605f1901610140850152611a438282611932565b915050611a5c60208401866001600160801b0319169052565b8281036040840152610b6d8185610fdc565b60008060408385031215611a8157600080fd5b82516001600160401b0380821115611a9857600080fd5b611aa486838701611708565b93506020850151915080821115611aba57600080fd5b5061107b85828601611708565b606081526000611ada6060830186610fdc565b8281036020840152611aec8186610fdc565b90508281036040840152610b6d8185610fdc565b6001600160801b031984168152606060208201526000611a5c6060830185610fdc565b60008183031215611b3357600080fd5b5050565b6001600160801b0319831681526040602082015260006104ae6040830184610fdc565b6001600160401b03831681526040602082015260006104ae6040830184610fdc565b60006020808385031215611b8f57600080fd5b82516001600160401b0380821115611ba657600080fd5b818501915085601f830112611bba57600080fd5b8151611bc8610f4d82611112565b81815260059190911b83018401908481019088831115611be757600080fd5b8585015b83811015611c1f57805185811115611c035760008081fd5b611c118b89838a0101611838565b845250918601918601611beb565b509897505050505050505056fea164736f6c6343000813000a" }, "bytecode": { - "object": "0x6101bc61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f45760003560e01c8063b61b127d11610096578063c91e11df11610070578063c91e11df14610183578063d91525db1461018e578063f0608b1c14610199578063f6ab3de5146101a457600080fd5b8063b61b127d14610162578063b7817da01461016d578063bc50c0051461017857600080fd5b80637320cb17116100d25780637320cb1714610136578063744795b914610141578063751afe2c1461014c57806394804c691461015757600080fd5b806301c19530146100f9578063040e51831461012057806369094cbc1461012b575b600080fd5b610104634320000181565b6040516001600160a01b03909116815260200160405180910390f35b610104634210000381565b610104634201000181565b610104634203000081565b610104634010000181565b610104634210003781565b610104634210000181565b610104634210000081565b610104634202000081565b610104634210000281565b610104634203000181565b610104634201000081565b610104634300000181565b61010463420200018156fea164736f6c6343000813000a" + "object": "0x611c3961003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101d95760003560e01c80637c108a441161010e578063b61b127d116100ac578063d91525db1161007b578063d91525db1461030f578063f0608b1c146103bf578063f6ab3de5146103ca578063fb4f1e0d146103d557600080fd5b8063b61b127d14610393578063b7817da01461039e578063bc50c005146103a9578063c91e11df146103b457600080fd5b806394804c69116100e857806394804c6914610340578063a90a6c5f1461034b578063ae9a604014610360578063b2c1714c1461037357600080fd5b80637c108a441461030f5780638735d6171461031a57806392649e7d1461032d57600080fd5b80633b7fb4131161017b578063727bb5c711610155578063727bb5c7146102cd5780637320cb17146102ee578063744795b9146102f9578063751afe2c1461030457600080fd5b80633b7fb4131461028f5780634f563141146102a257806369094cbc146102c257600080fd5b80630e38f337116101b75780630e38f3371461023c57806320f16c3e1461025457806336cb97fd1461027457806337a5686a1461027c57600080fd5b806301c19530146101de578063023e8e2f14610206578063040e518314610231575b600080fd5b6101e9634320000181565b6040516001600160a01b0390911681526020015b60405180910390f35b610219610214366004610f84565b6103e8565b6040516001600160401b0390911681526020016101fd565b6101e9634210000381565b6102446104b6565b60405190151581526020016101fd565b610267610262366004610f84565b610561565b6040516101fd9190611008565b61026761061e565b61026761028a366004611022565b6106c4565b61026761029d3660046110ad565b61078c565b6102b56102b03660046111a4565b610837565b6040516101fd91906112ff565b6101e9634201000181565b6102e06102db3660046113ea565b610934565b6040516101fd929190611508565b6101e9634203000081565b6101e9634010000181565b6101e9634210003781565b6101e9634201000081565b61026761032836600461152d565b610a04565b61026761033b36600461154a565b610aac565b6101e9634210000181565b61035e6103593660046115a4565b610b77565b005b61026761036e3660046115e0565b610c3d565b6103866103813660046115fe565b610ce8565b6040516101fd919061161c565b6101e9634210000081565b6101e9634202000081565b6101e9634210000281565b6101e9634203000181565b6101e9634300000181565b6101e9634202000181565b6102676103e336600461154a565b610da7565b600080600063421000006001600160a01b03168460405160200161040c9190611008565b60408051601f19818403018152908290526104269161167e565b600060405180830381855afa9150503d8060008114610461576040519150601f19603f3d011682016040523d82523d6000602084013e610466565b606091505b50915091508161049a576342100000816040516375fff46760e01b815260040161049192919061169a565b60405180910390fd5b808060200190518101906104ae91906116c9565b949350505050565b604080516000808252602082019283905291829182916342010000916104db9161167e565b600060405180830381855afa9150503d8060008114610516576040519150601f19603f3d011682016040523d82523d6000602084013e61051b565b606091505b509150915081610546576342010000816040516375fff46760e01b815260040161049192919061169a565b8080602001905181019061055a91906116e6565b9250505090565b606060008063421000376001600160a01b0316846040516020016105859190611008565b60408051601f198184030181529082905261059f9161167e565b600060405180830381855afa9150503d80600081146105da576040519150601f19603f3d011682016040523d82523d6000602084013e6105df565b606091505b50915091508161060a576342100037816040516375fff46760e01b815260040161049192919061169a565b808060200190518101906104ae919061174d565b6040805160008082526020820192839052606092909182916342010001916106459161167e565b600060405180830381855afa9150503d8060008114610680576040519150601f19603f3d011682016040523d82523d6000602084013e610685565b606091505b5091509150816106b0576342010001816040516375fff46760e01b815260040161049192919061169a565b8080602001905181019061055a919061174d565b606060008063421000026001600160a01b031685856040516020016106ea929190611508565b60408051601f19818403018152908290526107049161167e565b600060405180830381855afa9150503d806000811461073f576040519150601f19603f3d011682016040523d82523d6000602084013e610744565b606091505b50915091508161076f576342100002816040516375fff46760e01b815260040161049192919061169a565b80806020019051810190610783919061174d565b95945050505050565b606060008063421000036001600160a01b031685856040516020016107b292919061169a565b60408051601f19818403018152908290526107cc9161167e565b600060405180830381855afa9150503d8060008114610807576040519150601f19603f3d011682016040523d82523d6000602084013e61080c565b606091505b50915091508161076f576342100003816040516375fff46760e01b815260040161049192919061169a565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b0316878787876040516020016108909493929190611781565b60408051601f19818403018152908290526108aa9161167e565b600060405180830381855afa9150503d80600081146108e5576040519150601f19603f3d011682016040523d82523d6000602084013e6108ea565b606091505b509150915081610915576342030000816040516375fff46760e01b815260040161049192919061169a565b8080602001905181019061092991906118fe565b979650505050505050565b60608060008063421000016001600160a01b031687878760405160200161095d93929190611999565b60408051601f19818403018152908290526109779161167e565b600060405180830381855afa9150503d80600081146109b2576040519150601f19603f3d011682016040523d82523d6000602084013e6109b7565b606091505b5091509150816109e2576342100001816040516375fff46760e01b815260040161049192919061169a565b808060200190518101906109f69190611a6e565b935093505050935093915050565b604080516001600160801b03198316602082015260609160009182916343200001910160408051601f1981840301815290829052610a419161167e565b600060405180830381855afa9150503d8060008114610a7c576040519150601f19603f3d011682016040523d82523d6000602084013e610a81565b606091505b50915091508161060a576343200001816040516375fff46760e01b815260040161049192919061169a565b606060008063430000016001600160a01b0316868686604051602001610ad493929190611ac7565b60408051601f1981840301815290829052610aee9161167e565b600060405180830381855afa9150503d8060008114610b29576040519150601f19603f3d011682016040523d82523d6000602084013e610b2e565b606091505b509150915081610b59576343000001816040516375fff46760e01b815260040161049192919061169a565b80806020019051810190610b6d919061174d565b9695505050505050565b60008063420200006001600160a01b0316858585604051602001610b9d93929190611b00565b60408051601f1981840301815290829052610bb79161167e565b600060405180830381855afa9150503d8060008114610bf2576040519150601f19603f3d011682016040523d82523d6000602084013e610bf7565b606091505b509150915081610c22576342020000816040516375fff46760e01b815260040161049192919061169a565b80806020019051810190610c369190611b23565b5050505050565b606060008063420200016001600160a01b03168585604051602001610c63929190611b37565b60408051601f1981840301815290829052610c7d9161167e565b600060405180830381855afa9150503d8060008114610cb8576040519150601f19603f3d011682016040523d82523d6000602084013e610cbd565b606091505b50915091508161076f576342020001816040516375fff46760e01b815260040161049192919061169a565b606060008063420300016001600160a01b03168585604051602001610d0e929190611b5a565b60408051601f1981840301815290829052610d289161167e565b600060405180830381855afa9150503d8060008114610d63576040519150601f19603f3d011682016040523d82523d6000602084013e610d68565b606091505b509150915081610d93576342030001816040516375fff46760e01b815260040161049192919061169a565b808060200190518101906107839190611b7c565b606060008063401000016001600160a01b0316868686604051602001610dcf93929190611ac7565b60408051601f1981840301815290829052610de99161167e565b600060405180830381855afa9150503d8060008114610e24576040519150601f19603f3d011682016040523d82523d6000602084013e610e29565b606091505b509150915081610b59576340100001816040516375fff46760e01b815260040161049192919061169a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715610e8c57610e8c610e54565b60405290565b60405161010081016001600160401b0381118282101715610e8c57610e8c610e54565b60405160c081016001600160401b0381118282101715610e8c57610e8c610e54565b604051601f8201601f191681016001600160401b0381118282101715610eff57610eff610e54565b604052919050565b60006001600160401b03821115610f2057610f20610e54565b50601f01601f191660200190565b600082601f830112610f3f57600080fd5b8135610f52610f4d82610f07565b610ed7565b818152846020838601011115610f6757600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215610f9657600080fd5b81356001600160401b03811115610fac57600080fd5b6104ae84828501610f2e565b60005b83811015610fd3578181015183820152602001610fbb565b50506000910152565b60008151808452610ff4816020860160208601610fb8565b601f01601f19169290920160200192915050565b60208152600061101b6020830184610fdc565b9392505050565b6000806040838503121561103557600080fd5b82356001600160401b038082111561104c57600080fd5b61105886838701610f2e565b9350602085013591508082111561106e57600080fd5b5061107b85828601610f2e565b9150509250929050565b6001600160a01b038116811461109a57600080fd5b50565b80356110a881611085565b919050565b600080604083850312156110c057600080fd5b82356110cb81611085565b915060208301356001600160401b038111156110e657600080fd5b61107b85828601610f2e565b6001600160401b038116811461109a57600080fd5b80356110a8816110f2565b60006001600160401b0382111561112b5761112b610e54565b5060051b60200190565b600082601f83011261114657600080fd5b81356020611156610f4d83611112565b82815260059290921b8401810191818101908684111561117557600080fd5b8286015b8481101561119957803561118c81611085565b8352918301918301611179565b509695505050505050565b600080600080608085870312156111ba57600080fd5b84356111c5816110f2565b935060208501356001600160401b03808211156111e157600080fd5b6111ed88838901611135565b9450604087013591508082111561120357600080fd5b61120f88838901611135565b9350606087013591508082111561122557600080fd5b5061123287828801610f2e565b91505092959194509250565b600081518084526020808501945080840160005b838110156112775781516001600160a01b031687529582019590820190600101611252565b509495945050505050565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c060608501526112cc60c085018261123e565b9050608083015184820360808601526112e5828261123e565b91505060a083015184820360a08601526107838282610fdc565b60208152600061101b6020830184611282565b600082601f83011261132357600080fd5b81356020611333610f4d83611112565b82815260079290921b8401810191818101908684111561135257600080fd5b8286015b84811015611199576080818903121561136f5760008081fd5b611377610e6a565b8135611382816110f2565b815281850135611391816110f2565b818601526040828101356113a481611085565b908201526060828101356113b7816110f2565b90820152835291830191608001611356565b6001600160801b03198116811461109a57600080fd5b80356110a8816113c9565b6000806000606084860312156113ff57600080fd5b83356001600160401b038082111561141657600080fd5b90850190610100828803121561142b57600080fd5b611433610e92565b61143c83611107565b815260208301358281111561145057600080fd5b61145c89828601610f2e565b6020830152506040830135604082015261147860608401611107565b60608201526114896080840161109d565b608082015261149a60a08401611107565b60a082015260c083013560c082015260e0830135828111156114bb57600080fd5b6114c789828601611312565b60e08301525094506114db602087016113df565b935060408601359150808211156114f157600080fd5b506114fe86828701610f2e565b9150509250925092565b60408152600061151b6040830185610fdc565b82810360208401526107838185610fdc565b60006020828403121561153f57600080fd5b813561101b816113c9565b60008060006060848603121561155f57600080fd5b83356001600160401b038082111561157657600080fd5b61158287838801610f2e565b9450602086013591508082111561159857600080fd5b6114db87838801610f2e565b6000806000606084860312156115b957600080fd5b83356115c4816113c9565b925060208401356001600160401b038082111561159857600080fd5b600080604083850312156115f357600080fd5b82356110cb816113c9565b6000806040838503121561161157600080fd5b82356110cb816110f2565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561167157603f1988860301845261165f858351611282565b94509285019290850190600101611643565b5092979650505050505050565b60008251611690818460208701610fb8565b9190910192915050565b6001600160a01b03831681526040602082018190526000906104ae90830184610fdc565b80516110a8816110f2565b6000602082840312156116db57600080fd5b815161101b816110f2565b6000602082840312156116f857600080fd5b8151801515811461101b57600080fd5b600082601f83011261171957600080fd5b8151611727610f4d82610f07565b81815284602083860101111561173c57600080fd5b6104ae826020830160208701610fb8565b60006020828403121561175f57600080fd5b81516001600160401b0381111561177557600080fd5b6104ae84828501611708565b6001600160401b03851681526080602082015260006117a3608083018661123e565b82810360408401526117b5818661123e565b905082810360608401526109298185610fdc565b80516110a8816113c9565b600082601f8301126117e557600080fd5b815160206117f5610f4d83611112565b82815260059290921b8401810191818101908684111561181457600080fd5b8286015b8481101561119957805161182b81611085565b8352918301918301611818565b600060c0828403121561184a57600080fd5b611852610eb5565b905061185d826117c9565b815261186b602083016117c9565b602082015261187c604083016116be565b604082015260608201516001600160401b038082111561189b57600080fd5b6118a7858386016117d4565b606084015260808401519150808211156118c057600080fd5b6118cc858386016117d4565b608084015260a08401519150808211156118e557600080fd5b506118f284828501611708565b60a08301525092915050565b60006020828403121561191057600080fd5b81516001600160401b0381111561192657600080fd5b6104ae84828501611838565b600081518084526020808501945080840160005b8381101561127757815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611946565b606081526001600160401b038451166060820152600060208501516101008060808501526119cb610160850183610fdc565b9150604087015160a085015260608701516119f160c08601826001600160401b03169052565b5060808701516001600160a01b03811660e08601525060a08701516001600160401b03811685830152505060c086015161012084015260e0860151838203605f1901610140850152611a438282611932565b915050611a5c60208401866001600160801b0319169052565b8281036040840152610b6d8185610fdc565b60008060408385031215611a8157600080fd5b82516001600160401b0380821115611a9857600080fd5b611aa486838701611708565b93506020850151915080821115611aba57600080fd5b5061107b85828601611708565b606081526000611ada6060830186610fdc565b8281036020840152611aec8186610fdc565b90508281036040840152610b6d8185610fdc565b6001600160801b031984168152606060208201526000611a5c6060830185610fdc565b60008183031215611b3357600080fd5b5050565b6001600160801b0319831681526040602082015260006104ae6040830184610fdc565b6001600160401b03831681526040602082015260006104ae6040830184610fdc565b60006020808385031215611b8f57600080fd5b82516001600160401b0380821115611ba657600080fd5b818501915085601f830112611bba57600080fd5b8151611bc8610f4d82611112565b81815260059190911b83018401908481019088831115611be757600080fd5b8585015b83811015611c1f57805185811115611c035760008081fd5b611c118b89838a0101611838565b845250918601918601611beb565b509897505050505050505056fea164736f6c6343000813000a" } } diff --git a/suave/artifacts/SuaveLib.json b/suave/artifacts/SuaveLib.json index b2dd7839fd..8a49720752 100644 --- a/suave/artifacts/SuaveLib.json +++ b/suave/artifacts/SuaveLib.json @@ -1 +1 @@ -[{"type":"function","name":"buildEthBlock","inputs":[{"name":"blockArgs","type":"tuple","internalType":"struct Suave.BuildBlockArgs","components":[{"name":"slot","type":"uint64","internalType":"uint64"},{"name":"proposerPubkey","type":"bytes","internalType":"bytes"},{"name":"parent","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"feeRecipient","type":"address","internalType":"address"},{"name":"gasLimit","type":"uint64","internalType":"uint64"},{"name":"random","type":"bytes32","internalType":"bytes32"},{"name":"withdrawals","type":"tuple[]","internalType":"struct Suave.Withdrawal[]","components":[{"name":"index","type":"uint64","internalType":"uint64"},{"name":"validator","type":"uint64","internalType":"uint64"},{"name":"Address","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"}]}]},{"name":"bidId","type":"bytes16","internalType":"struct Suave.BidId"},{"name":"namespace","type":"string","internalType":"string"}],"outputs":[{"name":"output1","type":"bytes","internalType":"bytes"},{"name":"output2","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"confidentialInputs","outputs":[{"name":"output1","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"confidentialStoreRetrieve","inputs":[{"name":"bidId","type":"bytes16","internalType":"struct Suave.BidId"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"output1","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"confidentialStoreStore","inputs":[{"name":"bidId","type":"bytes16","internalType":"struct Suave.BidId"},{"name":"key","type":"string","internalType":"string"},{"name":"data1","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"ethcall","inputs":[{"name":"contractAddr","type":"address","internalType":"address"},{"name":"input1","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"output1","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"extractHint","inputs":[{"name":"bundleData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"output1","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"fetchBids","inputs":[{"name":"cond","type":"uint64","internalType":"uint64"},{"name":"namespace","type":"string","internalType":"string"}],"outputs":[{"name":"bid","type":"tuple[]","internalType":"struct Suave.Bid[]","components":[{"name":"id","type":"bytes16","internalType":"struct Suave.BidId"},{"name":"salt","type":"bytes16","internalType":"struct Suave.BidId"},{"name":"decryptionCondition","type":"uint64","internalType":"uint64"},{"name":"allowedPeekers","type":"address[]","internalType":"address[]"},{"name":"allowedStores","type":"address[]","internalType":"address[]"},{"name":"version","type":"string","internalType":"string"}]}]},{"type":"function","name":"fillMevShareBundle","inputs":[{"name":"bidId","type":"bytes16","internalType":"struct Suave.BidId"}],"outputs":[{"name":"encodedBundle","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"newBid","inputs":[{"name":"decryptionCondition","type":"uint64","internalType":"uint64"},{"name":"allowedPeekers","type":"address[]","internalType":"address[]"},{"name":"allowedStores","type":"address[]","internalType":"address[]"},{"name":"bidType","type":"string","internalType":"string"}],"outputs":[{"name":"bid","type":"tuple","internalType":"struct Suave.Bid","components":[{"name":"id","type":"bytes16","internalType":"struct Suave.BidId"},{"name":"salt","type":"bytes16","internalType":"struct Suave.BidId"},{"name":"decryptionCondition","type":"uint64","internalType":"uint64"},{"name":"allowedPeekers","type":"address[]","internalType":"address[]"},{"name":"allowedStores","type":"address[]","internalType":"address[]"},{"name":"version","type":"string","internalType":"string"}]}]},{"type":"function","name":"signEthTransaction","inputs":[{"name":"txn","type":"bytes","internalType":"bytes"},{"name":"chainId","type":"string","internalType":"string"},{"name":"signingKey","type":"string","internalType":"string"}],"outputs":[{"name":"output1","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"simulateBundle","inputs":[{"name":"bundleData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"output1","type":"uint64","internalType":"uint64"}]},{"type":"function","name":"submitBundleJsonRPC","inputs":[{"name":"url","type":"string","internalType":"string"},{"name":"method","type":"string","internalType":"string"},{"name":"params","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"output1","type":"bytes","internalType":"bytes"}]},{"type":"function","name":"submitEthBlockBidToRelay","inputs":[{"name":"relayUrl","type":"string","internalType":"string"},{"name":"builderBid","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"output1","type":"bytes","internalType":"bytes"}]}] \ No newline at end of file +[{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"PeekerReverted","type":"error"},{"inputs":[],"name":"BUILD_ETH_BLOCK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONFIDENTIAL_INPUTS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONFIDENTIAL_STORE_RETRIEVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONFIDENTIAL_STORE_STORE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETHCALL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXTRACT_HINT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FETCH_BIDS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FILL_MEV_SHARE_BUNDLE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_CONFIDENTIAL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_CONFIDENTIAL_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NEW_BID","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGN_ETH_TRANSACTION","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIMULATE_BUNDLE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUBMIT_BUNDLE_JSON_RPC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUBMIT_ETH_BLOCK_BID_TO_RELAY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"slot","type":"uint64"},{"internalType":"bytes","name":"proposerPubkey","type":"bytes"},{"internalType":"bytes32","name":"parent","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"feeRecipient","type":"address"},{"internalType":"uint64","name":"gasLimit","type":"uint64"},{"internalType":"bytes32","name":"random","type":"bytes32"},{"components":[{"internalType":"uint64","name":"index","type":"uint64"},{"internalType":"uint64","name":"validator","type":"uint64"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"structSuave.Withdrawal[]","name":"withdrawals","type":"tuple[]"}],"internalType":"structSuave.BuildBlockArgs","name":"param1","type":"tuple"},{"internalType":"Suave.BidId","name":"param2","type":"bytes16"},{"internalType":"string","name":"param3","type":"string"}],"name":"buildEthBlock","outputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"confidentialInputs","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"Suave.BidId","name":"param1","type":"bytes16"},{"internalType":"string","name":"param2","type":"string"}],"name":"confidentialStoreRetrieve","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"Suave.BidId","name":"param1","type":"bytes16"},{"internalType":"string","name":"param2","type":"string"},{"internalType":"bytes","name":"param3","type":"bytes"}],"name":"confidentialStoreStore","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"param1","type":"address"},{"internalType":"bytes","name":"param2","type":"bytes"}],"name":"ethcall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"param1","type":"bytes"}],"name":"extractHint","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"param1","type":"uint64"},{"internalType":"string","name":"param2","type":"string"}],"name":"fetchBids","outputs":[{"components":[{"internalType":"Suave.BidId","name":"id","type":"bytes16"},{"internalType":"Suave.BidId","name":"salt","type":"bytes16"},{"internalType":"uint64","name":"decryptionCondition","type":"uint64"},{"internalType":"address[]","name":"allowedPeekers","type":"address[]"},{"internalType":"address[]","name":"allowedStores","type":"address[]"},{"internalType":"string","name":"version","type":"string"}],"internalType":"structSuave.Bid[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"Suave.BidId","name":"param1","type":"bytes16"}],"name":"fillMevShareBundle","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isConfidential","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"param1","type":"uint64"},{"internalType":"address[]","name":"param2","type":"address[]"},{"internalType":"address[]","name":"param3","type":"address[]"},{"internalType":"string","name":"param4","type":"string"}],"name":"newBid","outputs":[{"components":[{"internalType":"Suave.BidId","name":"id","type":"bytes16"},{"internalType":"Suave.BidId","name":"salt","type":"bytes16"},{"internalType":"uint64","name":"decryptionCondition","type":"uint64"},{"internalType":"address[]","name":"allowedPeekers","type":"address[]"},{"internalType":"address[]","name":"allowedStores","type":"address[]"},{"internalType":"string","name":"version","type":"string"}],"internalType":"structSuave.Bid","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"param1","type":"bytes"},{"internalType":"string","name":"param2","type":"string"},{"internalType":"string","name":"param3","type":"string"}],"name":"signEthTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"param1","type":"bytes"}],"name":"simulateBundle","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"param1","type":"string"},{"internalType":"string","name":"param2","type":"string"},{"internalType":"bytes","name":"param3","type":"bytes"}],"name":"submitBundleJsonRPC","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"param1","type":"string"},{"internalType":"bytes","name":"param2","type":"bytes"}],"name":"submitEthBlockBidToRelay","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/suave/artifacts/addresses.go b/suave/artifacts/addresses.go deleted file mode 100644 index 3abe51d486..0000000000 --- a/suave/artifacts/addresses.go +++ /dev/null @@ -1,72 +0,0 @@ -// Code generated by suave/gen. DO NOT EDIT. -// Hash: 23a6dd8b9b224b11b8baea19a80c55c7787c50c0eb2fc69727e66d615c913483 -package artifacts - -import ( - "github.com/ethereum/go-ethereum/common" -) - -// List of suave precompile addresses -var ( - buildEthBlockAddr = common.HexToAddress("0x0000000000000000000000000000000042100001") - confidentialInputsAddr = common.HexToAddress("0x0000000000000000000000000000000042010001") - confidentialStoreRetrieveAddr = common.HexToAddress("0x0000000000000000000000000000000042020001") - confidentialStoreStoreAddr = common.HexToAddress("0x0000000000000000000000000000000042020000") - ethcallAddr = common.HexToAddress("0x0000000000000000000000000000000042100003") - extractHintAddr = common.HexToAddress("0x0000000000000000000000000000000042100037") - fetchBidsAddr = common.HexToAddress("0x0000000000000000000000000000000042030001") - fillMevShareBundleAddr = common.HexToAddress("0x0000000000000000000000000000000043200001") - newBidAddr = common.HexToAddress("0x0000000000000000000000000000000042030000") - signEthTransactionAddr = common.HexToAddress("0x0000000000000000000000000000000040100001") - simulateBundleAddr = common.HexToAddress("0x0000000000000000000000000000000042100000") - submitBundleJsonRPCAddr = common.HexToAddress("0x0000000000000000000000000000000043000001") - submitEthBlockBidToRelayAddr = common.HexToAddress("0x0000000000000000000000000000000042100002") -) - -var SuaveMethods = map[string]common.Address{ - "buildEthBlock": buildEthBlockAddr, - "confidentialInputs": confidentialInputsAddr, - "confidentialStoreRetrieve": confidentialStoreRetrieveAddr, - "confidentialStoreStore": confidentialStoreStoreAddr, - "ethcall": ethcallAddr, - "extractHint": extractHintAddr, - "fetchBids": fetchBidsAddr, - "fillMevShareBundle": fillMevShareBundleAddr, - "newBid": newBidAddr, - "signEthTransaction": signEthTransactionAddr, - "simulateBundle": simulateBundleAddr, - "submitBundleJsonRPC": submitBundleJsonRPCAddr, - "submitEthBlockBidToRelay": submitEthBlockBidToRelayAddr, -} - -func PrecompileAddressToName(addr common.Address) string { - switch addr { - case buildEthBlockAddr: - return "buildEthBlock" - case confidentialInputsAddr: - return "confidentialInputs" - case confidentialStoreRetrieveAddr: - return "confidentialStoreRetrieve" - case confidentialStoreStoreAddr: - return "confidentialStoreStore" - case ethcallAddr: - return "ethcall" - case extractHintAddr: - return "extractHint" - case fetchBidsAddr: - return "fetchBids" - case fillMevShareBundleAddr: - return "fillMevShareBundle" - case newBidAddr: - return "newBid" - case signEthTransactionAddr: - return "signEthTransaction" - case simulateBundleAddr: - return "simulateBundle" - case submitBundleJsonRPCAddr: - return "submitBundleJsonRPC" - case submitEthBlockBidToRelayAddr: - return "submitEthBlockBidToRelay" - } - return "" -} diff --git a/suave/artifacts/bids.sol/AnyBidContract.json b/suave/artifacts/bids.sol/AnyBidContract.json index a097598f66..0f82c2f6a0 100644 --- a/suave/artifacts/bids.sol/AnyBidContract.json +++ b/suave/artifacts/bids.sol/AnyBidContract.json @@ -1,21 +1,5 @@ { "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "PeekerReverted", - "type": "error" - }, { "anonymous": false, "inputs": [ @@ -101,9 +85,9 @@ } ], "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806392f07a581461003b578063c0b9d28714610059575b600080fd5b61004361006e565b604051610050919061027e565b60405180910390f35b61006c610067366004610298565b6100a7565b005b606061007861010d565b61008157600080fd5b600061008b610196565b9050808060200190518101906100a191906102e9565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6100d56020830183610396565b6100e560608401604085016103c9565b6100f260608501856103f3565b6040516101029493929190610444565b60405180910390a150565b6040516000908190819063420100009082818181855afa9150503d8060008114610153576040519150601f19603f3d011682016040523d82523d6000602084013e610158565b606091505b50915091508161018c576342010000816040516375fff46760e01b81526004016101839291906104ca565b60405180910390fd5b6020015192915050565b6040805160008082526020820192839052606092909182916342010001916101bd916104f6565b600060405180830381855afa9150503d80600081146101f8576040519150601f19603f3d011682016040523d82523d6000602084013e6101fd565b606091505b509150915081610228576342010001816040516375fff46760e01b81526004016101839291906104ca565b92915050565b60005b83811015610249578181015183820152602001610231565b50506000910152565b6000815180845261026a81602086016020860161022e565b601f01601f19169290920160200192915050565b6020815260006102916020830184610252565b9392505050565b6000602082840312156102aa57600080fd5b813567ffffffffffffffff8111156102c157600080fd5b820160c0818503121561029157600080fd5b634e487b7160e01b600052604160045260246000fd5b6000602082840312156102fb57600080fd5b815167ffffffffffffffff8082111561031357600080fd5b818401915084601f83011261032757600080fd5b815181811115610339576103396102d3565b604051601f8201601f19908116603f01168101908382118183101715610361576103616102d3565b8160405282815287602084870101111561037a57600080fd5b61038b83602083016020880161022e565b979650505050505050565b6000602082840312156103a857600080fd5b81356fffffffffffffffffffffffffffffffff198116811461029157600080fd5b6000602082840312156103db57600080fd5b813567ffffffffffffffff8116811461029157600080fd5b6000808335601e1984360301811261040a57600080fd5b83018035915067ffffffffffffffff82111561042557600080fd5b6020019150600581901b360382131561043d57600080fd5b9250929050565b6000606082016fffffffffffffffffffffffffffffffff1987168352602067ffffffffffffffff87168185015260606040850152818583526080850190508692506000805b878110156104bb5784356001600160a01b0381168082146104a8578384fd5b8452509383019391830191600101610489565b50909998505050505050505050565b6001600160a01b03831681526040602082018190526000906104ee90830184610252565b949350505050565b6000825161050881846020870161022e565b919091019291505056fea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806392f07a581461003b578063c0b9d28714610059575b600080fd5b61004361006e565b60405161005091906101ff565b60405180910390f35b61006c610067366004610232565b610175565b005b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156100b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100dd9190610274565b6100e657600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610131573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261015991908101906102ac565b90508080602001905181019061016f91906102ac565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6101a36020830183610359565b6101b3606084016040850161038c565b6101c060608501856103b6565b6040516101d09493929190610407565b60405180910390a150565b60005b838110156101f65781810151838201526020016101de565b50506000910152565b602081526000825180602084015261021e8160408501602087016101db565b601f01601f19169190910160400192915050565b60006020828403121561024457600080fd5b813567ffffffffffffffff81111561025b57600080fd5b820160c0818503121561026d57600080fd5b9392505050565b60006020828403121561028657600080fd5b8151801515811461026d57600080fd5b634e487b7160e01b600052604160045260246000fd5b6000602082840312156102be57600080fd5b815167ffffffffffffffff808211156102d657600080fd5b818401915084601f8301126102ea57600080fd5b8151818111156102fc576102fc610296565b604051601f8201601f19908116603f0116810190838211818310171561032457610324610296565b8160405282815287602084870101111561033d57600080fd5b61034e8360208301602088016101db565b979650505050505050565b60006020828403121561036b57600080fd5b81356fffffffffffffffffffffffffffffffff198116811461026d57600080fd5b60006020828403121561039e57600080fd5b813567ffffffffffffffff8116811461026d57600080fd5b6000808335601e198436030181126103cd57600080fd5b83018035915067ffffffffffffffff8211156103e857600080fd5b6020019150600581901b360382131561040057600080fd5b9250929050565b6000606082016fffffffffffffffffffffffffffffffff1987168352602067ffffffffffffffff87168185015260606040850152818583526080850190508692506000805b8781101561047e5784356001600160a01b03811680821461046b578384fd5b845250938301939183019160010161044c565b5090999850505050505050505056fea164736f6c6343000813000a" }, "bytecode": { - "object": "0x608060405234801561001057600080fd5b5061051f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806392f07a581461003b578063c0b9d28714610059575b600080fd5b61004361006e565b604051610050919061027e565b60405180910390f35b61006c610067366004610298565b6100a7565b005b606061007861010d565b61008157600080fd5b600061008b610196565b9050808060200190518101906100a191906102e9565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6100d56020830183610396565b6100e560608401604085016103c9565b6100f260608501856103f3565b6040516101029493929190610444565b60405180910390a150565b6040516000908190819063420100009082818181855afa9150503d8060008114610153576040519150601f19603f3d011682016040523d82523d6000602084013e610158565b606091505b50915091508161018c576342010000816040516375fff46760e01b81526004016101839291906104ca565b60405180910390fd5b6020015192915050565b6040805160008082526020820192839052606092909182916342010001916101bd916104f6565b600060405180830381855afa9150503d80600081146101f8576040519150601f19603f3d011682016040523d82523d6000602084013e6101fd565b606091505b509150915081610228576342010001816040516375fff46760e01b81526004016101839291906104ca565b92915050565b60005b83811015610249578181015183820152602001610231565b50506000910152565b6000815180845261026a81602086016020860161022e565b601f01601f19169290920160200192915050565b6020815260006102916020830184610252565b9392505050565b6000602082840312156102aa57600080fd5b813567ffffffffffffffff8111156102c157600080fd5b820160c0818503121561029157600080fd5b634e487b7160e01b600052604160045260246000fd5b6000602082840312156102fb57600080fd5b815167ffffffffffffffff8082111561031357600080fd5b818401915084601f83011261032757600080fd5b815181811115610339576103396102d3565b604051601f8201601f19908116603f01168101908382118183101715610361576103616102d3565b8160405282815287602084870101111561037a57600080fd5b61038b83602083016020880161022e565b979650505050505050565b6000602082840312156103a857600080fd5b81356fffffffffffffffffffffffffffffffff198116811461029157600080fd5b6000602082840312156103db57600080fd5b813567ffffffffffffffff8116811461029157600080fd5b6000808335601e1984360301811261040a57600080fd5b83018035915067ffffffffffffffff82111561042557600080fd5b6020019150600581901b360382131561043d57600080fd5b9250929050565b6000606082016fffffffffffffffffffffffffffffffff1987168352602067ffffffffffffffff87168185015260606040850152818583526080850190508692506000805b878110156104bb5784356001600160a01b0381168082146104a8578384fd5b8452509383019391830191600101610489565b50909998505050505050505050565b6001600160a01b03831681526040602082018190526000906104ee90830184610252565b949350505050565b6000825161050881846020870161022e565b919091019291505056fea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b5061049a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806392f07a581461003b578063c0b9d28714610059575b600080fd5b61004361006e565b60405161005091906101ff565b60405180910390f35b61006c610067366004610232565b610175565b005b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156100b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100dd9190610274565b6100e657600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610131573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261015991908101906102ac565b90508080602001905181019061016f91906102ac565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6101a36020830183610359565b6101b3606084016040850161038c565b6101c060608501856103b6565b6040516101d09493929190610407565b60405180910390a150565b60005b838110156101f65781810151838201526020016101de565b50506000910152565b602081526000825180602084015261021e8160408501602087016101db565b601f01601f19169190910160400192915050565b60006020828403121561024457600080fd5b813567ffffffffffffffff81111561025b57600080fd5b820160c0818503121561026d57600080fd5b9392505050565b60006020828403121561028657600080fd5b8151801515811461026d57600080fd5b634e487b7160e01b600052604160045260246000fd5b6000602082840312156102be57600080fd5b815167ffffffffffffffff808211156102d657600080fd5b818401915084601f8301126102ea57600080fd5b8151818111156102fc576102fc610296565b604051601f8201601f19908116603f0116810190838211818310171561032457610324610296565b8160405282815287602084870101111561033d57600080fd5b61034e8360208301602088016101db565b979650505050505050565b60006020828403121561036b57600080fd5b81356fffffffffffffffffffffffffffffffff198116811461026d57600080fd5b60006020828403121561039e57600080fd5b813567ffffffffffffffff8116811461026d57600080fd5b6000808335601e198436030181126103cd57600080fd5b83018035915067ffffffffffffffff8211156103e857600080fd5b6020019150600581901b360382131561040057600080fd5b9250929050565b6000606082016fffffffffffffffffffffffffffffffff1987168352602067ffffffffffffffff87168185015260606040850152818583526080850190508692506000805b8781101561047e5784356001600160a01b03811680821461046b578384fd5b845250938301939183019160010161044c565b5090999850505050505050505056fea164736f6c6343000813000a" } } diff --git a/suave/artifacts/bids.sol/BundleBidContract.json b/suave/artifacts/bids.sol/BundleBidContract.json index 7bce91be55..f99aeb4852 100644 --- a/suave/artifacts/bids.sol/BundleBidContract.json +++ b/suave/artifacts/bids.sol/BundleBidContract.json @@ -1,21 +1,5 @@ { "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "PeekerReverted", - "type": "error" - }, { "anonymous": false, "inputs": [ @@ -130,9 +114,9 @@ } ], "deployedBytecode": { - "object": "0x6080604052600436106100345760003560e01c8063236eb5a71461003957806392f07a5814610062578063c0b9d28714610077575b600080fd5b61004c610047366004610815565b610099565b60405161005991906108da565b60405180910390f35b34801561006e57600080fd5b5061004c610217565b34801561008357600080fd5b506100976100923660046108ed565b610250565b005b60606100a36102b6565b6100ac57600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af11580156100ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101169190810190610975565b905060006101238261033f565b905060006101608787876040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b815250610404565b905061019e81600001516040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b81525085610501565b8051604080518082018252601e81527f64656661756c743a76303a65746842756e646c6553696d526573756c7473000060208083019190915282516001600160401b038716818301528351808203909201825283019092526102009291610501565b61020a81846105b3565b93505050505b9392505050565b60606102216102b6565b61022a57600080fd5b600061023461064b565b90508080602001905181019061024a9190610975565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e61027e60208301836109dc565b61028e60608401604085016109f9565b61029b6060850185610a16565b6040516102ab9493929190610a66565b60405180910390a150565b6040516000908190819063420100009082818181855afa9150503d80600081146102fc576040519150601f19603f3d011682016040523d82523d6000602084013e610301565b606091505b509150915081610335576342010000816040516375fff46760e01b815260040161032c929190610adb565b60405180910390fd5b6020015192915050565b600080600063421000006001600160a01b03168460405160200161036391906108da565b60408051601f198184030181529082905261037d91610aff565b600060405180830381855afa9150503d80600081146103b8576040519150601f19603f3d011682016040523d82523d6000602084013e6103bd565b606091505b5091509150816103e8576342100000816040516375fff46760e01b815260040161032c929190610adb565b808060200190518101906103fc9190610b2b565b949350505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b03168787878760405160200161045d9493929190610b8c565b60408051601f198184030181529082905261047791610aff565b600060405180830381855afa9150503d80600081146104b2576040519150601f19603f3d011682016040523d82523d6000602084013e6104b7565b606091505b5091509150816104e2576342030000816040516375fff46760e01b815260040161032c929190610adb565b808060200190518101906104f69190610c63565b979650505050505050565b60008063420200006001600160a01b031685858560405160200161052793929190610d4a565b60408051601f198184030181529082905261054191610aff565b600060405180830381855afa9150503d806000811461057c576040519150601f19603f3d011682016040523d82523d6000602084013e610581565b606091505b5091509150816105ac576342020000816040516375fff46760e01b815260040161032c929190610adb565b5050505050565b60607f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8360000151846040015185606001516040516105f493929190610d89565b60405180910390a160405163c0b9d28760e01b90610616908590602001610dc4565b60408051601f19818403018152908290526106349291602001610e51565b604051602081830303815290604052905092915050565b60408051600080825260208201928390526060929091829163420100019161067291610aff565b600060405180830381855afa9150503d80600081146106ad576040519150601f19603f3d011682016040523d82523d6000602084013e6106b2565b606091505b5091509150816106dd576342010001816040516375fff46760e01b815260040161032c929190610adb565b92915050565b6001600160401b03811681146106f857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610733576107336106fb565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610761576107616106fb565b604052919050565b60006001600160401b03821115610782576107826106fb565b5060051b60200190565b6001600160a01b03811681146106f857600080fd5b600082601f8301126107b257600080fd5b813560206107c76107c283610769565b610739565b82815260059290921b840181019181810190868411156107e657600080fd5b8286015b8481101561080a5780356107fd8161078c565b83529183019183016107ea565b509695505050505050565b60008060006060848603121561082a57600080fd5b8335610835816106e3565b925060208401356001600160401b038082111561085157600080fd5b61085d878388016107a1565b9350604086013591508082111561087357600080fd5b50610880868287016107a1565b9150509250925092565b60005b838110156108a557818101518382015260200161088d565b50506000910152565b600081518084526108c681602086016020860161088a565b601f01601f19169290920160200192915050565b60208152600061021060208301846108ae565b6000602082840312156108ff57600080fd5b81356001600160401b0381111561091557600080fd5b820160c0818503121561021057600080fd5b60006001600160401b03831115610940576109406106fb565b610953601f8401601f1916602001610739565b905082815283838301111561096757600080fd5b61021083602083018461088a565b60006020828403121561098757600080fd5b81516001600160401b0381111561099d57600080fd5b8201601f810184136109ae57600080fd5b6103fc84825160208401610927565b6fffffffffffffffffffffffffffffffff19811681146106f857600080fd5b6000602082840312156109ee57600080fd5b8135610210816109bd565b600060208284031215610a0b57600080fd5b8135610210816106e3565b6000808335601e19843603018112610a2d57600080fd5b8301803591506001600160401b03821115610a4757600080fd5b6020019150600581901b3603821315610a5f57600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b86811015610ace578335610ab38161078c565b6001600160a01b031682529282019290820190600101610aa0565b5098975050505050505050565b6001600160a01b03831681526040602082018190526000906103fc908301846108ae565b60008251610b1181846020870161088a565b9190910192915050565b8051610b26816106e3565b919050565b600060208284031215610b3d57600080fd5b8151610210816106e3565b600081518084526020808501945080840160005b83811015610b815781516001600160a01b031687529582019590820190600101610b5c565b509495945050505050565b6001600160401b0385168152608060208201526000610bae6080830186610b48565b8281036040840152610bc08186610b48565b905082810360608401526104f681856108ae565b8051610b26816109bd565b600082601f830112610bf057600080fd5b81516020610c006107c283610769565b82815260059290921b84018101918181019086841115610c1f57600080fd5b8286015b8481101561080a578051610c368161078c565b8352918301918301610c23565b600082601f830112610c5457600080fd5b61021083835160208501610927565b600060208284031215610c7557600080fd5b81516001600160401b0380821115610c8c57600080fd5b9083019060c08286031215610ca057600080fd5b610ca8610711565b610cb183610bd4565b8152610cbf60208401610bd4565b6020820152610cd060408401610b1b565b6040820152606083015182811115610ce757600080fd5b610cf387828601610bdf565b606083015250608083015182811115610d0b57600080fd5b610d1787828601610bdf565b60808301525060a083015182811115610d2f57600080fd5b610d3b87828601610c43565b60a08301525095945050505050565b6001600160801b031984168152606060208201526000610d6d60608301856108ae565b8281036040840152610d7f81856108ae565b9695505050505050565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000610dbb6060830184610b48565b95945050505050565b6020815260006001600160801b0319808451166020840152806020850151166040840152506001600160401b036040840151166060830152606083015160c06080840152610e1560e0840182610b48565b90506080840151601f19808584030160a0860152610e338383610b48565b925060a08601519150808584030160c086015250610dbb82826108ae565b6001600160e01b0319831681528151600090610e7481600485016020870161088a565b91909101600401939250505056fea164736f6c6343000813000a" + "object": "0x6080604052600436106100345760003560e01c8063236eb5a71461003957806392f07a5814610062578063c0b9d28714610077575b600080fd5b61004c6100473660046106c3565b610099565b6040516100599190610788565b60405180910390f35b34801561006e57600080fd5b5061004c61038c565b34801561008357600080fd5b5061009761009236600461079b565b610493565b005b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156100e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010891906107d5565b61011157600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610153573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261017b9190810190610845565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016101b69190610788565b602060405180830381865af41580156101d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f791906108a5565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418888886040518463ffffffff1660e01b815260040161023693929190610906565b600060405180830381865af4158015610253573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261027b9190810190610a22565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916102b7918790600401610b09565b60006040518083038186803b1580156102cf57600080fd5b505af41580156102e3573d6000803e3d6000fd5b50508251604080516001600160401b038716602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b8152600401610345929190610b69565b60006040518083038186803b15801561035d57600080fd5b505af4158015610371573d6000803e3d6000fd5b5050505061037f81846104f9565b93505050505b9392505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156103d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fb91906107d5565b61040457600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af415801561044f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104779190810190610845565b90508080602001905181019061048d9190610845565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6104c16020830183610bc0565b6104d16060840160408501610bdd565b6104de6060850185610bfa565b6040516104ee9493929190610c4a565b60405180910390a150565b60607f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e83600001518460400151856060015160405161053a93929190610cbf565b60405180910390a160405163c0b9d28760e01b9061055c908590602001610cf1565b60408051601f198184030181529082905261057a9291602001610d7e565b604051602081830303815290604052905092915050565b6001600160401b03811681146105a657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156105e1576105e16105a9565b60405290565b604051601f8201601f191681016001600160401b038111828210171561060f5761060f6105a9565b604052919050565b60006001600160401b03821115610630576106306105a9565b5060051b60200190565b6001600160a01b03811681146105a657600080fd5b600082601f83011261066057600080fd5b8135602061067561067083610617565b6105e7565b82815260059290921b8401810191818101908684111561069457600080fd5b8286015b848110156106b85780356106ab8161063a565b8352918301918301610698565b509695505050505050565b6000806000606084860312156106d857600080fd5b83356106e381610591565b925060208401356001600160401b03808211156106ff57600080fd5b61070b8783880161064f565b9350604086013591508082111561072157600080fd5b5061072e8682870161064f565b9150509250925092565b60005b8381101561075357818101518382015260200161073b565b50506000910152565b60008151808452610774816020860160208601610738565b601f01601f19169290920160200192915050565b602081526000610385602083018461075c565b6000602082840312156107ad57600080fd5b81356001600160401b038111156107c357600080fd5b820160c0818503121561038557600080fd5b6000602082840312156107e757600080fd5b8151801515811461038557600080fd5b60006001600160401b03831115610810576108106105a9565b610823601f8401601f19166020016105e7565b905082815283838301111561083757600080fd5b610385836020830184610738565b60006020828403121561085757600080fd5b81516001600160401b0381111561086d57600080fd5b8201601f8101841361087e57600080fd5b61088d848251602084016107f7565b949350505050565b80516108a081610591565b919050565b6000602082840312156108b757600080fd5b815161038581610591565b600081518084526020808501945080840160005b838110156108fb5781516001600160a01b0316875295820195908201906001016108d6565b509495945050505050565b6001600160401b038416815260806020820152600061092860808301856108c2565b828103604084015261093a81856108c2565b8381036060850152601581527464656661756c743a76303a65746842756e646c657360581b60208201529050604081019695505050505050565b6fffffffffffffffffffffffffffffffff19811681146105a657600080fd5b80516108a081610974565b600082601f8301126109af57600080fd5b815160206109bf61067083610617565b82815260059290921b840181019181810190868411156109de57600080fd5b8286015b848110156106b85780516109f58161063a565b83529183019183016109e2565b600082601f830112610a1357600080fd5b610385838351602085016107f7565b600060208284031215610a3457600080fd5b81516001600160401b0380821115610a4b57600080fd5b9083019060c08286031215610a5f57600080fd5b610a676105bf565b610a7083610993565b8152610a7e60208401610993565b6020820152610a8f60408401610895565b6040820152606083015182811115610aa657600080fd5b610ab28782860161099e565b606083015250608083015182811115610aca57600080fd5b610ad68782860161099e565b60808301525060a083015182811115610aee57600080fd5b610afa87828601610a02565b60a08301525095945050505050565b6001600160801b031983168152606060208201526000610b4e60608301601581527464656661756c743a76303a65746842756e646c657360581b602082015260400190565b8281036040840152610b60818561075c565b95945050505050565b6001600160801b03198316815260606020820152601e60608201527f64656661756c743a76303a65746842756e646c6553696d526573756c74730000608082015260a06040820152600061088d60a083018461075c565b600060208284031215610bd257600080fd5b813561038581610974565b600060208284031215610bef57600080fd5b813561038581610591565b6000808335601e19843603018112610c1157600080fd5b8301803591506001600160401b03821115610c2b57600080fd5b6020019150600581901b3603821315610c4357600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b86811015610cb2578335610c978161063a565b6001600160a01b031682529282019290820190600101610c84565b5098975050505050505050565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000610b6060608301846108c2565b6020815260006001600160801b0319808451166020840152806020850151166040840152506001600160401b036040840151166060830152606083015160c06080840152610d4260e08401826108c2565b90506080840151601f19808584030160a0860152610d6083836108c2565b925060a08601519150808584030160c086015250610b60828261075c565b6001600160e01b0319831681528151600090610da1816004850160208701610738565b91909101600401939250505056fea164736f6c6343000813000a" }, "bytecode": { - "object": "0x608060405234801561001057600080fd5b50610e8f806100206000396000f3fe6080604052600436106100345760003560e01c8063236eb5a71461003957806392f07a5814610062578063c0b9d28714610077575b600080fd5b61004c610047366004610815565b610099565b60405161005991906108da565b60405180910390f35b34801561006e57600080fd5b5061004c610217565b34801561008357600080fd5b506100976100923660046108ed565b610250565b005b60606100a36102b6565b6100ac57600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af11580156100ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101169190810190610975565b905060006101238261033f565b905060006101608787876040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b815250610404565b905061019e81600001516040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b81525085610501565b8051604080518082018252601e81527f64656661756c743a76303a65746842756e646c6553696d526573756c7473000060208083019190915282516001600160401b038716818301528351808203909201825283019092526102009291610501565b61020a81846105b3565b93505050505b9392505050565b60606102216102b6565b61022a57600080fd5b600061023461064b565b90508080602001905181019061024a9190610975565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e61027e60208301836109dc565b61028e60608401604085016109f9565b61029b6060850185610a16565b6040516102ab9493929190610a66565b60405180910390a150565b6040516000908190819063420100009082818181855afa9150503d80600081146102fc576040519150601f19603f3d011682016040523d82523d6000602084013e610301565b606091505b509150915081610335576342010000816040516375fff46760e01b815260040161032c929190610adb565b60405180910390fd5b6020015192915050565b600080600063421000006001600160a01b03168460405160200161036391906108da565b60408051601f198184030181529082905261037d91610aff565b600060405180830381855afa9150503d80600081146103b8576040519150601f19603f3d011682016040523d82523d6000602084013e6103bd565b606091505b5091509150816103e8576342100000816040516375fff46760e01b815260040161032c929190610adb565b808060200190518101906103fc9190610b2b565b949350505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b03168787878760405160200161045d9493929190610b8c565b60408051601f198184030181529082905261047791610aff565b600060405180830381855afa9150503d80600081146104b2576040519150601f19603f3d011682016040523d82523d6000602084013e6104b7565b606091505b5091509150816104e2576342030000816040516375fff46760e01b815260040161032c929190610adb565b808060200190518101906104f69190610c63565b979650505050505050565b60008063420200006001600160a01b031685858560405160200161052793929190610d4a565b60408051601f198184030181529082905261054191610aff565b600060405180830381855afa9150503d806000811461057c576040519150601f19603f3d011682016040523d82523d6000602084013e610581565b606091505b5091509150816105ac576342020000816040516375fff46760e01b815260040161032c929190610adb565b5050505050565b60607f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8360000151846040015185606001516040516105f493929190610d89565b60405180910390a160405163c0b9d28760e01b90610616908590602001610dc4565b60408051601f19818403018152908290526106349291602001610e51565b604051602081830303815290604052905092915050565b60408051600080825260208201928390526060929091829163420100019161067291610aff565b600060405180830381855afa9150503d80600081146106ad576040519150601f19603f3d011682016040523d82523d6000602084013e6106b2565b606091505b5091509150816106dd576342010001816040516375fff46760e01b815260040161032c929190610adb565b92915050565b6001600160401b03811681146106f857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610733576107336106fb565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610761576107616106fb565b604052919050565b60006001600160401b03821115610782576107826106fb565b5060051b60200190565b6001600160a01b03811681146106f857600080fd5b600082601f8301126107b257600080fd5b813560206107c76107c283610769565b610739565b82815260059290921b840181019181810190868411156107e657600080fd5b8286015b8481101561080a5780356107fd8161078c565b83529183019183016107ea565b509695505050505050565b60008060006060848603121561082a57600080fd5b8335610835816106e3565b925060208401356001600160401b038082111561085157600080fd5b61085d878388016107a1565b9350604086013591508082111561087357600080fd5b50610880868287016107a1565b9150509250925092565b60005b838110156108a557818101518382015260200161088d565b50506000910152565b600081518084526108c681602086016020860161088a565b601f01601f19169290920160200192915050565b60208152600061021060208301846108ae565b6000602082840312156108ff57600080fd5b81356001600160401b0381111561091557600080fd5b820160c0818503121561021057600080fd5b60006001600160401b03831115610940576109406106fb565b610953601f8401601f1916602001610739565b905082815283838301111561096757600080fd5b61021083602083018461088a565b60006020828403121561098757600080fd5b81516001600160401b0381111561099d57600080fd5b8201601f810184136109ae57600080fd5b6103fc84825160208401610927565b6fffffffffffffffffffffffffffffffff19811681146106f857600080fd5b6000602082840312156109ee57600080fd5b8135610210816109bd565b600060208284031215610a0b57600080fd5b8135610210816106e3565b6000808335601e19843603018112610a2d57600080fd5b8301803591506001600160401b03821115610a4757600080fd5b6020019150600581901b3603821315610a5f57600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b86811015610ace578335610ab38161078c565b6001600160a01b031682529282019290820190600101610aa0565b5098975050505050505050565b6001600160a01b03831681526040602082018190526000906103fc908301846108ae565b60008251610b1181846020870161088a565b9190910192915050565b8051610b26816106e3565b919050565b600060208284031215610b3d57600080fd5b8151610210816106e3565b600081518084526020808501945080840160005b83811015610b815781516001600160a01b031687529582019590820190600101610b5c565b509495945050505050565b6001600160401b0385168152608060208201526000610bae6080830186610b48565b8281036040840152610bc08186610b48565b905082810360608401526104f681856108ae565b8051610b26816109bd565b600082601f830112610bf057600080fd5b81516020610c006107c283610769565b82815260059290921b84018101918181019086841115610c1f57600080fd5b8286015b8481101561080a578051610c368161078c565b8352918301918301610c23565b600082601f830112610c5457600080fd5b61021083835160208501610927565b600060208284031215610c7557600080fd5b81516001600160401b0380821115610c8c57600080fd5b9083019060c08286031215610ca057600080fd5b610ca8610711565b610cb183610bd4565b8152610cbf60208401610bd4565b6020820152610cd060408401610b1b565b6040820152606083015182811115610ce757600080fd5b610cf387828601610bdf565b606083015250608083015182811115610d0b57600080fd5b610d1787828601610bdf565b60808301525060a083015182811115610d2f57600080fd5b610d3b87828601610c43565b60a08301525095945050505050565b6001600160801b031984168152606060208201526000610d6d60608301856108ae565b8281036040840152610d7f81856108ae565b9695505050505050565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000610dbb6060830184610b48565b95945050505050565b6020815260006001600160801b0319808451166020840152806020850151166040840152506001600160401b036040840151166060830152606083015160c06080840152610e1560e0840182610b48565b90506080840151601f19808584030160a0860152610e338383610b48565b925060a08601519150808584030160c086015250610dbb82826108ae565b6001600160e01b0319831681528151600090610e7481600485016020870161088a565b91909101600401939250505056fea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b50610dbc806100206000396000f3fe6080604052600436106100345760003560e01c8063236eb5a71461003957806392f07a5814610062578063c0b9d28714610077575b600080fd5b61004c6100473660046106c3565b610099565b6040516100599190610788565b60405180910390f35b34801561006e57600080fd5b5061004c61038c565b34801561008357600080fd5b5061009761009236600461079b565b610493565b005b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156100e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010891906107d5565b61011157600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610153573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261017b9190810190610845565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016101b69190610788565b602060405180830381865af41580156101d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f791906108a5565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418888886040518463ffffffff1660e01b815260040161023693929190610906565b600060405180830381865af4158015610253573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261027b9190810190610a22565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916102b7918790600401610b09565b60006040518083038186803b1580156102cf57600080fd5b505af41580156102e3573d6000803e3d6000fd5b50508251604080516001600160401b038716602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b8152600401610345929190610b69565b60006040518083038186803b15801561035d57600080fd5b505af4158015610371573d6000803e3d6000fd5b5050505061037f81846104f9565b93505050505b9392505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156103d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fb91906107d5565b61040457600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af415801561044f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104779190810190610845565b90508080602001905181019061048d9190610845565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6104c16020830183610bc0565b6104d16060840160408501610bdd565b6104de6060850185610bfa565b6040516104ee9493929190610c4a565b60405180910390a150565b60607f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e83600001518460400151856060015160405161053a93929190610cbf565b60405180910390a160405163c0b9d28760e01b9061055c908590602001610cf1565b60408051601f198184030181529082905261057a9291602001610d7e565b604051602081830303815290604052905092915050565b6001600160401b03811681146105a657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156105e1576105e16105a9565b60405290565b604051601f8201601f191681016001600160401b038111828210171561060f5761060f6105a9565b604052919050565b60006001600160401b03821115610630576106306105a9565b5060051b60200190565b6001600160a01b03811681146105a657600080fd5b600082601f83011261066057600080fd5b8135602061067561067083610617565b6105e7565b82815260059290921b8401810191818101908684111561069457600080fd5b8286015b848110156106b85780356106ab8161063a565b8352918301918301610698565b509695505050505050565b6000806000606084860312156106d857600080fd5b83356106e381610591565b925060208401356001600160401b03808211156106ff57600080fd5b61070b8783880161064f565b9350604086013591508082111561072157600080fd5b5061072e8682870161064f565b9150509250925092565b60005b8381101561075357818101518382015260200161073b565b50506000910152565b60008151808452610774816020860160208601610738565b601f01601f19169290920160200192915050565b602081526000610385602083018461075c565b6000602082840312156107ad57600080fd5b81356001600160401b038111156107c357600080fd5b820160c0818503121561038557600080fd5b6000602082840312156107e757600080fd5b8151801515811461038557600080fd5b60006001600160401b03831115610810576108106105a9565b610823601f8401601f19166020016105e7565b905082815283838301111561083757600080fd5b610385836020830184610738565b60006020828403121561085757600080fd5b81516001600160401b0381111561086d57600080fd5b8201601f8101841361087e57600080fd5b61088d848251602084016107f7565b949350505050565b80516108a081610591565b919050565b6000602082840312156108b757600080fd5b815161038581610591565b600081518084526020808501945080840160005b838110156108fb5781516001600160a01b0316875295820195908201906001016108d6565b509495945050505050565b6001600160401b038416815260806020820152600061092860808301856108c2565b828103604084015261093a81856108c2565b8381036060850152601581527464656661756c743a76303a65746842756e646c657360581b60208201529050604081019695505050505050565b6fffffffffffffffffffffffffffffffff19811681146105a657600080fd5b80516108a081610974565b600082601f8301126109af57600080fd5b815160206109bf61067083610617565b82815260059290921b840181019181810190868411156109de57600080fd5b8286015b848110156106b85780516109f58161063a565b83529183019183016109e2565b600082601f830112610a1357600080fd5b610385838351602085016107f7565b600060208284031215610a3457600080fd5b81516001600160401b0380821115610a4b57600080fd5b9083019060c08286031215610a5f57600080fd5b610a676105bf565b610a7083610993565b8152610a7e60208401610993565b6020820152610a8f60408401610895565b6040820152606083015182811115610aa657600080fd5b610ab28782860161099e565b606083015250608083015182811115610aca57600080fd5b610ad68782860161099e565b60808301525060a083015182811115610aee57600080fd5b610afa87828601610a02565b60a08301525095945050505050565b6001600160801b031983168152606060208201526000610b4e60608301601581527464656661756c743a76303a65746842756e646c657360581b602082015260400190565b8281036040840152610b60818561075c565b95945050505050565b6001600160801b03198316815260606020820152601e60608201527f64656661756c743a76303a65746842756e646c6553696d526573756c74730000608082015260a06040820152600061088d60a083018461075c565b600060208284031215610bd257600080fd5b813561038581610974565b600060208284031215610bef57600080fd5b813561038581610591565b6000808335601e19843603018112610c1157600080fd5b8301803591506001600160401b03821115610c2b57600080fd5b6020019150600581901b3603821315610c4357600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b86811015610cb2578335610c978161063a565b6001600160a01b031682529282019290820190600101610c84565b5098975050505050505050565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000610b6060608301846108c2565b6020815260006001600160801b0319808451166020840152806020850151166040840152506001600160401b036040840151166060830152606083015160c06080840152610d4260e08401826108c2565b90506080840151601f19808584030160a0860152610d6083836108c2565b925060a08601519150808584030160c086015250610b60828261075c565b6001600160e01b0319831681528151600090610da1816004850160208701610738565b91909101600401939250505056fea164736f6c6343000813000a" } } diff --git a/suave/artifacts/bids.sol/EthBlockBidContract.json b/suave/artifacts/bids.sol/EthBlockBidContract.json index 5e20f90406..76f896b642 100644 --- a/suave/artifacts/bids.sol/EthBlockBidContract.json +++ b/suave/artifacts/bids.sol/EthBlockBidContract.json @@ -670,9 +670,9 @@ } ], "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063b33e471511610066578063b33e4715146100ef578063c0b9d28714610110578063c2eceb1114610125578063e829cd5d14610138578063ebb89de41461015b57600080fd5b80634c8820f81461009857806354dfbd39146100c15780637df1cde2146100d457806392f07a58146100e7575b600080fd5b6100ab6100a636600461189a565b61016e565b6040516100b891906119e1565b60405180910390f35b6100ab6100cf3660046119fb565b6102d1565b6100ab6100e2366004611a4c565b6108a1565b6100ab6108f9565b6101026100fd366004611aff565b610932565b6040516100b8929190611c45565b61012361011e366004611ce8565b6109cd565b005b61010261013336600461189a565b610a33565b61014b610146366004611d22565b610bc9565b60405190151581526020016100b8565b6100ab6101693660046119fb565b610c8d565b6060610178611051565b61018157600080fd5b60405163c2eceb1160e01b81526000908190309063c2eceb11906101af908a908a908a908a90600401611e83565b600060405180830381865afa1580156101cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f49190810190612050565b915091507f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f82600001518260405161022d9291906120a9565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e826000015183604001518460600151604051610274939291906120cc565b60405180910390a160405163b33e471560e01b906102989084908490602001611c45565b60408051601f19818403018152908290526102b692916020016120fe565b60405160208183030381529060405292505050949350505050565b60606102db611051565b6102e457600080fd5b600061031d83604051806040016040528060158152602001746d657673686172653a76303a6d617463684269647360581b8152506110d1565b90506000610360846040518060400160405280601c81526020017f6d657673686172653a76303a756e6d61746368656442756e646c6573000000008152506110d1565b9050805160000361038f57306040516375fff46760e01b8152600401610386919061212f565b60405180910390fd5b600081516001600160401b038111156103aa576103aa611555565b6040519080825280602002602001820160405280156103e357816020015b6103d0611521565b8152602001906001900390816103c85790505b50905060005b825181101561053657600083828151811061040657610406612162565b6020026020010151905060005b855181101561050357600061047387838151811061043357610433612162565b602002602001015160000151604051806040016040528060168152602001756d657673686172653a76303a6d65726765644269647360501b815250611199565b8060200190518101906104869190612178565b90506104c98160008151811061049e5761049e612162565b60200260200101518786815181106104b8576104b8612162565b602002602001015160000151610bc9565b156104f0578682815181106104e0576104e0612162565b6020026020010151925050610503565b50806104fb8161221c565b915050610413565b508083838151811061051757610517612162565b602002602001018190525050808061052e9061221c565b9150506103e9565b50600081516001600160401b0381111561055257610552611555565b60405190808252806020026020018201604052801561059757816020015b60408051808201909152600080825260208201528152602001906001900390816105705790505b50905060005b82518110156106955760006106048483815181106105bd576105bd612162565b6020026020010151600001516040518060400160405280601f81526020017f6d657673686172653a76303a65746842756e646c6553696d526573756c747300815250611199565b905060008180602001905181019061061c9190612235565b90506040518060400160405280826001600160401b0316815260200186858151811061064a5761064a612162565b6020026020010151600001516001600160801b03191681525084848151811061067557610675612162565b60200260200101819052505050808061068d9061221c565b91505061059d565b50805160005b6106a6600183612252565b8110156107b35760006106ba826001612265565b90505b828110156107a0578381815181106106d7576106d7612162565b6020026020010151600001516001600160401b03168483815181106106fe576106fe612162565b6020026020010151600001516001600160401b0316101561078e57600084838151811061072d5761072d612162565b6020026020010151905084828151811061074957610749612162565b602002602001015185848151811061076357610763612162565b60200260200101819052508085838151811061078157610781612162565b6020026020010181905250505b806107988161221c565b9150506106bd565b50806107ab8161221c565b91505061069b565b50600083516001600160401b038111156107cf576107cf611555565b6040519080825280602002602001820160405280156107f8578160200160208202803683370190505b50905060005b83518110156108625783818151811061081957610819612162565b60200260200101516020015182828151811061083757610837612162565b6001600160801b0319909216602092830291909101909101528061085a8161221c565b9150506107fe565b506108928989836040518060400160405280600b81526020016a06d657673686172653a76360ac1b81525061016e565b96505050505050505b92915050565b60606108ab611051565b6108b457600080fd5b60006108f18460405180604001604052806019815260200178191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b815250611199565b949350505050565b6060610903611051565b61090c57600080fd5b6000610916611244565b90508080602001905181019061092c9190612278565b91505090565b61093a611521565b60607f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f8460000151846040516109719291906120a9565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8460000151856040015186606001516040516109b8939291906120cc565b60405180910390a150829050815b9250929050565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6109fb60208301836122ac565b610a0b60608401604085016122c9565b610a1860608501856122e6565b604051610a28949392919061232f565b60405180910390a150565b610a3b611521565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110610a7457610a74612162565b60200260200101906001600160a01b031690816001600160a01b031681525050634210000181600181518110610aac57610aac612162565b60200260200101906001600160a01b031690816001600160a01b0316815250506000610b078783846040518060400160405280601581526020017464656661756c743a76303a6d65726765644269647360581b8152506112d6565b9050610b6481600001516040518060400160405280601581526020017464656661756c743a76303a6d65726765644269647360581b81525088604051602001610b5091906123a4565b60405160208183030381529060405261139f565b600080610b768a846000015189611451565b91509150610bba836000015160405180604001604052806019815260200178191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b8152508361139f565b50909890975095505050505050565b604080516001600160801b03198481166020830152825160108184030181526030830184529084166050830152825180830384018152606090920190925260009190825b8251811015610c8157818181518110610c2857610c28612162565b602001015160f81c60f81b6001600160f81b031916838281518110610c4f57610c4f612162565b01602001516001600160f81b03191614610c6f576000935050505061089b565b80610c798161221c565b915050610c0d565b50600195945050505050565b6060610c97611051565b610ca057600080fd5b6000610cd9836040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b8152506110d1565b90508051600003610cff57306040516375fff46760e01b8152600401610386919061212f565b600081516001600160401b03811115610d1a57610d1a611555565b604051908082528060200260200182016040528015610d5f57816020015b6040805180820190915260008082526020820152815260200190600190039081610d385790505b50905060005b8251811015610e5d576000610dcc848381518110610d8557610d85612162565b6020026020010151600001516040518060400160405280601e81526020017f64656661756c743a76303a65746842756e646c6553696d526573756c74730000815250611199565b9050600081806020019051810190610de49190612235565b90506040518060400160405280826001600160401b03168152602001868581518110610e1257610e12612162565b6020026020010151600001516001600160801b031916815250848481518110610e3d57610e3d612162565b602002602001018190525050508080610e559061221c565b915050610d65565b50805160005b610e6e600183612252565b811015610f7b576000610e82826001612265565b90505b82811015610f6857838181518110610e9f57610e9f612162565b6020026020010151600001516001600160401b0316848381518110610ec657610ec6612162565b6020026020010151600001516001600160401b03161015610f56576000848381518110610ef557610ef5612162565b60200260200101519050848281518110610f1157610f11612162565b6020026020010151858481518110610f2b57610f2b612162565b602002602001018190525080858381518110610f4957610f49612162565b6020026020010181905250505b80610f608161221c565b915050610e85565b5080610f738161221c565b915050610e63565b50600083516001600160401b03811115610f9757610f97611555565b604051908082528060200260200182016040528015610fc0578160200160208202803683370190505b50905060005b835181101561102a57838181518110610fe157610fe1612162565b602002602001015160200151828281518110610fff57610fff612162565b6001600160801b031990921660209283029190910190910152806110228161221c565b915050610fc6565b506110468787836040518060200160405280600081525061016e565b979650505050505050565b6040516000908190819063420100009082818181855afa9150503d8060008114611097576040519150601f19603f3d011682016040523d82523d6000602084013e61109c565b606091505b5091509150816110c7576342010000816040516375fff46760e01b81526004016103869291906123b7565b6020015192915050565b606060008063420300016001600160a01b031685856040516020016110f79291906123db565b60408051601f1981840301815290829052611111916123fd565b600060405180830381855afa9150503d806000811461114c576040519150601f19603f3d011682016040523d82523d6000602084013e611151565b606091505b50915091508161117c576342030001816040516375fff46760e01b81526004016103869291906123b7565b808060200190518101906111909190612419565b95945050505050565b606060008063420200016001600160a01b031685856040516020016111bf9291906120a9565b60408051601f19818403018152908290526111d9916123fd565b600060405180830381855afa9150503d8060008114611214576040519150601f19603f3d011682016040523d82523d6000602084013e611219565b606091505b5091509150816108f1576342020001816040516375fff46760e01b81526004016103869291906123b7565b60408051600080825260208201928390526060929091829163420100019161126b916123fd565b600060405180830381855afa9150503d80600081146112a6576040519150601f19603f3d011682016040523d82523d6000602084013e6112ab565b606091505b50915091508161089b576342010001816040516375fff46760e01b81526004016103869291906123b7565b6112de611521565b60008063420300006001600160a01b03168787878760405160200161130694939291906124bc565b60408051601f1981840301815290829052611320916123fd565b600060405180830381855afa9150503d806000811461135b576040519150601f19603f3d011682016040523d82523d6000602084013e611360565b606091505b50915091508161138b576342030000816040516375fff46760e01b81526004016103869291906123b7565b8080602001905181019061104691906124f0565b60008063420200006001600160a01b03168585856040516020016113c593929190612524565b60408051601f19818403018152908290526113df916123fd565b600060405180830381855afa9150503d806000811461141a576040519150601f19603f3d011682016040523d82523d6000602084013e61141f565b606091505b50915091508161144a576342020000816040516375fff46760e01b81526004016103869291906123b7565b5050505050565b60608060008063421000016001600160a01b031687878760405160200161147a93929190612563565b60408051601f1981840301815290829052611494916123fd565b600060405180830381855afa9150503d80600081146114cf576040519150601f19603f3d011682016040523d82523d6000602084013e6114d4565b606091505b5091509150816114ff576342100001816040516375fff46760e01b81526004016103869291906123b7565b808060200190518101906115139190612598565b935093505050935093915050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561158d5761158d611555565b60405290565b60405161010081016001600160401b038111828210171561158d5761158d611555565b60405160c081016001600160401b038111828210171561158d5761158d611555565b604051601f8201601f191681016001600160401b038111828210171561160057611600611555565b604052919050565b6001600160401b038116811461161d57600080fd5b50565b803561162b81611608565b919050565b60006001600160401b0382111561164957611649611555565b50601f01601f191660200190565b600082601f83011261166857600080fd5b813561167b61167682611630565b6115d8565b81815284602083860101111561169057600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461161d57600080fd5b803561162b816116ad565b60006001600160401b038211156116e6576116e6611555565b5060051b60200190565b600082601f83011261170157600080fd5b81356020611711611676836116cd565b82815260079290921b8401810191818101908684111561173057600080fd5b8286015b848110156117a7576080818903121561174d5760008081fd5b61175561156b565b813561176081611608565b81528185013561176f81611608565b81860152604082810135611782816116ad565b9082015260608281013561179581611608565b90820152835291830191608001611734565b509695505050505050565b600061010082840312156117c557600080fd5b6117cd611593565b90506117d882611620565b815260208201356001600160401b03808211156117f457600080fd5b61180085838601611657565b60208401526040840135604084015261181b60608501611620565b606084015261182c608085016116c2565b608084015261183d60a08501611620565b60a084015260c084013560c084015260e084013591508082111561186057600080fd5b5061186d848285016116f0565b60e08301525092915050565b6001600160801b03198116811461161d57600080fd5b803561162b81611879565b600080600080608085870312156118b057600080fd5b84356001600160401b03808211156118c757600080fd5b6118d3888389016117b2565b955060209150818701356118e681611608565b94506040870135818111156118fa57600080fd5b8701601f8101891361190b57600080fd5b8035611919611676826116cd565b81815260059190911b8201840190848101908b83111561193857600080fd5b928501925b8284101561195f57833561195081611879565b8252928501929085019061193d565b9650505050606087013591508082111561197857600080fd5b5061198587828801611657565b91505092959194509250565b60005b838110156119ac578181015183820152602001611994565b50506000910152565b600081518084526119cd816020860160208601611991565b601f01601f19169290920160200192915050565b6020815260006119f460208301846119b5565b9392505050565b60008060408385031215611a0e57600080fd5b82356001600160401b03811115611a2457600080fd5b611a30858286016117b2565b9250506020830135611a4181611608565b809150509250929050565b60008060408385031215611a5f57600080fd5b8235611a6a81611879565b915060208301356001600160401b03811115611a8557600080fd5b611a9185828601611657565b9150509250929050565b600082601f830112611aac57600080fd5b81356020611abc611676836116cd565b82815260059290921b84018101918181019086841115611adb57600080fd5b8286015b848110156117a7578035611af2816116ad565b8352918301918301611adf565b60008060408385031215611b1257600080fd5b82356001600160401b0380821115611b2957600080fd5b9084019060c08287031215611b3d57600080fd5b611b456115b6565b611b4e8361188f565b8152611b5c6020840161188f565b6020820152611b6d60408401611620565b6040820152606083013582811115611b8457600080fd5b611b9088828601611a9b565b606083015250608083013582811115611ba857600080fd5b611bb488828601611a9b565b60808301525060a083013582811115611bcc57600080fd5b611bd888828601611657565b60a08301525093506020850135915080821115611bf457600080fd5b50611a9185828601611657565b600081518084526020808501945080840160005b83811015611c3a5781516001600160a01b031687529582019590820190600101611c15565b509495945050505050565b6040815260006001600160801b0319808551166040840152806020860151166060840152506001600160401b036040850151166080830152606084015160c060a0840152611c97610100840182611c01565b90506080850151603f19808584030160c0860152611cb58383611c01565b925060a08701519150808584030160e086015250611cd382826119b5565b915050828103602084015261119081856119b5565b600060208284031215611cfa57600080fd5b81356001600160401b03811115611d1057600080fd5b820160c081850312156119f457600080fd5b60008060408385031215611d3557600080fd5b8235611d4081611879565b91506020830135611a4181611879565b600081518084526020808501945080840160005b83811015611c3a57815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611d64565b60006101006001600160401b038084511685526020840151826020870152611de1838701826119b5565b925050604084015160408601528060608501511660608601525060018060a01b03608084015116608085015260a0830151611e2760a08601826001600160401b03169052565b5060c083015160c085015260e083015184820360e08601526111908282611d50565b600081518084526020808501945080840160005b83811015611c3a5781516001600160801b03191687529582019590820190600101611e5d565b608081526000611e966080830187611db7565b6001600160401b03861660208401528281036040840152611eb78186611e49565b9050828103606084015261104681856119b5565b805161162b81611879565b805161162b81611608565b600082601f830112611ef257600080fd5b81516020611f02611676836116cd565b82815260059290921b84018101918181019086841115611f2157600080fd5b8286015b848110156117a7578051611f38816116ad565b8352918301918301611f25565b600082601f830112611f5657600080fd5b8151611f6461167682611630565b818152846020838601011115611f7957600080fd5b6108f1826020830160208701611991565b600060c08284031215611f9c57600080fd5b611fa46115b6565b9050611faf82611ecb565b8152611fbd60208301611ecb565b6020820152611fce60408301611ed6565b604082015260608201516001600160401b0380821115611fed57600080fd5b611ff985838601611ee1565b6060840152608084015191508082111561201257600080fd5b61201e85838601611ee1565b608084015260a084015191508082111561203757600080fd5b5061204484828501611f45565b60a08301525092915050565b6000806040838503121561206357600080fd5b82516001600160401b038082111561207a57600080fd5b61208686838701611f8a565b9350602085015191508082111561209c57600080fd5b50611a9185828601611f45565b6001600160801b0319831681526040602082015260006108f160408301846119b5565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006111906060830184611c01565b6001600160e01b0319831681528151600090612121816004850160208701611991565b919091016004019392505050565b6001600160a01b03919091168152604060208201819052600790820152666e6f206269647360c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602080838503121561218b57600080fd5b82516001600160401b038111156121a157600080fd5b8301601f810185136121b257600080fd5b80516121c0611676826116cd565b81815260059190911b820183019083810190878311156121df57600080fd5b928401925b828410156110465783516121f781611879565b825292840192908401906121e4565b634e487b7160e01b600052601160045260246000fd5b60006001820161222e5761222e612206565b5060010190565b60006020828403121561224757600080fd5b81516119f481611608565b8181038181111561089b5761089b612206565b8082018082111561089b5761089b612206565b60006020828403121561228a57600080fd5b81516001600160401b038111156122a057600080fd5b6108f184828501611f45565b6000602082840312156122be57600080fd5b81356119f481611879565b6000602082840312156122db57600080fd5b81356119f481611608565b6000808335601e198436030181126122fd57600080fd5b8301803591506001600160401b0382111561231757600080fd5b6020019150600581901b36038213156109c657600080fd5b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b8681101561239757833561237c816116ad565b6001600160a01b031682529282019290820190600101612369565b5098975050505050505050565b6020815260006119f46020830184611e49565b6001600160a01b03831681526040602082018190526000906108f1908301846119b5565b6001600160401b03831681526040602082015260006108f160408301846119b5565b6000825161240f818460208701611991565b9190910192915050565b6000602080838503121561242c57600080fd5b82516001600160401b038082111561244357600080fd5b818501915085601f83011261245757600080fd5b8151612465611676826116cd565b81815260059190911b8301840190848101908883111561248457600080fd5b8585015b83811015612397578051858111156124a05760008081fd5b6124ae8b89838a0101611f8a565b845250918601918601612488565b6001600160401b03851681526080602082015260006124de6080830186611c01565b8281036040840152611eb78186611c01565b60006020828403121561250257600080fd5b81516001600160401b0381111561251857600080fd5b6108f184828501611f8a565b6001600160801b03198416815260606020820152600061254760608301856119b5565b828103604084015261255981856119b5565b9695505050505050565b6060815260006125766060830186611db7565b6001600160801b031985166020840152828103604084015261255981856119b5565b600080604083850312156125ab57600080fd5b82516001600160401b03808211156125c257600080fd5b61208686838701611f4556fea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063b33e471511610066578063b33e4715146100ef578063c0b9d28714610110578063c2eceb1114610125578063e829cd5d14610138578063ebb89de41461015b57600080fd5b80634c8820f81461009857806354dfbd39146100c15780637df1cde2146100d457806392f07a58146100e7575b600080fd5b6100ab6100a6366004611a5b565b61016e565b6040516100b89190611ba2565b60405180910390f35b6100ab6100cf366004611bbc565b610336565b6100ab6100e2366004611c0d565b610b54565b6100ab610c53565b6101026100fd366004611cc0565b610d5a565b6040516100b8929190611e06565b61012361011e366004611eb2565b610df5565b005b610102610133366004611a5b565b610e5b565b61014b610146366004611eec565b611101565b60405190151581526020016100b8565b6100ab610169366004611bbc565b6111c5565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd9190611f1a565b6101e657600080fd5b60405163c2eceb1160e01b81526000908190309063c2eceb1190610214908a908a908a908a90600401611fdd565b600060405180830381865afa158015610231573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102599190810190612246565b915091507f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f82600001518260405161029292919061229f565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8260000151836040015184606001516040516102d9939291906122c2565b60405180910390a160405163b33e471560e01b906102fd9084908490602001611e06565b60408051601f198184030181529082905261031b92916020016122f4565b60405160208183030381529060405292505050949350505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a59190611f1a565b6103ae57600080fd5b60408051632cb05c5360e21b81526001600160401b0384166004820152602481019190915260156044820152746d657673686172653a76303a6d617463684269647360581b606482015260009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af4158015610437573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261045f9190810190612325565b60408051632cb05c5360e21b81526001600160401b03861660048201526024810191909152601c60448201527f6d657673686172653a76303a756e6d61746368656442756e646c657300000000606482015290915060009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af41580156104f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261051b9190810190612325565b9050805160000361054a57306040516375fff46760e01b815260040161054191906123d5565b60405180910390fd5b600081516001600160401b0381111561056557610565611716565b60405190808252806020026020018201604052801561059e57816020015b61058b6116e2565b8152602001906001900390816105835790505b50905060005b825181101561076d5760008382815181106105c1576105c1612408565b6020026020010151905060005b855181101561073a57600073__$e374338554c5da70f90c17374827737168$__63ae9a604088848151811061060557610605612408565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b03199092166004830152602482015260166044820152756d657673686172653a76303a6d65726765644269647360501b6064820152608401600060405180830381865af4158015610682573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106aa919081019061241e565b8060200190518101906106bd9190612452565b9050610700816000815181106106d5576106d5612408565b60200260200101518786815181106106ef576106ef612408565b602002602001015160000151611101565b156107275786828151811061071757610717612408565b602002602001015192505061073a565b5080610732816124f6565b9150506105ce565b508083838151811061074e5761074e612408565b6020026020010181905250508080610765906124f6565b9150506105a4565b50600081516001600160401b0381111561078957610789611716565b6040519080825280602002602001820160405280156107ce57816020015b60408051808201909152600080825260208201528152602001906001900390816107a75790505b50905060005b825181101561094857600073__$e374338554c5da70f90c17374827737168$__63ae9a604085848151811061080b5761080b612408565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b031990921660048301526024820152601f60448201527f6d657673686172653a76303a65746842756e646c6553696d526573756c7473006064820152608401600060405180830381865af415801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108b7919081019061241e565b90506000818060200190518101906108cf919061250f565b90506040518060400160405280826001600160401b031681526020018685815181106108fd576108fd612408565b6020026020010151600001516001600160801b03191681525084848151811061092857610928612408565b602002602001018190525050508080610940906124f6565b9150506107d4565b50805160005b61095960018361252c565b811015610a6657600061096d82600161253f565b90505b82811015610a535783818151811061098a5761098a612408565b6020026020010151600001516001600160401b03168483815181106109b1576109b1612408565b6020026020010151600001516001600160401b03161015610a415760008483815181106109e0576109e0612408565b602002602001015190508482815181106109fc576109fc612408565b6020026020010151858481518110610a1657610a16612408565b602002602001018190525080858381518110610a3457610a34612408565b6020026020010181905250505b80610a4b816124f6565b915050610970565b5080610a5e816124f6565b91505061094e565b50600083516001600160401b03811115610a8257610a82611716565b604051908082528060200260200182016040528015610aab578160200160208202803683370190505b50905060005b8351811015610b1557838181518110610acc57610acc612408565b602002602001015160200151828281518110610aea57610aea612408565b6001600160801b03199092166020928302919091019091015280610b0d816124f6565b915050610ab1565b50610b458989836040518060400160405280600b81526020016a06d657673686172653a76360ac1b81525061016e565b96505050505050505b92915050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190611f1a565b610bcc57600080fd5b6040516302ba698160e61b815260009073__$e374338554c5da70f90c17374827737168$__9063ae9a604090610c06908790600401612552565b600060405180830381865af4158015610c23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4b919081019061241e565b949350505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc29190611f1a565b610ccb57600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610d16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d3e919081019061241e565b905080806020019051810190610d54919061241e565b91505090565b610d626116e2565b60607f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f846000015184604051610d9992919061229f565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e846000015185604001518660600151604051610de0939291906122c2565b60405180910390a150829050815b9250929050565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e610e23602083018361259b565b610e3360608401604085016125b8565b610e4060608501856125d5565b604051610e50949392919061261e565b60405180910390a150565b610e636116e2565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110610e9c57610e9c612408565b60200260200101906001600160a01b031690816001600160a01b031681525050634210000181600181518110610ed457610ed4612408565b6001600160a01b0390921660209283029190910190910152604051634f56314160e01b815260009073__$e374338554c5da70f90c17374827737168$__90634f56314190610f2a908a9086908190600401612686565b600060405180830381865af4158015610f47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f6f91908101906126f5565b905073__$e374338554c5da70f90c17374827737168$__63a90a6c5f826000015188604051602001610fa19190612729565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610fcd92919061273c565b60006040518083038186803b158015610fe557600080fd5b505af4158015610ff9573d6000803e3d6000fd5b5050825160405163727bb5c760e01b81526000935083925073__$e374338554c5da70f90c17374827737168$__9163727bb5c79161103d918e918c90600401612793565b600060405180830381865af415801561105a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110829190810190612868565b845160405163a90a6c5f60e01b815292945090925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916110c191859060040161289e565b60006040518083038186803b1580156110d957600080fd5b505af41580156110ed573d6000803e3d6000fd5b50949c939b50929950505050505050505050565b604080516001600160801b03198481166020830152825160108184030181526030830184529084166050830152825180830384018152606090920190925260009190825b82518110156111b95781818151811061116057611160612408565b602001015160f81c60f81b6001600160f81b03191683828151811061118757611187612408565b01602001516001600160f81b031916146111a75760009350505050610b4e565b806111b1816124f6565b915050611145565b50600195945050505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015611210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112349190611f1a565b61123d57600080fd5b60408051632cb05c5360e21b81526001600160401b03841660048201526024810191909152601560448201527464656661756c743a76303a65746842756e646c657360581b606482015260009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af41580156112c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ee9190810190612325565b9050805160000361131457306040516375fff46760e01b815260040161054191906123d5565b600081516001600160401b0381111561132f5761132f611716565b60405190808252806020026020018201604052801561137457816020015b604080518082019091526000808252602082015281526020019060019003908161134d5790505b50905060005b82518110156114ee57600073__$e374338554c5da70f90c17374827737168$__63ae9a60408584815181106113b1576113b1612408565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b031990921660048301526024820152601e60448201527f64656661756c743a76303a65746842756e646c6553696d526573756c747300006064820152608401600060405180830381865af4158015611435573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261145d919081019061241e565b9050600081806020019051810190611475919061250f565b90506040518060400160405280826001600160401b031681526020018685815181106114a3576114a3612408565b6020026020010151600001516001600160801b0319168152508484815181106114ce576114ce612408565b6020026020010181905250505080806114e6906124f6565b91505061137a565b50805160005b6114ff60018361252c565b81101561160c57600061151382600161253f565b90505b828110156115f95783818151811061153057611530612408565b6020026020010151600001516001600160401b031684838151811061155757611557612408565b6020026020010151600001516001600160401b031610156115e757600084838151811061158657611586612408565b602002602001015190508482815181106115a2576115a2612408565b60200260200101518584815181106115bc576115bc612408565b6020026020010181905250808583815181106115da576115da612408565b6020026020010181905250505b806115f1816124f6565b915050611516565b5080611604816124f6565b9150506114f4565b50600083516001600160401b0381111561162857611628611716565b604051908082528060200260200182016040528015611651578160200160208202803683370190505b50905060005b83518110156116bb5783818151811061167257611672612408565b60200260200101516020015182828151811061169057611690612408565b6001600160801b031990921660209283029190910190910152806116b3816124f6565b915050611657565b506116d78787836040518060200160405280600081525061016e565b979650505050505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561174e5761174e611716565b60405290565b60405161010081016001600160401b038111828210171561174e5761174e611716565b60405160c081016001600160401b038111828210171561174e5761174e611716565b604051601f8201601f191681016001600160401b03811182821017156117c1576117c1611716565b604052919050565b6001600160401b03811681146117de57600080fd5b50565b80356117ec816117c9565b919050565b60006001600160401b0382111561180a5761180a611716565b50601f01601f191660200190565b600082601f83011261182957600080fd5b813561183c611837826117f1565b611799565b81815284602083860101111561185157600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b03811681146117de57600080fd5b80356117ec8161186e565b60006001600160401b038211156118a7576118a7611716565b5060051b60200190565b600082601f8301126118c257600080fd5b813560206118d26118378361188e565b82815260079290921b840181019181810190868411156118f157600080fd5b8286015b84811015611968576080818903121561190e5760008081fd5b61191661172c565b8135611921816117c9565b815281850135611930816117c9565b818601526040828101356119438161186e565b90820152606082810135611956816117c9565b908201528352918301916080016118f5565b509695505050505050565b6000610100828403121561198657600080fd5b61198e611754565b9050611999826117e1565b815260208201356001600160401b03808211156119b557600080fd5b6119c185838601611818565b6020840152604084013560408401526119dc606085016117e1565b60608401526119ed60808501611883565b60808401526119fe60a085016117e1565b60a084015260c084013560c084015260e0840135915080821115611a2157600080fd5b50611a2e848285016118b1565b60e08301525092915050565b6001600160801b0319811681146117de57600080fd5b80356117ec81611a3a565b60008060008060808587031215611a7157600080fd5b84356001600160401b0380821115611a8857600080fd5b611a9488838901611973565b95506020915081870135611aa7816117c9565b9450604087013581811115611abb57600080fd5b8701601f81018913611acc57600080fd5b8035611ada6118378261188e565b81815260059190911b8201840190848101908b831115611af957600080fd5b928501925b82841015611b20578335611b1181611a3a565b82529285019290850190611afe565b96505050506060870135915080821115611b3957600080fd5b50611b4687828801611818565b91505092959194509250565b60005b83811015611b6d578181015183820152602001611b55565b50506000910152565b60008151808452611b8e816020860160208601611b52565b601f01601f19169290920160200192915050565b602081526000611bb56020830184611b76565b9392505050565b60008060408385031215611bcf57600080fd5b82356001600160401b03811115611be557600080fd5b611bf185828601611973565b9250506020830135611c02816117c9565b809150509250929050565b60008060408385031215611c2057600080fd5b8235611c2b81611a3a565b915060208301356001600160401b03811115611c4657600080fd5b611c5285828601611818565b9150509250929050565b600082601f830112611c6d57600080fd5b81356020611c7d6118378361188e565b82815260059290921b84018101918181019086841115611c9c57600080fd5b8286015b84811015611968578035611cb38161186e565b8352918301918301611ca0565b60008060408385031215611cd357600080fd5b82356001600160401b0380821115611cea57600080fd5b9084019060c08287031215611cfe57600080fd5b611d06611777565b611d0f83611a50565b8152611d1d60208401611a50565b6020820152611d2e604084016117e1565b6040820152606083013582811115611d4557600080fd5b611d5188828601611c5c565b606083015250608083013582811115611d6957600080fd5b611d7588828601611c5c565b60808301525060a083013582811115611d8d57600080fd5b611d9988828601611818565b60a08301525093506020850135915080821115611db557600080fd5b50611c5285828601611818565b600081518084526020808501945080840160005b83811015611dfb5781516001600160a01b031687529582019590820190600101611dd6565b509495945050505050565b6040815260006001600160801b0319808551166040840152806020860151166060840152506001600160401b036040850151166080830152606084015160c060a0840152611e58610100840182611dc2565b90506080850151603f19808584030160c0860152611e768383611dc2565b925060a08701519150808584030160e086015250611e948282611b76565b9150508281036020840152611ea98185611b76565b95945050505050565b600060208284031215611ec457600080fd5b81356001600160401b03811115611eda57600080fd5b820160c08185031215611bb557600080fd5b60008060408385031215611eff57600080fd5b8235611f0a81611a3a565b91506020830135611c0281611a3a565b600060208284031215611f2c57600080fd5b81518015158114611bb557600080fd5b600081518084526020808501945080840160005b83811015611dfb57815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611f50565b600081518084526020808501945080840160005b83811015611dfb5781516001600160801b03191687529582019590820190600101611fb7565b608081526001600160401b038551166080820152600060208601516101008060a085015261200f610180850183611b76565b9150604088015160c0850152606088015161203560e08601826001600160401b03169052565b5060808801516001600160a01b03169084015260a08701516001600160401b031661012084015260c087015161014084015260e0870151838203607f19016101608501526120838282611f3c565b91505061209b60208401876001600160401b03169052565b82810360408401526120ad8186611fa3565b905082810360608401526116d78185611b76565b80516117ec81611a3a565b80516117ec816117c9565b600082601f8301126120e857600080fd5b815160206120f86118378361188e565b82815260059290921b8401810191818101908684111561211757600080fd5b8286015b8481101561196857805161212e8161186e565b835291830191830161211b565b600082601f83011261214c57600080fd5b815161215a611837826117f1565b81815284602083860101111561216f57600080fd5b610c4b826020830160208701611b52565b600060c0828403121561219257600080fd5b61219a611777565b90506121a5826120c1565b81526121b3602083016120c1565b60208201526121c4604083016120cc565b604082015260608201516001600160401b03808211156121e357600080fd5b6121ef858386016120d7565b6060840152608084015191508082111561220857600080fd5b612214858386016120d7565b608084015260a084015191508082111561222d57600080fd5b5061223a8482850161213b565b60a08301525092915050565b6000806040838503121561225957600080fd5b82516001600160401b038082111561227057600080fd5b61227c86838701612180565b9350602085015191508082111561229257600080fd5b50611c528582860161213b565b6001600160801b031983168152604060208201526000610c4b6040830184611b76565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000611ea96060830184611dc2565b6001600160e01b0319831681528151600090612317816004850160208701611b52565b919091016004019392505050565b6000602080838503121561233857600080fd5b82516001600160401b038082111561234f57600080fd5b818501915085601f83011261236357600080fd5b81516123716118378261188e565b81815260059190911b8301840190848101908883111561239057600080fd5b8585015b838110156123c8578051858111156123ac5760008081fd5b6123ba8b89838a0101612180565b845250918601918601612394565b5098975050505050505050565b6001600160a01b03919091168152604060208201819052600790820152666e6f206269647360c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561243057600080fd5b81516001600160401b0381111561244657600080fd5b610c4b8482850161213b565b6000602080838503121561246557600080fd5b82516001600160401b0381111561247b57600080fd5b8301601f8101851361248c57600080fd5b805161249a6118378261188e565b81815260059190911b820183019083810190878311156124b957600080fd5b928401925b828410156116d75783516124d181611a3a565b825292840192908401906124be565b634e487b7160e01b600052601160045260246000fd5b600060018201612508576125086124e0565b5060010190565b60006020828403121561252157600080fd5b8151611bb5816117c9565b81810381811115610b4e57610b4e6124e0565b80820180821115610b4e57610b4e6124e0565b6001600160801b031982168152604060208201526000611bb5604083016019815278191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b602082015260400190565b6000602082840312156125ad57600080fd5b8135611bb581611a3a565b6000602082840312156125ca57600080fd5b8135611bb5816117c9565b6000808335601e198436030181126125ec57600080fd5b8301803591506001600160401b0382111561260657600080fd5b6020019150600581901b3603821315610dee57600080fd5b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156123c857833561266b8161186e565b6001600160a01b031682529282019290820190600101612658565b6001600160401b03841681526080602082015260006126a86080830185611dc2565b82810360408401526126ba8185611dc2565b8381036060850152601581527464656661756c743a76303a6d65726765644269647360581b60208201529050604081015b9695505050505050565b60006020828403121561270757600080fd5b81516001600160401b0381111561271d57600080fd5b610c4b84828501612180565b602081526000611bb56020830184611fa3565b6001600160801b03198316815260606020820152600061278160608301601581527464656661756c743a76303a6d65726765644269647360581b602082015260400190565b8281036040840152611ea98185611b76565b606081526001600160401b038451166060820152600060208501516101008060808501526127c5610160850183611b76565b9150604087015160a085015260608701516127eb60c08601826001600160401b03169052565b5060808701516001600160a01b03811660e08601525060a08701516001600160401b03811685830152505060c086015161012084015260e0860151838203605f190161014085015261283d8282611f3c565b91505061285660208401866001600160801b0319169052565b82810360408401526126eb8185611b76565b6000806040838503121561287b57600080fd5b82516001600160401b038082111561289257600080fd5b61227c8683870161213b565b6001600160801b031983168152606060208201526000612781606083016019815278191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b60208201526040019056fea164736f6c6343000813000a" }, "bytecode": { - "object": "0x608060405234801561001057600080fd5b506125db806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b33e471511610066578063b33e4715146100ef578063c0b9d28714610110578063c2eceb1114610125578063e829cd5d14610138578063ebb89de41461015b57600080fd5b80634c8820f81461009857806354dfbd39146100c15780637df1cde2146100d457806392f07a58146100e7575b600080fd5b6100ab6100a636600461189a565b61016e565b6040516100b891906119e1565b60405180910390f35b6100ab6100cf3660046119fb565b6102d1565b6100ab6100e2366004611a4c565b6108a1565b6100ab6108f9565b6101026100fd366004611aff565b610932565b6040516100b8929190611c45565b61012361011e366004611ce8565b6109cd565b005b61010261013336600461189a565b610a33565b61014b610146366004611d22565b610bc9565b60405190151581526020016100b8565b6100ab6101693660046119fb565b610c8d565b6060610178611051565b61018157600080fd5b60405163c2eceb1160e01b81526000908190309063c2eceb11906101af908a908a908a908a90600401611e83565b600060405180830381865afa1580156101cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f49190810190612050565b915091507f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f82600001518260405161022d9291906120a9565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e826000015183604001518460600151604051610274939291906120cc565b60405180910390a160405163b33e471560e01b906102989084908490602001611c45565b60408051601f19818403018152908290526102b692916020016120fe565b60405160208183030381529060405292505050949350505050565b60606102db611051565b6102e457600080fd5b600061031d83604051806040016040528060158152602001746d657673686172653a76303a6d617463684269647360581b8152506110d1565b90506000610360846040518060400160405280601c81526020017f6d657673686172653a76303a756e6d61746368656442756e646c6573000000008152506110d1565b9050805160000361038f57306040516375fff46760e01b8152600401610386919061212f565b60405180910390fd5b600081516001600160401b038111156103aa576103aa611555565b6040519080825280602002602001820160405280156103e357816020015b6103d0611521565b8152602001906001900390816103c85790505b50905060005b825181101561053657600083828151811061040657610406612162565b6020026020010151905060005b855181101561050357600061047387838151811061043357610433612162565b602002602001015160000151604051806040016040528060168152602001756d657673686172653a76303a6d65726765644269647360501b815250611199565b8060200190518101906104869190612178565b90506104c98160008151811061049e5761049e612162565b60200260200101518786815181106104b8576104b8612162565b602002602001015160000151610bc9565b156104f0578682815181106104e0576104e0612162565b6020026020010151925050610503565b50806104fb8161221c565b915050610413565b508083838151811061051757610517612162565b602002602001018190525050808061052e9061221c565b9150506103e9565b50600081516001600160401b0381111561055257610552611555565b60405190808252806020026020018201604052801561059757816020015b60408051808201909152600080825260208201528152602001906001900390816105705790505b50905060005b82518110156106955760006106048483815181106105bd576105bd612162565b6020026020010151600001516040518060400160405280601f81526020017f6d657673686172653a76303a65746842756e646c6553696d526573756c747300815250611199565b905060008180602001905181019061061c9190612235565b90506040518060400160405280826001600160401b0316815260200186858151811061064a5761064a612162565b6020026020010151600001516001600160801b03191681525084848151811061067557610675612162565b60200260200101819052505050808061068d9061221c565b91505061059d565b50805160005b6106a6600183612252565b8110156107b35760006106ba826001612265565b90505b828110156107a0578381815181106106d7576106d7612162565b6020026020010151600001516001600160401b03168483815181106106fe576106fe612162565b6020026020010151600001516001600160401b0316101561078e57600084838151811061072d5761072d612162565b6020026020010151905084828151811061074957610749612162565b602002602001015185848151811061076357610763612162565b60200260200101819052508085838151811061078157610781612162565b6020026020010181905250505b806107988161221c565b9150506106bd565b50806107ab8161221c565b91505061069b565b50600083516001600160401b038111156107cf576107cf611555565b6040519080825280602002602001820160405280156107f8578160200160208202803683370190505b50905060005b83518110156108625783818151811061081957610819612162565b60200260200101516020015182828151811061083757610837612162565b6001600160801b0319909216602092830291909101909101528061085a8161221c565b9150506107fe565b506108928989836040518060400160405280600b81526020016a06d657673686172653a76360ac1b81525061016e565b96505050505050505b92915050565b60606108ab611051565b6108b457600080fd5b60006108f18460405180604001604052806019815260200178191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b815250611199565b949350505050565b6060610903611051565b61090c57600080fd5b6000610916611244565b90508080602001905181019061092c9190612278565b91505090565b61093a611521565b60607f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f8460000151846040516109719291906120a9565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8460000151856040015186606001516040516109b8939291906120cc565b60405180910390a150829050815b9250929050565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6109fb60208301836122ac565b610a0b60608401604085016122c9565b610a1860608501856122e6565b604051610a28949392919061232f565b60405180910390a150565b610a3b611521565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110610a7457610a74612162565b60200260200101906001600160a01b031690816001600160a01b031681525050634210000181600181518110610aac57610aac612162565b60200260200101906001600160a01b031690816001600160a01b0316815250506000610b078783846040518060400160405280601581526020017464656661756c743a76303a6d65726765644269647360581b8152506112d6565b9050610b6481600001516040518060400160405280601581526020017464656661756c743a76303a6d65726765644269647360581b81525088604051602001610b5091906123a4565b60405160208183030381529060405261139f565b600080610b768a846000015189611451565b91509150610bba836000015160405180604001604052806019815260200178191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b8152508361139f565b50909890975095505050505050565b604080516001600160801b03198481166020830152825160108184030181526030830184529084166050830152825180830384018152606090920190925260009190825b8251811015610c8157818181518110610c2857610c28612162565b602001015160f81c60f81b6001600160f81b031916838281518110610c4f57610c4f612162565b01602001516001600160f81b03191614610c6f576000935050505061089b565b80610c798161221c565b915050610c0d565b50600195945050505050565b6060610c97611051565b610ca057600080fd5b6000610cd9836040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b8152506110d1565b90508051600003610cff57306040516375fff46760e01b8152600401610386919061212f565b600081516001600160401b03811115610d1a57610d1a611555565b604051908082528060200260200182016040528015610d5f57816020015b6040805180820190915260008082526020820152815260200190600190039081610d385790505b50905060005b8251811015610e5d576000610dcc848381518110610d8557610d85612162565b6020026020010151600001516040518060400160405280601e81526020017f64656661756c743a76303a65746842756e646c6553696d526573756c74730000815250611199565b9050600081806020019051810190610de49190612235565b90506040518060400160405280826001600160401b03168152602001868581518110610e1257610e12612162565b6020026020010151600001516001600160801b031916815250848481518110610e3d57610e3d612162565b602002602001018190525050508080610e559061221c565b915050610d65565b50805160005b610e6e600183612252565b811015610f7b576000610e82826001612265565b90505b82811015610f6857838181518110610e9f57610e9f612162565b6020026020010151600001516001600160401b0316848381518110610ec657610ec6612162565b6020026020010151600001516001600160401b03161015610f56576000848381518110610ef557610ef5612162565b60200260200101519050848281518110610f1157610f11612162565b6020026020010151858481518110610f2b57610f2b612162565b602002602001018190525080858381518110610f4957610f49612162565b6020026020010181905250505b80610f608161221c565b915050610e85565b5080610f738161221c565b915050610e63565b50600083516001600160401b03811115610f9757610f97611555565b604051908082528060200260200182016040528015610fc0578160200160208202803683370190505b50905060005b835181101561102a57838181518110610fe157610fe1612162565b602002602001015160200151828281518110610fff57610fff612162565b6001600160801b031990921660209283029190910190910152806110228161221c565b915050610fc6565b506110468787836040518060200160405280600081525061016e565b979650505050505050565b6040516000908190819063420100009082818181855afa9150503d8060008114611097576040519150601f19603f3d011682016040523d82523d6000602084013e61109c565b606091505b5091509150816110c7576342010000816040516375fff46760e01b81526004016103869291906123b7565b6020015192915050565b606060008063420300016001600160a01b031685856040516020016110f79291906123db565b60408051601f1981840301815290829052611111916123fd565b600060405180830381855afa9150503d806000811461114c576040519150601f19603f3d011682016040523d82523d6000602084013e611151565b606091505b50915091508161117c576342030001816040516375fff46760e01b81526004016103869291906123b7565b808060200190518101906111909190612419565b95945050505050565b606060008063420200016001600160a01b031685856040516020016111bf9291906120a9565b60408051601f19818403018152908290526111d9916123fd565b600060405180830381855afa9150503d8060008114611214576040519150601f19603f3d011682016040523d82523d6000602084013e611219565b606091505b5091509150816108f1576342020001816040516375fff46760e01b81526004016103869291906123b7565b60408051600080825260208201928390526060929091829163420100019161126b916123fd565b600060405180830381855afa9150503d80600081146112a6576040519150601f19603f3d011682016040523d82523d6000602084013e6112ab565b606091505b50915091508161089b576342010001816040516375fff46760e01b81526004016103869291906123b7565b6112de611521565b60008063420300006001600160a01b03168787878760405160200161130694939291906124bc565b60408051601f1981840301815290829052611320916123fd565b600060405180830381855afa9150503d806000811461135b576040519150601f19603f3d011682016040523d82523d6000602084013e611360565b606091505b50915091508161138b576342030000816040516375fff46760e01b81526004016103869291906123b7565b8080602001905181019061104691906124f0565b60008063420200006001600160a01b03168585856040516020016113c593929190612524565b60408051601f19818403018152908290526113df916123fd565b600060405180830381855afa9150503d806000811461141a576040519150601f19603f3d011682016040523d82523d6000602084013e61141f565b606091505b50915091508161144a576342020000816040516375fff46760e01b81526004016103869291906123b7565b5050505050565b60608060008063421000016001600160a01b031687878760405160200161147a93929190612563565b60408051601f1981840301815290829052611494916123fd565b600060405180830381855afa9150503d80600081146114cf576040519150601f19603f3d011682016040523d82523d6000602084013e6114d4565b606091505b5091509150816114ff576342100001816040516375fff46760e01b81526004016103869291906123b7565b808060200190518101906115139190612598565b935093505050935093915050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561158d5761158d611555565b60405290565b60405161010081016001600160401b038111828210171561158d5761158d611555565b60405160c081016001600160401b038111828210171561158d5761158d611555565b604051601f8201601f191681016001600160401b038111828210171561160057611600611555565b604052919050565b6001600160401b038116811461161d57600080fd5b50565b803561162b81611608565b919050565b60006001600160401b0382111561164957611649611555565b50601f01601f191660200190565b600082601f83011261166857600080fd5b813561167b61167682611630565b6115d8565b81815284602083860101111561169057600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461161d57600080fd5b803561162b816116ad565b60006001600160401b038211156116e6576116e6611555565b5060051b60200190565b600082601f83011261170157600080fd5b81356020611711611676836116cd565b82815260079290921b8401810191818101908684111561173057600080fd5b8286015b848110156117a7576080818903121561174d5760008081fd5b61175561156b565b813561176081611608565b81528185013561176f81611608565b81860152604082810135611782816116ad565b9082015260608281013561179581611608565b90820152835291830191608001611734565b509695505050505050565b600061010082840312156117c557600080fd5b6117cd611593565b90506117d882611620565b815260208201356001600160401b03808211156117f457600080fd5b61180085838601611657565b60208401526040840135604084015261181b60608501611620565b606084015261182c608085016116c2565b608084015261183d60a08501611620565b60a084015260c084013560c084015260e084013591508082111561186057600080fd5b5061186d848285016116f0565b60e08301525092915050565b6001600160801b03198116811461161d57600080fd5b803561162b81611879565b600080600080608085870312156118b057600080fd5b84356001600160401b03808211156118c757600080fd5b6118d3888389016117b2565b955060209150818701356118e681611608565b94506040870135818111156118fa57600080fd5b8701601f8101891361190b57600080fd5b8035611919611676826116cd565b81815260059190911b8201840190848101908b83111561193857600080fd5b928501925b8284101561195f57833561195081611879565b8252928501929085019061193d565b9650505050606087013591508082111561197857600080fd5b5061198587828801611657565b91505092959194509250565b60005b838110156119ac578181015183820152602001611994565b50506000910152565b600081518084526119cd816020860160208601611991565b601f01601f19169290920160200192915050565b6020815260006119f460208301846119b5565b9392505050565b60008060408385031215611a0e57600080fd5b82356001600160401b03811115611a2457600080fd5b611a30858286016117b2565b9250506020830135611a4181611608565b809150509250929050565b60008060408385031215611a5f57600080fd5b8235611a6a81611879565b915060208301356001600160401b03811115611a8557600080fd5b611a9185828601611657565b9150509250929050565b600082601f830112611aac57600080fd5b81356020611abc611676836116cd565b82815260059290921b84018101918181019086841115611adb57600080fd5b8286015b848110156117a7578035611af2816116ad565b8352918301918301611adf565b60008060408385031215611b1257600080fd5b82356001600160401b0380821115611b2957600080fd5b9084019060c08287031215611b3d57600080fd5b611b456115b6565b611b4e8361188f565b8152611b5c6020840161188f565b6020820152611b6d60408401611620565b6040820152606083013582811115611b8457600080fd5b611b9088828601611a9b565b606083015250608083013582811115611ba857600080fd5b611bb488828601611a9b565b60808301525060a083013582811115611bcc57600080fd5b611bd888828601611657565b60a08301525093506020850135915080821115611bf457600080fd5b50611a9185828601611657565b600081518084526020808501945080840160005b83811015611c3a5781516001600160a01b031687529582019590820190600101611c15565b509495945050505050565b6040815260006001600160801b0319808551166040840152806020860151166060840152506001600160401b036040850151166080830152606084015160c060a0840152611c97610100840182611c01565b90506080850151603f19808584030160c0860152611cb58383611c01565b925060a08701519150808584030160e086015250611cd382826119b5565b915050828103602084015261119081856119b5565b600060208284031215611cfa57600080fd5b81356001600160401b03811115611d1057600080fd5b820160c081850312156119f457600080fd5b60008060408385031215611d3557600080fd5b8235611d4081611879565b91506020830135611a4181611879565b600081518084526020808501945080840160005b83811015611c3a57815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611d64565b60006101006001600160401b038084511685526020840151826020870152611de1838701826119b5565b925050604084015160408601528060608501511660608601525060018060a01b03608084015116608085015260a0830151611e2760a08601826001600160401b03169052565b5060c083015160c085015260e083015184820360e08601526111908282611d50565b600081518084526020808501945080840160005b83811015611c3a5781516001600160801b03191687529582019590820190600101611e5d565b608081526000611e966080830187611db7565b6001600160401b03861660208401528281036040840152611eb78186611e49565b9050828103606084015261104681856119b5565b805161162b81611879565b805161162b81611608565b600082601f830112611ef257600080fd5b81516020611f02611676836116cd565b82815260059290921b84018101918181019086841115611f2157600080fd5b8286015b848110156117a7578051611f38816116ad565b8352918301918301611f25565b600082601f830112611f5657600080fd5b8151611f6461167682611630565b818152846020838601011115611f7957600080fd5b6108f1826020830160208701611991565b600060c08284031215611f9c57600080fd5b611fa46115b6565b9050611faf82611ecb565b8152611fbd60208301611ecb565b6020820152611fce60408301611ed6565b604082015260608201516001600160401b0380821115611fed57600080fd5b611ff985838601611ee1565b6060840152608084015191508082111561201257600080fd5b61201e85838601611ee1565b608084015260a084015191508082111561203757600080fd5b5061204484828501611f45565b60a08301525092915050565b6000806040838503121561206357600080fd5b82516001600160401b038082111561207a57600080fd5b61208686838701611f8a565b9350602085015191508082111561209c57600080fd5b50611a9185828601611f45565b6001600160801b0319831681526040602082015260006108f160408301846119b5565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006111906060830184611c01565b6001600160e01b0319831681528151600090612121816004850160208701611991565b919091016004019392505050565b6001600160a01b03919091168152604060208201819052600790820152666e6f206269647360c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602080838503121561218b57600080fd5b82516001600160401b038111156121a157600080fd5b8301601f810185136121b257600080fd5b80516121c0611676826116cd565b81815260059190911b820183019083810190878311156121df57600080fd5b928401925b828410156110465783516121f781611879565b825292840192908401906121e4565b634e487b7160e01b600052601160045260246000fd5b60006001820161222e5761222e612206565b5060010190565b60006020828403121561224757600080fd5b81516119f481611608565b8181038181111561089b5761089b612206565b8082018082111561089b5761089b612206565b60006020828403121561228a57600080fd5b81516001600160401b038111156122a057600080fd5b6108f184828501611f45565b6000602082840312156122be57600080fd5b81356119f481611879565b6000602082840312156122db57600080fd5b81356119f481611608565b6000808335601e198436030181126122fd57600080fd5b8301803591506001600160401b0382111561231757600080fd5b6020019150600581901b36038213156109c657600080fd5b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b8681101561239757833561237c816116ad565b6001600160a01b031682529282019290820190600101612369565b5098975050505050505050565b6020815260006119f46020830184611e49565b6001600160a01b03831681526040602082018190526000906108f1908301846119b5565b6001600160401b03831681526040602082015260006108f160408301846119b5565b6000825161240f818460208701611991565b9190910192915050565b6000602080838503121561242c57600080fd5b82516001600160401b038082111561244357600080fd5b818501915085601f83011261245757600080fd5b8151612465611676826116cd565b81815260059190911b8301840190848101908883111561248457600080fd5b8585015b83811015612397578051858111156124a05760008081fd5b6124ae8b89838a0101611f8a565b845250918601918601612488565b6001600160401b03851681526080602082015260006124de6080830186611c01565b8281036040840152611eb78186611c01565b60006020828403121561250257600080fd5b81516001600160401b0381111561251857600080fd5b6108f184828501611f8a565b6001600160801b03198416815260606020820152600061254760608301856119b5565b828103604084015261255981856119b5565b9695505050505050565b6060815260006125766060830186611db7565b6001600160801b031985166020840152828103604084015261255981856119b5565b600080604083850312156125ab57600080fd5b82516001600160401b03808211156125c257600080fd5b61208686838701611f4556fea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b506128f4806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b33e471511610066578063b33e4715146100ef578063c0b9d28714610110578063c2eceb1114610125578063e829cd5d14610138578063ebb89de41461015b57600080fd5b80634c8820f81461009857806354dfbd39146100c15780637df1cde2146100d457806392f07a58146100e7575b600080fd5b6100ab6100a6366004611a5b565b61016e565b6040516100b89190611ba2565b60405180910390f35b6100ab6100cf366004611bbc565b610336565b6100ab6100e2366004611c0d565b610b54565b6100ab610c53565b6101026100fd366004611cc0565b610d5a565b6040516100b8929190611e06565b61012361011e366004611eb2565b610df5565b005b610102610133366004611a5b565b610e5b565b61014b610146366004611eec565b611101565b60405190151581526020016100b8565b6100ab610169366004611bbc565b6111c5565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd9190611f1a565b6101e657600080fd5b60405163c2eceb1160e01b81526000908190309063c2eceb1190610214908a908a908a908a90600401611fdd565b600060405180830381865afa158015610231573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102599190810190612246565b915091507f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f82600001518260405161029292919061229f565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8260000151836040015184606001516040516102d9939291906122c2565b60405180910390a160405163b33e471560e01b906102fd9084908490602001611e06565b60408051601f198184030181529082905261031b92916020016122f4565b60405160208183030381529060405292505050949350505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a59190611f1a565b6103ae57600080fd5b60408051632cb05c5360e21b81526001600160401b0384166004820152602481019190915260156044820152746d657673686172653a76303a6d617463684269647360581b606482015260009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af4158015610437573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261045f9190810190612325565b60408051632cb05c5360e21b81526001600160401b03861660048201526024810191909152601c60448201527f6d657673686172653a76303a756e6d61746368656442756e646c657300000000606482015290915060009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af41580156104f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261051b9190810190612325565b9050805160000361054a57306040516375fff46760e01b815260040161054191906123d5565b60405180910390fd5b600081516001600160401b0381111561056557610565611716565b60405190808252806020026020018201604052801561059e57816020015b61058b6116e2565b8152602001906001900390816105835790505b50905060005b825181101561076d5760008382815181106105c1576105c1612408565b6020026020010151905060005b855181101561073a57600073__$e374338554c5da70f90c17374827737168$__63ae9a604088848151811061060557610605612408565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b03199092166004830152602482015260166044820152756d657673686172653a76303a6d65726765644269647360501b6064820152608401600060405180830381865af4158015610682573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106aa919081019061241e565b8060200190518101906106bd9190612452565b9050610700816000815181106106d5576106d5612408565b60200260200101518786815181106106ef576106ef612408565b602002602001015160000151611101565b156107275786828151811061071757610717612408565b602002602001015192505061073a565b5080610732816124f6565b9150506105ce565b508083838151811061074e5761074e612408565b6020026020010181905250508080610765906124f6565b9150506105a4565b50600081516001600160401b0381111561078957610789611716565b6040519080825280602002602001820160405280156107ce57816020015b60408051808201909152600080825260208201528152602001906001900390816107a75790505b50905060005b825181101561094857600073__$e374338554c5da70f90c17374827737168$__63ae9a604085848151811061080b5761080b612408565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b031990921660048301526024820152601f60448201527f6d657673686172653a76303a65746842756e646c6553696d526573756c7473006064820152608401600060405180830381865af415801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108b7919081019061241e565b90506000818060200190518101906108cf919061250f565b90506040518060400160405280826001600160401b031681526020018685815181106108fd576108fd612408565b6020026020010151600001516001600160801b03191681525084848151811061092857610928612408565b602002602001018190525050508080610940906124f6565b9150506107d4565b50805160005b61095960018361252c565b811015610a6657600061096d82600161253f565b90505b82811015610a535783818151811061098a5761098a612408565b6020026020010151600001516001600160401b03168483815181106109b1576109b1612408565b6020026020010151600001516001600160401b03161015610a415760008483815181106109e0576109e0612408565b602002602001015190508482815181106109fc576109fc612408565b6020026020010151858481518110610a1657610a16612408565b602002602001018190525080858381518110610a3457610a34612408565b6020026020010181905250505b80610a4b816124f6565b915050610970565b5080610a5e816124f6565b91505061094e565b50600083516001600160401b03811115610a8257610a82611716565b604051908082528060200260200182016040528015610aab578160200160208202803683370190505b50905060005b8351811015610b1557838181518110610acc57610acc612408565b602002602001015160200151828281518110610aea57610aea612408565b6001600160801b03199092166020928302919091019091015280610b0d816124f6565b915050610ab1565b50610b458989836040518060400160405280600b81526020016a06d657673686172653a76360ac1b81525061016e565b96505050505050505b92915050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190611f1a565b610bcc57600080fd5b6040516302ba698160e61b815260009073__$e374338554c5da70f90c17374827737168$__9063ae9a604090610c06908790600401612552565b600060405180830381865af4158015610c23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4b919081019061241e565b949350505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc29190611f1a565b610ccb57600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610d16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d3e919081019061241e565b905080806020019051810190610d54919061241e565b91505090565b610d626116e2565b60607f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f846000015184604051610d9992919061229f565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e846000015185604001518660600151604051610de0939291906122c2565b60405180910390a150829050815b9250929050565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e610e23602083018361259b565b610e3360608401604085016125b8565b610e4060608501856125d5565b604051610e50949392919061261e565b60405180910390a150565b610e636116e2565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110610e9c57610e9c612408565b60200260200101906001600160a01b031690816001600160a01b031681525050634210000181600181518110610ed457610ed4612408565b6001600160a01b0390921660209283029190910190910152604051634f56314160e01b815260009073__$e374338554c5da70f90c17374827737168$__90634f56314190610f2a908a9086908190600401612686565b600060405180830381865af4158015610f47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f6f91908101906126f5565b905073__$e374338554c5da70f90c17374827737168$__63a90a6c5f826000015188604051602001610fa19190612729565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610fcd92919061273c565b60006040518083038186803b158015610fe557600080fd5b505af4158015610ff9573d6000803e3d6000fd5b5050825160405163727bb5c760e01b81526000935083925073__$e374338554c5da70f90c17374827737168$__9163727bb5c79161103d918e918c90600401612793565b600060405180830381865af415801561105a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110829190810190612868565b845160405163a90a6c5f60e01b815292945090925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916110c191859060040161289e565b60006040518083038186803b1580156110d957600080fd5b505af41580156110ed573d6000803e3d6000fd5b50949c939b50929950505050505050505050565b604080516001600160801b03198481166020830152825160108184030181526030830184529084166050830152825180830384018152606090920190925260009190825b82518110156111b95781818151811061116057611160612408565b602001015160f81c60f81b6001600160f81b03191683828151811061118757611187612408565b01602001516001600160f81b031916146111a75760009350505050610b4e565b806111b1816124f6565b915050611145565b50600195945050505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015611210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112349190611f1a565b61123d57600080fd5b60408051632cb05c5360e21b81526001600160401b03841660048201526024810191909152601560448201527464656661756c743a76303a65746842756e646c657360581b606482015260009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af41580156112c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ee9190810190612325565b9050805160000361131457306040516375fff46760e01b815260040161054191906123d5565b600081516001600160401b0381111561132f5761132f611716565b60405190808252806020026020018201604052801561137457816020015b604080518082019091526000808252602082015281526020019060019003908161134d5790505b50905060005b82518110156114ee57600073__$e374338554c5da70f90c17374827737168$__63ae9a60408584815181106113b1576113b1612408565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b031990921660048301526024820152601e60448201527f64656661756c743a76303a65746842756e646c6553696d526573756c747300006064820152608401600060405180830381865af4158015611435573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261145d919081019061241e565b9050600081806020019051810190611475919061250f565b90506040518060400160405280826001600160401b031681526020018685815181106114a3576114a3612408565b6020026020010151600001516001600160801b0319168152508484815181106114ce576114ce612408565b6020026020010181905250505080806114e6906124f6565b91505061137a565b50805160005b6114ff60018361252c565b81101561160c57600061151382600161253f565b90505b828110156115f95783818151811061153057611530612408565b6020026020010151600001516001600160401b031684838151811061155757611557612408565b6020026020010151600001516001600160401b031610156115e757600084838151811061158657611586612408565b602002602001015190508482815181106115a2576115a2612408565b60200260200101518584815181106115bc576115bc612408565b6020026020010181905250808583815181106115da576115da612408565b6020026020010181905250505b806115f1816124f6565b915050611516565b5080611604816124f6565b9150506114f4565b50600083516001600160401b0381111561162857611628611716565b604051908082528060200260200182016040528015611651578160200160208202803683370190505b50905060005b83518110156116bb5783818151811061167257611672612408565b60200260200101516020015182828151811061169057611690612408565b6001600160801b031990921660209283029190910190910152806116b3816124f6565b915050611657565b506116d78787836040518060200160405280600081525061016e565b979650505050505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561174e5761174e611716565b60405290565b60405161010081016001600160401b038111828210171561174e5761174e611716565b60405160c081016001600160401b038111828210171561174e5761174e611716565b604051601f8201601f191681016001600160401b03811182821017156117c1576117c1611716565b604052919050565b6001600160401b03811681146117de57600080fd5b50565b80356117ec816117c9565b919050565b60006001600160401b0382111561180a5761180a611716565b50601f01601f191660200190565b600082601f83011261182957600080fd5b813561183c611837826117f1565b611799565b81815284602083860101111561185157600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b03811681146117de57600080fd5b80356117ec8161186e565b60006001600160401b038211156118a7576118a7611716565b5060051b60200190565b600082601f8301126118c257600080fd5b813560206118d26118378361188e565b82815260079290921b840181019181810190868411156118f157600080fd5b8286015b84811015611968576080818903121561190e5760008081fd5b61191661172c565b8135611921816117c9565b815281850135611930816117c9565b818601526040828101356119438161186e565b90820152606082810135611956816117c9565b908201528352918301916080016118f5565b509695505050505050565b6000610100828403121561198657600080fd5b61198e611754565b9050611999826117e1565b815260208201356001600160401b03808211156119b557600080fd5b6119c185838601611818565b6020840152604084013560408401526119dc606085016117e1565b60608401526119ed60808501611883565b60808401526119fe60a085016117e1565b60a084015260c084013560c084015260e0840135915080821115611a2157600080fd5b50611a2e848285016118b1565b60e08301525092915050565b6001600160801b0319811681146117de57600080fd5b80356117ec81611a3a565b60008060008060808587031215611a7157600080fd5b84356001600160401b0380821115611a8857600080fd5b611a9488838901611973565b95506020915081870135611aa7816117c9565b9450604087013581811115611abb57600080fd5b8701601f81018913611acc57600080fd5b8035611ada6118378261188e565b81815260059190911b8201840190848101908b831115611af957600080fd5b928501925b82841015611b20578335611b1181611a3a565b82529285019290850190611afe565b96505050506060870135915080821115611b3957600080fd5b50611b4687828801611818565b91505092959194509250565b60005b83811015611b6d578181015183820152602001611b55565b50506000910152565b60008151808452611b8e816020860160208601611b52565b601f01601f19169290920160200192915050565b602081526000611bb56020830184611b76565b9392505050565b60008060408385031215611bcf57600080fd5b82356001600160401b03811115611be557600080fd5b611bf185828601611973565b9250506020830135611c02816117c9565b809150509250929050565b60008060408385031215611c2057600080fd5b8235611c2b81611a3a565b915060208301356001600160401b03811115611c4657600080fd5b611c5285828601611818565b9150509250929050565b600082601f830112611c6d57600080fd5b81356020611c7d6118378361188e565b82815260059290921b84018101918181019086841115611c9c57600080fd5b8286015b84811015611968578035611cb38161186e565b8352918301918301611ca0565b60008060408385031215611cd357600080fd5b82356001600160401b0380821115611cea57600080fd5b9084019060c08287031215611cfe57600080fd5b611d06611777565b611d0f83611a50565b8152611d1d60208401611a50565b6020820152611d2e604084016117e1565b6040820152606083013582811115611d4557600080fd5b611d5188828601611c5c565b606083015250608083013582811115611d6957600080fd5b611d7588828601611c5c565b60808301525060a083013582811115611d8d57600080fd5b611d9988828601611818565b60a08301525093506020850135915080821115611db557600080fd5b50611c5285828601611818565b600081518084526020808501945080840160005b83811015611dfb5781516001600160a01b031687529582019590820190600101611dd6565b509495945050505050565b6040815260006001600160801b0319808551166040840152806020860151166060840152506001600160401b036040850151166080830152606084015160c060a0840152611e58610100840182611dc2565b90506080850151603f19808584030160c0860152611e768383611dc2565b925060a08701519150808584030160e086015250611e948282611b76565b9150508281036020840152611ea98185611b76565b95945050505050565b600060208284031215611ec457600080fd5b81356001600160401b03811115611eda57600080fd5b820160c08185031215611bb557600080fd5b60008060408385031215611eff57600080fd5b8235611f0a81611a3a565b91506020830135611c0281611a3a565b600060208284031215611f2c57600080fd5b81518015158114611bb557600080fd5b600081518084526020808501945080840160005b83811015611dfb57815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611f50565b600081518084526020808501945080840160005b83811015611dfb5781516001600160801b03191687529582019590820190600101611fb7565b608081526001600160401b038551166080820152600060208601516101008060a085015261200f610180850183611b76565b9150604088015160c0850152606088015161203560e08601826001600160401b03169052565b5060808801516001600160a01b03169084015260a08701516001600160401b031661012084015260c087015161014084015260e0870151838203607f19016101608501526120838282611f3c565b91505061209b60208401876001600160401b03169052565b82810360408401526120ad8186611fa3565b905082810360608401526116d78185611b76565b80516117ec81611a3a565b80516117ec816117c9565b600082601f8301126120e857600080fd5b815160206120f86118378361188e565b82815260059290921b8401810191818101908684111561211757600080fd5b8286015b8481101561196857805161212e8161186e565b835291830191830161211b565b600082601f83011261214c57600080fd5b815161215a611837826117f1565b81815284602083860101111561216f57600080fd5b610c4b826020830160208701611b52565b600060c0828403121561219257600080fd5b61219a611777565b90506121a5826120c1565b81526121b3602083016120c1565b60208201526121c4604083016120cc565b604082015260608201516001600160401b03808211156121e357600080fd5b6121ef858386016120d7565b6060840152608084015191508082111561220857600080fd5b612214858386016120d7565b608084015260a084015191508082111561222d57600080fd5b5061223a8482850161213b565b60a08301525092915050565b6000806040838503121561225957600080fd5b82516001600160401b038082111561227057600080fd5b61227c86838701612180565b9350602085015191508082111561229257600080fd5b50611c528582860161213b565b6001600160801b031983168152604060208201526000610c4b6040830184611b76565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000611ea96060830184611dc2565b6001600160e01b0319831681528151600090612317816004850160208701611b52565b919091016004019392505050565b6000602080838503121561233857600080fd5b82516001600160401b038082111561234f57600080fd5b818501915085601f83011261236357600080fd5b81516123716118378261188e565b81815260059190911b8301840190848101908883111561239057600080fd5b8585015b838110156123c8578051858111156123ac5760008081fd5b6123ba8b89838a0101612180565b845250918601918601612394565b5098975050505050505050565b6001600160a01b03919091168152604060208201819052600790820152666e6f206269647360c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561243057600080fd5b81516001600160401b0381111561244657600080fd5b610c4b8482850161213b565b6000602080838503121561246557600080fd5b82516001600160401b0381111561247b57600080fd5b8301601f8101851361248c57600080fd5b805161249a6118378261188e565b81815260059190911b820183019083810190878311156124b957600080fd5b928401925b828410156116d75783516124d181611a3a565b825292840192908401906124be565b634e487b7160e01b600052601160045260246000fd5b600060018201612508576125086124e0565b5060010190565b60006020828403121561252157600080fd5b8151611bb5816117c9565b81810381811115610b4e57610b4e6124e0565b80820180821115610b4e57610b4e6124e0565b6001600160801b031982168152604060208201526000611bb5604083016019815278191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b602082015260400190565b6000602082840312156125ad57600080fd5b8135611bb581611a3a565b6000602082840312156125ca57600080fd5b8135611bb5816117c9565b6000808335601e198436030181126125ec57600080fd5b8301803591506001600160401b0382111561260657600080fd5b6020019150600581901b3603821315610dee57600080fd5b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156123c857833561266b8161186e565b6001600160a01b031682529282019290820190600101612658565b6001600160401b03841681526080602082015260006126a86080830185611dc2565b82810360408401526126ba8185611dc2565b8381036060850152601581527464656661756c743a76303a6d65726765644269647360581b60208201529050604081015b9695505050505050565b60006020828403121561270757600080fd5b81516001600160401b0381111561271d57600080fd5b610c4b84828501612180565b602081526000611bb56020830184611fa3565b6001600160801b03198316815260606020820152600061278160608301601581527464656661756c743a76303a6d65726765644269647360581b602082015260400190565b8281036040840152611ea98185611b76565b606081526001600160401b038451166060820152600060208501516101008060808501526127c5610160850183611b76565b9150604087015160a085015260608701516127eb60c08601826001600160401b03169052565b5060808701516001600160a01b03811660e08601525060a08701516001600160401b03811685830152505060c086015161012084015260e0860151838203605f190161014085015261283d8282611f3c565b91505061285660208401866001600160801b0319169052565b82810360408401526126eb8185611b76565b6000806040838503121561287b57600080fd5b82516001600160401b038082111561289257600080fd5b61227c8683870161213b565b6001600160801b031983168152606060208201526000612781606083016019815278191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b60208201526040019056fea164736f6c6343000813000a" } } diff --git a/suave/artifacts/bids.sol/EthBlockBidSenderContract.json b/suave/artifacts/bids.sol/EthBlockBidSenderContract.json index 47dfe12957..419cb62fa6 100644 --- a/suave/artifacts/bids.sol/EthBlockBidSenderContract.json +++ b/suave/artifacts/bids.sol/EthBlockBidSenderContract.json @@ -681,9 +681,9 @@ } ], "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063b33e471511610066578063b33e4715146100ef578063c0b9d28714610110578063c2eceb1114610125578063e829cd5d14610138578063ebb89de41461015b57600080fd5b80634c8820f81461009857806354dfbd39146100c15780637df1cde2146100d457806392f07a58146100e7575b600080fd5b6100ab6100a63660046119ac565b61016e565b6040516100b89190611af3565b60405180910390f35b6100ab6100cf366004611b0d565b610327565b6100ab6100e2366004611b5e565b6108f7565b6100ab61094f565b6101026100fd366004611c11565b610988565b6040516100b8929190611dd4565b61012361011e366004611df9565b610a23565b005b6101026101333660046119ac565b610a89565b61014b610146366004611e33565b610c1f565b60405190151581526020016100b8565b6100ab610169366004611b0d565b610ce3565b60606101786110a7565b61018157600080fd5b60405163c2eceb1160e01b81526000908190309063c2eceb11906101af908a908a908a908a90600401611f94565b600060405180830381865afa1580156101cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f49190810190612161565b9150915061028c60008054610208906121ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610234906121ba565b80156102815780601f1061025657610100808354040283529160200191610281565b820191906000526020600020905b81548152906001019060200180831161026457829003601f168201915b505050505082611127565b507f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8260000151836040015184606001516040516102cc939291906121f4565b60405180910390a160405163c0b9d28760e01b906102ee908490602001612226565b60408051601f198184030181529082905261030c9291602001612239565b60405160208183030381529060405292505050949350505050565b60606103316110a7565b61033a57600080fd5b600061037383604051806040016040528060158152602001746d657673686172653a76303a6d617463684269647360581b8152506111e3565b905060006103b6846040518060400160405280601c81526020017f6d657673686172653a76303a756e6d61746368656442756e646c6573000000008152506111e3565b905080516000036103e557306040516375fff46760e01b81526004016103dc919061226a565b60405180910390fd5b600081516001600160401b0381111561040057610400611667565b60405190808252806020026020018201604052801561043957816020015b610426611633565b81526020019060019003908161041e5790505b50905060005b825181101561058c57600083828151811061045c5761045c61229d565b6020026020010151905060005b85518110156105595760006104c98783815181106104895761048961229d565b602002602001015160000151604051806040016040528060168152602001756d657673686172653a76303a6d65726765644269647360501b8152506112ab565b8060200190518101906104dc91906122b3565b905061051f816000815181106104f4576104f461229d565b602002602001015187868151811061050e5761050e61229d565b602002602001015160000151610c1f565b15610546578682815181106105365761053661229d565b6020026020010151925050610559565b508061055181612357565b915050610469565b508083838151811061056d5761056d61229d565b602002602001018190525050808061058490612357565b91505061043f565b50600081516001600160401b038111156105a8576105a8611667565b6040519080825280602002602001820160405280156105ed57816020015b60408051808201909152600080825260208201528152602001906001900390816105c65790505b50905060005b82518110156106eb57600061065a8483815181106106135761061361229d565b6020026020010151600001516040518060400160405280601f81526020017f6d657673686172653a76303a65746842756e646c6553696d526573756c7473008152506112ab565b90506000818060200190518101906106729190612370565b90506040518060400160405280826001600160401b031681526020018685815181106106a0576106a061229d565b6020026020010151600001516001600160801b0319168152508484815181106106cb576106cb61229d565b6020026020010181905250505080806106e390612357565b9150506105f3565b50805160005b6106fc60018361238d565b8110156108095760006107108260016123a0565b90505b828110156107f65783818151811061072d5761072d61229d565b6020026020010151600001516001600160401b03168483815181106107545761075461229d565b6020026020010151600001516001600160401b031610156107e45760008483815181106107835761078361229d565b6020026020010151905084828151811061079f5761079f61229d565b60200260200101518584815181106107b9576107b961229d565b6020026020010181905250808583815181106107d7576107d761229d565b6020026020010181905250505b806107ee81612357565b915050610713565b508061080181612357565b9150506106f1565b50600083516001600160401b0381111561082557610825611667565b60405190808252806020026020018201604052801561084e578160200160208202803683370190505b50905060005b83518110156108b85783818151811061086f5761086f61229d565b60200260200101516020015182828151811061088d5761088d61229d565b6001600160801b031990921660209283029190910190910152806108b081612357565b915050610854565b506108e88989836040518060400160405280600b81526020016a06d657673686172653a76360ac1b81525061016e565b96505050505050505b92915050565b60606109016110a7565b61090a57600080fd5b60006109478460405180604001604052806019815260200178191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b8152506112ab565b949350505050565b60606109596110a7565b61096257600080fd5b600061096c611356565b90508080602001905181019061098291906123b3565b91505090565b610990611633565b60607f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f8460000151846040516109c79291906123e7565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e846000015185604001518660600151604051610a0e939291906121f4565b60405180910390a150829050815b9250929050565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e610a51602083018361240a565b610a616060840160408501612427565b610a6e6060850185612444565b604051610a7e949392919061248d565b60405180910390a150565b610a91611633565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110610aca57610aca61229d565b60200260200101906001600160a01b031690816001600160a01b031681525050634210000181600181518110610b0257610b0261229d565b60200260200101906001600160a01b031690816001600160a01b0316815250506000610b5d8783846040518060400160405280601581526020017464656661756c743a76303a6d65726765644269647360581b8152506113e8565b9050610bba81600001516040518060400160405280601581526020017464656661756c743a76303a6d65726765644269647360581b81525088604051602001610ba69190612502565b6040516020818303038152906040526114b1565b600080610bcc8a846000015189611563565b91509150610c10836000015160405180604001604052806019815260200178191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b815250836114b1565b50909890975095505050505050565b604080516001600160801b03198481166020830152825160108184030181526030830184529084166050830152825180830384018152606090920190925260009190825b8251811015610cd757818181518110610c7e57610c7e61229d565b602001015160f81c60f81b6001600160f81b031916838281518110610ca557610ca561229d565b01602001516001600160f81b03191614610cc557600093505050506108f1565b80610ccf81612357565b915050610c63565b50600195945050505050565b6060610ced6110a7565b610cf657600080fd5b6000610d2f836040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b8152506111e3565b90508051600003610d5557306040516375fff46760e01b81526004016103dc919061226a565b600081516001600160401b03811115610d7057610d70611667565b604051908082528060200260200182016040528015610db557816020015b6040805180820190915260008082526020820152815260200190600190039081610d8e5790505b50905060005b8251811015610eb3576000610e22848381518110610ddb57610ddb61229d565b6020026020010151600001516040518060400160405280601e81526020017f64656661756c743a76303a65746842756e646c6553696d526573756c747300008152506112ab565b9050600081806020019051810190610e3a9190612370565b90506040518060400160405280826001600160401b03168152602001868581518110610e6857610e6861229d565b6020026020010151600001516001600160801b031916815250848481518110610e9357610e9361229d565b602002602001018190525050508080610eab90612357565b915050610dbb565b50805160005b610ec460018361238d565b811015610fd1576000610ed88260016123a0565b90505b82811015610fbe57838181518110610ef557610ef561229d565b6020026020010151600001516001600160401b0316848381518110610f1c57610f1c61229d565b6020026020010151600001516001600160401b03161015610fac576000848381518110610f4b57610f4b61229d565b60200260200101519050848281518110610f6757610f6761229d565b6020026020010151858481518110610f8157610f8161229d565b602002602001018190525080858381518110610f9f57610f9f61229d565b6020026020010181905250505b80610fb681612357565b915050610edb565b5080610fc981612357565b915050610eb9565b50600083516001600160401b03811115610fed57610fed611667565b604051908082528060200260200182016040528015611016578160200160208202803683370190505b50905060005b8351811015611080578381815181106110375761103761229d565b6020026020010151602001518282815181106110555761105561229d565b6001600160801b0319909216602092830291909101909101528061107881612357565b91505061101c565b5061109c8787836040518060200160405280600081525061016e565b979650505050505050565b6040516000908190819063420100009082818181855afa9150503d80600081146110ed576040519150601f19603f3d011682016040523d82523d6000602084013e6110f2565b606091505b50915091508161111d576342010000816040516375fff46760e01b81526004016103dc929190612515565b6020015192915050565b60606111316110a7565b61113a57600080fd5b60008063421000026001600160a01b0316858560405160200161115e929190612539565b60408051601f19818403018152908290526111789161254c565b600060405180830381855afa9150503d80600081146111b3576040519150601f19603f3d011682016040523d82523d6000602084013e6111b8565b606091505b509150915081610947576342100002816040516375fff46760e01b81526004016103dc929190612515565b606060008063420300016001600160a01b03168585604051602001611209929190612568565b60408051601f19818403018152908290526112239161254c565b600060405180830381855afa9150503d806000811461125e576040519150601f19603f3d011682016040523d82523d6000602084013e611263565b606091505b50915091508161128e576342030001816040516375fff46760e01b81526004016103dc929190612515565b808060200190518101906112a2919061258a565b95945050505050565b606060008063420200016001600160a01b031685856040516020016112d19291906123e7565b60408051601f19818403018152908290526112eb9161254c565b600060405180830381855afa9150503d8060008114611326576040519150601f19603f3d011682016040523d82523d6000602084013e61132b565b606091505b509150915081610947576342020001816040516375fff46760e01b81526004016103dc929190612515565b60408051600080825260208201928390526060929091829163420100019161137d9161254c565b600060405180830381855afa9150503d80600081146113b8576040519150601f19603f3d011682016040523d82523d6000602084013e6113bd565b606091505b5091509150816108f1576342010001816040516375fff46760e01b81526004016103dc929190612515565b6113f0611633565b60008063420300006001600160a01b031687878787604051602001611418949392919061262d565b60408051601f19818403018152908290526114329161254c565b600060405180830381855afa9150503d806000811461146d576040519150601f19603f3d011682016040523d82523d6000602084013e611472565b606091505b50915091508161149d576342030000816040516375fff46760e01b81526004016103dc929190612515565b8080602001905181019061109c9190612661565b60008063420200006001600160a01b03168585856040516020016114d793929190612695565b60408051601f19818403018152908290526114f19161254c565b600060405180830381855afa9150503d806000811461152c576040519150601f19603f3d011682016040523d82523d6000602084013e611531565b606091505b50915091508161155c576342020000816040516375fff46760e01b81526004016103dc929190612515565b5050505050565b60608060008063421000016001600160a01b031687878760405160200161158c939291906126d4565b60408051601f19818403018152908290526115a69161254c565b600060405180830381855afa9150503d80600081146115e1576040519150601f19603f3d011682016040523d82523d6000602084013e6115e6565b606091505b509150915081611611576342100001816040516375fff46760e01b81526004016103dc929190612515565b808060200190518101906116259190612709565b935093505050935093915050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561169f5761169f611667565b60405290565b60405161010081016001600160401b038111828210171561169f5761169f611667565b60405160c081016001600160401b038111828210171561169f5761169f611667565b604051601f8201601f191681016001600160401b038111828210171561171257611712611667565b604052919050565b6001600160401b038116811461172f57600080fd5b50565b803561173d8161171a565b919050565b60006001600160401b0382111561175b5761175b611667565b50601f01601f191660200190565b600082601f83011261177a57600080fd5b813561178d61178882611742565b6116ea565b8181528460208386010111156117a257600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461172f57600080fd5b803561173d816117bf565b60006001600160401b038211156117f8576117f8611667565b5060051b60200190565b600082601f83011261181357600080fd5b81356020611823611788836117df565b82815260079290921b8401810191818101908684111561184257600080fd5b8286015b848110156118b9576080818903121561185f5760008081fd5b61186761167d565b81356118728161171a565b8152818501356118818161171a565b81860152604082810135611894816117bf565b908201526060828101356118a78161171a565b90820152835291830191608001611846565b509695505050505050565b600061010082840312156118d757600080fd5b6118df6116a5565b90506118ea82611732565b815260208201356001600160401b038082111561190657600080fd5b61191285838601611769565b60208401526040840135604084015261192d60608501611732565b606084015261193e608085016117d4565b608084015261194f60a08501611732565b60a084015260c084013560c084015260e084013591508082111561197257600080fd5b5061197f84828501611802565b60e08301525092915050565b6001600160801b03198116811461172f57600080fd5b803561173d8161198b565b600080600080608085870312156119c257600080fd5b84356001600160401b03808211156119d957600080fd5b6119e5888389016118c4565b955060209150818701356119f88161171a565b9450604087013581811115611a0c57600080fd5b8701601f81018913611a1d57600080fd5b8035611a2b611788826117df565b81815260059190911b8201840190848101908b831115611a4a57600080fd5b928501925b82841015611a71578335611a628161198b565b82529285019290850190611a4f565b96505050506060870135915080821115611a8a57600080fd5b50611a9787828801611769565b91505092959194509250565b60005b83811015611abe578181015183820152602001611aa6565b50506000910152565b60008151808452611adf816020860160208601611aa3565b601f01601f19169290920160200192915050565b602081526000611b066020830184611ac7565b9392505050565b60008060408385031215611b2057600080fd5b82356001600160401b03811115611b3657600080fd5b611b42858286016118c4565b9250506020830135611b538161171a565b809150509250929050565b60008060408385031215611b7157600080fd5b8235611b7c8161198b565b915060208301356001600160401b03811115611b9757600080fd5b611ba385828601611769565b9150509250929050565b600082601f830112611bbe57600080fd5b81356020611bce611788836117df565b82815260059290921b84018101918181019086841115611bed57600080fd5b8286015b848110156118b9578035611c04816117bf565b8352918301918301611bf1565b60008060408385031215611c2457600080fd5b82356001600160401b0380821115611c3b57600080fd5b9084019060c08287031215611c4f57600080fd5b611c576116c8565b611c60836119a1565b8152611c6e602084016119a1565b6020820152611c7f60408401611732565b6040820152606083013582811115611c9657600080fd5b611ca288828601611bad565b606083015250608083013582811115611cba57600080fd5b611cc688828601611bad565b60808301525060a083013582811115611cde57600080fd5b611cea88828601611769565b60a08301525093506020850135915080821115611d0657600080fd5b50611ba385828601611769565b600081518084526020808501945080840160005b83811015611d4c5781516001600160a01b031687529582019590820190600101611d27565b509495945050505050565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c06060850152611da160c0850182611d13565b905060808301518482036080860152611dba8282611d13565b91505060a083015184820360a08601526112a28282611ac7565b604081526000611de76040830185611d57565b82810360208401526112a28185611ac7565b600060208284031215611e0b57600080fd5b81356001600160401b03811115611e2157600080fd5b820160c08185031215611b0657600080fd5b60008060408385031215611e4657600080fd5b8235611e518161198b565b91506020830135611b538161198b565b600081518084526020808501945080840160005b83811015611d4c57815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611e75565b60006101006001600160401b038084511685526020840151826020870152611ef283870182611ac7565b925050604084015160408601528060608501511660608601525060018060a01b03608084015116608085015260a0830151611f3860a08601826001600160401b03169052565b5060c083015160c085015260e083015184820360e08601526112a28282611e61565b600081518084526020808501945080840160005b83811015611d4c5781516001600160801b03191687529582019590820190600101611f6e565b608081526000611fa76080830187611ec8565b6001600160401b03861660208401528281036040840152611fc88186611f5a565b9050828103606084015261109c8185611ac7565b805161173d8161198b565b805161173d8161171a565b600082601f83011261200357600080fd5b81516020612013611788836117df565b82815260059290921b8401810191818101908684111561203257600080fd5b8286015b848110156118b9578051612049816117bf565b8352918301918301612036565b600082601f83011261206757600080fd5b815161207561178882611742565b81815284602083860101111561208a57600080fd5b610947826020830160208701611aa3565b600060c082840312156120ad57600080fd5b6120b56116c8565b90506120c082611fdc565b81526120ce60208301611fdc565b60208201526120df60408301611fe7565b604082015260608201516001600160401b03808211156120fe57600080fd5b61210a85838601611ff2565b6060840152608084015191508082111561212357600080fd5b61212f85838601611ff2565b608084015260a084015191508082111561214857600080fd5b5061215584828501612056565b60a08301525092915050565b6000806040838503121561217457600080fd5b82516001600160401b038082111561218b57600080fd5b6121978683870161209b565b935060208501519150808211156121ad57600080fd5b50611ba385828601612056565b600181811c908216806121ce57607f821691505b6020821081036121ee57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006112a26060830184611d13565b602081526000611b066020830184611d57565b6001600160e01b031983168152815160009061225c816004850160208701611aa3565b919091016004019392505050565b6001600160a01b03919091168152604060208201819052600790820152666e6f206269647360c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208083850312156122c657600080fd5b82516001600160401b038111156122dc57600080fd5b8301601f810185136122ed57600080fd5b80516122fb611788826117df565b81815260059190911b8201830190838101908783111561231a57600080fd5b928401925b8284101561109c5783516123328161198b565b8252928401929084019061231f565b634e487b7160e01b600052601160045260246000fd5b60006001820161236957612369612341565b5060010190565b60006020828403121561238257600080fd5b8151611b068161171a565b818103818111156108f1576108f1612341565b808201808211156108f1576108f1612341565b6000602082840312156123c557600080fd5b81516001600160401b038111156123db57600080fd5b61094784828501612056565b6001600160801b0319831681526040602082015260006109476040830184611ac7565b60006020828403121561241c57600080fd5b8135611b068161198b565b60006020828403121561243957600080fd5b8135611b068161171a565b6000808335601e1984360301811261245b57600080fd5b8301803591506001600160401b0382111561247557600080fd5b6020019150600581901b3603821315610a1c57600080fd5b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156124f55783356124da816117bf565b6001600160a01b0316825292820192908201906001016124c7565b5098975050505050505050565b602081526000611b066020830184611f5a565b6001600160a01b038316815260406020820181905260009061094790830184611ac7565b604081526000611de76040830185611ac7565b6000825161255e818460208701611aa3565b9190910192915050565b6001600160401b03831681526040602082015260006109476040830184611ac7565b6000602080838503121561259d57600080fd5b82516001600160401b03808211156125b457600080fd5b818501915085601f8301126125c857600080fd5b81516125d6611788826117df565b81815260059190911b830184019084810190888311156125f557600080fd5b8585015b838110156124f5578051858111156126115760008081fd5b61261f8b89838a010161209b565b8452509186019186016125f9565b6001600160401b038516815260806020820152600061264f6080830186611d13565b8281036040840152611fc88186611d13565b60006020828403121561267357600080fd5b81516001600160401b0381111561268957600080fd5b6109478482850161209b565b6001600160801b0319841681526060602082015260006126b86060830185611ac7565b82810360408401526126ca8185611ac7565b9695505050505050565b6060815260006126e76060830186611ec8565b6001600160801b03198516602084015282810360408401526126ca8185611ac7565b6000806040838503121561271c57600080fd5b82516001600160401b038082111561273357600080fd5b6121978683870161205656fea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063b33e471511610066578063b33e4715146100ef578063c0b9d28714610110578063c2eceb1114610125578063e829cd5d14610138578063ebb89de41461015b57600080fd5b80634c8820f81461009857806354dfbd39146100c15780637df1cde2146100d457806392f07a58146100e7575b600080fd5b6100ab6100a6366004611a9d565b61016e565b6040516100b89190611be4565b60405180910390f35b6100ab6100cf366004611bfe565b610378565b6100ab6100e2366004611c4f565b610b96565b6100ab610c95565b6101026100fd366004611d02565b610d9c565b6040516100b8929190611ece565b61012361011e366004611ef3565b610e37565b005b610102610133366004611a9d565b610e9d565b61014b610146366004611f2d565b611143565b60405190151581526020016100b8565b6100ab610169366004611bfe565b611207565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd9190611f5b565b6101e657600080fd5b60405163c2eceb1160e01b81526000908190309063c2eceb1190610214908a908a908a908a9060040161201e565b600060405180830381865afa158015610231573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102599190810190612287565b604051631bd2b43560e11b8152919350915073__$e374338554c5da70f90c17374827737168$__906337a5686a906102989060009085906004016122e0565b600060405180830381865af41580156102b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102dd9190810190612397565b507f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e82600001518360400151846060015160405161031d939291906123cb565b60405180910390a160405163c0b9d28760e01b9061033f9084906020016123fd565b60408051601f198184030181529082905261035d9291602001612410565b60405160208183030381529060405292505050949350505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e79190611f5b565b6103f057600080fd5b60408051632cb05c5360e21b81526001600160401b0384166004820152602481019190915260156044820152746d657673686172653a76303a6d617463684269647360581b606482015260009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af4158015610479573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104a19190810190612441565b60408051632cb05c5360e21b81526001600160401b03861660048201526024810191909152601c60448201527f6d657673686172653a76303a756e6d61746368656442756e646c657300000000606482015290915060009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af4158015610535573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055d9190810190612441565b9050805160000361058c57306040516375fff46760e01b815260040161058391906124f1565b60405180910390fd5b600081516001600160401b038111156105a7576105a7611758565b6040519080825280602002602001820160405280156105e057816020015b6105cd611724565b8152602001906001900390816105c55790505b50905060005b82518110156107af57600083828151811061060357610603612524565b6020026020010151905060005b855181101561077c57600073__$e374338554c5da70f90c17374827737168$__63ae9a604088848151811061064757610647612524565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b03199092166004830152602482015260166044820152756d657673686172653a76303a6d65726765644269647360501b6064820152608401600060405180830381865af41580156106c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ec9190810190612397565b8060200190518101906106ff919061253a565b90506107428160008151811061071757610717612524565b602002602001015187868151811061073157610731612524565b602002602001015160000151611143565b156107695786828151811061075957610759612524565b602002602001015192505061077c565b5080610774816125de565b915050610610565b508083838151811061079057610790612524565b60200260200101819052505080806107a7906125de565b9150506105e6565b50600081516001600160401b038111156107cb576107cb611758565b60405190808252806020026020018201604052801561081057816020015b60408051808201909152600080825260208201528152602001906001900390816107e95790505b50905060005b825181101561098a57600073__$e374338554c5da70f90c17374827737168$__63ae9a604085848151811061084d5761084d612524565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b031990921660048301526024820152601f60448201527f6d657673686172653a76303a65746842756e646c6553696d526573756c7473006064820152608401600060405180830381865af41580156108d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108f99190810190612397565b905060008180602001905181019061091191906125f7565b90506040518060400160405280826001600160401b0316815260200186858151811061093f5761093f612524565b6020026020010151600001516001600160801b03191681525084848151811061096a5761096a612524565b602002602001018190525050508080610982906125de565b915050610816565b50805160005b61099b600183612614565b811015610aa85760006109af826001612627565b90505b82811015610a95578381815181106109cc576109cc612524565b6020026020010151600001516001600160401b03168483815181106109f3576109f3612524565b6020026020010151600001516001600160401b03161015610a83576000848381518110610a2257610a22612524565b60200260200101519050848281518110610a3e57610a3e612524565b6020026020010151858481518110610a5857610a58612524565b602002602001018190525080858381518110610a7657610a76612524565b6020026020010181905250505b80610a8d816125de565b9150506109b2565b5080610aa0816125de565b915050610990565b50600083516001600160401b03811115610ac457610ac4611758565b604051908082528060200260200182016040528015610aed578160200160208202803683370190505b50905060005b8351811015610b5757838181518110610b0e57610b0e612524565b602002602001015160200151828281518110610b2c57610b2c612524565b6001600160801b03199092166020928302919091019091015280610b4f816125de565b915050610af3565b50610b878989836040518060400160405280600b81526020016a06d657673686172653a76360ac1b81525061016e565b96505050505050505b92915050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c059190611f5b565b610c0e57600080fd5b6040516302ba698160e61b815260009073__$e374338554c5da70f90c17374827737168$__9063ae9a604090610c4890879060040161263a565b600060405180830381865af4158015610c65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c8d9190810190612397565b949350505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190611f5b565b610d0d57600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610d58573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d809190810190612397565b905080806020019051810190610d969190612397565b91505090565b610da4611724565b60607f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f846000015184604051610ddb929190612683565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e846000015185604001518660600151604051610e22939291906123cb565b60405180910390a150829050815b9250929050565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e610e6560208301836126a6565b610e7560608401604085016126c3565b610e8260608501856126e0565b604051610e929493929190612729565b60405180910390a150565b610ea5611724565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110610ede57610ede612524565b60200260200101906001600160a01b031690816001600160a01b031681525050634210000181600181518110610f1657610f16612524565b6001600160a01b0390921660209283029190910190910152604051634f56314160e01b815260009073__$e374338554c5da70f90c17374827737168$__90634f56314190610f6c908a9086908190600401612791565b600060405180830381865af4158015610f89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fb19190810190612800565b905073__$e374338554c5da70f90c17374827737168$__63a90a6c5f826000015188604051602001610fe39190612834565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161100f929190612847565b60006040518083038186803b15801561102757600080fd5b505af415801561103b573d6000803e3d6000fd5b5050825160405163727bb5c760e01b81526000935083925073__$e374338554c5da70f90c17374827737168$__9163727bb5c79161107f918e918c9060040161289e565b600060405180830381865af415801561109c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110c49190810190612973565b845160405163a90a6c5f60e01b815292945090925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916111039185906004016129a9565b60006040518083038186803b15801561111b57600080fd5b505af415801561112f573d6000803e3d6000fd5b50949c939b50929950505050505050505050565b604080516001600160801b03198481166020830152825160108184030181526030830184529084166050830152825180830384018152606090920190925260009190825b82518110156111fb578181815181106111a2576111a2612524565b602001015160f81c60f81b6001600160f81b0319168382815181106111c9576111c9612524565b01602001516001600160f81b031916146111e95760009350505050610b90565b806111f3816125de565b915050611187565b50600195945050505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015611252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112769190611f5b565b61127f57600080fd5b60408051632cb05c5360e21b81526001600160401b03841660048201526024810191909152601560448201527464656661756c743a76303a65746842756e646c657360581b606482015260009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af4158015611308573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113309190810190612441565b9050805160000361135657306040516375fff46760e01b815260040161058391906124f1565b600081516001600160401b0381111561137157611371611758565b6040519080825280602002602001820160405280156113b657816020015b604080518082019091526000808252602082015281526020019060019003908161138f5790505b50905060005b825181101561153057600073__$e374338554c5da70f90c17374827737168$__63ae9a60408584815181106113f3576113f3612524565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b031990921660048301526024820152601e60448201527f64656661756c743a76303a65746842756e646c6553696d526573756c747300006064820152608401600060405180830381865af4158015611477573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261149f9190810190612397565b90506000818060200190518101906114b791906125f7565b90506040518060400160405280826001600160401b031681526020018685815181106114e5576114e5612524565b6020026020010151600001516001600160801b03191681525084848151811061151057611510612524565b602002602001018190525050508080611528906125de565b9150506113bc565b50805160005b611541600183612614565b81101561164e576000611555826001612627565b90505b8281101561163b5783818151811061157257611572612524565b6020026020010151600001516001600160401b031684838151811061159957611599612524565b6020026020010151600001516001600160401b031610156116295760008483815181106115c8576115c8612524565b602002602001015190508482815181106115e4576115e4612524565b60200260200101518584815181106115fe576115fe612524565b60200260200101819052508085838151811061161c5761161c612524565b6020026020010181905250505b80611633816125de565b915050611558565b5080611646816125de565b915050611536565b50600083516001600160401b0381111561166a5761166a611758565b604051908082528060200260200182016040528015611693578160200160208202803683370190505b50905060005b83518110156116fd578381815181106116b4576116b4612524565b6020026020010151602001518282815181106116d2576116d2612524565b6001600160801b031990921660209283029190910190910152806116f5816125de565b915050611699565b506117198787836040518060200160405280600081525061016e565b979650505050505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561179057611790611758565b60405290565b60405161010081016001600160401b038111828210171561179057611790611758565b60405160c081016001600160401b038111828210171561179057611790611758565b604051601f8201601f191681016001600160401b038111828210171561180357611803611758565b604052919050565b6001600160401b038116811461182057600080fd5b50565b803561182e8161180b565b919050565b60006001600160401b0382111561184c5761184c611758565b50601f01601f191660200190565b600082601f83011261186b57600080fd5b813561187e61187982611833565b6117db565b81815284602083860101111561189357600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461182057600080fd5b803561182e816118b0565b60006001600160401b038211156118e9576118e9611758565b5060051b60200190565b600082601f83011261190457600080fd5b81356020611914611879836118d0565b82815260079290921b8401810191818101908684111561193357600080fd5b8286015b848110156119aa57608081890312156119505760008081fd5b61195861176e565b81356119638161180b565b8152818501356119728161180b565b81860152604082810135611985816118b0565b908201526060828101356119988161180b565b90820152835291830191608001611937565b509695505050505050565b600061010082840312156119c857600080fd5b6119d0611796565b90506119db82611823565b815260208201356001600160401b03808211156119f757600080fd5b611a038583860161185a565b602084015260408401356040840152611a1e60608501611823565b6060840152611a2f608085016118c5565b6080840152611a4060a08501611823565b60a084015260c084013560c084015260e0840135915080821115611a6357600080fd5b50611a70848285016118f3565b60e08301525092915050565b6001600160801b03198116811461182057600080fd5b803561182e81611a7c565b60008060008060808587031215611ab357600080fd5b84356001600160401b0380821115611aca57600080fd5b611ad6888389016119b5565b95506020915081870135611ae98161180b565b9450604087013581811115611afd57600080fd5b8701601f81018913611b0e57600080fd5b8035611b1c611879826118d0565b81815260059190911b8201840190848101908b831115611b3b57600080fd5b928501925b82841015611b62578335611b5381611a7c565b82529285019290850190611b40565b96505050506060870135915080821115611b7b57600080fd5b50611b888782880161185a565b91505092959194509250565b60005b83811015611baf578181015183820152602001611b97565b50506000910152565b60008151808452611bd0816020860160208601611b94565b601f01601f19169290920160200192915050565b602081526000611bf76020830184611bb8565b9392505050565b60008060408385031215611c1157600080fd5b82356001600160401b03811115611c2757600080fd5b611c33858286016119b5565b9250506020830135611c448161180b565b809150509250929050565b60008060408385031215611c6257600080fd5b8235611c6d81611a7c565b915060208301356001600160401b03811115611c8857600080fd5b611c948582860161185a565b9150509250929050565b600082601f830112611caf57600080fd5b81356020611cbf611879836118d0565b82815260059290921b84018101918181019086841115611cde57600080fd5b8286015b848110156119aa578035611cf5816118b0565b8352918301918301611ce2565b60008060408385031215611d1557600080fd5b82356001600160401b0380821115611d2c57600080fd5b9084019060c08287031215611d4057600080fd5b611d486117b9565b611d5183611a92565b8152611d5f60208401611a92565b6020820152611d7060408401611823565b6040820152606083013582811115611d8757600080fd5b611d9388828601611c9e565b606083015250608083013582811115611dab57600080fd5b611db788828601611c9e565b60808301525060a083013582811115611dcf57600080fd5b611ddb8882860161185a565b60a08301525093506020850135915080821115611df757600080fd5b50611c948582860161185a565b600081518084526020808501945080840160005b83811015611e3d5781516001600160a01b031687529582019590820190600101611e18565b509495945050505050565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c06060850152611e9260c0850182611e04565b905060808301518482036080860152611eab8282611e04565b91505060a083015184820360a0860152611ec58282611bb8565b95945050505050565b604081526000611ee16040830185611e48565b8281036020840152611ec58185611bb8565b600060208284031215611f0557600080fd5b81356001600160401b03811115611f1b57600080fd5b820160c08185031215611bf757600080fd5b60008060408385031215611f4057600080fd5b8235611f4b81611a7c565b91506020830135611c4481611a7c565b600060208284031215611f6d57600080fd5b81518015158114611bf757600080fd5b600081518084526020808501945080840160005b83811015611e3d57815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611f91565b600081518084526020808501945080840160005b83811015611e3d5781516001600160801b03191687529582019590820190600101611ff8565b608081526001600160401b038551166080820152600060208601516101008060a0850152612050610180850183611bb8565b9150604088015160c0850152606088015161207660e08601826001600160401b03169052565b5060808801516001600160a01b03169084015260a08701516001600160401b031661012084015260c087015161014084015260e0870151838203607f19016101608501526120c48282611f7d565b9150506120dc60208401876001600160401b03169052565b82810360408401526120ee8186611fe4565b905082810360608401526117198185611bb8565b805161182e81611a7c565b805161182e8161180b565b600082601f83011261212957600080fd5b81516020612139611879836118d0565b82815260059290921b8401810191818101908684111561215857600080fd5b8286015b848110156119aa57805161216f816118b0565b835291830191830161215c565b600082601f83011261218d57600080fd5b815161219b61187982611833565b8181528460208386010111156121b057600080fd5b610c8d826020830160208701611b94565b600060c082840312156121d357600080fd5b6121db6117b9565b90506121e682612102565b81526121f460208301612102565b60208201526122056040830161210d565b604082015260608201516001600160401b038082111561222457600080fd5b61223085838601612118565b6060840152608084015191508082111561224957600080fd5b61225585838601612118565b608084015260a084015191508082111561226e57600080fd5b5061227b8482850161217c565b60a08301525092915050565b6000806040838503121561229a57600080fd5b82516001600160401b03808211156122b157600080fd5b6122bd868387016121c1565b935060208501519150808211156122d357600080fd5b50611c948582860161217c565b60408152600080845481600182811c91508083168061230057607f831692505b6020808410820361231f57634e487b7160e01b86526022600452602486fd5b604088018490526060880182801561233e57600181146123545761237f565b60ff198716825285151560051b8201975061237f565b60008c81526020902060005b8781101561237957815484820152908601908401612360565b83019850505b5050878603818901525050505050611ec58185611bb8565b6000602082840312156123a957600080fd5b81516001600160401b038111156123bf57600080fd5b610c8d8482850161217c565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000611ec56060830184611e04565b602081526000611bf76020830184611e48565b6001600160e01b0319831681528151600090612433816004850160208701611b94565b919091016004019392505050565b6000602080838503121561245457600080fd5b82516001600160401b038082111561246b57600080fd5b818501915085601f83011261247f57600080fd5b815161248d611879826118d0565b81815260059190911b830184019084810190888311156124ac57600080fd5b8585015b838110156124e4578051858111156124c85760008081fd5b6124d68b89838a01016121c1565b8452509186019186016124b0565b5098975050505050505050565b6001600160a01b03919091168152604060208201819052600790820152666e6f206269647360c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602080838503121561254d57600080fd5b82516001600160401b0381111561256357600080fd5b8301601f8101851361257457600080fd5b8051612582611879826118d0565b81815260059190911b820183019083810190878311156125a157600080fd5b928401925b828410156117195783516125b981611a7c565b825292840192908401906125a6565b634e487b7160e01b600052601160045260246000fd5b6000600182016125f0576125f06125c8565b5060010190565b60006020828403121561260957600080fd5b8151611bf78161180b565b81810381811115610b9057610b906125c8565b80820180821115610b9057610b906125c8565b6001600160801b031982168152604060208201526000611bf7604083016019815278191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b602082015260400190565b6001600160801b031983168152604060208201526000610c8d6040830184611bb8565b6000602082840312156126b857600080fd5b8135611bf781611a7c565b6000602082840312156126d557600080fd5b8135611bf78161180b565b6000808335601e198436030181126126f757600080fd5b8301803591506001600160401b0382111561271157600080fd5b6020019150600581901b3603821315610e3057600080fd5b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156124e4578335612776816118b0565b6001600160a01b031682529282019290820190600101612763565b6001600160401b03841681526080602082015260006127b36080830185611e04565b82810360408401526127c58185611e04565b8381036060850152601581527464656661756c743a76303a6d65726765644269647360581b60208201529050604081015b9695505050505050565b60006020828403121561281257600080fd5b81516001600160401b0381111561282857600080fd5b610c8d848285016121c1565b602081526000611bf76020830184611fe4565b6001600160801b03198316815260606020820152600061288c60608301601581527464656661756c743a76303a6d65726765644269647360581b602082015260400190565b8281036040840152611ec58185611bb8565b606081526001600160401b038451166060820152600060208501516101008060808501526128d0610160850183611bb8565b9150604087015160a085015260608701516128f660c08601826001600160401b03169052565b5060808701516001600160a01b03811660e08601525060a08701516001600160401b03811685830152505060c086015161012084015260e0860151838203605f19016101408501526129488282611f7d565b91505061296160208401866001600160801b0319169052565b82810360408401526127f68185611bb8565b6000806040838503121561298657600080fd5b82516001600160401b038082111561299d57600080fd5b6122bd8683870161217c565b6001600160801b03198316815260606020820152600061288c606083016019815278191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b60208201526040019056fea164736f6c6343000813000a" }, "bytecode": { - "object": "0x60806040523480156200001157600080fd5b50604051620029ec380380620029ec833981016040819052620000349162000060565b6000620000428282620001c4565b505062000290565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200007457600080fd5b82516001600160401b03808211156200008c57600080fd5b818501915085601f830112620000a157600080fd5b815181811115620000b657620000b66200004a565b604051601f8201601f19908116603f01168101908382118183101715620000e157620000e16200004a565b816040528281528886848701011115620000fa57600080fd5b600093505b828410156200011e5784840186015181850187015292850192620000ff565b600086848301015280965050505050505092915050565b600181811c908216806200014a57607f821691505b6020821081036200016b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bf57600081815260208120601f850160051c810160208610156200019a5750805b601f850160051c820191505b81811015620001bb57828155600101620001a6565b5050505b505050565b81516001600160401b03811115620001e057620001e06200004a565b620001f881620001f1845462000135565b8462000171565b602080601f831160018114620002305760008415620002175750858301515b600019600386901b1c1916600185901b178555620001bb565b600085815260208120601f198616915b82811015620002615788860151825594840194600190910190840162000240565b5085821015620002805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61274c80620002a06000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b33e471511610066578063b33e4715146100ef578063c0b9d28714610110578063c2eceb1114610125578063e829cd5d14610138578063ebb89de41461015b57600080fd5b80634c8820f81461009857806354dfbd39146100c15780637df1cde2146100d457806392f07a58146100e7575b600080fd5b6100ab6100a63660046119ac565b61016e565b6040516100b89190611af3565b60405180910390f35b6100ab6100cf366004611b0d565b610327565b6100ab6100e2366004611b5e565b6108f7565b6100ab61094f565b6101026100fd366004611c11565b610988565b6040516100b8929190611dd4565b61012361011e366004611df9565b610a23565b005b6101026101333660046119ac565b610a89565b61014b610146366004611e33565b610c1f565b60405190151581526020016100b8565b6100ab610169366004611b0d565b610ce3565b60606101786110a7565b61018157600080fd5b60405163c2eceb1160e01b81526000908190309063c2eceb11906101af908a908a908a908a90600401611f94565b600060405180830381865afa1580156101cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101f49190810190612161565b9150915061028c60008054610208906121ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610234906121ba565b80156102815780601f1061025657610100808354040283529160200191610281565b820191906000526020600020905b81548152906001019060200180831161026457829003601f168201915b505050505082611127565b507f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8260000151836040015184606001516040516102cc939291906121f4565b60405180910390a160405163c0b9d28760e01b906102ee908490602001612226565b60408051601f198184030181529082905261030c9291602001612239565b60405160208183030381529060405292505050949350505050565b60606103316110a7565b61033a57600080fd5b600061037383604051806040016040528060158152602001746d657673686172653a76303a6d617463684269647360581b8152506111e3565b905060006103b6846040518060400160405280601c81526020017f6d657673686172653a76303a756e6d61746368656442756e646c6573000000008152506111e3565b905080516000036103e557306040516375fff46760e01b81526004016103dc919061226a565b60405180910390fd5b600081516001600160401b0381111561040057610400611667565b60405190808252806020026020018201604052801561043957816020015b610426611633565b81526020019060019003908161041e5790505b50905060005b825181101561058c57600083828151811061045c5761045c61229d565b6020026020010151905060005b85518110156105595760006104c98783815181106104895761048961229d565b602002602001015160000151604051806040016040528060168152602001756d657673686172653a76303a6d65726765644269647360501b8152506112ab565b8060200190518101906104dc91906122b3565b905061051f816000815181106104f4576104f461229d565b602002602001015187868151811061050e5761050e61229d565b602002602001015160000151610c1f565b15610546578682815181106105365761053661229d565b6020026020010151925050610559565b508061055181612357565b915050610469565b508083838151811061056d5761056d61229d565b602002602001018190525050808061058490612357565b91505061043f565b50600081516001600160401b038111156105a8576105a8611667565b6040519080825280602002602001820160405280156105ed57816020015b60408051808201909152600080825260208201528152602001906001900390816105c65790505b50905060005b82518110156106eb57600061065a8483815181106106135761061361229d565b6020026020010151600001516040518060400160405280601f81526020017f6d657673686172653a76303a65746842756e646c6553696d526573756c7473008152506112ab565b90506000818060200190518101906106729190612370565b90506040518060400160405280826001600160401b031681526020018685815181106106a0576106a061229d565b6020026020010151600001516001600160801b0319168152508484815181106106cb576106cb61229d565b6020026020010181905250505080806106e390612357565b9150506105f3565b50805160005b6106fc60018361238d565b8110156108095760006107108260016123a0565b90505b828110156107f65783818151811061072d5761072d61229d565b6020026020010151600001516001600160401b03168483815181106107545761075461229d565b6020026020010151600001516001600160401b031610156107e45760008483815181106107835761078361229d565b6020026020010151905084828151811061079f5761079f61229d565b60200260200101518584815181106107b9576107b961229d565b6020026020010181905250808583815181106107d7576107d761229d565b6020026020010181905250505b806107ee81612357565b915050610713565b508061080181612357565b9150506106f1565b50600083516001600160401b0381111561082557610825611667565b60405190808252806020026020018201604052801561084e578160200160208202803683370190505b50905060005b83518110156108b85783818151811061086f5761086f61229d565b60200260200101516020015182828151811061088d5761088d61229d565b6001600160801b031990921660209283029190910190910152806108b081612357565b915050610854565b506108e88989836040518060400160405280600b81526020016a06d657673686172653a76360ac1b81525061016e565b96505050505050505b92915050565b60606109016110a7565b61090a57600080fd5b60006109478460405180604001604052806019815260200178191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b8152506112ab565b949350505050565b60606109596110a7565b61096257600080fd5b600061096c611356565b90508080602001905181019061098291906123b3565b91505090565b610990611633565b60607f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f8460000151846040516109c79291906123e7565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e846000015185604001518660600151604051610a0e939291906121f4565b60405180910390a150829050815b9250929050565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e610a51602083018361240a565b610a616060840160408501612427565b610a6e6060850185612444565b604051610a7e949392919061248d565b60405180910390a150565b610a91611633565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110610aca57610aca61229d565b60200260200101906001600160a01b031690816001600160a01b031681525050634210000181600181518110610b0257610b0261229d565b60200260200101906001600160a01b031690816001600160a01b0316815250506000610b5d8783846040518060400160405280601581526020017464656661756c743a76303a6d65726765644269647360581b8152506113e8565b9050610bba81600001516040518060400160405280601581526020017464656661756c743a76303a6d65726765644269647360581b81525088604051602001610ba69190612502565b6040516020818303038152906040526114b1565b600080610bcc8a846000015189611563565b91509150610c10836000015160405180604001604052806019815260200178191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b815250836114b1565b50909890975095505050505050565b604080516001600160801b03198481166020830152825160108184030181526030830184529084166050830152825180830384018152606090920190925260009190825b8251811015610cd757818181518110610c7e57610c7e61229d565b602001015160f81c60f81b6001600160f81b031916838281518110610ca557610ca561229d565b01602001516001600160f81b03191614610cc557600093505050506108f1565b80610ccf81612357565b915050610c63565b50600195945050505050565b6060610ced6110a7565b610cf657600080fd5b6000610d2f836040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b8152506111e3565b90508051600003610d5557306040516375fff46760e01b81526004016103dc919061226a565b600081516001600160401b03811115610d7057610d70611667565b604051908082528060200260200182016040528015610db557816020015b6040805180820190915260008082526020820152815260200190600190039081610d8e5790505b50905060005b8251811015610eb3576000610e22848381518110610ddb57610ddb61229d565b6020026020010151600001516040518060400160405280601e81526020017f64656661756c743a76303a65746842756e646c6553696d526573756c747300008152506112ab565b9050600081806020019051810190610e3a9190612370565b90506040518060400160405280826001600160401b03168152602001868581518110610e6857610e6861229d565b6020026020010151600001516001600160801b031916815250848481518110610e9357610e9361229d565b602002602001018190525050508080610eab90612357565b915050610dbb565b50805160005b610ec460018361238d565b811015610fd1576000610ed88260016123a0565b90505b82811015610fbe57838181518110610ef557610ef561229d565b6020026020010151600001516001600160401b0316848381518110610f1c57610f1c61229d565b6020026020010151600001516001600160401b03161015610fac576000848381518110610f4b57610f4b61229d565b60200260200101519050848281518110610f6757610f6761229d565b6020026020010151858481518110610f8157610f8161229d565b602002602001018190525080858381518110610f9f57610f9f61229d565b6020026020010181905250505b80610fb681612357565b915050610edb565b5080610fc981612357565b915050610eb9565b50600083516001600160401b03811115610fed57610fed611667565b604051908082528060200260200182016040528015611016578160200160208202803683370190505b50905060005b8351811015611080578381815181106110375761103761229d565b6020026020010151602001518282815181106110555761105561229d565b6001600160801b0319909216602092830291909101909101528061107881612357565b91505061101c565b5061109c8787836040518060200160405280600081525061016e565b979650505050505050565b6040516000908190819063420100009082818181855afa9150503d80600081146110ed576040519150601f19603f3d011682016040523d82523d6000602084013e6110f2565b606091505b50915091508161111d576342010000816040516375fff46760e01b81526004016103dc929190612515565b6020015192915050565b60606111316110a7565b61113a57600080fd5b60008063421000026001600160a01b0316858560405160200161115e929190612539565b60408051601f19818403018152908290526111789161254c565b600060405180830381855afa9150503d80600081146111b3576040519150601f19603f3d011682016040523d82523d6000602084013e6111b8565b606091505b509150915081610947576342100002816040516375fff46760e01b81526004016103dc929190612515565b606060008063420300016001600160a01b03168585604051602001611209929190612568565b60408051601f19818403018152908290526112239161254c565b600060405180830381855afa9150503d806000811461125e576040519150601f19603f3d011682016040523d82523d6000602084013e611263565b606091505b50915091508161128e576342030001816040516375fff46760e01b81526004016103dc929190612515565b808060200190518101906112a2919061258a565b95945050505050565b606060008063420200016001600160a01b031685856040516020016112d19291906123e7565b60408051601f19818403018152908290526112eb9161254c565b600060405180830381855afa9150503d8060008114611326576040519150601f19603f3d011682016040523d82523d6000602084013e61132b565b606091505b509150915081610947576342020001816040516375fff46760e01b81526004016103dc929190612515565b60408051600080825260208201928390526060929091829163420100019161137d9161254c565b600060405180830381855afa9150503d80600081146113b8576040519150601f19603f3d011682016040523d82523d6000602084013e6113bd565b606091505b5091509150816108f1576342010001816040516375fff46760e01b81526004016103dc929190612515565b6113f0611633565b60008063420300006001600160a01b031687878787604051602001611418949392919061262d565b60408051601f19818403018152908290526114329161254c565b600060405180830381855afa9150503d806000811461146d576040519150601f19603f3d011682016040523d82523d6000602084013e611472565b606091505b50915091508161149d576342030000816040516375fff46760e01b81526004016103dc929190612515565b8080602001905181019061109c9190612661565b60008063420200006001600160a01b03168585856040516020016114d793929190612695565b60408051601f19818403018152908290526114f19161254c565b600060405180830381855afa9150503d806000811461152c576040519150601f19603f3d011682016040523d82523d6000602084013e611531565b606091505b50915091508161155c576342020000816040516375fff46760e01b81526004016103dc929190612515565b5050505050565b60608060008063421000016001600160a01b031687878760405160200161158c939291906126d4565b60408051601f19818403018152908290526115a69161254c565b600060405180830381855afa9150503d80600081146115e1576040519150601f19603f3d011682016040523d82523d6000602084013e6115e6565b606091505b509150915081611611576342100001816040516375fff46760e01b81526004016103dc929190612515565b808060200190518101906116259190612709565b935093505050935093915050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561169f5761169f611667565b60405290565b60405161010081016001600160401b038111828210171561169f5761169f611667565b60405160c081016001600160401b038111828210171561169f5761169f611667565b604051601f8201601f191681016001600160401b038111828210171561171257611712611667565b604052919050565b6001600160401b038116811461172f57600080fd5b50565b803561173d8161171a565b919050565b60006001600160401b0382111561175b5761175b611667565b50601f01601f191660200190565b600082601f83011261177a57600080fd5b813561178d61178882611742565b6116ea565b8181528460208386010111156117a257600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461172f57600080fd5b803561173d816117bf565b60006001600160401b038211156117f8576117f8611667565b5060051b60200190565b600082601f83011261181357600080fd5b81356020611823611788836117df565b82815260079290921b8401810191818101908684111561184257600080fd5b8286015b848110156118b9576080818903121561185f5760008081fd5b61186761167d565b81356118728161171a565b8152818501356118818161171a565b81860152604082810135611894816117bf565b908201526060828101356118a78161171a565b90820152835291830191608001611846565b509695505050505050565b600061010082840312156118d757600080fd5b6118df6116a5565b90506118ea82611732565b815260208201356001600160401b038082111561190657600080fd5b61191285838601611769565b60208401526040840135604084015261192d60608501611732565b606084015261193e608085016117d4565b608084015261194f60a08501611732565b60a084015260c084013560c084015260e084013591508082111561197257600080fd5b5061197f84828501611802565b60e08301525092915050565b6001600160801b03198116811461172f57600080fd5b803561173d8161198b565b600080600080608085870312156119c257600080fd5b84356001600160401b03808211156119d957600080fd5b6119e5888389016118c4565b955060209150818701356119f88161171a565b9450604087013581811115611a0c57600080fd5b8701601f81018913611a1d57600080fd5b8035611a2b611788826117df565b81815260059190911b8201840190848101908b831115611a4a57600080fd5b928501925b82841015611a71578335611a628161198b565b82529285019290850190611a4f565b96505050506060870135915080821115611a8a57600080fd5b50611a9787828801611769565b91505092959194509250565b60005b83811015611abe578181015183820152602001611aa6565b50506000910152565b60008151808452611adf816020860160208601611aa3565b601f01601f19169290920160200192915050565b602081526000611b066020830184611ac7565b9392505050565b60008060408385031215611b2057600080fd5b82356001600160401b03811115611b3657600080fd5b611b42858286016118c4565b9250506020830135611b538161171a565b809150509250929050565b60008060408385031215611b7157600080fd5b8235611b7c8161198b565b915060208301356001600160401b03811115611b9757600080fd5b611ba385828601611769565b9150509250929050565b600082601f830112611bbe57600080fd5b81356020611bce611788836117df565b82815260059290921b84018101918181019086841115611bed57600080fd5b8286015b848110156118b9578035611c04816117bf565b8352918301918301611bf1565b60008060408385031215611c2457600080fd5b82356001600160401b0380821115611c3b57600080fd5b9084019060c08287031215611c4f57600080fd5b611c576116c8565b611c60836119a1565b8152611c6e602084016119a1565b6020820152611c7f60408401611732565b6040820152606083013582811115611c9657600080fd5b611ca288828601611bad565b606083015250608083013582811115611cba57600080fd5b611cc688828601611bad565b60808301525060a083013582811115611cde57600080fd5b611cea88828601611769565b60a08301525093506020850135915080821115611d0657600080fd5b50611ba385828601611769565b600081518084526020808501945080840160005b83811015611d4c5781516001600160a01b031687529582019590820190600101611d27565b509495945050505050565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c06060850152611da160c0850182611d13565b905060808301518482036080860152611dba8282611d13565b91505060a083015184820360a08601526112a28282611ac7565b604081526000611de76040830185611d57565b82810360208401526112a28185611ac7565b600060208284031215611e0b57600080fd5b81356001600160401b03811115611e2157600080fd5b820160c08185031215611b0657600080fd5b60008060408385031215611e4657600080fd5b8235611e518161198b565b91506020830135611b538161198b565b600081518084526020808501945080840160005b83811015611d4c57815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611e75565b60006101006001600160401b038084511685526020840151826020870152611ef283870182611ac7565b925050604084015160408601528060608501511660608601525060018060a01b03608084015116608085015260a0830151611f3860a08601826001600160401b03169052565b5060c083015160c085015260e083015184820360e08601526112a28282611e61565b600081518084526020808501945080840160005b83811015611d4c5781516001600160801b03191687529582019590820190600101611f6e565b608081526000611fa76080830187611ec8565b6001600160401b03861660208401528281036040840152611fc88186611f5a565b9050828103606084015261109c8185611ac7565b805161173d8161198b565b805161173d8161171a565b600082601f83011261200357600080fd5b81516020612013611788836117df565b82815260059290921b8401810191818101908684111561203257600080fd5b8286015b848110156118b9578051612049816117bf565b8352918301918301612036565b600082601f83011261206757600080fd5b815161207561178882611742565b81815284602083860101111561208a57600080fd5b610947826020830160208701611aa3565b600060c082840312156120ad57600080fd5b6120b56116c8565b90506120c082611fdc565b81526120ce60208301611fdc565b60208201526120df60408301611fe7565b604082015260608201516001600160401b03808211156120fe57600080fd5b61210a85838601611ff2565b6060840152608084015191508082111561212357600080fd5b61212f85838601611ff2565b608084015260a084015191508082111561214857600080fd5b5061215584828501612056565b60a08301525092915050565b6000806040838503121561217457600080fd5b82516001600160401b038082111561218b57600080fd5b6121978683870161209b565b935060208501519150808211156121ad57600080fd5b50611ba385828601612056565b600181811c908216806121ce57607f821691505b6020821081036121ee57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006112a26060830184611d13565b602081526000611b066020830184611d57565b6001600160e01b031983168152815160009061225c816004850160208701611aa3565b919091016004019392505050565b6001600160a01b03919091168152604060208201819052600790820152666e6f206269647360c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208083850312156122c657600080fd5b82516001600160401b038111156122dc57600080fd5b8301601f810185136122ed57600080fd5b80516122fb611788826117df565b81815260059190911b8201830190838101908783111561231a57600080fd5b928401925b8284101561109c5783516123328161198b565b8252928401929084019061231f565b634e487b7160e01b600052601160045260246000fd5b60006001820161236957612369612341565b5060010190565b60006020828403121561238257600080fd5b8151611b068161171a565b818103818111156108f1576108f1612341565b808201808211156108f1576108f1612341565b6000602082840312156123c557600080fd5b81516001600160401b038111156123db57600080fd5b61094784828501612056565b6001600160801b0319831681526040602082015260006109476040830184611ac7565b60006020828403121561241c57600080fd5b8135611b068161198b565b60006020828403121561243957600080fd5b8135611b068161171a565b6000808335601e1984360301811261245b57600080fd5b8301803591506001600160401b0382111561247557600080fd5b6020019150600581901b3603821315610a1c57600080fd5b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156124f55783356124da816117bf565b6001600160a01b0316825292820192908201906001016124c7565b5098975050505050505050565b602081526000611b066020830184611f5a565b6001600160a01b038316815260406020820181905260009061094790830184611ac7565b604081526000611de76040830185611ac7565b6000825161255e818460208701611aa3565b9190910192915050565b6001600160401b03831681526040602082015260006109476040830184611ac7565b6000602080838503121561259d57600080fd5b82516001600160401b03808211156125b457600080fd5b818501915085601f8301126125c857600080fd5b81516125d6611788826117df565b81815260059190911b830184019084810190888311156125f557600080fd5b8585015b838110156124f5578051858111156126115760008081fd5b61261f8b89838a010161209b565b8452509186019186016125f9565b6001600160401b038516815260806020820152600061264f6080830186611d13565b8281036040840152611fc88186611d13565b60006020828403121561267357600080fd5b81516001600160401b0381111561268957600080fd5b6109478482850161209b565b6001600160801b0319841681526060602082015260006126b86060830185611ac7565b82810360408401526126ca8185611ac7565b9695505050505050565b6060815260006126e76060830186611ec8565b6001600160801b03198516602084015282810360408401526126ca8185611ac7565b6000806040838503121561271c57600080fd5b82516001600160401b038082111561273357600080fd5b6121978683870161205656fea164736f6c6343000813000a" + "object": "0x60806040523480156200001157600080fd5b5060405162002c9f38038062002c9f833981016040819052620000349162000060565b6000620000428282620001c4565b505062000290565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200007457600080fd5b82516001600160401b03808211156200008c57600080fd5b818501915085601f830112620000a157600080fd5b815181811115620000b657620000b66200004a565b604051601f8201601f19908116603f01168101908382118183101715620000e157620000e16200004a565b816040528281528886848701011115620000fa57600080fd5b600093505b828410156200011e5784840186015181850187015292850192620000ff565b600086848301015280965050505050505092915050565b600181811c908216806200014a57607f821691505b6020821081036200016b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bf57600081815260208120601f850160051c810160208610156200019a5750805b601f850160051c820191505b81811015620001bb57828155600101620001a6565b5050505b505050565b81516001600160401b03811115620001e057620001e06200004a565b620001f881620001f1845462000135565b8462000171565b602080601f831160018114620002305760008415620002175750858301515b600019600386901b1c1916600185901b178555620001bb565b600085815260208120601f198616915b82811015620002615788860151825594840194600190910190840162000240565b5085821015620002805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6129ff80620002a06000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b33e471511610066578063b33e4715146100ef578063c0b9d28714610110578063c2eceb1114610125578063e829cd5d14610138578063ebb89de41461015b57600080fd5b80634c8820f81461009857806354dfbd39146100c15780637df1cde2146100d457806392f07a58146100e7575b600080fd5b6100ab6100a6366004611a9d565b61016e565b6040516100b89190611be4565b60405180910390f35b6100ab6100cf366004611bfe565b610378565b6100ab6100e2366004611c4f565b610b96565b6100ab610c95565b6101026100fd366004611d02565b610d9c565b6040516100b8929190611ece565b61012361011e366004611ef3565b610e37565b005b610102610133366004611a9d565b610e9d565b61014b610146366004611f2d565b611143565b60405190151581526020016100b8565b6100ab610169366004611bfe565b611207565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd9190611f5b565b6101e657600080fd5b60405163c2eceb1160e01b81526000908190309063c2eceb1190610214908a908a908a908a9060040161201e565b600060405180830381865afa158015610231573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102599190810190612287565b604051631bd2b43560e11b8152919350915073__$e374338554c5da70f90c17374827737168$__906337a5686a906102989060009085906004016122e0565b600060405180830381865af41580156102b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102dd9190810190612397565b507f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e82600001518360400151846060015160405161031d939291906123cb565b60405180910390a160405163c0b9d28760e01b9061033f9084906020016123fd565b60408051601f198184030181529082905261035d9291602001612410565b60405160208183030381529060405292505050949350505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e79190611f5b565b6103f057600080fd5b60408051632cb05c5360e21b81526001600160401b0384166004820152602481019190915260156044820152746d657673686172653a76303a6d617463684269647360581b606482015260009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af4158015610479573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104a19190810190612441565b60408051632cb05c5360e21b81526001600160401b03861660048201526024810191909152601c60448201527f6d657673686172653a76303a756e6d61746368656442756e646c657300000000606482015290915060009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af4158015610535573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055d9190810190612441565b9050805160000361058c57306040516375fff46760e01b815260040161058391906124f1565b60405180910390fd5b600081516001600160401b038111156105a7576105a7611758565b6040519080825280602002602001820160405280156105e057816020015b6105cd611724565b8152602001906001900390816105c55790505b50905060005b82518110156107af57600083828151811061060357610603612524565b6020026020010151905060005b855181101561077c57600073__$e374338554c5da70f90c17374827737168$__63ae9a604088848151811061064757610647612524565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b03199092166004830152602482015260166044820152756d657673686172653a76303a6d65726765644269647360501b6064820152608401600060405180830381865af41580156106c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ec9190810190612397565b8060200190518101906106ff919061253a565b90506107428160008151811061071757610717612524565b602002602001015187868151811061073157610731612524565b602002602001015160000151611143565b156107695786828151811061075957610759612524565b602002602001015192505061077c565b5080610774816125de565b915050610610565b508083838151811061079057610790612524565b60200260200101819052505080806107a7906125de565b9150506105e6565b50600081516001600160401b038111156107cb576107cb611758565b60405190808252806020026020018201604052801561081057816020015b60408051808201909152600080825260208201528152602001906001900390816107e95790505b50905060005b825181101561098a57600073__$e374338554c5da70f90c17374827737168$__63ae9a604085848151811061084d5761084d612524565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b031990921660048301526024820152601f60448201527f6d657673686172653a76303a65746842756e646c6553696d526573756c7473006064820152608401600060405180830381865af41580156108d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108f99190810190612397565b905060008180602001905181019061091191906125f7565b90506040518060400160405280826001600160401b0316815260200186858151811061093f5761093f612524565b6020026020010151600001516001600160801b03191681525084848151811061096a5761096a612524565b602002602001018190525050508080610982906125de565b915050610816565b50805160005b61099b600183612614565b811015610aa85760006109af826001612627565b90505b82811015610a95578381815181106109cc576109cc612524565b6020026020010151600001516001600160401b03168483815181106109f3576109f3612524565b6020026020010151600001516001600160401b03161015610a83576000848381518110610a2257610a22612524565b60200260200101519050848281518110610a3e57610a3e612524565b6020026020010151858481518110610a5857610a58612524565b602002602001018190525080858381518110610a7657610a76612524565b6020026020010181905250505b80610a8d816125de565b9150506109b2565b5080610aa0816125de565b915050610990565b50600083516001600160401b03811115610ac457610ac4611758565b604051908082528060200260200182016040528015610aed578160200160208202803683370190505b50905060005b8351811015610b5757838181518110610b0e57610b0e612524565b602002602001015160200151828281518110610b2c57610b2c612524565b6001600160801b03199092166020928302919091019091015280610b4f816125de565b915050610af3565b50610b878989836040518060400160405280600b81526020016a06d657673686172653a76360ac1b81525061016e565b96505050505050505b92915050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c059190611f5b565b610c0e57600080fd5b6040516302ba698160e61b815260009073__$e374338554c5da70f90c17374827737168$__9063ae9a604090610c4890879060040161263a565b600060405180830381865af4158015610c65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c8d9190810190612397565b949350505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190611f5b565b610d0d57600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610d58573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d809190810190612397565b905080806020019051810190610d969190612397565b91505090565b610da4611724565b60607f67fa9c16cd72410c4cc1d47205b31852a81ec5e92d1c8cebc3ecbe98ed67fe3f846000015184604051610ddb929190612683565b60405180910390a17f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e846000015185604001518660600151604051610e22939291906123cb565b60405180910390a150829050815b9250929050565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e610e6560208301836126a6565b610e7560608401604085016126c3565b610e8260608501856126e0565b604051610e929493929190612729565b60405180910390a150565b610ea5611724565b604080516002808252606080830184529260009291906020830190803683370190505090503081600081518110610ede57610ede612524565b60200260200101906001600160a01b031690816001600160a01b031681525050634210000181600181518110610f1657610f16612524565b6001600160a01b0390921660209283029190910190910152604051634f56314160e01b815260009073__$e374338554c5da70f90c17374827737168$__90634f56314190610f6c908a9086908190600401612791565b600060405180830381865af4158015610f89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fb19190810190612800565b905073__$e374338554c5da70f90c17374827737168$__63a90a6c5f826000015188604051602001610fe39190612834565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161100f929190612847565b60006040518083038186803b15801561102757600080fd5b505af415801561103b573d6000803e3d6000fd5b5050825160405163727bb5c760e01b81526000935083925073__$e374338554c5da70f90c17374827737168$__9163727bb5c79161107f918e918c9060040161289e565b600060405180830381865af415801561109c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110c49190810190612973565b845160405163a90a6c5f60e01b815292945090925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916111039185906004016129a9565b60006040518083038186803b15801561111b57600080fd5b505af415801561112f573d6000803e3d6000fd5b50949c939b50929950505050505050505050565b604080516001600160801b03198481166020830152825160108184030181526030830184529084166050830152825180830384018152606090920190925260009190825b82518110156111fb578181815181106111a2576111a2612524565b602001015160f81c60f81b6001600160f81b0319168382815181106111c9576111c9612524565b01602001516001600160f81b031916146111e95760009350505050610b90565b806111f3816125de565b915050611187565b50600195945050505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015611252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112769190611f5b565b61127f57600080fd5b60408051632cb05c5360e21b81526001600160401b03841660048201526024810191909152601560448201527464656661756c743a76303a65746842756e646c657360581b606482015260009073__$e374338554c5da70f90c17374827737168$__9063b2c1714c90608401600060405180830381865af4158015611308573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113309190810190612441565b9050805160000361135657306040516375fff46760e01b815260040161058391906124f1565b600081516001600160401b0381111561137157611371611758565b6040519080825280602002602001820160405280156113b657816020015b604080518082019091526000808252602082015281526020019060019003908161138f5790505b50905060005b825181101561153057600073__$e374338554c5da70f90c17374827737168$__63ae9a60408584815181106113f3576113f3612524565b602090810291909101015151604080516001600160e01b031960e085901b1681526001600160801b031990921660048301526024820152601e60448201527f64656661756c743a76303a65746842756e646c6553696d526573756c747300006064820152608401600060405180830381865af4158015611477573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261149f9190810190612397565b90506000818060200190518101906114b791906125f7565b90506040518060400160405280826001600160401b031681526020018685815181106114e5576114e5612524565b6020026020010151600001516001600160801b03191681525084848151811061151057611510612524565b602002602001018190525050508080611528906125de565b9150506113bc565b50805160005b611541600183612614565b81101561164e576000611555826001612627565b90505b8281101561163b5783818151811061157257611572612524565b6020026020010151600001516001600160401b031684838151811061159957611599612524565b6020026020010151600001516001600160401b031610156116295760008483815181106115c8576115c8612524565b602002602001015190508482815181106115e4576115e4612524565b60200260200101518584815181106115fe576115fe612524565b60200260200101819052508085838151811061161c5761161c612524565b6020026020010181905250505b80611633816125de565b915050611558565b5080611646816125de565b915050611536565b50600083516001600160401b0381111561166a5761166a611758565b604051908082528060200260200182016040528015611693578160200160208202803683370190505b50905060005b83518110156116fd578381815181106116b4576116b4612524565b6020026020010151602001518282815181106116d2576116d2612524565b6001600160801b031990921660209283029190910190910152806116f5816125de565b915050611699565b506117198787836040518060200160405280600081525061016e565b979650505050505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015290565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561179057611790611758565b60405290565b60405161010081016001600160401b038111828210171561179057611790611758565b60405160c081016001600160401b038111828210171561179057611790611758565b604051601f8201601f191681016001600160401b038111828210171561180357611803611758565b604052919050565b6001600160401b038116811461182057600080fd5b50565b803561182e8161180b565b919050565b60006001600160401b0382111561184c5761184c611758565b50601f01601f191660200190565b600082601f83011261186b57600080fd5b813561187e61187982611833565b6117db565b81815284602083860101111561189357600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461182057600080fd5b803561182e816118b0565b60006001600160401b038211156118e9576118e9611758565b5060051b60200190565b600082601f83011261190457600080fd5b81356020611914611879836118d0565b82815260079290921b8401810191818101908684111561193357600080fd5b8286015b848110156119aa57608081890312156119505760008081fd5b61195861176e565b81356119638161180b565b8152818501356119728161180b565b81860152604082810135611985816118b0565b908201526060828101356119988161180b565b90820152835291830191608001611937565b509695505050505050565b600061010082840312156119c857600080fd5b6119d0611796565b90506119db82611823565b815260208201356001600160401b03808211156119f757600080fd5b611a038583860161185a565b602084015260408401356040840152611a1e60608501611823565b6060840152611a2f608085016118c5565b6080840152611a4060a08501611823565b60a084015260c084013560c084015260e0840135915080821115611a6357600080fd5b50611a70848285016118f3565b60e08301525092915050565b6001600160801b03198116811461182057600080fd5b803561182e81611a7c565b60008060008060808587031215611ab357600080fd5b84356001600160401b0380821115611aca57600080fd5b611ad6888389016119b5565b95506020915081870135611ae98161180b565b9450604087013581811115611afd57600080fd5b8701601f81018913611b0e57600080fd5b8035611b1c611879826118d0565b81815260059190911b8201840190848101908b831115611b3b57600080fd5b928501925b82841015611b62578335611b5381611a7c565b82529285019290850190611b40565b96505050506060870135915080821115611b7b57600080fd5b50611b888782880161185a565b91505092959194509250565b60005b83811015611baf578181015183820152602001611b97565b50506000910152565b60008151808452611bd0816020860160208601611b94565b601f01601f19169290920160200192915050565b602081526000611bf76020830184611bb8565b9392505050565b60008060408385031215611c1157600080fd5b82356001600160401b03811115611c2757600080fd5b611c33858286016119b5565b9250506020830135611c448161180b565b809150509250929050565b60008060408385031215611c6257600080fd5b8235611c6d81611a7c565b915060208301356001600160401b03811115611c8857600080fd5b611c948582860161185a565b9150509250929050565b600082601f830112611caf57600080fd5b81356020611cbf611879836118d0565b82815260059290921b84018101918181019086841115611cde57600080fd5b8286015b848110156119aa578035611cf5816118b0565b8352918301918301611ce2565b60008060408385031215611d1557600080fd5b82356001600160401b0380821115611d2c57600080fd5b9084019060c08287031215611d4057600080fd5b611d486117b9565b611d5183611a92565b8152611d5f60208401611a92565b6020820152611d7060408401611823565b6040820152606083013582811115611d8757600080fd5b611d9388828601611c9e565b606083015250608083013582811115611dab57600080fd5b611db788828601611c9e565b60808301525060a083013582811115611dcf57600080fd5b611ddb8882860161185a565b60a08301525093506020850135915080821115611df757600080fd5b50611c948582860161185a565b600081518084526020808501945080840160005b83811015611e3d5781516001600160a01b031687529582019590820190600101611e18565b509495945050505050565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c06060850152611e9260c0850182611e04565b905060808301518482036080860152611eab8282611e04565b91505060a083015184820360a0860152611ec58282611bb8565b95945050505050565b604081526000611ee16040830185611e48565b8281036020840152611ec58185611bb8565b600060208284031215611f0557600080fd5b81356001600160401b03811115611f1b57600080fd5b820160c08185031215611bf757600080fd5b60008060408385031215611f4057600080fd5b8235611f4b81611a7c565b91506020830135611c4481611a7c565b600060208284031215611f6d57600080fd5b81518015158114611bf757600080fd5b600081518084526020808501945080840160005b83811015611e3d57815180516001600160401b039081168952848201518116858a01526040808301516001600160a01b0316908a0152606091820151169088015260809096019590820190600101611f91565b600081518084526020808501945080840160005b83811015611e3d5781516001600160801b03191687529582019590820190600101611ff8565b608081526001600160401b038551166080820152600060208601516101008060a0850152612050610180850183611bb8565b9150604088015160c0850152606088015161207660e08601826001600160401b03169052565b5060808801516001600160a01b03169084015260a08701516001600160401b031661012084015260c087015161014084015260e0870151838203607f19016101608501526120c48282611f7d565b9150506120dc60208401876001600160401b03169052565b82810360408401526120ee8186611fe4565b905082810360608401526117198185611bb8565b805161182e81611a7c565b805161182e8161180b565b600082601f83011261212957600080fd5b81516020612139611879836118d0565b82815260059290921b8401810191818101908684111561215857600080fd5b8286015b848110156119aa57805161216f816118b0565b835291830191830161215c565b600082601f83011261218d57600080fd5b815161219b61187982611833565b8181528460208386010111156121b057600080fd5b610c8d826020830160208701611b94565b600060c082840312156121d357600080fd5b6121db6117b9565b90506121e682612102565b81526121f460208301612102565b60208201526122056040830161210d565b604082015260608201516001600160401b038082111561222457600080fd5b61223085838601612118565b6060840152608084015191508082111561224957600080fd5b61225585838601612118565b608084015260a084015191508082111561226e57600080fd5b5061227b8482850161217c565b60a08301525092915050565b6000806040838503121561229a57600080fd5b82516001600160401b03808211156122b157600080fd5b6122bd868387016121c1565b935060208501519150808211156122d357600080fd5b50611c948582860161217c565b60408152600080845481600182811c91508083168061230057607f831692505b6020808410820361231f57634e487b7160e01b86526022600452602486fd5b604088018490526060880182801561233e57600181146123545761237f565b60ff198716825285151560051b8201975061237f565b60008c81526020902060005b8781101561237957815484820152908601908401612360565b83019850505b5050878603818901525050505050611ec58185611bb8565b6000602082840312156123a957600080fd5b81516001600160401b038111156123bf57600080fd5b610c8d8482850161217c565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000611ec56060830184611e04565b602081526000611bf76020830184611e48565b6001600160e01b0319831681528151600090612433816004850160208701611b94565b919091016004019392505050565b6000602080838503121561245457600080fd5b82516001600160401b038082111561246b57600080fd5b818501915085601f83011261247f57600080fd5b815161248d611879826118d0565b81815260059190911b830184019084810190888311156124ac57600080fd5b8585015b838110156124e4578051858111156124c85760008081fd5b6124d68b89838a01016121c1565b8452509186019186016124b0565b5098975050505050505050565b6001600160a01b03919091168152604060208201819052600790820152666e6f206269647360c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602080838503121561254d57600080fd5b82516001600160401b0381111561256357600080fd5b8301601f8101851361257457600080fd5b8051612582611879826118d0565b81815260059190911b820183019083810190878311156125a157600080fd5b928401925b828410156117195783516125b981611a7c565b825292840192908401906125a6565b634e487b7160e01b600052601160045260246000fd5b6000600182016125f0576125f06125c8565b5060010190565b60006020828403121561260957600080fd5b8151611bf78161180b565b81810381811115610b9057610b906125c8565b80820180821115610b9057610b906125c8565b6001600160801b031982168152604060208201526000611bf7604083016019815278191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b602082015260400190565b6001600160801b031983168152604060208201526000610c8d6040830184611bb8565b6000602082840312156126b857600080fd5b8135611bf781611a7c565b6000602082840312156126d557600080fd5b8135611bf78161180b565b6000808335601e198436030181126126f757600080fd5b8301803591506001600160401b0382111561271157600080fd5b6020019150600581901b3603821315610e3057600080fd5b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156124e4578335612776816118b0565b6001600160a01b031682529282019290820190600101612763565b6001600160401b03841681526080602082015260006127b36080830185611e04565b82810360408401526127c58185611e04565b8381036060850152601581527464656661756c743a76303a6d65726765644269647360581b60208201529050604081015b9695505050505050565b60006020828403121561281257600080fd5b81516001600160401b0381111561282857600080fd5b610c8d848285016121c1565b602081526000611bf76020830184611fe4565b6001600160801b03198316815260606020820152600061288c60608301601581527464656661756c743a76303a6d65726765644269647360581b602082015260400190565b8281036040840152611ec58185611bb8565b606081526001600160401b038451166060820152600060208501516101008060808501526128d0610160850183611bb8565b9150604087015160a085015260608701516128f660c08601826001600160401b03169052565b5060808701516001600160a01b03811660e08601525060a08701516001600160401b03811685830152505060c086015161012084015260e0860151838203605f19016101408501526129488282611f7d565b91505061296160208401866001600160801b0319169052565b82810360408401526127f68185611bb8565b6000806040838503121561298657600080fd5b82516001600160401b038082111561299d57600080fd5b6122bd8683870161217c565b6001600160801b03198316815260606020820152600061288c606083016019815278191959985d5b1d0e9d8c0e989d5a5b19195c94185e5b1bd859603a1b60208201526040019056fea164736f6c6343000813000a" } } diff --git a/suave/artifacts/bids.sol/EthBundleSenderContract.json b/suave/artifacts/bids.sol/EthBundleSenderContract.json index f533eb9ced..9b6b9fa9e8 100644 --- a/suave/artifacts/bids.sol/EthBundleSenderContract.json +++ b/suave/artifacts/bids.sol/EthBundleSenderContract.json @@ -11,22 +11,6 @@ "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "PeekerReverted", - "type": "error" - }, { "anonymous": false, "inputs": [ @@ -160,9 +144,9 @@ } ], "deployedBytecode": { - "object": "0x60806040526004361061003f5760003560e01c80631141a0b014610044578063236eb5a71461007a57806392f07a581461008d578063c0b9d287146100a2575b600080fd5b34801561005057600080fd5b5061006461005f366004610984565b6100c4565b60405161007191906109ed565b60405180910390f35b610064610088366004610b32565b610170565b34801561009957600080fd5b506100646102ee565b3480156100ae57600080fd5b506100c26100bd366004610ba7565b610327565b005b600081815481106100d457600080fd5b9060005260206000200160009150905080546100ef90610be1565b80601f016020809104026020016040519081016040528092919081815260200182805461011b90610be1565b80156101685780601f1061013d57610100808354040283529160200191610168565b820191906000526020600020905b81548152906001019060200180831161014b57829003601f168201915b505050505081565b606061017a61038d565b61018357600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af11580156101c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101ed9190810190610c69565b905060006101fa82610416565b905060006102378787876040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b8152506104db565b905061027581600001516040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b815250856105d8565b8051604080518082018252601e81527f64656661756c743a76303a65746842756e646c6553696d526573756c7473000060208083019190915282516001600160401b038716818301528351808203909201825283019092526102d792916105d8565b6102e1818461068a565b93505050505b9392505050565b60606102f861038d565b61030157600080fd5b600061030b61078d565b9050808060200190518101906103219190610c69565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6103556020830183610cd0565b6103656060840160408501610ced565b6103726060850185610d0a565b6040516103829493929190610d5a565b60405180910390a150565b6040516000908190819063420100009082818181855afa9150503d80600081146103d3576040519150601f19603f3d011682016040523d82523d6000602084013e6103d8565b606091505b50915091508161040c576342010000816040516375fff46760e01b8152600401610403929190610dcf565b60405180910390fd5b6020015192915050565b600080600063421000006001600160a01b03168460405160200161043a91906109ed565b60408051601f198184030181529082905261045491610df3565b600060405180830381855afa9150503d806000811461048f576040519150601f19603f3d011682016040523d82523d6000602084013e610494565b606091505b5091509150816104bf576342100000816040516375fff46760e01b8152600401610403929190610dcf565b808060200190518101906104d39190610e1f565b949350505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b0316878787876040516020016105349493929190610e80565b60408051601f198184030181529082905261054e91610df3565b600060405180830381855afa9150503d8060008114610589576040519150601f19603f3d011682016040523d82523d6000602084013e61058e565b606091505b5091509150816105b9576342030000816040516375fff46760e01b8152600401610403929190610dcf565b808060200190518101906105cd9190610f57565b979650505050505050565b60008063420200006001600160a01b03168585856040516020016105fe9392919061103e565b60408051601f198184030181529082905261061891610df3565b600060405180830381855afa9150503d8060008114610653576040519150601f19603f3d011682016040523d82523d6000602084013e610658565b606091505b509150915081610683576342020000816040516375fff46760e01b8152600401610403929190610dcf565b5050505050565b606060005b6000548110156107825761076f600082815481106106af576106af61107d565b9060005260206000200180546106c490610be1565b80601f01602080910402602001604051908101604052809291908181526020018280546106f090610be1565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b50505050506040518060400160405280600e81526020016d6574685f73656e6442756e646c6560901b81525085610825565b508061077a81611093565b91505061068f565b506102e783836108ec565b6040805160008082526020820192839052606092909182916342010001916107b491610df3565b600060405180830381855afa9150503d80600081146107ef576040519150601f19603f3d011682016040523d82523d6000602084013e6107f4565b606091505b50915091508161081f576342010001816040516375fff46760e01b8152600401610403929190610dcf565b92915050565b606061082f61038d565b61083857600080fd5b60008063430000016001600160a01b031686868660405160200161085e939291906110ba565b60408051601f198184030181529082905261087891610df3565b600060405180830381855afa9150503d80600081146108b3576040519150601f19603f3d011682016040523d82523d6000602084013e6108b8565b606091505b5091509150816108e3576343000001816040516375fff46760e01b8152600401610403929190610dcf565b95945050505050565b60607f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e83600001518460400151856060015160405161092d939291906110f3565b60405180910390a160405163c0b9d28760e01b9061094f908590602001611125565b60408051601f198184030181529082905261096d92916020016111b2565b604051602081830303815290604052905092915050565b60006020828403121561099657600080fd5b5035919050565b60005b838110156109b85781810151838201526020016109a0565b50506000910152565b600081518084526109d981602086016020860161099d565b601f01601f19169290920160200192915050565b6020815260006102e760208301846109c1565b6001600160401b0381168114610a1557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610a5057610a50610a18565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610a7e57610a7e610a18565b604052919050565b60006001600160401b03821115610a9f57610a9f610a18565b5060051b60200190565b6001600160a01b0381168114610a1557600080fd5b600082601f830112610acf57600080fd5b81356020610ae4610adf83610a86565b610a56565b82815260059290921b84018101918181019086841115610b0357600080fd5b8286015b84811015610b27578035610b1a81610aa9565b8352918301918301610b07565b509695505050505050565b600080600060608486031215610b4757600080fd5b8335610b5281610a00565b925060208401356001600160401b0380821115610b6e57600080fd5b610b7a87838801610abe565b93506040860135915080821115610b9057600080fd5b50610b9d86828701610abe565b9150509250925092565b600060208284031215610bb957600080fd5b81356001600160401b03811115610bcf57600080fd5b820160c081850312156102e757600080fd5b600181811c90821680610bf557607f821691505b602082108103610c1557634e487b7160e01b600052602260045260246000fd5b50919050565b60006001600160401b03831115610c3457610c34610a18565b610c47601f8401601f1916602001610a56565b9050828152838383011115610c5b57600080fd5b6102e783602083018461099d565b600060208284031215610c7b57600080fd5b81516001600160401b03811115610c9157600080fd5b8201601f81018413610ca257600080fd5b6104d384825160208401610c1b565b6fffffffffffffffffffffffffffffffff1981168114610a1557600080fd5b600060208284031215610ce257600080fd5b81356102e781610cb1565b600060208284031215610cff57600080fd5b81356102e781610a00565b6000808335601e19843603018112610d2157600080fd5b8301803591506001600160401b03821115610d3b57600080fd5b6020019150600581901b3603821315610d5357600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b86811015610dc2578335610da781610aa9565b6001600160a01b031682529282019290820190600101610d94565b5098975050505050505050565b6001600160a01b03831681526040602082018190526000906104d3908301846109c1565b60008251610e0581846020870161099d565b9190910192915050565b8051610e1a81610a00565b919050565b600060208284031215610e3157600080fd5b81516102e781610a00565b600081518084526020808501945080840160005b83811015610e755781516001600160a01b031687529582019590820190600101610e50565b509495945050505050565b6001600160401b0385168152608060208201526000610ea26080830186610e3c565b8281036040840152610eb48186610e3c565b905082810360608401526105cd81856109c1565b8051610e1a81610cb1565b600082601f830112610ee457600080fd5b81516020610ef4610adf83610a86565b82815260059290921b84018101918181019086841115610f1357600080fd5b8286015b84811015610b27578051610f2a81610aa9565b8352918301918301610f17565b600082601f830112610f4857600080fd5b6102e783835160208501610c1b565b600060208284031215610f6957600080fd5b81516001600160401b0380821115610f8057600080fd5b9083019060c08286031215610f9457600080fd5b610f9c610a2e565b610fa583610ec8565b8152610fb360208401610ec8565b6020820152610fc460408401610e0f565b6040820152606083015182811115610fdb57600080fd5b610fe787828601610ed3565b606083015250608083015182811115610fff57600080fd5b61100b87828601610ed3565b60808301525060a08301518281111561102357600080fd5b61102f87828601610f37565b60a08301525095945050505050565b6001600160801b03198416815260606020820152600061106160608301856109c1565b828103604084015261107381856109c1565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016110b357634e487b7160e01b600052601160045260246000fd5b5060010190565b6060815260006110cd60608301866109c1565b82810360208401526110df81866109c1565b9050828103604084015261107381856109c1565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006108e36060830184610e3c565b6020815260006001600160801b0319808451166020840152806020850151166040840152506001600160401b036040840151166060830152606083015160c0608084015261117660e0840182610e3c565b90506080840151601f19808584030160a08601526111948383610e3c565b925060a08601519150808584030160c0860152506108e382826109c1565b6001600160e01b03198316815281516000906111d581600485016020870161099d565b91909101600401939250505056fea164736f6c6343000813000a" + "object": "0x60806040526004361061003f5760003560e01c80631141a0b014610044578063236eb5a71461007a57806392f07a581461008d578063c0b9d287146100a2575b600080fd5b34801561005057600080fd5b5061006461005f36600461072a565b6100c4565b6040516100719190610793565b60405180910390f35b6100646100883660046108d8565b610170565b34801561009957600080fd5b50610064610463565b3480156100ae57600080fd5b506100c26100bd36600461094d565b61056a565b005b600081815481106100d457600080fd5b9060005260206000200160009150905080546100ef90610987565b80601f016020809104026020016040519081016040528092919081815260200182805461011b90610987565b80156101685780601f1061013d57610100808354040283529160200191610168565b820191906000526020600020905b81548152906001019060200180831161014b57829003601f168201915b505050505081565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df91906109c1565b6101e857600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561022a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102529190810190610a31565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b815260040161028d9190610793565b602060405180830381865af41580156102aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ce9190610a91565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418888886040518463ffffffff1660e01b815260040161030d93929190610af2565b600060405180830381865af415801561032a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103529190810190610c0e565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f9161038e918790600401610cf5565b60006040518083038186803b1580156103a657600080fd5b505af41580156103ba573d6000803e3d6000fd5b50508251604080516001600160401b038716602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b815260040161041c929190610d55565b60006040518083038186803b15801561043457600080fd5b505af4158015610448573d6000803e3d6000fd5b5050505061045681846105d0565b93505050505b9392505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156104ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d291906109c1565b6104db57600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610526573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261054e9190810190610a31565b9050808060200190518101906105649190610a31565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6105986020830183610dac565b6105a86060840160408501610dc9565b6105b56060850185610de6565b6040516105c59493929190610e36565b60405180910390a150565b606060005b60005481101561068c5773__$e374338554c5da70f90c17374827737168$__6392649e7d6000838154811061060c5761060c610eab565b90600052602060002001856040518363ffffffff1660e01b8152600401610634929190610ec1565b600060405180830381865af4158015610651573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106799190810190610a31565b508061068481610fa0565b9150506105d5565b5061045c838360607f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8360000151846040015185606001516040516106d393929190610fc7565b60405180910390a160405163c0b9d28760e01b906106f5908590602001610ff9565b60408051601f19818403018152908290526107139291602001611086565b604051602081830303815290604052905092915050565b60006020828403121561073c57600080fd5b5035919050565b60005b8381101561075e578181015183820152602001610746565b50506000910152565b6000815180845261077f816020860160208601610743565b601f01601f19169290920160200192915050565b60208152600061045c6020830184610767565b6001600160401b03811681146107bb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156107f6576107f66107be565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610824576108246107be565b604052919050565b60006001600160401b03821115610845576108456107be565b5060051b60200190565b6001600160a01b03811681146107bb57600080fd5b600082601f83011261087557600080fd5b8135602061088a6108858361082c565b6107fc565b82815260059290921b840181019181810190868411156108a957600080fd5b8286015b848110156108cd5780356108c08161084f565b83529183019183016108ad565b509695505050505050565b6000806000606084860312156108ed57600080fd5b83356108f8816107a6565b925060208401356001600160401b038082111561091457600080fd5b61092087838801610864565b9350604086013591508082111561093657600080fd5b5061094386828701610864565b9150509250925092565b60006020828403121561095f57600080fd5b81356001600160401b0381111561097557600080fd5b820160c0818503121561045c57600080fd5b600181811c9082168061099b57607f821691505b6020821081036109bb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156109d357600080fd5b8151801515811461045c57600080fd5b60006001600160401b038311156109fc576109fc6107be565b610a0f601f8401601f19166020016107fc565b9050828152838383011115610a2357600080fd5b61045c836020830184610743565b600060208284031215610a4357600080fd5b81516001600160401b03811115610a5957600080fd5b8201601f81018413610a6a57600080fd5b610a79848251602084016109e3565b949350505050565b8051610a8c816107a6565b919050565b600060208284031215610aa357600080fd5b815161045c816107a6565b600081518084526020808501945080840160005b83811015610ae75781516001600160a01b031687529582019590820190600101610ac2565b509495945050505050565b6001600160401b0384168152608060208201526000610b146080830185610aae565b8281036040840152610b268185610aae565b8381036060850152601581527464656661756c743a76303a65746842756e646c657360581b60208201529050604081019695505050505050565b6fffffffffffffffffffffffffffffffff19811681146107bb57600080fd5b8051610a8c81610b60565b600082601f830112610b9b57600080fd5b81516020610bab6108858361082c565b82815260059290921b84018101918181019086841115610bca57600080fd5b8286015b848110156108cd578051610be18161084f565b8352918301918301610bce565b600082601f830112610bff57600080fd5b61045c838351602085016109e3565b600060208284031215610c2057600080fd5b81516001600160401b0380821115610c3757600080fd5b9083019060c08286031215610c4b57600080fd5b610c536107d4565b610c5c83610b7f565b8152610c6a60208401610b7f565b6020820152610c7b60408401610a81565b6040820152606083015182811115610c9257600080fd5b610c9e87828601610b8a565b606083015250608083015182811115610cb657600080fd5b610cc287828601610b8a565b60808301525060a083015182811115610cda57600080fd5b610ce687828601610bee565b60a08301525095945050505050565b6001600160801b031983168152606060208201526000610d3a60608301601581527464656661756c743a76303a65746842756e646c657360581b602082015260400190565b8281036040840152610d4c8185610767565b95945050505050565b6001600160801b03198316815260606020820152601e60608201527f64656661756c743a76303a65746842756e646c6553696d526573756c74730000608082015260a060408201526000610a7960a0830184610767565b600060208284031215610dbe57600080fd5b813561045c81610b60565b600060208284031215610ddb57600080fd5b813561045c816107a6565b6000808335601e19843603018112610dfd57600080fd5b8301803591506001600160401b03821115610e1757600080fd5b6020019150600581901b3603821315610e2f57600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b86811015610e9e578335610e838161084f565b6001600160a01b031682529282019290820190600101610e70565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60608152600080845481600182811c915080831680610ee157607f831692505b60208084108203610f0057634e487b7160e01b86526022600452602486fd5b6060880184905260808801828015610f1f5760018114610f3557610f60565b60ff198716825285151560051b82019750610f60565b60008c81526020902060005b87811015610f5a57815484820152908601908401610f41565b83019850505b5050878603908801525050600e835250506d6574685f73656e6442756e646c6560901b60208201526040810190508281036040840152610d4c8185610767565b600060018201610fc057634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000610d4c6060830184610aae565b6020815260006001600160801b0319808451166020840152806020850151166040840152506001600160401b036040840151166060830152606083015160c0608084015261104a60e0840182610aae565b90506080840151601f19808584030160a08601526110688383610aae565b925060a08601519150808584030160c086015250610d4c8282610767565b6001600160e01b03198316815281516000906110a9816004850160208701610743565b91909101600401939250505056fea164736f6c6343000813000a" }, "bytecode": { - "object": "0x60806040523480156200001157600080fd5b506040516200161038038062001610833981016040819052620000349162000171565b80516200004990600090602084019062000051565b505062000410565b8280548282559060005260206000209081019282156200009c579160200282015b828111156200009c57825182906200008b908262000344565b509160200191906001019062000072565b50620000aa929150620000ae565b5090565b80821115620000aa576000620000c58282620000cf565b50600101620000ae565b508054620000dd90620002b5565b6000825580601f10620000ee575050565b601f0160209004906000526020600020908101906200010e919062000111565b50565b5b80821115620000aa576000815560010162000112565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000169576200016962000128565b604052919050565b600060208083850312156200018557600080fd5b82516001600160401b03808211156200019d57600080fd5b8185019150601f8681840112620001b357600080fd5b825182811115620001c857620001c862000128565b8060051b620001d98682016200013e565b918252848101860191868101908a841115620001f457600080fd5b87870192505b83831015620002a757825186811115620002145760008081fd5b8701603f81018c13620002275760008081fd5b88810151878111156200023e576200023e62000128565b62000251818801601f19168b016200013e565b81815260408e81848601011115620002695760008081fd5b60005b8381101562000289578481018201518382018e01528c016200026c565b505060009181018b01919091528352509187019190870190620001fa565b9a9950505050505050505050565b600181811c90821680620002ca57607f821691505b602082108103620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033f57600081815260208120601f850160051c810160208610156200031a5750805b601f850160051c820191505b818110156200033b5782815560010162000326565b5050505b505050565b81516001600160401b0381111562000360576200036062000128565b6200037881620003718454620002b5565b84620002f1565b602080601f831160018114620003b05760008415620003975750858301515b600019600386901b1c1916600185901b1785556200033b565b600085815260208120601f198616915b82811015620003e157888601518255948401946001909101908401620003c0565b5085821015620004005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6111f080620004206000396000f3fe60806040526004361061003f5760003560e01c80631141a0b014610044578063236eb5a71461007a57806392f07a581461008d578063c0b9d287146100a2575b600080fd5b34801561005057600080fd5b5061006461005f366004610984565b6100c4565b60405161007191906109ed565b60405180910390f35b610064610088366004610b32565b610170565b34801561009957600080fd5b506100646102ee565b3480156100ae57600080fd5b506100c26100bd366004610ba7565b610327565b005b600081815481106100d457600080fd5b9060005260206000200160009150905080546100ef90610be1565b80601f016020809104026020016040519081016040528092919081815260200182805461011b90610be1565b80156101685780601f1061013d57610100808354040283529160200191610168565b820191906000526020600020905b81548152906001019060200180831161014b57829003601f168201915b505050505081565b606061017a61038d565b61018357600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af11580156101c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101ed9190810190610c69565b905060006101fa82610416565b905060006102378787876040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b8152506104db565b905061027581600001516040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b815250856105d8565b8051604080518082018252601e81527f64656661756c743a76303a65746842756e646c6553696d526573756c7473000060208083019190915282516001600160401b038716818301528351808203909201825283019092526102d792916105d8565b6102e1818461068a565b93505050505b9392505050565b60606102f861038d565b61030157600080fd5b600061030b61078d565b9050808060200190518101906103219190610c69565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6103556020830183610cd0565b6103656060840160408501610ced565b6103726060850185610d0a565b6040516103829493929190610d5a565b60405180910390a150565b6040516000908190819063420100009082818181855afa9150503d80600081146103d3576040519150601f19603f3d011682016040523d82523d6000602084013e6103d8565b606091505b50915091508161040c576342010000816040516375fff46760e01b8152600401610403929190610dcf565b60405180910390fd5b6020015192915050565b600080600063421000006001600160a01b03168460405160200161043a91906109ed565b60408051601f198184030181529082905261045491610df3565b600060405180830381855afa9150503d806000811461048f576040519150601f19603f3d011682016040523d82523d6000602084013e610494565b606091505b5091509150816104bf576342100000816040516375fff46760e01b8152600401610403929190610dcf565b808060200190518101906104d39190610e1f565b949350505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b0316878787876040516020016105349493929190610e80565b60408051601f198184030181529082905261054e91610df3565b600060405180830381855afa9150503d8060008114610589576040519150601f19603f3d011682016040523d82523d6000602084013e61058e565b606091505b5091509150816105b9576342030000816040516375fff46760e01b8152600401610403929190610dcf565b808060200190518101906105cd9190610f57565b979650505050505050565b60008063420200006001600160a01b03168585856040516020016105fe9392919061103e565b60408051601f198184030181529082905261061891610df3565b600060405180830381855afa9150503d8060008114610653576040519150601f19603f3d011682016040523d82523d6000602084013e610658565b606091505b509150915081610683576342020000816040516375fff46760e01b8152600401610403929190610dcf565b5050505050565b606060005b6000548110156107825761076f600082815481106106af576106af61107d565b9060005260206000200180546106c490610be1565b80601f01602080910402602001604051908101604052809291908181526020018280546106f090610be1565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b50505050506040518060400160405280600e81526020016d6574685f73656e6442756e646c6560901b81525085610825565b508061077a81611093565b91505061068f565b506102e783836108ec565b6040805160008082526020820192839052606092909182916342010001916107b491610df3565b600060405180830381855afa9150503d80600081146107ef576040519150601f19603f3d011682016040523d82523d6000602084013e6107f4565b606091505b50915091508161081f576342010001816040516375fff46760e01b8152600401610403929190610dcf565b92915050565b606061082f61038d565b61083857600080fd5b60008063430000016001600160a01b031686868660405160200161085e939291906110ba565b60408051601f198184030181529082905261087891610df3565b600060405180830381855afa9150503d80600081146108b3576040519150601f19603f3d011682016040523d82523d6000602084013e6108b8565b606091505b5091509150816108e3576343000001816040516375fff46760e01b8152600401610403929190610dcf565b95945050505050565b60607f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e83600001518460400151856060015160405161092d939291906110f3565b60405180910390a160405163c0b9d28760e01b9061094f908590602001611125565b60408051601f198184030181529082905261096d92916020016111b2565b604051602081830303815290604052905092915050565b60006020828403121561099657600080fd5b5035919050565b60005b838110156109b85781810151838201526020016109a0565b50506000910152565b600081518084526109d981602086016020860161099d565b601f01601f19169290920160200192915050565b6020815260006102e760208301846109c1565b6001600160401b0381168114610a1557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610a5057610a50610a18565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610a7e57610a7e610a18565b604052919050565b60006001600160401b03821115610a9f57610a9f610a18565b5060051b60200190565b6001600160a01b0381168114610a1557600080fd5b600082601f830112610acf57600080fd5b81356020610ae4610adf83610a86565b610a56565b82815260059290921b84018101918181019086841115610b0357600080fd5b8286015b84811015610b27578035610b1a81610aa9565b8352918301918301610b07565b509695505050505050565b600080600060608486031215610b4757600080fd5b8335610b5281610a00565b925060208401356001600160401b0380821115610b6e57600080fd5b610b7a87838801610abe565b93506040860135915080821115610b9057600080fd5b50610b9d86828701610abe565b9150509250925092565b600060208284031215610bb957600080fd5b81356001600160401b03811115610bcf57600080fd5b820160c081850312156102e757600080fd5b600181811c90821680610bf557607f821691505b602082108103610c1557634e487b7160e01b600052602260045260246000fd5b50919050565b60006001600160401b03831115610c3457610c34610a18565b610c47601f8401601f1916602001610a56565b9050828152838383011115610c5b57600080fd5b6102e783602083018461099d565b600060208284031215610c7b57600080fd5b81516001600160401b03811115610c9157600080fd5b8201601f81018413610ca257600080fd5b6104d384825160208401610c1b565b6fffffffffffffffffffffffffffffffff1981168114610a1557600080fd5b600060208284031215610ce257600080fd5b81356102e781610cb1565b600060208284031215610cff57600080fd5b81356102e781610a00565b6000808335601e19843603018112610d2157600080fd5b8301803591506001600160401b03821115610d3b57600080fd5b6020019150600581901b3603821315610d5357600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b86811015610dc2578335610da781610aa9565b6001600160a01b031682529282019290820190600101610d94565b5098975050505050505050565b6001600160a01b03831681526040602082018190526000906104d3908301846109c1565b60008251610e0581846020870161099d565b9190910192915050565b8051610e1a81610a00565b919050565b600060208284031215610e3157600080fd5b81516102e781610a00565b600081518084526020808501945080840160005b83811015610e755781516001600160a01b031687529582019590820190600101610e50565b509495945050505050565b6001600160401b0385168152608060208201526000610ea26080830186610e3c565b8281036040840152610eb48186610e3c565b905082810360608401526105cd81856109c1565b8051610e1a81610cb1565b600082601f830112610ee457600080fd5b81516020610ef4610adf83610a86565b82815260059290921b84018101918181019086841115610f1357600080fd5b8286015b84811015610b27578051610f2a81610aa9565b8352918301918301610f17565b600082601f830112610f4857600080fd5b6102e783835160208501610c1b565b600060208284031215610f6957600080fd5b81516001600160401b0380821115610f8057600080fd5b9083019060c08286031215610f9457600080fd5b610f9c610a2e565b610fa583610ec8565b8152610fb360208401610ec8565b6020820152610fc460408401610e0f565b6040820152606083015182811115610fdb57600080fd5b610fe787828601610ed3565b606083015250608083015182811115610fff57600080fd5b61100b87828601610ed3565b60808301525060a08301518281111561102357600080fd5b61102f87828601610f37565b60a08301525095945050505050565b6001600160801b03198416815260606020820152600061106160608301856109c1565b828103604084015261107381856109c1565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016110b357634e487b7160e01b600052601160045260246000fd5b5060010190565b6060815260006110cd60608301866109c1565b82810360208401526110df81866109c1565b9050828103604084015261107381856109c1565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006108e36060830184610e3c565b6020815260006001600160801b0319808451166020840152806020850151166040840152506001600160401b036040840151166060830152606083015160c0608084015261117660e0840182610e3c565b90506080840151601f19808584030160a08601526111948383610e3c565b925060a08601519150808584030160c0860152506108e382826109c1565b6001600160e01b03198316815281516000906111d581600485016020870161099d565b91909101600401939250505056fea164736f6c6343000813000a" + "object": "0x60806040523480156200001157600080fd5b50604051620014e4380380620014e4833981016040819052620000349162000171565b80516200004990600090602084019062000051565b505062000410565b8280548282559060005260206000209081019282156200009c579160200282015b828111156200009c57825182906200008b908262000344565b509160200191906001019062000072565b50620000aa929150620000ae565b5090565b80821115620000aa576000620000c58282620000cf565b50600101620000ae565b508054620000dd90620002b5565b6000825580601f10620000ee575050565b601f0160209004906000526020600020908101906200010e919062000111565b50565b5b80821115620000aa576000815560010162000112565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000169576200016962000128565b604052919050565b600060208083850312156200018557600080fd5b82516001600160401b03808211156200019d57600080fd5b8185019150601f8681840112620001b357600080fd5b825182811115620001c857620001c862000128565b8060051b620001d98682016200013e565b918252848101860191868101908a841115620001f457600080fd5b87870192505b83831015620002a757825186811115620002145760008081fd5b8701603f81018c13620002275760008081fd5b88810151878111156200023e576200023e62000128565b62000251818801601f19168b016200013e565b81815260408e81848601011115620002695760008081fd5b60005b8381101562000289578481018201518382018e01528c016200026c565b505060009181018b01919091528352509187019190870190620001fa565b9a9950505050505050505050565b600181811c90821680620002ca57607f821691505b602082108103620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033f57600081815260208120601f850160051c810160208610156200031a5750805b601f850160051c820191505b818110156200033b5782815560010162000326565b5050505b505050565b81516001600160401b0381111562000360576200036062000128565b6200037881620003718454620002b5565b84620002f1565b602080601f831160018114620003b05760008415620003975750858301515b600019600386901b1c1916600185901b1785556200033b565b600085815260208120601f198616915b82811015620003e157888601518255948401946001909101908401620003c0565b5085821015620004005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6110c480620004206000396000f3fe60806040526004361061003f5760003560e01c80631141a0b014610044578063236eb5a71461007a57806392f07a581461008d578063c0b9d287146100a2575b600080fd5b34801561005057600080fd5b5061006461005f36600461072a565b6100c4565b6040516100719190610793565b60405180910390f35b6100646100883660046108d8565b610170565b34801561009957600080fd5b50610064610463565b3480156100ae57600080fd5b506100c26100bd36600461094d565b61056a565b005b600081815481106100d457600080fd5b9060005260206000200160009150905080546100ef90610987565b80601f016020809104026020016040519081016040528092919081815260200182805461011b90610987565b80156101685780601f1061013d57610100808354040283529160200191610168565b820191906000526020600020905b81548152906001019060200180831161014b57829003601f168201915b505050505081565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df91906109c1565b6101e857600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561022a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102529190810190610a31565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b815260040161028d9190610793565b602060405180830381865af41580156102aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ce9190610a91565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418888886040518463ffffffff1660e01b815260040161030d93929190610af2565b600060405180830381865af415801561032a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103529190810190610c0e565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f9161038e918790600401610cf5565b60006040518083038186803b1580156103a657600080fd5b505af41580156103ba573d6000803e3d6000fd5b50508251604080516001600160401b038716602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b815260040161041c929190610d55565b60006040518083038186803b15801561043457600080fd5b505af4158015610448573d6000803e3d6000fd5b5050505061045681846105d0565b93505050505b9392505050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156104ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d291906109c1565b6104db57600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610526573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261054e9190810190610a31565b9050808060200190518101906105649190610a31565b91505090565b7f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e6105986020830183610dac565b6105a86060840160408501610dc9565b6105b56060850185610de6565b6040516105c59493929190610e36565b60405180910390a150565b606060005b60005481101561068c5773__$e374338554c5da70f90c17374827737168$__6392649e7d6000838154811061060c5761060c610eab565b90600052602060002001856040518363ffffffff1660e01b8152600401610634929190610ec1565b600060405180830381865af4158015610651573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106799190810190610a31565b508061068481610fa0565b9150506105d5565b5061045c838360607f83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504e8360000151846040015185606001516040516106d393929190610fc7565b60405180910390a160405163c0b9d28760e01b906106f5908590602001610ff9565b60408051601f19818403018152908290526107139291602001611086565b604051602081830303815290604052905092915050565b60006020828403121561073c57600080fd5b5035919050565b60005b8381101561075e578181015183820152602001610746565b50506000910152565b6000815180845261077f816020860160208601610743565b601f01601f19169290920160200192915050565b60208152600061045c6020830184610767565b6001600160401b03811681146107bb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156107f6576107f66107be565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610824576108246107be565b604052919050565b60006001600160401b03821115610845576108456107be565b5060051b60200190565b6001600160a01b03811681146107bb57600080fd5b600082601f83011261087557600080fd5b8135602061088a6108858361082c565b6107fc565b82815260059290921b840181019181810190868411156108a957600080fd5b8286015b848110156108cd5780356108c08161084f565b83529183019183016108ad565b509695505050505050565b6000806000606084860312156108ed57600080fd5b83356108f8816107a6565b925060208401356001600160401b038082111561091457600080fd5b61092087838801610864565b9350604086013591508082111561093657600080fd5b5061094386828701610864565b9150509250925092565b60006020828403121561095f57600080fd5b81356001600160401b0381111561097557600080fd5b820160c0818503121561045c57600080fd5b600181811c9082168061099b57607f821691505b6020821081036109bb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156109d357600080fd5b8151801515811461045c57600080fd5b60006001600160401b038311156109fc576109fc6107be565b610a0f601f8401601f19166020016107fc565b9050828152838383011115610a2357600080fd5b61045c836020830184610743565b600060208284031215610a4357600080fd5b81516001600160401b03811115610a5957600080fd5b8201601f81018413610a6a57600080fd5b610a79848251602084016109e3565b949350505050565b8051610a8c816107a6565b919050565b600060208284031215610aa357600080fd5b815161045c816107a6565b600081518084526020808501945080840160005b83811015610ae75781516001600160a01b031687529582019590820190600101610ac2565b509495945050505050565b6001600160401b0384168152608060208201526000610b146080830185610aae565b8281036040840152610b268185610aae565b8381036060850152601581527464656661756c743a76303a65746842756e646c657360581b60208201529050604081019695505050505050565b6fffffffffffffffffffffffffffffffff19811681146107bb57600080fd5b8051610a8c81610b60565b600082601f830112610b9b57600080fd5b81516020610bab6108858361082c565b82815260059290921b84018101918181019086841115610bca57600080fd5b8286015b848110156108cd578051610be18161084f565b8352918301918301610bce565b600082601f830112610bff57600080fd5b61045c838351602085016109e3565b600060208284031215610c2057600080fd5b81516001600160401b0380821115610c3757600080fd5b9083019060c08286031215610c4b57600080fd5b610c536107d4565b610c5c83610b7f565b8152610c6a60208401610b7f565b6020820152610c7b60408401610a81565b6040820152606083015182811115610c9257600080fd5b610c9e87828601610b8a565b606083015250608083015182811115610cb657600080fd5b610cc287828601610b8a565b60808301525060a083015182811115610cda57600080fd5b610ce687828601610bee565b60a08301525095945050505050565b6001600160801b031983168152606060208201526000610d3a60608301601581527464656661756c743a76303a65746842756e646c657360581b602082015260400190565b8281036040840152610d4c8185610767565b95945050505050565b6001600160801b03198316815260606020820152601e60608201527f64656661756c743a76303a65746842756e646c6553696d526573756c74730000608082015260a060408201526000610a7960a0830184610767565b600060208284031215610dbe57600080fd5b813561045c81610b60565b600060208284031215610ddb57600080fd5b813561045c816107a6565b6000808335601e19843603018112610dfd57600080fd5b8301803591506001600160401b03821115610e1757600080fd5b6020019150600581901b3603821315610e2f57600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b86811015610e9e578335610e838161084f565b6001600160a01b031682529282019290820190600101610e70565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60608152600080845481600182811c915080831680610ee157607f831692505b60208084108203610f0057634e487b7160e01b86526022600452602486fd5b6060880184905260808801828015610f1f5760018114610f3557610f60565b60ff198716825285151560051b82019750610f60565b60008c81526020902060005b87811015610f5a57815484820152908601908401610f41565b83019850505b5050878603908801525050600e835250506d6574685f73656e6442756e646c6560901b60208201526040810190508281036040840152610d4c8185610767565b600060018201610fc057634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000610d4c6060830184610aae565b6020815260006001600160801b0319808451166020840152806020850151166040840152506001600160401b036040840151166060830152606083015160c0608084015261104a60e0840182610aae565b90506080840151601f19808584030160a08601526110688383610aae565b925060a08601519150808584030160c086015250610d4c8282610767565b6001600160e01b03198316815281516000906110a9816004850160208701610743565b91909101600401939250505056fea164736f6c6343000813000a" } } diff --git a/suave/artifacts/bids.sol/MevShareBidContract.json b/suave/artifacts/bids.sol/MevShareBidContract.json index 10eed15271..b489cfd3bb 100644 --- a/suave/artifacts/bids.sol/MevShareBidContract.json +++ b/suave/artifacts/bids.sol/MevShareBidContract.json @@ -1,21 +1,5 @@ { "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "PeekerReverted", - "type": "error" - }, { "anonymous": false, "inputs": [ @@ -252,9 +236,9 @@ } ], "deployedBytecode": { - "object": "0x60806040526004361061004a5760003560e01c8063236eb5a71461004f57806389026c111461007857806392f07a581461009a578063c0b9d287146100af578063d8f55db9146100cf575b600080fd5b61006261005d366004610cc8565b6100e2565b60405161006f9190610d8d565b60405180910390f35b34801561008457600080fd5b50610098610093366004610ddf565b61032a565b005b3480156100a657600080fd5b506100626103c4565b3480156100bb57600080fd5b506100986100ca366004610e80565b6103fd565b6100626100dd366004610eca565b610451565b60606100ec610687565b6100f557600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610137573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261015f9190810190610f82565b9050600061016c82610710565b90506000610179836107d5565b905060006101be8888886040518060400160405280601c81526020017f6d657673686172653a76303a756e6d61746368656442756e646c65730000000081525061088f565b90506101fd8160000151604051806040016040528060168152602001756d657673686172653a76303a65746842756e646c657360501b8152508661098c565b8051604080518082018252601f81527f6d657673686172653a76303a65746842756e646c6553696d526573756c74730060208083019190915282516001600160401b038816918101919091526102649392015b60405160208183030381529060405261098c565b6000805160206115208339815191528160000151826040015183606001516040516102919392919061100e565b60405180910390a180516040517fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda3950916102cb918590611049565b60405180910390a16040516389026c1160e01b906102ef90839085906020016110e9565b60408051601f198184030181529082905261030d929160200161110e565b6040516020818303038152906040529450505050505b9392505050565b600080516020611520833981519152610346602084018461113f565b610356606085016040860161115c565b6103636060860186611179565b60405161037394939291906111c9565b60405180910390a17fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda39506103a9602084018461113f565b826040516103b8929190611049565b60405180910390a15050565b60606103ce610687565b6103d757600080fd5b60006103e1610a3e565b9050808060200190518101906103f79190610f82565b91505090565b600080516020611520833981519152610419602083018361113f565b610429606084016040850161115c565b6104366060850185611179565b60405161044694939291906111c9565b60405180910390a150565b606061045b610687565b61046457600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af11580156104a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104ce9190810190610f82565b905060006104db82610710565b905060006104e8836107d5565b90506000610525898989604051806040016040528060158152602001746d657673686172653a76303a6d617463684269647360581b81525061088f565b90506105648160000151604051806040016040528060168152602001756d657673686172653a76303a65746842756e646c657360501b8152508661098c565b8051604080518082018252601f81527f6d657673686172653a76303a65746842756e646c6553696d526573756c74730060208083019190915282516000918101919091526105b3939201610250565b60408051600280825260608201835260009260208301908036833701905050905086816000815181106105e8576105e861123e565b6001600160801b03199092166020928302919091019091015281518151829060019081106106185761061861123e565b6001600160801b0319909216602092830291909101820152825160408051808201825260168152756d657673686172653a76303a6d65726765644269647360501b81850152905161066f9361025091869101611254565b6106798284610ad6565b9a9950505050505050505050565b6040516000908190819063420100009082818181855afa9150503d80600081146106cd576040519150601f19603f3d011682016040523d82523d6000602084013e6106d2565b606091505b509150915081610706576342010000816040516375fff46760e01b81526004016106fd9291906112a2565b60405180910390fd5b6020015192915050565b600080600063421000006001600160a01b0316846040516020016107349190610d8d565b60408051601f198184030181529082905261074e916112c6565b600060405180830381855afa9150503d8060008114610789576040519150601f19603f3d011682016040523d82523d6000602084013e61078e565b606091505b5091509150816107b9576342100000816040516375fff46760e01b81526004016106fd9291906112a2565b808060200190518101906107cd91906112f2565b949350505050565b60606107df610687565b6107e857600080fd5b60008063421000376001600160a01b03168460405160200161080a9190610d8d565b60408051601f1981840301815290829052610824916112c6565b600060405180830381855afa9150503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b509150915081610323576342100037816040516375fff46760e01b81526004016106fd9291906112a2565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b0316878787876040516020016108e8949392919061130f565b60408051601f1981840301815290829052610902916112c6565b600060405180830381855afa9150503d806000811461093d576040519150601f19603f3d011682016040523d82523d6000602084013e610942565b606091505b50915091508161096d576342030000816040516375fff46760e01b81526004016106fd9291906112a2565b8080602001905181019061098191906113e6565b979650505050505050565b60008063420200006001600160a01b03168585856040516020016109b2939291906114cd565b60408051601f19818403018152908290526109cc916112c6565b600060405180830381855afa9150503d8060008114610a07576040519150601f19603f3d011682016040523d82523d6000602084013e610a0c565b606091505b509150915081610a37576342020000816040516375fff46760e01b81526004016106fd9291906112a2565b5050505050565b604080516000808252602082019283905260609290918291634201000191610a65916112c6565b600060405180830381855afa9150503d8060008114610aa0576040519150601f19603f3d011682016040523d82523d6000602084013e610aa5565b606091505b509150915081610ad0576342010001816040516375fff46760e01b81526004016106fd9291906112a2565b92915050565b6060600080516020611520833981519152836000015184604001518560600151604051610b059392919061100e565b60405180910390a182516040517fafa6f6affefc1010901fc56588695137d9939d2d8b34b30abee96af800a1adc291610b3f918590611049565b60405180910390a160405163c0b9d28760e01b90610b6190859060200161150c565b60408051601f1981840301815290829052610b7f929160200161110e565b604051602081830303815290604052905092915050565b6001600160401b0381168114610bab57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610be657610be6610bae565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610c1457610c14610bae565b604052919050565b60006001600160401b03821115610c3557610c35610bae565b5060051b60200190565b6001600160a01b0381168114610bab57600080fd5b600082601f830112610c6557600080fd5b81356020610c7a610c7583610c1c565b610bec565b82815260059290921b84018101918181019086841115610c9957600080fd5b8286015b84811015610cbd578035610cb081610c3f565b8352918301918301610c9d565b509695505050505050565b600080600060608486031215610cdd57600080fd5b8335610ce881610b96565b925060208401356001600160401b0380821115610d0457600080fd5b610d1087838801610c54565b93506040860135915080821115610d2657600080fd5b50610d3386828701610c54565b9150509250925092565b60005b83811015610d58578181015183820152602001610d40565b50506000910152565b60008151808452610d79816020860160208601610d3d565b601f01601f19169290920160200192915050565b6020815260006103236020830184610d61565b600060c08284031215610db257600080fd5b50919050565b60006001600160401b03821115610dd157610dd1610bae565b50601f01601f191660200190565b60008060408385031215610df257600080fd5b82356001600160401b0380821115610e0957600080fd5b610e1586838701610da0565b93506020850135915080821115610e2b57600080fd5b508301601f81018513610e3d57600080fd5b8035610e4b610c7582610db8565b818152866020838501011115610e6057600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215610e9257600080fd5b81356001600160401b03811115610ea857600080fd5b6107cd84828501610da0565b6001600160801b031981168114610bab57600080fd5b60008060008060808587031215610ee057600080fd5b8435610eeb81610b96565b935060208501356001600160401b0380821115610f0757600080fd5b610f1388838901610c54565b94506040870135915080821115610f2957600080fd5b50610f3687828801610c54565b9250506060850135610f4781610eb4565b939692955090935050565b6000610f60610c7584610db8565b9050828152838383011115610f7457600080fd5b610323836020830184610d3d565b600060208284031215610f9457600080fd5b81516001600160401b03811115610faa57600080fd5b8201601f81018413610fbb57600080fd5b6107cd84825160208401610f52565b600081518084526020808501945080840160005b838110156110035781516001600160a01b031687529582019590820190600101610fde565b509495945050505050565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006110406060830184610fca565b95945050505050565b6001600160801b0319831681526040602082015260006107cd6040830184610d61565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c060608501526110b660c0850182610fca565b9050608083015184820360808601526110cf8282610fca565b91505060a083015184820360a08601526110408282610d61565b6040815260006110fc604083018561106c565b82810360208401526110408185610d61565b6001600160e01b0319831681528151600090611131816004850160208701610d3d565b919091016004019392505050565b60006020828403121561115157600080fd5b813561032381610eb4565b60006020828403121561116e57600080fd5b813561032381610b96565b6000808335601e1984360301811261119057600080fd5b8301803591506001600160401b038211156111aa57600080fd5b6020019150600581901b36038213156111c257600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b8681101561123157833561121681610c3f565b6001600160a01b031682529282019290820190600101611203565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156112965783516001600160801b03191683529284019291840191600101611270565b50909695505050505050565b6001600160a01b03831681526040602082018190526000906107cd90830184610d61565b600082516112d8818460208701610d3d565b9190910192915050565b80516112ed81610b96565b919050565b60006020828403121561130457600080fd5b815161032381610b96565b6001600160401b03851681526080602082015260006113316080830186610fca565b82810360408401526113438186610fca565b905082810360608401526109818185610d61565b80516112ed81610eb4565b600082601f83011261137357600080fd5b81516020611383610c7583610c1c565b82815260059290921b840181019181810190868411156113a257600080fd5b8286015b84811015610cbd5780516113b981610c3f565b83529183019183016113a6565b600082601f8301126113d757600080fd5b61032383835160208501610f52565b6000602082840312156113f857600080fd5b81516001600160401b038082111561140f57600080fd5b9083019060c0828603121561142357600080fd5b61142b610bc4565b61143483611357565b815261144260208401611357565b6020820152611453604084016112e2565b604082015260608301518281111561146a57600080fd5b61147687828601611362565b60608301525060808301518281111561148e57600080fd5b61149a87828601611362565b60808301525060a0830151828111156114b257600080fd5b6114be878286016113c6565b60a08301525095945050505050565b6001600160801b0319841681526060602082015260006114f06060830185610d61565b82810360408401526115028185610d61565b9695505050505050565b602081526000610323602083018461106c56fe83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504ea164736f6c6343000813000a" + "object": "0x60806040526004361061004a5760003560e01c8063236eb5a71461004f57806389026c111461007857806392f07a581461009a578063c0b9d287146100af578063d8f55db9146100cf575b600080fd5b61006261005d366004610d75565b6100e2565b60405161006f9190610e3a565b60405180910390f35b34801561008457600080fd5b50610098610093366004610e8c565b610504565b005b3480156100a657600080fd5b5061006261059e565b3480156100bb57600080fd5b506100986100ca366004610f2d565b6106a5565b6100626100dd366004610f7f565b6106f9565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af415801561012d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101519190611007565b61015a57600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561019c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101c49190810190611059565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016101ff9190610e3a565b602060405180830381865af415801561021c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024091906110b1565b9050600073__$e374338554c5da70f90c17374827737168$__6320f16c3e846040518263ffffffff1660e01b815260040161027b9190610e3a565b600060405180830381865af4158015610298573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102c09190810190611059565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418989896040518463ffffffff1660e01b81526004016102ff93929190611112565b600060405180830381865af415801561031c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103449190810190611217565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916103809188906004016112fe565b60006040518083038186803b15801561039857600080fd5b505af41580156103ac573d6000803e3d6000fd5b50508251604080516001600160401b038816602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b815260040161040e92919061134e565b60006040518083038186803b15801561042657600080fd5b505af415801561043a573d6000803e3d6000fd5b5050505060008051602061170b83398151915281600001518260400151836060015160405161046b939291906113a5565b60405180910390a180516040517fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda3950916104a59185906113e0565b60405180910390a16040516389026c1160e01b906104c99083908590602001611480565b60408051601f19818403018152908290526104e792916020016114a5565b6040516020818303038152906040529450505050505b9392505050565b60008051602061170b83398151915261052060208401846114d6565b61053060608501604086016114f3565b61053d6060860186611510565b60405161054d9493929190611560565b60405180910390a17fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda395061058360208401846114d6565b826040516105929291906113e0565b60405180910390a15050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156105e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060d9190611007565b61061657600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610661573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106899190810190611059565b90508080602001905181019061069f9190611059565b91505090565b60008051602061170b8339815191526106c160208301836114d6565b6106d160608401604085016114f3565b6106de6060850185611510565b6040516106ee9493929190611560565b60405180910390a150565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107689190611007565b61077157600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af11580156107b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107db9190810190611059565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016108169190610e3a565b602060405180830381865af4158015610833573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085791906110b1565b9050600073__$e374338554c5da70f90c17374827737168$__6320f16c3e846040518263ffffffff1660e01b81526004016108929190610e3a565b600060405180830381865af41580156108af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d79190810190611059565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418a8a8a6040518463ffffffff1660e01b8152600401610916939291906115d5565b600060405180830381865af4158015610933573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261095b9190810190611217565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916109979188906004016112fe565b60006040518083038186803b1580156109af57600080fd5b505af41580156109c3573d6000803e3d6000fd5b50508251604080516000602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b8152600401610a1d92919061134e565b60006040518083038186803b158015610a3557600080fd5b505af4158015610a49573d6000803e3d6000fd5b506000925060029150610a599050565b604051908082528060200260200182016040528015610a82578160200160208202803683370190505b5090508681600081518110610a9957610a99611643565b6001600160801b0319909216602092830291909101909101528151815182906001908110610ac957610ac9611643565b6001600160801b0319909216602092830291909101820152825160405173__$e374338554c5da70f90c17374827737168$__9263a90a6c5f9291610b0f91869101611659565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610b3b9291906116a7565b60006040518083038186803b158015610b5357600080fd5b505af4158015610b67573d6000803e3d6000fd5b50505050610b758284610b83565b9a9950505050505050505050565b606060008051602061170b833981519152836000015184604001518560600151604051610bb2939291906113a5565b60405180910390a182516040517fafa6f6affefc1010901fc56588695137d9939d2d8b34b30abee96af800a1adc291610bec9185906113e0565b60405180910390a160405163c0b9d28760e01b90610c0e9085906020016116f7565b60408051601f1981840301815290829052610c2c92916020016114a5565b604051602081830303815290604052905092915050565b6001600160401b0381168114610c5857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610c9357610c93610c5b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610cc157610cc1610c5b565b604052919050565b60006001600160401b03821115610ce257610ce2610c5b565b5060051b60200190565b6001600160a01b0381168114610c5857600080fd5b600082601f830112610d1257600080fd5b81356020610d27610d2283610cc9565b610c99565b82815260059290921b84018101918181019086841115610d4657600080fd5b8286015b84811015610d6a578035610d5d81610cec565b8352918301918301610d4a565b509695505050505050565b600080600060608486031215610d8a57600080fd5b8335610d9581610c43565b925060208401356001600160401b0380821115610db157600080fd5b610dbd87838801610d01565b93506040860135915080821115610dd357600080fd5b50610de086828701610d01565b9150509250925092565b60005b83811015610e05578181015183820152602001610ded565b50506000910152565b60008151808452610e26816020860160208601610dea565b601f01601f19169290920160200192915050565b6020815260006104fd6020830184610e0e565b600060c08284031215610e5f57600080fd5b50919050565b60006001600160401b03821115610e7e57610e7e610c5b565b50601f01601f191660200190565b60008060408385031215610e9f57600080fd5b82356001600160401b0380821115610eb657600080fd5b610ec286838701610e4d565b93506020850135915080821115610ed857600080fd5b508301601f81018513610eea57600080fd5b8035610ef8610d2282610e65565b818152866020838501011115610f0d57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215610f3f57600080fd5b81356001600160401b03811115610f5557600080fd5b610f6184828501610e4d565b949350505050565b6001600160801b031981168114610c5857600080fd5b60008060008060808587031215610f9557600080fd5b8435610fa081610c43565b935060208501356001600160401b0380821115610fbc57600080fd5b610fc888838901610d01565b94506040870135915080821115610fde57600080fd5b50610feb87828801610d01565b9250506060850135610ffc81610f69565b939692955090935050565b60006020828403121561101957600080fd5b815180151581146104fd57600080fd5b6000611037610d2284610e65565b905082815283838301111561104b57600080fd5b6104fd836020830184610dea565b60006020828403121561106b57600080fd5b81516001600160401b0381111561108157600080fd5b8201601f8101841361109257600080fd5b610f6184825160208401611029565b80516110ac81610c43565b919050565b6000602082840312156110c357600080fd5b81516104fd81610c43565b600081518084526020808501945080840160005b838110156111075781516001600160a01b0316875295820195908201906001016110e2565b509495945050505050565b6001600160401b038416815260806020820152600061113460808301856110ce565b828103604084015261114681856110ce565b8381036060909401939093525050601c81527f6d657673686172653a76303a756e6d61746368656442756e646c65730000000060208201526040019392505050565b80516110ac81610f69565b600082601f8301126111a457600080fd5b815160206111b4610d2283610cc9565b82815260059290921b840181019181810190868411156111d357600080fd5b8286015b84811015610d6a5780516111ea81610cec565b83529183019183016111d7565b600082601f83011261120857600080fd5b6104fd83835160208501611029565b60006020828403121561122957600080fd5b81516001600160401b038082111561124057600080fd5b9083019060c0828603121561125457600080fd5b61125c610c71565b61126583611188565b815261127360208401611188565b6020820152611284604084016110a1565b604082015260608301518281111561129b57600080fd5b6112a787828601611193565b6060830152506080830151828111156112bf57600080fd5b6112cb87828601611193565b60808301525060a0830151828111156112e357600080fd5b6112ef878286016111f7565b60a08301525095945050505050565b6001600160801b0319831681526060602082015260166060820152756d657673686172653a76303a65746842756e646c657360501b608082015260a060408201526000610f6160a0830184610e0e565b6001600160801b03198316815260606020820152601f60608201527f6d657673686172653a76303a65746842756e646c6553696d526573756c747300608082015260a060408201526000610f6160a0830184610e0e565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006113d760608301846110ce565b95945050505050565b6001600160801b031983168152604060208201526000610f616040830184610e0e565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c0606085015261144d60c08501826110ce565b90506080830151848203608086015261146682826110ce565b91505060a083015184820360a08601526113d78282610e0e565b6040815260006114936040830185611403565b82810360208401526113d78185610e0e565b6001600160e01b03198316815281516000906114c8816004850160208701610dea565b919091016004019392505050565b6000602082840312156114e857600080fd5b81356104fd81610f69565b60006020828403121561150557600080fd5b81356104fd81610c43565b6000808335601e1984360301811261152757600080fd5b8301803591506001600160401b0382111561154157600080fd5b6020019150600581901b360382131561155957600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156115c85783356115ad81610cec565b6001600160a01b03168252928201929082019060010161159a565b5098975050505050505050565b6001600160401b03841681526080602082015260006115f760808301856110ce565b828103604084015261160981856110ce565b838103606090940193909352505060158152746d657673686172653a76303a6d617463684269647360581b60208201526040019392505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561169b5783516001600160801b03191683529284019291840191600101611675565b50909695505050505050565b6001600160801b0319831681526060602082015260166060820152756d657673686172653a76303a6d65726765644269647360501b608082015260a060408201526000610f6160a0830184610e0e565b6020815260006104fd602083018461140356fe83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504ea164736f6c6343000813000a" }, "bytecode": { - "object": "0x608060405234801561001057600080fd5b5061154c806100206000396000f3fe60806040526004361061004a5760003560e01c8063236eb5a71461004f57806389026c111461007857806392f07a581461009a578063c0b9d287146100af578063d8f55db9146100cf575b600080fd5b61006261005d366004610cc8565b6100e2565b60405161006f9190610d8d565b60405180910390f35b34801561008457600080fd5b50610098610093366004610ddf565b61032a565b005b3480156100a657600080fd5b506100626103c4565b3480156100bb57600080fd5b506100986100ca366004610e80565b6103fd565b6100626100dd366004610eca565b610451565b60606100ec610687565b6100f557600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610137573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261015f9190810190610f82565b9050600061016c82610710565b90506000610179836107d5565b905060006101be8888886040518060400160405280601c81526020017f6d657673686172653a76303a756e6d61746368656442756e646c65730000000081525061088f565b90506101fd8160000151604051806040016040528060168152602001756d657673686172653a76303a65746842756e646c657360501b8152508661098c565b8051604080518082018252601f81527f6d657673686172653a76303a65746842756e646c6553696d526573756c74730060208083019190915282516001600160401b038816918101919091526102649392015b60405160208183030381529060405261098c565b6000805160206115208339815191528160000151826040015183606001516040516102919392919061100e565b60405180910390a180516040517fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda3950916102cb918590611049565b60405180910390a16040516389026c1160e01b906102ef90839085906020016110e9565b60408051601f198184030181529082905261030d929160200161110e565b6040516020818303038152906040529450505050505b9392505050565b600080516020611520833981519152610346602084018461113f565b610356606085016040860161115c565b6103636060860186611179565b60405161037394939291906111c9565b60405180910390a17fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda39506103a9602084018461113f565b826040516103b8929190611049565b60405180910390a15050565b60606103ce610687565b6103d757600080fd5b60006103e1610a3e565b9050808060200190518101906103f79190610f82565b91505090565b600080516020611520833981519152610419602083018361113f565b610429606084016040850161115c565b6104366060850185611179565b60405161044694939291906111c9565b60405180910390a150565b606061045b610687565b61046457600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af11580156104a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104ce9190810190610f82565b905060006104db82610710565b905060006104e8836107d5565b90506000610525898989604051806040016040528060158152602001746d657673686172653a76303a6d617463684269647360581b81525061088f565b90506105648160000151604051806040016040528060168152602001756d657673686172653a76303a65746842756e646c657360501b8152508661098c565b8051604080518082018252601f81527f6d657673686172653a76303a65746842756e646c6553696d526573756c74730060208083019190915282516000918101919091526105b3939201610250565b60408051600280825260608201835260009260208301908036833701905050905086816000815181106105e8576105e861123e565b6001600160801b03199092166020928302919091019091015281518151829060019081106106185761061861123e565b6001600160801b0319909216602092830291909101820152825160408051808201825260168152756d657673686172653a76303a6d65726765644269647360501b81850152905161066f9361025091869101611254565b6106798284610ad6565b9a9950505050505050505050565b6040516000908190819063420100009082818181855afa9150503d80600081146106cd576040519150601f19603f3d011682016040523d82523d6000602084013e6106d2565b606091505b509150915081610706576342010000816040516375fff46760e01b81526004016106fd9291906112a2565b60405180910390fd5b6020015192915050565b600080600063421000006001600160a01b0316846040516020016107349190610d8d565b60408051601f198184030181529082905261074e916112c6565b600060405180830381855afa9150503d8060008114610789576040519150601f19603f3d011682016040523d82523d6000602084013e61078e565b606091505b5091509150816107b9576342100000816040516375fff46760e01b81526004016106fd9291906112a2565b808060200190518101906107cd91906112f2565b949350505050565b60606107df610687565b6107e857600080fd5b60008063421000376001600160a01b03168460405160200161080a9190610d8d565b60408051601f1981840301815290829052610824916112c6565b600060405180830381855afa9150503d806000811461085f576040519150601f19603f3d011682016040523d82523d6000602084013e610864565b606091505b509150915081610323576342100037816040516375fff46760e01b81526004016106fd9291906112a2565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b0316878787876040516020016108e8949392919061130f565b60408051601f1981840301815290829052610902916112c6565b600060405180830381855afa9150503d806000811461093d576040519150601f19603f3d011682016040523d82523d6000602084013e610942565b606091505b50915091508161096d576342030000816040516375fff46760e01b81526004016106fd9291906112a2565b8080602001905181019061098191906113e6565b979650505050505050565b60008063420200006001600160a01b03168585856040516020016109b2939291906114cd565b60408051601f19818403018152908290526109cc916112c6565b600060405180830381855afa9150503d8060008114610a07576040519150601f19603f3d011682016040523d82523d6000602084013e610a0c565b606091505b509150915081610a37576342020000816040516375fff46760e01b81526004016106fd9291906112a2565b5050505050565b604080516000808252602082019283905260609290918291634201000191610a65916112c6565b600060405180830381855afa9150503d8060008114610aa0576040519150601f19603f3d011682016040523d82523d6000602084013e610aa5565b606091505b509150915081610ad0576342010001816040516375fff46760e01b81526004016106fd9291906112a2565b92915050565b6060600080516020611520833981519152836000015184604001518560600151604051610b059392919061100e565b60405180910390a182516040517fafa6f6affefc1010901fc56588695137d9939d2d8b34b30abee96af800a1adc291610b3f918590611049565b60405180910390a160405163c0b9d28760e01b90610b6190859060200161150c565b60408051601f1981840301815290829052610b7f929160200161110e565b604051602081830303815290604052905092915050565b6001600160401b0381168114610bab57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610be657610be6610bae565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610c1457610c14610bae565b604052919050565b60006001600160401b03821115610c3557610c35610bae565b5060051b60200190565b6001600160a01b0381168114610bab57600080fd5b600082601f830112610c6557600080fd5b81356020610c7a610c7583610c1c565b610bec565b82815260059290921b84018101918181019086841115610c9957600080fd5b8286015b84811015610cbd578035610cb081610c3f565b8352918301918301610c9d565b509695505050505050565b600080600060608486031215610cdd57600080fd5b8335610ce881610b96565b925060208401356001600160401b0380821115610d0457600080fd5b610d1087838801610c54565b93506040860135915080821115610d2657600080fd5b50610d3386828701610c54565b9150509250925092565b60005b83811015610d58578181015183820152602001610d40565b50506000910152565b60008151808452610d79816020860160208601610d3d565b601f01601f19169290920160200192915050565b6020815260006103236020830184610d61565b600060c08284031215610db257600080fd5b50919050565b60006001600160401b03821115610dd157610dd1610bae565b50601f01601f191660200190565b60008060408385031215610df257600080fd5b82356001600160401b0380821115610e0957600080fd5b610e1586838701610da0565b93506020850135915080821115610e2b57600080fd5b508301601f81018513610e3d57600080fd5b8035610e4b610c7582610db8565b818152866020838501011115610e6057600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215610e9257600080fd5b81356001600160401b03811115610ea857600080fd5b6107cd84828501610da0565b6001600160801b031981168114610bab57600080fd5b60008060008060808587031215610ee057600080fd5b8435610eeb81610b96565b935060208501356001600160401b0380821115610f0757600080fd5b610f1388838901610c54565b94506040870135915080821115610f2957600080fd5b50610f3687828801610c54565b9250506060850135610f4781610eb4565b939692955090935050565b6000610f60610c7584610db8565b9050828152838383011115610f7457600080fd5b610323836020830184610d3d565b600060208284031215610f9457600080fd5b81516001600160401b03811115610faa57600080fd5b8201601f81018413610fbb57600080fd5b6107cd84825160208401610f52565b600081518084526020808501945080840160005b838110156110035781516001600160a01b031687529582019590820190600101610fde565b509495945050505050565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006110406060830184610fca565b95945050505050565b6001600160801b0319831681526040602082015260006107cd6040830184610d61565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c060608501526110b660c0850182610fca565b9050608083015184820360808601526110cf8282610fca565b91505060a083015184820360a08601526110408282610d61565b6040815260006110fc604083018561106c565b82810360208401526110408185610d61565b6001600160e01b0319831681528151600090611131816004850160208701610d3d565b919091016004019392505050565b60006020828403121561115157600080fd5b813561032381610eb4565b60006020828403121561116e57600080fd5b813561032381610b96565b6000808335601e1984360301811261119057600080fd5b8301803591506001600160401b038211156111aa57600080fd5b6020019150600581901b36038213156111c257600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b8681101561123157833561121681610c3f565b6001600160a01b031682529282019290820190600101611203565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156112965783516001600160801b03191683529284019291840191600101611270565b50909695505050505050565b6001600160a01b03831681526040602082018190526000906107cd90830184610d61565b600082516112d8818460208701610d3d565b9190910192915050565b80516112ed81610b96565b919050565b60006020828403121561130457600080fd5b815161032381610b96565b6001600160401b03851681526080602082015260006113316080830186610fca565b82810360408401526113438186610fca565b905082810360608401526109818185610d61565b80516112ed81610eb4565b600082601f83011261137357600080fd5b81516020611383610c7583610c1c565b82815260059290921b840181019181810190868411156113a257600080fd5b8286015b84811015610cbd5780516113b981610c3f565b83529183019183016113a6565b600082601f8301126113d757600080fd5b61032383835160208501610f52565b6000602082840312156113f857600080fd5b81516001600160401b038082111561140f57600080fd5b9083019060c0828603121561142357600080fd5b61142b610bc4565b61143483611357565b815261144260208401611357565b6020820152611453604084016112e2565b604082015260608301518281111561146a57600080fd5b61147687828601611362565b60608301525060808301518281111561148e57600080fd5b61149a87828601611362565b60808301525060a0830151828111156114b257600080fd5b6114be878286016113c6565b60a08301525095945050505050565b6001600160801b0319841681526060602082015260006114f06060830185610d61565b82810360408401526115028185610d61565b9695505050505050565b602081526000610323602083018461106c56fe83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504ea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b50611737806100206000396000f3fe60806040526004361061004a5760003560e01c8063236eb5a71461004f57806389026c111461007857806392f07a581461009a578063c0b9d287146100af578063d8f55db9146100cf575b600080fd5b61006261005d366004610d75565b6100e2565b60405161006f9190610e3a565b60405180910390f35b34801561008457600080fd5b50610098610093366004610e8c565b610504565b005b3480156100a657600080fd5b5061006261059e565b3480156100bb57600080fd5b506100986100ca366004610f2d565b6106a5565b6100626100dd366004610f7f565b6106f9565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af415801561012d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101519190611007565b61015a57600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561019c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101c49190810190611059565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016101ff9190610e3a565b602060405180830381865af415801561021c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024091906110b1565b9050600073__$e374338554c5da70f90c17374827737168$__6320f16c3e846040518263ffffffff1660e01b815260040161027b9190610e3a565b600060405180830381865af4158015610298573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102c09190810190611059565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418989896040518463ffffffff1660e01b81526004016102ff93929190611112565b600060405180830381865af415801561031c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103449190810190611217565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916103809188906004016112fe565b60006040518083038186803b15801561039857600080fd5b505af41580156103ac573d6000803e3d6000fd5b50508251604080516001600160401b038816602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b815260040161040e92919061134e565b60006040518083038186803b15801561042657600080fd5b505af415801561043a573d6000803e3d6000fd5b5050505060008051602061170b83398151915281600001518260400151836060015160405161046b939291906113a5565b60405180910390a180516040517fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda3950916104a59185906113e0565b60405180910390a16040516389026c1160e01b906104c99083908590602001611480565b60408051601f19818403018152908290526104e792916020016114a5565b6040516020818303038152906040529450505050505b9392505050565b60008051602061170b83398151915261052060208401846114d6565b61053060608501604086016114f3565b61053d6060860186611510565b60405161054d9493929190611560565b60405180910390a17fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda395061058360208401846114d6565b826040516105929291906113e0565b60405180910390a15050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156105e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060d9190611007565b61061657600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610661573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106899190810190611059565b90508080602001905181019061069f9190611059565b91505090565b60008051602061170b8339815191526106c160208301836114d6565b6106d160608401604085016114f3565b6106de6060850185611510565b6040516106ee9493929190611560565b60405180910390a150565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107689190611007565b61077157600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af11580156107b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107db9190810190611059565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016108169190610e3a565b602060405180830381865af4158015610833573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085791906110b1565b9050600073__$e374338554c5da70f90c17374827737168$__6320f16c3e846040518263ffffffff1660e01b81526004016108929190610e3a565b600060405180830381865af41580156108af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d79190810190611059565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418a8a8a6040518463ffffffff1660e01b8152600401610916939291906115d5565b600060405180830381865af4158015610933573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261095b9190810190611217565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f916109979188906004016112fe565b60006040518083038186803b1580156109af57600080fd5b505af41580156109c3573d6000803e3d6000fd5b50508251604080516000602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b8152600401610a1d92919061134e565b60006040518083038186803b158015610a3557600080fd5b505af4158015610a49573d6000803e3d6000fd5b506000925060029150610a599050565b604051908082528060200260200182016040528015610a82578160200160208202803683370190505b5090508681600081518110610a9957610a99611643565b6001600160801b0319909216602092830291909101909101528151815182906001908110610ac957610ac9611643565b6001600160801b0319909216602092830291909101820152825160405173__$e374338554c5da70f90c17374827737168$__9263a90a6c5f9291610b0f91869101611659565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610b3b9291906116a7565b60006040518083038186803b158015610b5357600080fd5b505af4158015610b67573d6000803e3d6000fd5b50505050610b758284610b83565b9a9950505050505050505050565b606060008051602061170b833981519152836000015184604001518560600151604051610bb2939291906113a5565b60405180910390a182516040517fafa6f6affefc1010901fc56588695137d9939d2d8b34b30abee96af800a1adc291610bec9185906113e0565b60405180910390a160405163c0b9d28760e01b90610c0e9085906020016116f7565b60408051601f1981840301815290829052610c2c92916020016114a5565b604051602081830303815290604052905092915050565b6001600160401b0381168114610c5857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610c9357610c93610c5b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610cc157610cc1610c5b565b604052919050565b60006001600160401b03821115610ce257610ce2610c5b565b5060051b60200190565b6001600160a01b0381168114610c5857600080fd5b600082601f830112610d1257600080fd5b81356020610d27610d2283610cc9565b610c99565b82815260059290921b84018101918181019086841115610d4657600080fd5b8286015b84811015610d6a578035610d5d81610cec565b8352918301918301610d4a565b509695505050505050565b600080600060608486031215610d8a57600080fd5b8335610d9581610c43565b925060208401356001600160401b0380821115610db157600080fd5b610dbd87838801610d01565b93506040860135915080821115610dd357600080fd5b50610de086828701610d01565b9150509250925092565b60005b83811015610e05578181015183820152602001610ded565b50506000910152565b60008151808452610e26816020860160208601610dea565b601f01601f19169290920160200192915050565b6020815260006104fd6020830184610e0e565b600060c08284031215610e5f57600080fd5b50919050565b60006001600160401b03821115610e7e57610e7e610c5b565b50601f01601f191660200190565b60008060408385031215610e9f57600080fd5b82356001600160401b0380821115610eb657600080fd5b610ec286838701610e4d565b93506020850135915080821115610ed857600080fd5b508301601f81018513610eea57600080fd5b8035610ef8610d2282610e65565b818152866020838501011115610f0d57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215610f3f57600080fd5b81356001600160401b03811115610f5557600080fd5b610f6184828501610e4d565b949350505050565b6001600160801b031981168114610c5857600080fd5b60008060008060808587031215610f9557600080fd5b8435610fa081610c43565b935060208501356001600160401b0380821115610fbc57600080fd5b610fc888838901610d01565b94506040870135915080821115610fde57600080fd5b50610feb87828801610d01565b9250506060850135610ffc81610f69565b939692955090935050565b60006020828403121561101957600080fd5b815180151581146104fd57600080fd5b6000611037610d2284610e65565b905082815283838301111561104b57600080fd5b6104fd836020830184610dea565b60006020828403121561106b57600080fd5b81516001600160401b0381111561108157600080fd5b8201601f8101841361109257600080fd5b610f6184825160208401611029565b80516110ac81610c43565b919050565b6000602082840312156110c357600080fd5b81516104fd81610c43565b600081518084526020808501945080840160005b838110156111075781516001600160a01b0316875295820195908201906001016110e2565b509495945050505050565b6001600160401b038416815260806020820152600061113460808301856110ce565b828103604084015261114681856110ce565b8381036060909401939093525050601c81527f6d657673686172653a76303a756e6d61746368656442756e646c65730000000060208201526040019392505050565b80516110ac81610f69565b600082601f8301126111a457600080fd5b815160206111b4610d2283610cc9565b82815260059290921b840181019181810190868411156111d357600080fd5b8286015b84811015610d6a5780516111ea81610cec565b83529183019183016111d7565b600082601f83011261120857600080fd5b6104fd83835160208501611029565b60006020828403121561122957600080fd5b81516001600160401b038082111561124057600080fd5b9083019060c0828603121561125457600080fd5b61125c610c71565b61126583611188565b815261127360208401611188565b6020820152611284604084016110a1565b604082015260608301518281111561129b57600080fd5b6112a787828601611193565b6060830152506080830151828111156112bf57600080fd5b6112cb87828601611193565b60808301525060a0830151828111156112e357600080fd5b6112ef878286016111f7565b60a08301525095945050505050565b6001600160801b0319831681526060602082015260166060820152756d657673686172653a76303a65746842756e646c657360501b608082015260a060408201526000610f6160a0830184610e0e565b6001600160801b03198316815260606020820152601f60608201527f6d657673686172653a76303a65746842756e646c6553696d526573756c747300608082015260a060408201526000610f6160a0830184610e0e565b6001600160801b0319841681526001600160401b03831660208201526060604082015260006113d760608301846110ce565b95945050505050565b6001600160801b031983168152604060208201526000610f616040830184610e0e565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c0606085015261144d60c08501826110ce565b90506080830151848203608086015261146682826110ce565b91505060a083015184820360a08601526113d78282610e0e565b6040815260006114936040830185611403565b82810360208401526113d78185610e0e565b6001600160e01b03198316815281516000906114c8816004850160208701610dea565b919091016004019392505050565b6000602082840312156114e857600080fd5b81356104fd81610f69565b60006020828403121561150557600080fd5b81356104fd81610c43565b6000808335601e1984360301811261152757600080fd5b8301803591506001600160401b0382111561154157600080fd5b6020019150600581901b360382131561155957600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156115c85783356115ad81610cec565b6001600160a01b03168252928201929082019060010161159a565b5098975050505050505050565b6001600160401b03841681526080602082015260006115f760808301856110ce565b828103604084015261160981856110ce565b838103606090940193909352505060158152746d657673686172653a76303a6d617463684269647360581b60208201526040019392505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561169b5783516001600160801b03191683529284019291840191600101611675565b50909695505050505050565b6001600160801b0319831681526060602082015260166060820152756d657673686172653a76303a6d65726765644269647360501b608082015260a060408201526000610f6160a0830184610e0e565b6020815260006104fd602083018461140356fe83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504ea164736f6c6343000813000a" } } diff --git a/suave/artifacts/bids.sol/MevShareBundleSenderContract.json b/suave/artifacts/bids.sol/MevShareBundleSenderContract.json index d6565d7ce2..68fc5c3490 100644 --- a/suave/artifacts/bids.sol/MevShareBundleSenderContract.json +++ b/suave/artifacts/bids.sol/MevShareBundleSenderContract.json @@ -11,22 +11,6 @@ "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "PeekerReverted", - "type": "error" - }, { "anonymous": false, "inputs": [ @@ -282,9 +266,9 @@ } ], "deployedBytecode": { - "object": "0x6080604052600436106100555760003560e01c80631141a0b01461005a578063236eb5a71461009057806389026c11146100a357806392f07a58146100c5578063c0b9d287146100da578063d8f55db9146100fa575b600080fd5b34801561006657600080fd5b5061007a610075366004610f00565b61010d565b6040516100879190610f69565b60405180910390f35b61007a61009e3660046110ae565b6101b9565b3480156100af57600080fd5b506100c36100be366004611162565b610401565b005b3480156100d157600080fd5b5061007a61049b565b3480156100e657600080fd5b506100c36100f5366004611203565b6104d4565b61007a61010836600461124d565b610528565b6000818154811061011d57600080fd5b906000526020600020016000915090508054610138906112d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610164906112d5565b80156101b15780601f10610186576101008083540402835291602001916101b1565b820191906000526020600020905b81548152906001019060200180831161019457829003601f168201915b505050505081565b60606101c361075e565b6101cc57600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561020e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102369190810190611339565b90506000610243826107e7565b90506000610250836108ac565b905060006102958888886040518060400160405280601c81526020017f6d657673686172653a76303a756e6d61746368656442756e646c657300000000815250610966565b90506102d48160000151604051806040016040528060168152602001756d657673686172653a76303a65746842756e646c657360501b81525086610a63565b8051604080518082018252601f81527f6d657673686172653a76303a65746842756e646c6553696d526573756c74730060208083019190915282516001600160401b0388169181019190915261033b9392015b604051602081830303815290604052610a63565b60008051602061192e833981519152816000015182604001518360600151604051610368939291906113c5565b60405180910390a180516040517fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda3950916103a29185906113f7565b60405180910390a16040516389026c1160e01b906103c69083908590602001611497565b60408051601f19818403018152908290526103e492916020016114bc565b6040516020818303038152906040529450505050505b9392505050565b60008051602061192e83398151915261041d60208401846114ed565b61042d606085016040860161150a565b61043a6060860186611527565b60405161044a9493929190611577565b60405180910390a17fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda395061048060208401846114ed565b8260405161048f9291906113f7565b60405180910390a15050565b60606104a561075e565b6104ae57600080fd5b60006104b8610b15565b9050808060200190518101906104ce9190611339565b91505090565b60008051602061192e8339815191526104f060208301836114ed565b610500606084016040850161150a565b61050d6060850185611527565b60405161051d9493929190611577565b60405180910390a150565b606061053261075e565b61053b57600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561057d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105a59190810190611339565b905060006105b2826107e7565b905060006105bf836108ac565b905060006105fc898989604051806040016040528060158152602001746d657673686172653a76303a6d617463684269647360581b815250610966565b905061063b8160000151604051806040016040528060168152602001756d657673686172653a76303a65746842756e646c657360501b81525086610a63565b8051604080518082018252601f81527f6d657673686172653a76303a65746842756e646c6553696d526573756c747300602080830191909152825160009181019190915261068a939201610327565b60408051600280825260608201835260009260208301908036833701905050905086816000815181106106bf576106bf6115ec565b6001600160801b03199092166020928302919091019091015281518151829060019081106106ef576106ef6115ec565b6001600160801b0319909216602092830291909101820152825160408051808201825260168152756d657673686172653a76303a6d65726765644269647360501b8185015290516107469361032791869101611602565b6107508284610bad565b9a9950505050505050505050565b6040516000908190819063420100009082818181855afa9150503d80600081146107a4576040519150601f19603f3d011682016040523d82523d6000602084013e6107a9565b606091505b5091509150816107dd576342010000816040516375fff46760e01b81526004016107d4929190611650565b60405180910390fd5b6020015192915050565b600080600063421000006001600160a01b03168460405160200161080b9190610f69565b60408051601f198184030181529082905261082591611674565b600060405180830381855afa9150503d8060008114610860576040519150601f19603f3d011682016040523d82523d6000602084013e610865565b606091505b509150915081610890576342100000816040516375fff46760e01b81526004016107d4929190611650565b808060200190518101906108a491906116a0565b949350505050565b60606108b661075e565b6108bf57600080fd5b60008063421000376001600160a01b0316846040516020016108e19190610f69565b60408051601f19818403018152908290526108fb91611674565b600060405180830381855afa9150503d8060008114610936576040519150601f19603f3d011682016040523d82523d6000602084013e61093b565b606091505b5091509150816103fa576342100037816040516375fff46760e01b81526004016107d4929190611650565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b0316878787876040516020016109bf94939291906116bd565b60408051601f19818403018152908290526109d991611674565b600060405180830381855afa9150503d8060008114610a14576040519150601f19603f3d011682016040523d82523d6000602084013e610a19565b606091505b509150915081610a44576342030000816040516375fff46760e01b81526004016107d4929190611650565b80806020019051810190610a589190611794565b979650505050505050565b60008063420200006001600160a01b0316858585604051602001610a899392919061187b565b60408051601f1981840301815290829052610aa391611674565b600060405180830381855afa9150503d8060008114610ade576040519150601f19603f3d011682016040523d82523d6000602084013e610ae3565b606091505b509150915081610b0e576342020000816040516375fff46760e01b81526004016107d4929190611650565b5050505050565b604080516000808252602082019283905260609290918291634201000191610b3c91611674565b600060405180830381855afa9150503d8060008114610b77576040519150601f19603f3d011682016040523d82523d6000602084013e610b7c565b606091505b509150915081610ba7576342010001816040516375fff46760e01b81526004016107d4929190611650565b92915050565b60606000610bbe8460000151610cc1565b905060005b600054811015610cb657610ca360008281548110610be357610be36115ec565b906000526020600020018054610bf8906112d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c24906112d5565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b50505050506040518060400160405280600e81526020016d6d65765f73656e6442756e646c6560901b81525084610d79565b5080610cae816118ba565b915050610bc3565b506108a48484610e40565b6060610ccb61075e565b610cd457600080fd5b604080516001600160801b03198416602082015260009182916343200001910160408051601f1981840301815290829052610d0e91611674565b600060405180830381855afa9150503d8060008114610d49576040519150601f19603f3d011682016040523d82523d6000602084013e610d4e565b606091505b5091509150816103fa576343200001816040516375fff46760e01b81526004016107d4929190611650565b6060610d8361075e565b610d8c57600080fd5b60008063430000016001600160a01b0316868686604051602001610db2939291906118e1565b60408051601f1981840301815290829052610dcc91611674565b600060405180830381855afa9150503d8060008114610e07576040519150601f19603f3d011682016040523d82523d6000602084013e610e0c565b606091505b509150915081610e37576343000001816040516375fff46760e01b81526004016107d4929190611650565b95945050505050565b606060008051602061192e833981519152836000015184604001518560600151604051610e6f939291906113c5565b60405180910390a182516040517fafa6f6affefc1010901fc56588695137d9939d2d8b34b30abee96af800a1adc291610ea99185906113f7565b60405180910390a160405163c0b9d28760e01b90610ecb90859060200161191a565b60408051601f1981840301815290829052610ee992916020016114bc565b604051602081830303815290604052905092915050565b600060208284031215610f1257600080fd5b5035919050565b60005b83811015610f34578181015183820152602001610f1c565b50506000910152565b60008151808452610f55816020860160208601610f19565b601f01601f19169290920160200192915050565b6020815260006103fa6020830184610f3d565b6001600160401b0381168114610f9157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610fcc57610fcc610f94565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610ffa57610ffa610f94565b604052919050565b60006001600160401b0382111561101b5761101b610f94565b5060051b60200190565b6001600160a01b0381168114610f9157600080fd5b600082601f83011261104b57600080fd5b8135602061106061105b83611002565b610fd2565b82815260059290921b8401810191818101908684111561107f57600080fd5b8286015b848110156110a357803561109681611025565b8352918301918301611083565b509695505050505050565b6000806000606084860312156110c357600080fd5b83356110ce81610f7c565b925060208401356001600160401b03808211156110ea57600080fd5b6110f68783880161103a565b9350604086013591508082111561110c57600080fd5b506111198682870161103a565b9150509250925092565b600060c0828403121561113557600080fd5b50919050565b60006001600160401b0382111561115457611154610f94565b50601f01601f191660200190565b6000806040838503121561117557600080fd5b82356001600160401b038082111561118c57600080fd5b61119886838701611123565b935060208501359150808211156111ae57600080fd5b508301601f810185136111c057600080fd5b80356111ce61105b8261113b565b8181528660208385010111156111e357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561121557600080fd5b81356001600160401b0381111561122b57600080fd5b6108a484828501611123565b6001600160801b031981168114610f9157600080fd5b6000806000806080858703121561126357600080fd5b843561126e81610f7c565b935060208501356001600160401b038082111561128a57600080fd5b6112968883890161103a565b945060408701359150808211156112ac57600080fd5b506112b98782880161103a565b92505060608501356112ca81611237565b939692955090935050565b600181811c908216806112e957607f821691505b60208210810361113557634e487b7160e01b600052602260045260246000fd5b600061131761105b8461113b565b905082815283838301111561132b57600080fd5b6103fa836020830184610f19565b60006020828403121561134b57600080fd5b81516001600160401b0381111561136157600080fd5b8201601f8101841361137257600080fd5b6108a484825160208401611309565b600081518084526020808501945080840160005b838110156113ba5781516001600160a01b031687529582019590820190600101611395565b509495945050505050565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000610e376060830184611381565b6001600160801b0319831681526040602082015260006108a46040830184610f3d565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c0606085015261146460c0850182611381565b90506080830151848203608086015261147d8282611381565b91505060a083015184820360a0860152610e378282610f3d565b6040815260006114aa604083018561141a565b8281036020840152610e378185610f3d565b6001600160e01b03198316815281516000906114df816004850160208701610f19565b919091016004019392505050565b6000602082840312156114ff57600080fd5b81356103fa81611237565b60006020828403121561151c57600080fd5b81356103fa81610f7c565b6000808335601e1984360301811261153e57600080fd5b8301803591506001600160401b0382111561155857600080fd5b6020019150600581901b360382131561157057600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156115df5783356115c481611025565b6001600160a01b0316825292820192908201906001016115b1565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156116445783516001600160801b0319168352928401929184019160010161161e565b50909695505050505050565b6001600160a01b03831681526040602082018190526000906108a490830184610f3d565b60008251611686818460208701610f19565b9190910192915050565b805161169b81610f7c565b919050565b6000602082840312156116b257600080fd5b81516103fa81610f7c565b6001600160401b03851681526080602082015260006116df6080830186611381565b82810360408401526116f18186611381565b90508281036060840152610a588185610f3d565b805161169b81611237565b600082601f83011261172157600080fd5b8151602061173161105b83611002565b82815260059290921b8401810191818101908684111561175057600080fd5b8286015b848110156110a357805161176781611025565b8352918301918301611754565b600082601f83011261178557600080fd5b6103fa83835160208501611309565b6000602082840312156117a657600080fd5b81516001600160401b03808211156117bd57600080fd5b9083019060c082860312156117d157600080fd5b6117d9610faa565b6117e283611705565b81526117f060208401611705565b602082015261180160408401611690565b604082015260608301518281111561181857600080fd5b61182487828601611710565b60608301525060808301518281111561183c57600080fd5b61184887828601611710565b60808301525060a08301518281111561186057600080fd5b61186c87828601611774565b60a08301525095945050505050565b6001600160801b03198416815260606020820152600061189e6060830185610f3d565b82810360408401526118b08185610f3d565b9695505050505050565b6000600182016118da57634e487b7160e01b600052601160045260246000fd5b5060010190565b6060815260006118f46060830186610f3d565b82810360208401526119068186610f3d565b905082810360408401526118b08185610f3d565b6020815260006103fa602083018461141a56fe83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504ea164736f6c6343000813000a" + "object": "0x6080604052600436106100555760003560e01c80631141a0b01461005a578063236eb5a71461009057806389026c11146100a357806392f07a58146100c5578063c0b9d287146100da578063d8f55db9146100fa575b600080fd5b34801561006657600080fd5b5061007a610075366004610e73565b61010d565b6040516100879190610edc565b60405180910390f35b61007a61009e366004611021565b6101b9565b3480156100af57600080fd5b506100c36100be3660046110d5565b6105db565b005b3480156100d157600080fd5b5061007a610675565b3480156100e657600080fd5b506100c36100f5366004611176565b61077c565b61007a6101083660046111c0565b6107d0565b6000818154811061011d57600080fd5b90600052602060002001600091509050805461013890611248565b80601f016020809104026020016040519081016040528092919081815260200182805461016490611248565b80156101b15780601f10610186576101008083540402835291602001916101b1565b820191906000526020600020905b81548152906001019060200180831161019457829003601f168201915b505050505081565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610204573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610228919061127c565b61023157600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610273573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261029b91908101906112ce565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016102d69190610edc565b602060405180830381865af41580156102f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103179190611326565b9050600073__$e374338554c5da70f90c17374827737168$__6320f16c3e846040518263ffffffff1660e01b81526004016103529190610edc565b600060405180830381865af415801561036f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261039791908101906112ce565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418989896040518463ffffffff1660e01b81526004016103d693929190611387565b600060405180830381865af41580156103f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261041b919081019061148c565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f91610457918890600401611573565b60006040518083038186803b15801561046f57600080fd5b505af4158015610483573d6000803e3d6000fd5b50508251604080516001600160401b038816602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b81526004016104e59291906115c3565b60006040518083038186803b1580156104fd57600080fd5b505af4158015610511573d6000803e3d6000fd5b50505050600080516020611a868339815191528160000151826040015183606001516040516105429392919061161a565b60405180910390a180516040517fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda39509161057c918590611655565b60405180910390a16040516389026c1160e01b906105a090839085906020016116f5565b60408051601f19818403018152908290526105be929160200161171a565b6040516020818303038152906040529450505050505b9392505050565b600080516020611a868339815191526105f7602084018461174b565b6106076060850160408601611768565b6106146060860186611785565b60405161062494939291906117d5565b60405180910390a17fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda395061065a602084018461174b565b82604051610669929190611655565b60405180910390a15050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156106c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e4919061127c565b6106ed57600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610738573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261076091908101906112ce565b90508080602001905181019061077691906112ce565b91505090565b600080516020611a86833981519152610798602083018361174b565b6107a86060840160408501611768565b6107b56060850185611785565b6040516107c594939291906117d5565b60405180910390a150565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af415801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f919061127c565b61084857600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561088a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108b291908101906112ce565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016108ed9190610edc565b602060405180830381865af415801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190611326565b9050600073__$e374338554c5da70f90c17374827737168$__6320f16c3e846040518263ffffffff1660e01b81526004016109699190610edc565b600060405180830381865af4158015610986573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ae91908101906112ce565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418a8a8a6040518463ffffffff1660e01b81526004016109ed9392919061184a565b600060405180830381865af4158015610a0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a32919081019061148c565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f91610a6e918890600401611573565b60006040518083038186803b158015610a8657600080fd5b505af4158015610a9a573d6000803e3d6000fd5b50508251604080516000602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b8152600401610af49291906115c3565b60006040518083038186803b158015610b0c57600080fd5b505af4158015610b20573d6000803e3d6000fd5b506000925060029150610b309050565b604051908082528060200260200182016040528015610b59578160200160208202803683370190505b5090508681600081518110610b7057610b706118b8565b6001600160801b0319909216602092830291909101909101528151815182906001908110610ba057610ba06118b8565b6001600160801b0319909216602092830291909101820152825160405173__$e374338554c5da70f90c17374827737168$__9263a90a6c5f9291610be6918691016118ce565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610c1292919061191c565b60006040518083038186803b158015610c2a57600080fd5b505af4158015610c3e573d6000803e3d6000fd5b50505050610c4c8284610c5a565b9a9950505050505050505050565b8151604051638735d61760e01b81526001600160801b0319909116600482015260609060009073__$e374338554c5da70f90c17374827737168$__90638735d61790602401600060405180830381865af4158015610cbc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ce491908101906112ce565b905060005b600054811015610da05773__$e374338554c5da70f90c17374827737168$__6392649e7d60008381548110610d2057610d206118b8565b90600052602060002001846040518363ffffffff1660e01b8152600401610d4892919061196c565b600060405180830381865af4158015610d65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8d91908101906112ce565b5080610d9881611a4b565b915050610ce9565b50610dab8484610db3565b949350505050565b6060600080516020611a86833981519152836000015184604001518560600151604051610de29392919061161a565b60405180910390a182516040517fafa6f6affefc1010901fc56588695137d9939d2d8b34b30abee96af800a1adc291610e1c918590611655565b60405180910390a160405163c0b9d28760e01b90610e3e908590602001611a72565b60408051601f1981840301815290829052610e5c929160200161171a565b604051602081830303815290604052905092915050565b600060208284031215610e8557600080fd5b5035919050565b60005b83811015610ea7578181015183820152602001610e8f565b50506000910152565b60008151808452610ec8816020860160208601610e8c565b601f01601f19169290920160200192915050565b6020815260006105d46020830184610eb0565b6001600160401b0381168114610f0457600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610f3f57610f3f610f07565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f6d57610f6d610f07565b604052919050565b60006001600160401b03821115610f8e57610f8e610f07565b5060051b60200190565b6001600160a01b0381168114610f0457600080fd5b600082601f830112610fbe57600080fd5b81356020610fd3610fce83610f75565b610f45565b82815260059290921b84018101918181019086841115610ff257600080fd5b8286015b8481101561101657803561100981610f98565b8352918301918301610ff6565b509695505050505050565b60008060006060848603121561103657600080fd5b833561104181610eef565b925060208401356001600160401b038082111561105d57600080fd5b61106987838801610fad565b9350604086013591508082111561107f57600080fd5b5061108c86828701610fad565b9150509250925092565b600060c082840312156110a857600080fd5b50919050565b60006001600160401b038211156110c7576110c7610f07565b50601f01601f191660200190565b600080604083850312156110e857600080fd5b82356001600160401b03808211156110ff57600080fd5b61110b86838701611096565b9350602085013591508082111561112157600080fd5b508301601f8101851361113357600080fd5b8035611141610fce826110ae565b81815286602083850101111561115657600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561118857600080fd5b81356001600160401b0381111561119e57600080fd5b610dab84828501611096565b6001600160801b031981168114610f0457600080fd5b600080600080608085870312156111d657600080fd5b84356111e181610eef565b935060208501356001600160401b03808211156111fd57600080fd5b61120988838901610fad565b9450604087013591508082111561121f57600080fd5b5061122c87828801610fad565b925050606085013561123d816111aa565b939692955090935050565b600181811c9082168061125c57607f821691505b6020821081036110a857634e487b7160e01b600052602260045260246000fd5b60006020828403121561128e57600080fd5b815180151581146105d457600080fd5b60006112ac610fce846110ae565b90508281528383830111156112c057600080fd5b6105d4836020830184610e8c565b6000602082840312156112e057600080fd5b81516001600160401b038111156112f657600080fd5b8201601f8101841361130757600080fd5b610dab8482516020840161129e565b805161132181610eef565b919050565b60006020828403121561133857600080fd5b81516105d481610eef565b600081518084526020808501945080840160005b8381101561137c5781516001600160a01b031687529582019590820190600101611357565b509495945050505050565b6001600160401b03841681526080602082015260006113a96080830185611343565b82810360408401526113bb8185611343565b8381036060909401939093525050601c81527f6d657673686172653a76303a756e6d61746368656442756e646c65730000000060208201526040019392505050565b8051611321816111aa565b600082601f83011261141957600080fd5b81516020611429610fce83610f75565b82815260059290921b8401810191818101908684111561144857600080fd5b8286015b8481101561101657805161145f81610f98565b835291830191830161144c565b600082601f83011261147d57600080fd5b6105d48383516020850161129e565b60006020828403121561149e57600080fd5b81516001600160401b03808211156114b557600080fd5b9083019060c082860312156114c957600080fd5b6114d1610f1d565b6114da836113fd565b81526114e8602084016113fd565b60208201526114f960408401611316565b604082015260608301518281111561151057600080fd5b61151c87828601611408565b60608301525060808301518281111561153457600080fd5b61154087828601611408565b60808301525060a08301518281111561155857600080fd5b6115648782860161146c565b60a08301525095945050505050565b6001600160801b0319831681526060602082015260166060820152756d657673686172653a76303a65746842756e646c657360501b608082015260a060408201526000610dab60a0830184610eb0565b6001600160801b03198316815260606020820152601f60608201527f6d657673686172653a76303a65746842756e646c6553696d526573756c747300608082015260a060408201526000610dab60a0830184610eb0565b6001600160801b0319841681526001600160401b038316602082015260606040820152600061164c6060830184611343565b95945050505050565b6001600160801b031983168152604060208201526000610dab6040830184610eb0565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c060608501526116c260c0850182611343565b9050608083015184820360808601526116db8282611343565b91505060a083015184820360a086015261164c8282610eb0565b6040815260006117086040830185611678565b828103602084015261164c8185610eb0565b6001600160e01b031983168152815160009061173d816004850160208701610e8c565b919091016004019392505050565b60006020828403121561175d57600080fd5b81356105d4816111aa565b60006020828403121561177a57600080fd5b81356105d481610eef565b6000808335601e1984360301811261179c57600080fd5b8301803591506001600160401b038211156117b657600080fd5b6020019150600581901b36038213156117ce57600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b8681101561183d57833561182281610f98565b6001600160a01b03168252928201929082019060010161180f565b5098975050505050505050565b6001600160401b038416815260806020820152600061186c6080830185611343565b828103604084015261187e8185611343565b838103606090940193909352505060158152746d657673686172653a76303a6d617463684269647360581b60208201526040019392505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156119105783516001600160801b031916835292840192918401916001016118ea565b50909695505050505050565b6001600160801b0319831681526060602082015260166060820152756d657673686172653a76303a6d65726765644269647360501b608082015260a060408201526000610dab60a0830184610eb0565b60608152600080845481600182811c91508083168061198c57607f831692505b602080841082036119ab57634e487b7160e01b86526022600452602486fd5b60608801849052608088018280156119ca57600181146119e057611a0b565b60ff198716825285151560051b82019750611a0b565b60008c81526020902060005b87811015611a05578154848201529086019084016119ec565b83019850505b5050878603908801525050600e835250506d6d65765f73656e6442756e646c6560901b6020820152604081019050828103604084015261164c8185610eb0565b600060018201611a6b57634e487b7160e01b600052601160045260246000fd5b5060010190565b6020815260006105d4602083018461167856fe83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504ea164736f6c6343000813000a" }, "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162001d7a38038062001d7a833981016040819052620000349162000171565b80516200004990600090602084019062000051565b505062000410565b8280548282559060005260206000209081019282156200009c579160200282015b828111156200009c57825182906200008b908262000344565b509160200191906001019062000072565b50620000aa929150620000ae565b5090565b80821115620000aa576000620000c58282620000cf565b50600101620000ae565b508054620000dd90620002b5565b6000825580601f10620000ee575050565b601f0160209004906000526020600020908101906200010e919062000111565b50565b5b80821115620000aa576000815560010162000112565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000169576200016962000128565b604052919050565b600060208083850312156200018557600080fd5b82516001600160401b03808211156200019d57600080fd5b8185019150601f8681840112620001b357600080fd5b825182811115620001c857620001c862000128565b8060051b620001d98682016200013e565b918252848101860191868101908a841115620001f457600080fd5b87870192505b83831015620002a757825186811115620002145760008081fd5b8701603f81018c13620002275760008081fd5b88810151878111156200023e576200023e62000128565b62000251818801601f19168b016200013e565b81815260408e81848601011115620002695760008081fd5b60005b8381101562000289578481018201518382018e01528c016200026c565b505060009181018b01919091528352509187019190870190620001fa565b9a9950505050505050505050565b600181811c90821680620002ca57607f821691505b602082108103620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033f57600081815260208120601f850160051c810160208610156200031a5750805b601f850160051c820191505b818110156200033b5782815560010162000326565b5050505b505050565b81516001600160401b0381111562000360576200036062000128565b6200037881620003718454620002b5565b84620002f1565b602080601f831160018114620003b05760008415620003975750858301515b600019600386901b1c1916600185901b1785556200033b565b600085815260208120601f198616915b82811015620003e157888601518255948401946001909101908401620003c0565b5085821015620004005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61195a80620004206000396000f3fe6080604052600436106100555760003560e01c80631141a0b01461005a578063236eb5a71461009057806389026c11146100a357806392f07a58146100c5578063c0b9d287146100da578063d8f55db9146100fa575b600080fd5b34801561006657600080fd5b5061007a610075366004610f00565b61010d565b6040516100879190610f69565b60405180910390f35b61007a61009e3660046110ae565b6101b9565b3480156100af57600080fd5b506100c36100be366004611162565b610401565b005b3480156100d157600080fd5b5061007a61049b565b3480156100e657600080fd5b506100c36100f5366004611203565b6104d4565b61007a61010836600461124d565b610528565b6000818154811061011d57600080fd5b906000526020600020016000915090508054610138906112d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610164906112d5565b80156101b15780601f10610186576101008083540402835291602001916101b1565b820191906000526020600020905b81548152906001019060200180831161019457829003601f168201915b505050505081565b60606101c361075e565b6101cc57600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561020e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102369190810190611339565b90506000610243826107e7565b90506000610250836108ac565b905060006102958888886040518060400160405280601c81526020017f6d657673686172653a76303a756e6d61746368656442756e646c657300000000815250610966565b90506102d48160000151604051806040016040528060168152602001756d657673686172653a76303a65746842756e646c657360501b81525086610a63565b8051604080518082018252601f81527f6d657673686172653a76303a65746842756e646c6553696d526573756c74730060208083019190915282516001600160401b0388169181019190915261033b9392015b604051602081830303815290604052610a63565b60008051602061192e833981519152816000015182604001518360600151604051610368939291906113c5565b60405180910390a180516040517fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda3950916103a29185906113f7565b60405180910390a16040516389026c1160e01b906103c69083908590602001611497565b60408051601f19818403018152908290526103e492916020016114bc565b6040516020818303038152906040529450505050505b9392505050565b60008051602061192e83398151915261041d60208401846114ed565b61042d606085016040860161150a565b61043a6060860186611527565b60405161044a9493929190611577565b60405180910390a17fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda395061048060208401846114ed565b8260405161048f9291906113f7565b60405180910390a15050565b60606104a561075e565b6104ae57600080fd5b60006104b8610b15565b9050808060200190518101906104ce9190611339565b91505090565b60008051602061192e8339815191526104f060208301836114ed565b610500606084016040850161150a565b61050d6060850185611527565b60405161051d9493929190611577565b60405180910390a150565b606061053261075e565b61053b57600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561057d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105a59190810190611339565b905060006105b2826107e7565b905060006105bf836108ac565b905060006105fc898989604051806040016040528060158152602001746d657673686172653a76303a6d617463684269647360581b815250610966565b905061063b8160000151604051806040016040528060168152602001756d657673686172653a76303a65746842756e646c657360501b81525086610a63565b8051604080518082018252601f81527f6d657673686172653a76303a65746842756e646c6553696d526573756c747300602080830191909152825160009181019190915261068a939201610327565b60408051600280825260608201835260009260208301908036833701905050905086816000815181106106bf576106bf6115ec565b6001600160801b03199092166020928302919091019091015281518151829060019081106106ef576106ef6115ec565b6001600160801b0319909216602092830291909101820152825160408051808201825260168152756d657673686172653a76303a6d65726765644269647360501b8185015290516107469361032791869101611602565b6107508284610bad565b9a9950505050505050505050565b6040516000908190819063420100009082818181855afa9150503d80600081146107a4576040519150601f19603f3d011682016040523d82523d6000602084013e6107a9565b606091505b5091509150816107dd576342010000816040516375fff46760e01b81526004016107d4929190611650565b60405180910390fd5b6020015192915050565b600080600063421000006001600160a01b03168460405160200161080b9190610f69565b60408051601f198184030181529082905261082591611674565b600060405180830381855afa9150503d8060008114610860576040519150601f19603f3d011682016040523d82523d6000602084013e610865565b606091505b509150915081610890576342100000816040516375fff46760e01b81526004016107d4929190611650565b808060200190518101906108a491906116a0565b949350505050565b60606108b661075e565b6108bf57600080fd5b60008063421000376001600160a01b0316846040516020016108e19190610f69565b60408051601f19818403018152908290526108fb91611674565b600060405180830381855afa9150503d8060008114610936576040519150601f19603f3d011682016040523d82523d6000602084013e61093b565b606091505b5091509150816103fa576342100037816040516375fff46760e01b81526004016107d4929190611650565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a082015260008063420300006001600160a01b0316878787876040516020016109bf94939291906116bd565b60408051601f19818403018152908290526109d991611674565b600060405180830381855afa9150503d8060008114610a14576040519150601f19603f3d011682016040523d82523d6000602084013e610a19565b606091505b509150915081610a44576342030000816040516375fff46760e01b81526004016107d4929190611650565b80806020019051810190610a589190611794565b979650505050505050565b60008063420200006001600160a01b0316858585604051602001610a899392919061187b565b60408051601f1981840301815290829052610aa391611674565b600060405180830381855afa9150503d8060008114610ade576040519150601f19603f3d011682016040523d82523d6000602084013e610ae3565b606091505b509150915081610b0e576342020000816040516375fff46760e01b81526004016107d4929190611650565b5050505050565b604080516000808252602082019283905260609290918291634201000191610b3c91611674565b600060405180830381855afa9150503d8060008114610b77576040519150601f19603f3d011682016040523d82523d6000602084013e610b7c565b606091505b509150915081610ba7576342010001816040516375fff46760e01b81526004016107d4929190611650565b92915050565b60606000610bbe8460000151610cc1565b905060005b600054811015610cb657610ca360008281548110610be357610be36115ec565b906000526020600020018054610bf8906112d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c24906112d5565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b50505050506040518060400160405280600e81526020016d6d65765f73656e6442756e646c6560901b81525084610d79565b5080610cae816118ba565b915050610bc3565b506108a48484610e40565b6060610ccb61075e565b610cd457600080fd5b604080516001600160801b03198416602082015260009182916343200001910160408051601f1981840301815290829052610d0e91611674565b600060405180830381855afa9150503d8060008114610d49576040519150601f19603f3d011682016040523d82523d6000602084013e610d4e565b606091505b5091509150816103fa576343200001816040516375fff46760e01b81526004016107d4929190611650565b6060610d8361075e565b610d8c57600080fd5b60008063430000016001600160a01b0316868686604051602001610db2939291906118e1565b60408051601f1981840301815290829052610dcc91611674565b600060405180830381855afa9150503d8060008114610e07576040519150601f19603f3d011682016040523d82523d6000602084013e610e0c565b606091505b509150915081610e37576343000001816040516375fff46760e01b81526004016107d4929190611650565b95945050505050565b606060008051602061192e833981519152836000015184604001518560600151604051610e6f939291906113c5565b60405180910390a182516040517fafa6f6affefc1010901fc56588695137d9939d2d8b34b30abee96af800a1adc291610ea99185906113f7565b60405180910390a160405163c0b9d28760e01b90610ecb90859060200161191a565b60408051601f1981840301815290829052610ee992916020016114bc565b604051602081830303815290604052905092915050565b600060208284031215610f1257600080fd5b5035919050565b60005b83811015610f34578181015183820152602001610f1c565b50506000910152565b60008151808452610f55816020860160208601610f19565b601f01601f19169290920160200192915050565b6020815260006103fa6020830184610f3d565b6001600160401b0381168114610f9157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610fcc57610fcc610f94565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610ffa57610ffa610f94565b604052919050565b60006001600160401b0382111561101b5761101b610f94565b5060051b60200190565b6001600160a01b0381168114610f9157600080fd5b600082601f83011261104b57600080fd5b8135602061106061105b83611002565b610fd2565b82815260059290921b8401810191818101908684111561107f57600080fd5b8286015b848110156110a357803561109681611025565b8352918301918301611083565b509695505050505050565b6000806000606084860312156110c357600080fd5b83356110ce81610f7c565b925060208401356001600160401b03808211156110ea57600080fd5b6110f68783880161103a565b9350604086013591508082111561110c57600080fd5b506111198682870161103a565b9150509250925092565b600060c0828403121561113557600080fd5b50919050565b60006001600160401b0382111561115457611154610f94565b50601f01601f191660200190565b6000806040838503121561117557600080fd5b82356001600160401b038082111561118c57600080fd5b61119886838701611123565b935060208501359150808211156111ae57600080fd5b508301601f810185136111c057600080fd5b80356111ce61105b8261113b565b8181528660208385010111156111e357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561121557600080fd5b81356001600160401b0381111561122b57600080fd5b6108a484828501611123565b6001600160801b031981168114610f9157600080fd5b6000806000806080858703121561126357600080fd5b843561126e81610f7c565b935060208501356001600160401b038082111561128a57600080fd5b6112968883890161103a565b945060408701359150808211156112ac57600080fd5b506112b98782880161103a565b92505060608501356112ca81611237565b939692955090935050565b600181811c908216806112e957607f821691505b60208210810361113557634e487b7160e01b600052602260045260246000fd5b600061131761105b8461113b565b905082815283838301111561132b57600080fd5b6103fa836020830184610f19565b60006020828403121561134b57600080fd5b81516001600160401b0381111561136157600080fd5b8201601f8101841361137257600080fd5b6108a484825160208401611309565b600081518084526020808501945080840160005b838110156113ba5781516001600160a01b031687529582019590820190600101611395565b509495945050505050565b6001600160801b0319841681526001600160401b0383166020820152606060408201526000610e376060830184611381565b6001600160801b0319831681526040602082015260006108a46040830184610f3d565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c0606085015261146460c0850182611381565b90506080830151848203608086015261147d8282611381565b91505060a083015184820360a0860152610e378282610f3d565b6040815260006114aa604083018561141a565b8281036020840152610e378185610f3d565b6001600160e01b03198316815281516000906114df816004850160208701610f19565b919091016004019392505050565b6000602082840312156114ff57600080fd5b81356103fa81611237565b60006020828403121561151c57600080fd5b81356103fa81610f7c565b6000808335601e1984360301811261153e57600080fd5b8301803591506001600160401b0382111561155857600080fd5b6020019150600581901b360382131561157057600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b868110156115df5783356115c481611025565b6001600160a01b0316825292820192908201906001016115b1565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156116445783516001600160801b0319168352928401929184019160010161161e565b50909695505050505050565b6001600160a01b03831681526040602082018190526000906108a490830184610f3d565b60008251611686818460208701610f19565b9190910192915050565b805161169b81610f7c565b919050565b6000602082840312156116b257600080fd5b81516103fa81610f7c565b6001600160401b03851681526080602082015260006116df6080830186611381565b82810360408401526116f18186611381565b90508281036060840152610a588185610f3d565b805161169b81611237565b600082601f83011261172157600080fd5b8151602061173161105b83611002565b82815260059290921b8401810191818101908684111561175057600080fd5b8286015b848110156110a357805161176781611025565b8352918301918301611754565b600082601f83011261178557600080fd5b6103fa83835160208501611309565b6000602082840312156117a657600080fd5b81516001600160401b03808211156117bd57600080fd5b9083019060c082860312156117d157600080fd5b6117d9610faa565b6117e283611705565b81526117f060208401611705565b602082015261180160408401611690565b604082015260608301518281111561181857600080fd5b61182487828601611710565b60608301525060808301518281111561183c57600080fd5b61184887828601611710565b60808301525060a08301518281111561186057600080fd5b61186c87828601611774565b60a08301525095945050505050565b6001600160801b03198416815260606020820152600061189e6060830185610f3d565b82810360408401526118b08185610f3d565b9695505050505050565b6000600182016118da57634e487b7160e01b600052601160045260246000fd5b5060010190565b6060815260006118f46060830186610f3d565b82810360208401526119068186610f3d565b905082810360408401526118b08185610f3d565b6020815260006103fa602083018461141a56fe83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504ea164736f6c6343000813000a" + "object": "0x60806040523480156200001157600080fd5b5060405162001ed238038062001ed2833981016040819052620000349162000171565b80516200004990600090602084019062000051565b505062000410565b8280548282559060005260206000209081019282156200009c579160200282015b828111156200009c57825182906200008b908262000344565b509160200191906001019062000072565b50620000aa929150620000ae565b5090565b80821115620000aa576000620000c58282620000cf565b50600101620000ae565b508054620000dd90620002b5565b6000825580601f10620000ee575050565b601f0160209004906000526020600020908101906200010e919062000111565b50565b5b80821115620000aa576000815560010162000112565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000169576200016962000128565b604052919050565b600060208083850312156200018557600080fd5b82516001600160401b03808211156200019d57600080fd5b8185019150601f8681840112620001b357600080fd5b825182811115620001c857620001c862000128565b8060051b620001d98682016200013e565b918252848101860191868101908a841115620001f457600080fd5b87870192505b83831015620002a757825186811115620002145760008081fd5b8701603f81018c13620002275760008081fd5b88810151878111156200023e576200023e62000128565b62000251818801601f19168b016200013e565b81815260408e81848601011115620002695760008081fd5b60005b8381101562000289578481018201518382018e01528c016200026c565b505060009181018b01919091528352509187019190870190620001fa565b9a9950505050505050505050565b600181811c90821680620002ca57607f821691505b602082108103620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033f57600081815260208120601f850160051c810160208610156200031a5750805b601f850160051c820191505b818110156200033b5782815560010162000326565b5050505b505050565b81516001600160401b0381111562000360576200036062000128565b6200037881620003718454620002b5565b84620002f1565b602080601f831160018114620003b05760008415620003975750858301515b600019600386901b1c1916600185901b1785556200033b565b600085815260208120601f198616915b82811015620003e157888601518255948401946001909101908401620003c0565b5085821015620004005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611ab280620004206000396000f3fe6080604052600436106100555760003560e01c80631141a0b01461005a578063236eb5a71461009057806389026c11146100a357806392f07a58146100c5578063c0b9d287146100da578063d8f55db9146100fa575b600080fd5b34801561006657600080fd5b5061007a610075366004610e73565b61010d565b6040516100879190610edc565b60405180910390f35b61007a61009e366004611021565b6101b9565b3480156100af57600080fd5b506100c36100be3660046110d5565b6105db565b005b3480156100d157600080fd5b5061007a610675565b3480156100e657600080fd5b506100c36100f5366004611176565b61077c565b61007a6101083660046111c0565b6107d0565b6000818154811061011d57600080fd5b90600052602060002001600091509050805461013890611248565b80601f016020809104026020016040519081016040528092919081815260200182805461016490611248565b80156101b15780601f10610186576101008083540402835291602001916101b1565b820191906000526020600020905b81548152906001019060200180831161019457829003601f168201915b505050505081565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af4158015610204573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610228919061127c565b61023157600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610273573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261029b91908101906112ce565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016102d69190610edc565b602060405180830381865af41580156102f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103179190611326565b9050600073__$e374338554c5da70f90c17374827737168$__6320f16c3e846040518263ffffffff1660e01b81526004016103529190610edc565b600060405180830381865af415801561036f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261039791908101906112ce565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418989896040518463ffffffff1660e01b81526004016103d693929190611387565b600060405180830381865af41580156103f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261041b919081019061148c565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f91610457918890600401611573565b60006040518083038186803b15801561046f57600080fd5b505af4158015610483573d6000803e3d6000fd5b50508251604080516001600160401b038816602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b81526004016104e59291906115c3565b60006040518083038186803b1580156104fd57600080fd5b505af4158015610511573d6000803e3d6000fd5b50505050600080516020611a868339815191528160000151826040015183606001516040516105429392919061161a565b60405180910390a180516040517fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda39509161057c918590611655565b60405180910390a16040516389026c1160e01b906105a090839085906020016116f5565b60408051601f19818403018152908290526105be929160200161171a565b6040516020818303038152906040529450505050505b9392505050565b600080516020611a868339815191526105f7602084018461174b565b6106076060850160408601611768565b6106146060860186611785565b60405161062494939291906117d5565b60405180910390a17fdab8306bad2ca820d05b9eff8da2e3016d372c15f00bb032f758718b9cda395061065a602084018461174b565b82604051610669929190611655565b60405180910390a15050565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af41580156106c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e4919061127c565b6106ed57600080fd5b600073__$e374338554c5da70f90c17374827737168$__6336cb97fd6040518163ffffffff1660e01b8152600401600060405180830381865af4158015610738573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261076091908101906112ce565b90508080602001905181019061077691906112ce565b91505090565b600080516020611a86833981519152610798602083018361174b565b6107a86060840160408501611768565b6107b56060850185611785565b6040516107c594939291906117d5565b60405180910390a150565b606073__$e374338554c5da70f90c17374827737168$__630e38f3376040518163ffffffff1660e01b8152600401602060405180830381865af415801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f919061127c565b61084857600080fd5b6000306001600160a01b03166392f07a586040518163ffffffff1660e01b81526004016000604051808303816000875af115801561088a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108b291908101906112ce565b9050600073__$e374338554c5da70f90c17374827737168$__63023e8e2f836040518263ffffffff1660e01b81526004016108ed9190610edc565b602060405180830381865af415801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190611326565b9050600073__$e374338554c5da70f90c17374827737168$__6320f16c3e846040518263ffffffff1660e01b81526004016109699190610edc565b600060405180830381865af4158015610986573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ae91908101906112ce565b9050600073__$e374338554c5da70f90c17374827737168$__634f5631418a8a8a6040518463ffffffff1660e01b81526004016109ed9392919061184a565b600060405180830381865af4158015610a0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a32919081019061148c565b805160405163a90a6c5f60e01b815291925073__$e374338554c5da70f90c17374827737168$__9163a90a6c5f91610a6e918890600401611573565b60006040518083038186803b158015610a8657600080fd5b505af4158015610a9a573d6000803e3d6000fd5b50508251604080516000602082015273__$e374338554c5da70f90c17374827737168$__945063a90a6c5f9350016040516020818303038152906040526040518363ffffffff1660e01b8152600401610af49291906115c3565b60006040518083038186803b158015610b0c57600080fd5b505af4158015610b20573d6000803e3d6000fd5b506000925060029150610b309050565b604051908082528060200260200182016040528015610b59578160200160208202803683370190505b5090508681600081518110610b7057610b706118b8565b6001600160801b0319909216602092830291909101909101528151815182906001908110610ba057610ba06118b8565b6001600160801b0319909216602092830291909101820152825160405173__$e374338554c5da70f90c17374827737168$__9263a90a6c5f9291610be6918691016118ce565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610c1292919061191c565b60006040518083038186803b158015610c2a57600080fd5b505af4158015610c3e573d6000803e3d6000fd5b50505050610c4c8284610c5a565b9a9950505050505050505050565b8151604051638735d61760e01b81526001600160801b0319909116600482015260609060009073__$e374338554c5da70f90c17374827737168$__90638735d61790602401600060405180830381865af4158015610cbc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ce491908101906112ce565b905060005b600054811015610da05773__$e374338554c5da70f90c17374827737168$__6392649e7d60008381548110610d2057610d206118b8565b90600052602060002001846040518363ffffffff1660e01b8152600401610d4892919061196c565b600060405180830381865af4158015610d65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8d91908101906112ce565b5080610d9881611a4b565b915050610ce9565b50610dab8484610db3565b949350505050565b6060600080516020611a86833981519152836000015184604001518560600151604051610de29392919061161a565b60405180910390a182516040517fafa6f6affefc1010901fc56588695137d9939d2d8b34b30abee96af800a1adc291610e1c918590611655565b60405180910390a160405163c0b9d28760e01b90610e3e908590602001611a72565b60408051601f1981840301815290829052610e5c929160200161171a565b604051602081830303815290604052905092915050565b600060208284031215610e8557600080fd5b5035919050565b60005b83811015610ea7578181015183820152602001610e8f565b50506000910152565b60008151808452610ec8816020860160208601610e8c565b601f01601f19169290920160200192915050565b6020815260006105d46020830184610eb0565b6001600160401b0381168114610f0457600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715610f3f57610f3f610f07565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f6d57610f6d610f07565b604052919050565b60006001600160401b03821115610f8e57610f8e610f07565b5060051b60200190565b6001600160a01b0381168114610f0457600080fd5b600082601f830112610fbe57600080fd5b81356020610fd3610fce83610f75565b610f45565b82815260059290921b84018101918181019086841115610ff257600080fd5b8286015b8481101561101657803561100981610f98565b8352918301918301610ff6565b509695505050505050565b60008060006060848603121561103657600080fd5b833561104181610eef565b925060208401356001600160401b038082111561105d57600080fd5b61106987838801610fad565b9350604086013591508082111561107f57600080fd5b5061108c86828701610fad565b9150509250925092565b600060c082840312156110a857600080fd5b50919050565b60006001600160401b038211156110c7576110c7610f07565b50601f01601f191660200190565b600080604083850312156110e857600080fd5b82356001600160401b03808211156110ff57600080fd5b61110b86838701611096565b9350602085013591508082111561112157600080fd5b508301601f8101851361113357600080fd5b8035611141610fce826110ae565b81815286602083850101111561115657600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561118857600080fd5b81356001600160401b0381111561119e57600080fd5b610dab84828501611096565b6001600160801b031981168114610f0457600080fd5b600080600080608085870312156111d657600080fd5b84356111e181610eef565b935060208501356001600160401b03808211156111fd57600080fd5b61120988838901610fad565b9450604087013591508082111561121f57600080fd5b5061122c87828801610fad565b925050606085013561123d816111aa565b939692955090935050565b600181811c9082168061125c57607f821691505b6020821081036110a857634e487b7160e01b600052602260045260246000fd5b60006020828403121561128e57600080fd5b815180151581146105d457600080fd5b60006112ac610fce846110ae565b90508281528383830111156112c057600080fd5b6105d4836020830184610e8c565b6000602082840312156112e057600080fd5b81516001600160401b038111156112f657600080fd5b8201601f8101841361130757600080fd5b610dab8482516020840161129e565b805161132181610eef565b919050565b60006020828403121561133857600080fd5b81516105d481610eef565b600081518084526020808501945080840160005b8381101561137c5781516001600160a01b031687529582019590820190600101611357565b509495945050505050565b6001600160401b03841681526080602082015260006113a96080830185611343565b82810360408401526113bb8185611343565b8381036060909401939093525050601c81527f6d657673686172653a76303a756e6d61746368656442756e646c65730000000060208201526040019392505050565b8051611321816111aa565b600082601f83011261141957600080fd5b81516020611429610fce83610f75565b82815260059290921b8401810191818101908684111561144857600080fd5b8286015b8481101561101657805161145f81610f98565b835291830191830161144c565b600082601f83011261147d57600080fd5b6105d48383516020850161129e565b60006020828403121561149e57600080fd5b81516001600160401b03808211156114b557600080fd5b9083019060c082860312156114c957600080fd5b6114d1610f1d565b6114da836113fd565b81526114e8602084016113fd565b60208201526114f960408401611316565b604082015260608301518281111561151057600080fd5b61151c87828601611408565b60608301525060808301518281111561153457600080fd5b61154087828601611408565b60808301525060a08301518281111561155857600080fd5b6115648782860161146c565b60a08301525095945050505050565b6001600160801b0319831681526060602082015260166060820152756d657673686172653a76303a65746842756e646c657360501b608082015260a060408201526000610dab60a0830184610eb0565b6001600160801b03198316815260606020820152601f60608201527f6d657673686172653a76303a65746842756e646c6553696d526573756c747300608082015260a060408201526000610dab60a0830184610eb0565b6001600160801b0319841681526001600160401b038316602082015260606040820152600061164c6060830184611343565b95945050505050565b6001600160801b031983168152604060208201526000610dab6040830184610eb0565b60006001600160801b0319808351168452806020840151166020850152506001600160401b036040830151166040840152606082015160c060608501526116c260c0850182611343565b9050608083015184820360808601526116db8282611343565b91505060a083015184820360a086015261164c8282610eb0565b6040815260006117086040830185611678565b828103602084015261164c8185610eb0565b6001600160e01b031983168152815160009061173d816004850160208701610e8c565b919091016004019392505050565b60006020828403121561175d57600080fd5b81356105d4816111aa565b60006020828403121561177a57600080fd5b81356105d481610eef565b6000808335601e1984360301811261179c57600080fd5b8301803591506001600160401b038211156117b657600080fd5b6020019150600581901b36038213156117ce57600080fd5b9250929050565b6000606082016001600160801b03198716835260206001600160401b03871681850152606060408501528185835260808501905086925060005b8681101561183d57833561182281610f98565b6001600160a01b03168252928201929082019060010161180f565b5098975050505050505050565b6001600160401b038416815260806020820152600061186c6080830185611343565b828103604084015261187e8185611343565b838103606090940193909352505060158152746d657673686172653a76303a6d617463684269647360581b60208201526040019392505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156119105783516001600160801b031916835292840192918401916001016118ea565b50909695505050505050565b6001600160801b0319831681526060602082015260166060820152756d657673686172653a76303a6d65726765644269647360501b608082015260a060408201526000610dab60a0830184610eb0565b60608152600080845481600182811c91508083168061198c57607f831692505b602080841082036119ab57634e487b7160e01b86526022600452602486fd5b60608801849052608088018280156119ca57600181146119e057611a0b565b60ff198716825285151560051b82019750611a0b565b60008c81526020902060005b87811015611a05578154848201529086019084016119ec565b83019850505b5050878603908801525050600e835250506d6d65765f73656e6442756e646c6560901b6020820152604081019050828103604084015261164c8185610eb0565b600060018201611a6b57634e487b7160e01b600052601160045260246000fd5b5060010190565b6020815260006105d4602083018461167856fe83481d5b04dea534715acad673a8177a46fc93882760f36bdc16ccac439d504ea164736f6c6343000813000a" } } diff --git a/suave/artifacts/example.sol/ExampleEthCallSource.json b/suave/artifacts/example.sol/ExampleEthCallSource.json index fa5d8e5027..24858606f4 100644 --- a/suave/artifacts/example.sol/ExampleEthCallSource.json +++ b/suave/artifacts/example.sol/ExampleEthCallSource.json @@ -1,21 +1,5 @@ { "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "PeekerReverted", - "type": "error" - }, { "inputs": [ { @@ -36,9 +20,9 @@ } ], "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806348bce06414610030575b600080fd5b61004361003e366004610183565b610045565b005b6040805160048152602481019091526020810180516001600160e01b0316631b53398f60e21b17905260009061007c9084906100b2565b905060008180602001905181019061009491906101bb565b67ffffffffffffffff1690508281146100ac57600080fd5b50505050565b606060008063421000036001600160a01b031685856040516020016100d8929190610210565b60408051601f19818403018152908290526100f291610252565b600060405180830381855afa9150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b509150915081610166576342100003816040516375fff46760e01b815260040161015d929190610210565b60405180910390fd5b8080602001905181019061017a9190610284565b95945050505050565b6000806040838503121561019657600080fd5b82356001600160a01b03811681146101ad57600080fd5b946020939093013593505050565b6000602082840312156101cd57600080fd5b815167ffffffffffffffff811681146101e557600080fd5b9392505050565b60005b838110156102075781810151838201526020016101ef565b50506000910152565b60018060a01b0383168152604060208201526000825180604084015261023d8160608501602087016101ec565b601f01601f1916919091016060019392505050565b600082516102648184602087016101ec565b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561029657600080fd5b815167ffffffffffffffff808211156102ae57600080fd5b818401915084601f8301126102c257600080fd5b8151818111156102d4576102d461026e565b604051601f8201601f19908116603f011681019083821181831017156102fc576102fc61026e565b8160405282815287602084870101111561031557600080fd5b6103268360208301602088016101ec565b97965050505050505056fea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806348bce06414610030575b600080fd5b61004361003e366004610121565b610045565b005b6040805160048082526024820183526020820180516001600160e01b0316631b53398f60e21b1790529151633b7fb41360e01b815260009273__$e374338554c5da70f90c17374827737168$__92633b7fb413926100a6928892910161017d565b600060405180830381865af41580156100c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526100eb91908101906101d5565b90506000818060200190518101906101039190610282565b67ffffffffffffffff16905082811461011b57600080fd5b50505050565b6000806040838503121561013457600080fd5b82356001600160a01b038116811461014b57600080fd5b946020939093013593505050565b60005b8381101561017457818101518382015260200161015c565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526101aa816060850160208701610159565b601f01601f1916919091016060019392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156101e757600080fd5b815167ffffffffffffffff808211156101ff57600080fd5b818401915084601f83011261021357600080fd5b815181811115610225576102256101bf565b604051601f8201601f19908116603f0116810190838211818310171561024d5761024d6101bf565b8160405282815287602084870101111561026657600080fd5b610277836020830160208801610159565b979650505050505050565b60006020828403121561029457600080fd5b815167ffffffffffffffff811681146102ac57600080fd5b939250505056fea164736f6c6343000813000a" }, "bytecode": { - "object": "0x608060405234801561001057600080fd5b5061033e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806348bce06414610030575b600080fd5b61004361003e366004610183565b610045565b005b6040805160048152602481019091526020810180516001600160e01b0316631b53398f60e21b17905260009061007c9084906100b2565b905060008180602001905181019061009491906101bb565b67ffffffffffffffff1690508281146100ac57600080fd5b50505050565b606060008063421000036001600160a01b031685856040516020016100d8929190610210565b60408051601f19818403018152908290526100f291610252565b600060405180830381855afa9150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b509150915081610166576342100003816040516375fff46760e01b815260040161015d929190610210565b60405180910390fd5b8080602001905181019061017a9190610284565b95945050505050565b6000806040838503121561019657600080fd5b82356001600160a01b03811681146101ad57600080fd5b946020939093013593505050565b6000602082840312156101cd57600080fd5b815167ffffffffffffffff811681146101e557600080fd5b9392505050565b60005b838110156102075781810151838201526020016101ef565b50506000910152565b60018060a01b0383168152604060208201526000825180604084015261023d8160608501602087016101ec565b601f01601f1916919091016060019392505050565b600082516102648184602087016101ec565b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561029657600080fd5b815167ffffffffffffffff808211156102ae57600080fd5b818401915084601f8301126102c257600080fd5b8151818111156102d4576102d461026e565b604051601f8201601f19908116603f011681019083821181831017156102fc576102fc61026e565b8160405282815287602084870101111561031557600080fd5b6103268360208301602088016101ec565b97965050505050505056fea164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b506102c0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806348bce06414610030575b600080fd5b61004361003e366004610121565b610045565b005b6040805160048082526024820183526020820180516001600160e01b0316631b53398f60e21b1790529151633b7fb41360e01b815260009273__$e374338554c5da70f90c17374827737168$__92633b7fb413926100a6928892910161017d565b600060405180830381865af41580156100c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526100eb91908101906101d5565b90506000818060200190518101906101039190610282565b67ffffffffffffffff16905082811461011b57600080fd5b50505050565b6000806040838503121561013457600080fd5b82356001600160a01b038116811461014b57600080fd5b946020939093013593505050565b60005b8381101561017457818101518382015260200161015c565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526101aa816060850160208701610159565b601f01601f1916919091016060019392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156101e757600080fd5b815167ffffffffffffffff808211156101ff57600080fd5b818401915084601f83011261021357600080fd5b815181811115610225576102256101bf565b604051601f8201601f19908116603f0116810190838211818310171561024d5761024d6101bf565b8160405282815287602084870101111561026657600080fd5b610277836020830160208801610159565b979650505050505050565b60006020828403121561029457600080fd5b815167ffffffffffffffff811681146102ac57600080fd5b939250505056fea164736f6c6343000813000a" } } diff --git a/suave/artifacts/forge_example.sol/Example.json b/suave/artifacts/forge_example.sol/Example.json index d4b5ba8e71..25268d47e7 100644 --- a/suave/artifacts/forge_example.sol/Example.json +++ b/suave/artifacts/forge_example.sol/Example.json @@ -41,9 +41,9 @@ } ], "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063b810fb4314610046578063c040622614610076578063f8ccbf4714610080575b600080fd5b6100596100543660046107cf565b6100a3565b6040516001600160a01b0390911681526020015b60405180910390f35b61007e6100cd565b005b600b546100939062010000900460ff1681565b604051901515815260200161006d565b600c81815481106100b357600080fd5b6000918252602090912001546001600160a01b0316905081565b60006101bd6000600c80548060200260200160405190810160405280929190818152602001828054801561012a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161010c575b5050505050600c80548060200260200160405190810160405280929190818152602001828054801561018557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610167575b50505050506040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b815250610290565b905060006101f960006040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b81525061032a565b9050610205815161037d565b6102578260000151604051806040016040528060018152602001606160f81b815250604051602001610243906531313131313160d11b815260060190565b6040516020818303038152906040526103c5565b60006102808360000151604051806040016040528060018152602001606160f81b8152506103ff565b905061028b81610432565b505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a0820152600061030a6040518060600160405280602a8152602001610e89602a9139878787876040516020016102f6949392919061087c565b604051602081830303815290604052610475565b9050808060200190518101906103209190610b60565b9695505050505050565b6060600061035d6040518060600160405280602a8152602001610edd602a913985856040516020016102f6929190610b95565b9050808060200190518101906103739190610bc0565b9150505b92915050565b6103c28160405160240161039391815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b1790526105ea565b50565b60006103f86040518060600160405280602a8152602001610eb3602a91398585856040516020016102f693929190610c71565b5050505050565b606060006103736040518060600160405280602a8152602001610e5f602a913985856040516020016102f6929190610ca6565b6103c2816040516024016104469190610cc9565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b1790526105ea565b606060006104828361060b565b60408051600480825260a0820190925291925060009190816020015b606081526020019060019003908161049e57905050905060405180604001604052806005815260200164737561766560d81b815250816000815181106104e6576104e6610cdc565b602002602001018190525060405180604001604052806005815260200164666f72676560d81b8152508160018151811061052257610522610cdc565b6020026020010181905250848160028151811061054157610541610cdc565b6020026020010181905250818160038151811061056057610560610cdc565b6020908102919091010152604051638916046760e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906105a5908590600401610cf2565b600060405180830381865afa1580156105c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103209190810190610d54565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b606060008251600261061d9190610db3565b67ffffffffffffffff811115610635576106356108d0565b6040519080825280601f01601f19166020018201604052801561065f576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156107a5578182518683815181106106ab576106ab610cdc565b01602001516106bd919060f81c610de0565b815181106106cd576106cd610cdc565b01602001516001600160f81b031916836106e8836002610db3565b815181106106f8576106f8610cdc565b60200101906001600160f81b031916908160001a90535081825186838151811061072457610724610cdc565b0160200151610736919060f81c610df4565b8151811061074657610746610cdc565b01602001516001600160f81b03191683610761836002610db3565b61076c906001610e08565b8151811061077c5761077c610cdc565b60200101906001600160f81b031916908160001a9053508061079d81610e1b565b91505061068d565b50816040516020016107b79190610e34565b60405160208183030381529060405292505050919050565b6000602082840312156107e157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156108215781516001600160a01b0316875295820195908201906001016107fc565b509495945050505050565b60005b8381101561084757818101518382015260200161082f565b50506000910152565b6000815180845261086881602086016020860161082c565b601f01601f19169290920160200192915050565b67ffffffffffffffff8516815260806020820152600061089f60808301866107e8565b82810360408401526108b181866107e8565b905082810360608401526108c58185610850565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715610909576109096108d0565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610938576109386108d0565b604052919050565b80516fffffffffffffffffffffffffffffffff198116811461096157600080fd5b919050565b805167ffffffffffffffff8116811461096157600080fd5b600067ffffffffffffffff821115610998576109986108d0565b5060051b60200190565b600082601f8301126109b357600080fd5b815160206109c86109c38361097e565b61090f565b82815260059290921b840181019181810190868411156109e757600080fd5b8286015b84811015610a185780516001600160a01b0381168114610a0b5760008081fd5b83529183019183016109eb565b509695505050505050565b600067ffffffffffffffff831115610a3d57610a3d6108d0565b610a50601f8401601f191660200161090f565b9050828152838383011115610a6457600080fd5b610a7283602083018461082c565b9392505050565b600082601f830112610a8a57600080fd5b610a7283835160208501610a23565b600060c08284031215610aab57600080fd5b610ab36108e6565b9050610abe82610940565b8152610acc60208301610940565b6020820152610add60408301610966565b6040820152606082015167ffffffffffffffff80821115610afd57600080fd5b610b09858386016109a2565b60608401526080840151915080821115610b2257600080fd5b610b2e858386016109a2565b608084015260a0840151915080821115610b4757600080fd5b50610b5484828501610a79565b60a08301525092915050565b600060208284031215610b7257600080fd5b815167ffffffffffffffff811115610b8957600080fd5b61037384828501610a99565b67ffffffffffffffff83168152604060208201526000610bb86040830184610850565b949350505050565b60006020808385031215610bd357600080fd5b825167ffffffffffffffff80821115610beb57600080fd5b818501915085601f830112610bff57600080fd5b8151610c0d6109c38261097e565b81815260059190911b83018401908481019088831115610c2c57600080fd5b8585015b83811015610c6457805185811115610c485760008081fd5b610c568b89838a0101610a99565b845250918601918601610c30565b5098975050505050505050565b6001600160801b031984168152606060208201526000610c946060830185610850565b82810360408401526103208185610850565b6001600160801b031983168152604060208201526000610bb86040830184610850565b602081526000610a726020830184610850565b634e487b7160e01b600052603260045260246000fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d4757603f19888603018452610d35858351610850565b94509285019290850190600101610d19565b5092979650505050505050565b600060208284031215610d6657600080fd5b815167ffffffffffffffff811115610d7d57600080fd5b8201601f81018413610d8e57600080fd5b61037384825160208401610a23565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037757610377610d9d565b634e487b7160e01b600052601260045260246000fd5b600082610def57610def610dca565b500490565b600082610e0357610e03610dca565b500690565b8082018082111561037757610377610d9d565b600060018201610e2d57610e2d610d9d565b5060010190565b61060f60f31b815260008251610e5181600285016020870161082c565b919091016002019291505056fe307830303030303030303030303030303030303030303030303030303030303030303432303230303031307830303030303030303030303030303030303030303030303030303030303030303432303330303030307830303030303030303030303030303030303030303030303030303030303030303432303230303030307830303030303030303030303030303030303030303030303030303030303030303432303330303031a164736f6c6343000813000a" + "object": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063b810fb4314610046578063c040622614610076578063f8ccbf4714610080575b600080fd5b6100596100543660046107fa565b6100a3565b6040516001600160a01b0390911681526020015b60405180910390f35b61007e6100cd565b005b600b546100939062010000900460ff1681565b604051901515815260200161006d565b600c81815481106100b357600080fd5b6000918252602090912001546001600160a01b0316905081565b60006101bd6000600c80548060200260200160405190810160405280929190818152602001828054801561012a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161010c575b5050505050600c80548060200260200160405190810160405280929190818152602001828054801561018557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610167575b50505050506040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b815250610290565b905060006101f960006040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b81525061032a565b9050610205815161037d565b6102578260000151604051806040016040528060018152602001606160f81b815250604051602001610243906531313131313160d11b815260060190565b6040516020818303038152906040526103c5565b60006102808360000151604051806040016040528060018152602001606160f81b815250610414565b905061028b8161045d565b505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a0820152600061030a6040518060600160405280602a8152602001610ec8602a9139878787876040516020016102f694939291906108a7565b6040516020818303038152906040526104a0565b9050808060200190518101906103209190610b8b565b9695505050505050565b6060600061035d6040518060600160405280602a8152602001610f1c602a913985856040516020016102f6929190610bc0565b9050808060200190518101906103739190610beb565b9150505b92915050565b6103c28160405160240161039391815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610615565b50565b60006103f86040518060600160405280602a8152602001610ef2602a91398585856040516020016102f693929190610c9c565b90508080602001905181019061040e9190610cd1565b50505050565b606060006104476040518060600160405280602a8152602001610e9e602a913985856040516020016102f6929190610ce5565b9050808060200190518101906103739190610d08565b6103c2816040516024016104719190610d51565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b179052610615565b606060006104ad83610636565b60408051600480825260a0820190925291925060009190816020015b60608152602001906001900390816104c957905050905060405180604001604052806005815260200164737561766560d81b8152508160008151811061051157610511610d64565b602002602001018190525060405180604001604052806005815260200164666f72676560d81b8152508160018151811061054d5761054d610d64565b6020026020010181905250848160028151811061056c5761056c610d64565b6020026020010181905250818160038151811061058b5761058b610d64565b6020908102919091010152604051638916046760e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906105d0908590600401610d7a565b600060405180830381865afa1580156105ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103209190810190610d08565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606000825160026106489190610df2565b67ffffffffffffffff811115610660576106606108fb565b6040519080825280601f01601f19166020018201604052801561068a576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156107d0578182518683815181106106d6576106d6610d64565b01602001516106e8919060f81c610e1f565b815181106106f8576106f8610d64565b01602001516001600160f81b03191683610713836002610df2565b8151811061072357610723610d64565b60200101906001600160f81b031916908160001a90535081825186838151811061074f5761074f610d64565b0160200151610761919060f81c610e33565b8151811061077157610771610d64565b01602001516001600160f81b0319168361078c836002610df2565b610797906001610e47565b815181106107a7576107a7610d64565b60200101906001600160f81b031916908160001a905350806107c881610e5a565b9150506106b8565b50816040516020016107e29190610e73565b60405160208183030381529060405292505050919050565b60006020828403121561080c57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561084c5781516001600160a01b031687529582019590820190600101610827565b509495945050505050565b60005b8381101561087257818101518382015260200161085a565b50506000910152565b60008151808452610893816020860160208601610857565b601f01601f19169290920160200192915050565b67ffffffffffffffff851681526080602082015260006108ca6080830186610813565b82810360408401526108dc8186610813565b905082810360608401526108f0818561087b565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715610934576109346108fb565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610963576109636108fb565b604052919050565b80516fffffffffffffffffffffffffffffffff198116811461098c57600080fd5b919050565b805167ffffffffffffffff8116811461098c57600080fd5b600067ffffffffffffffff8211156109c3576109c36108fb565b5060051b60200190565b600082601f8301126109de57600080fd5b815160206109f36109ee836109a9565b61093a565b82815260059290921b84018101918181019086841115610a1257600080fd5b8286015b84811015610a435780516001600160a01b0381168114610a365760008081fd5b8352918301918301610a16565b509695505050505050565b600067ffffffffffffffff831115610a6857610a686108fb565b610a7b601f8401601f191660200161093a565b9050828152838383011115610a8f57600080fd5b610a9d836020830184610857565b9392505050565b600082601f830112610ab557600080fd5b610a9d83835160208501610a4e565b600060c08284031215610ad657600080fd5b610ade610911565b9050610ae98261096b565b8152610af76020830161096b565b6020820152610b0860408301610991565b6040820152606082015167ffffffffffffffff80821115610b2857600080fd5b610b34858386016109cd565b60608401526080840151915080821115610b4d57600080fd5b610b59858386016109cd565b608084015260a0840151915080821115610b7257600080fd5b50610b7f84828501610aa4565b60a08301525092915050565b600060208284031215610b9d57600080fd5b815167ffffffffffffffff811115610bb457600080fd5b61037384828501610ac4565b67ffffffffffffffff83168152604060208201526000610be3604083018461087b565b949350505050565b60006020808385031215610bfe57600080fd5b825167ffffffffffffffff80821115610c1657600080fd5b818501915085601f830112610c2a57600080fd5b8151610c386109ee826109a9565b81815260059190911b83018401908481019088831115610c5757600080fd5b8585015b83811015610c8f57805185811115610c735760008081fd5b610c818b89838a0101610ac4565b845250918601918601610c5b565b5098975050505050505050565b6001600160801b031984168152606060208201526000610cbf606083018561087b565b8281036040840152610320818561087b565b60008183031215610ce157600080fd5b5050565b6001600160801b031983168152604060208201526000610be3604083018461087b565b600060208284031215610d1a57600080fd5b815167ffffffffffffffff811115610d3157600080fd5b8201601f81018413610d4257600080fd5b61037384825160208401610a4e565b602081526000610a9d602083018461087b565b634e487b7160e01b600052603260045260246000fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610dcf57603f19888603018452610dbd85835161087b565b94509285019290850190600101610da1565b5092979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037757610377610ddc565b634e487b7160e01b600052601260045260246000fd5b600082610e2e57610e2e610e09565b500490565b600082610e4257610e42610e09565b500690565b8082018082111561037757610377610ddc565b600060018201610e6c57610e6c610ddc565b5060010190565b61060f60f31b815260008251610e90816002850160208701610857565b919091016002019291505056fe307830303030303030303030303030303030303030303030303030303030303030303432303230303031307830303030303030303030303030303030303030303030303030303030303030303432303330303030307830303030303030303030303030303030303030303030303030303030303030303432303230303030307830303030303030303030303030303030303030303030303030303030303030303432303330303031a164736f6c6343000813000a" }, "bytecode": { - "object": "0x600b805462ff00ff19166201000117905560a060405273c8df3686b4afb2bb53e60eae97ef043fe03fb829608090815261003d90600c906001610050565b5034801561004a57600080fd5b506100ca565b8280548282559060005260206000209081019282156100a5579160200282015b828111156100a557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610070565b506100b19291506100b5565b5090565b5b808211156100b157600081556001016100b6565b610f13806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063b810fb4314610046578063c040622614610076578063f8ccbf4714610080575b600080fd5b6100596100543660046107cf565b6100a3565b6040516001600160a01b0390911681526020015b60405180910390f35b61007e6100cd565b005b600b546100939062010000900460ff1681565b604051901515815260200161006d565b600c81815481106100b357600080fd5b6000918252602090912001546001600160a01b0316905081565b60006101bd6000600c80548060200260200160405190810160405280929190818152602001828054801561012a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161010c575b5050505050600c80548060200260200160405190810160405280929190818152602001828054801561018557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610167575b50505050506040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b815250610290565b905060006101f960006040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b81525061032a565b9050610205815161037d565b6102578260000151604051806040016040528060018152602001606160f81b815250604051602001610243906531313131313160d11b815260060190565b6040516020818303038152906040526103c5565b60006102808360000151604051806040016040528060018152602001606160f81b8152506103ff565b905061028b81610432565b505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a0820152600061030a6040518060600160405280602a8152602001610e89602a9139878787876040516020016102f6949392919061087c565b604051602081830303815290604052610475565b9050808060200190518101906103209190610b60565b9695505050505050565b6060600061035d6040518060600160405280602a8152602001610edd602a913985856040516020016102f6929190610b95565b9050808060200190518101906103739190610bc0565b9150505b92915050565b6103c28160405160240161039391815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b1790526105ea565b50565b60006103f86040518060600160405280602a8152602001610eb3602a91398585856040516020016102f693929190610c71565b5050505050565b606060006103736040518060600160405280602a8152602001610e5f602a913985856040516020016102f6929190610ca6565b6103c2816040516024016104469190610cc9565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b1790526105ea565b606060006104828361060b565b60408051600480825260a0820190925291925060009190816020015b606081526020019060019003908161049e57905050905060405180604001604052806005815260200164737561766560d81b815250816000815181106104e6576104e6610cdc565b602002602001018190525060405180604001604052806005815260200164666f72676560d81b8152508160018151811061052257610522610cdc565b6020026020010181905250848160028151811061054157610541610cdc565b6020026020010181905250818160038151811061056057610560610cdc565b6020908102919091010152604051638916046760e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906105a5908590600401610cf2565b600060405180830381865afa1580156105c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103209190810190610d54565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b606060008251600261061d9190610db3565b67ffffffffffffffff811115610635576106356108d0565b6040519080825280601f01601f19166020018201604052801561065f576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156107a5578182518683815181106106ab576106ab610cdc565b01602001516106bd919060f81c610de0565b815181106106cd576106cd610cdc565b01602001516001600160f81b031916836106e8836002610db3565b815181106106f8576106f8610cdc565b60200101906001600160f81b031916908160001a90535081825186838151811061072457610724610cdc565b0160200151610736919060f81c610df4565b8151811061074657610746610cdc565b01602001516001600160f81b03191683610761836002610db3565b61076c906001610e08565b8151811061077c5761077c610cdc565b60200101906001600160f81b031916908160001a9053508061079d81610e1b565b91505061068d565b50816040516020016107b79190610e34565b60405160208183030381529060405292505050919050565b6000602082840312156107e157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156108215781516001600160a01b0316875295820195908201906001016107fc565b509495945050505050565b60005b8381101561084757818101518382015260200161082f565b50506000910152565b6000815180845261086881602086016020860161082c565b601f01601f19169290920160200192915050565b67ffffffffffffffff8516815260806020820152600061089f60808301866107e8565b82810360408401526108b181866107e8565b905082810360608401526108c58185610850565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715610909576109096108d0565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610938576109386108d0565b604052919050565b80516fffffffffffffffffffffffffffffffff198116811461096157600080fd5b919050565b805167ffffffffffffffff8116811461096157600080fd5b600067ffffffffffffffff821115610998576109986108d0565b5060051b60200190565b600082601f8301126109b357600080fd5b815160206109c86109c38361097e565b61090f565b82815260059290921b840181019181810190868411156109e757600080fd5b8286015b84811015610a185780516001600160a01b0381168114610a0b5760008081fd5b83529183019183016109eb565b509695505050505050565b600067ffffffffffffffff831115610a3d57610a3d6108d0565b610a50601f8401601f191660200161090f565b9050828152838383011115610a6457600080fd5b610a7283602083018461082c565b9392505050565b600082601f830112610a8a57600080fd5b610a7283835160208501610a23565b600060c08284031215610aab57600080fd5b610ab36108e6565b9050610abe82610940565b8152610acc60208301610940565b6020820152610add60408301610966565b6040820152606082015167ffffffffffffffff80821115610afd57600080fd5b610b09858386016109a2565b60608401526080840151915080821115610b2257600080fd5b610b2e858386016109a2565b608084015260a0840151915080821115610b4757600080fd5b50610b5484828501610a79565b60a08301525092915050565b600060208284031215610b7257600080fd5b815167ffffffffffffffff811115610b8957600080fd5b61037384828501610a99565b67ffffffffffffffff83168152604060208201526000610bb86040830184610850565b949350505050565b60006020808385031215610bd357600080fd5b825167ffffffffffffffff80821115610beb57600080fd5b818501915085601f830112610bff57600080fd5b8151610c0d6109c38261097e565b81815260059190911b83018401908481019088831115610c2c57600080fd5b8585015b83811015610c6457805185811115610c485760008081fd5b610c568b89838a0101610a99565b845250918601918601610c30565b5098975050505050505050565b6001600160801b031984168152606060208201526000610c946060830185610850565b82810360408401526103208185610850565b6001600160801b031983168152604060208201526000610bb86040830184610850565b602081526000610a726020830184610850565b634e487b7160e01b600052603260045260246000fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610d4757603f19888603018452610d35858351610850565b94509285019290850190600101610d19565b5092979650505050505050565b600060208284031215610d6657600080fd5b815167ffffffffffffffff811115610d7d57600080fd5b8201601f81018413610d8e57600080fd5b61037384825160208401610a23565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037757610377610d9d565b634e487b7160e01b600052601260045260246000fd5b600082610def57610def610dca565b500490565b600082610e0357610e03610dca565b500690565b8082018082111561037757610377610d9d565b600060018201610e2d57610e2d610d9d565b5060010190565b61060f60f31b815260008251610e5181600285016020870161082c565b919091016002019291505056fe307830303030303030303030303030303030303030303030303030303030303030303432303230303031307830303030303030303030303030303030303030303030303030303030303030303432303330303030307830303030303030303030303030303030303030303030303030303030303030303432303230303030307830303030303030303030303030303030303030303030303030303030303030303432303330303031a164736f6c6343000813000a" + "object": "0x600b805462ff00ff19166201000117905560a060405273c8df3686b4afb2bb53e60eae97ef043fe03fb829608090815261003d90600c906001610050565b5034801561004a57600080fd5b506100ca565b8280548282559060005260206000209081019282156100a5579160200282015b828111156100a557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610070565b506100b19291506100b5565b5090565b5b808211156100b157600081556001016100b6565b610f52806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063b810fb4314610046578063c040622614610076578063f8ccbf4714610080575b600080fd5b6100596100543660046107fa565b6100a3565b6040516001600160a01b0390911681526020015b60405180910390f35b61007e6100cd565b005b600b546100939062010000900460ff1681565b604051901515815260200161006d565b600c81815481106100b357600080fd5b6000918252602090912001546001600160a01b0316905081565b60006101bd6000600c80548060200260200160405190810160405280929190818152602001828054801561012a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161010c575b5050505050600c80548060200260200160405190810160405280929190818152602001828054801561018557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610167575b50505050506040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b815250610290565b905060006101f960006040518060400160405280601581526020017464656661756c743a76303a65746842756e646c657360581b81525061032a565b9050610205815161037d565b6102578260000151604051806040016040528060018152602001606160f81b815250604051602001610243906531313131313160d11b815260060190565b6040516020818303038152906040526103c5565b60006102808360000151604051806040016040528060018152602001606160f81b815250610414565b905061028b8161045d565b505050565b6040805160c0810182526000808252602082018190529181019190915260608082018190526080820181905260a0820152600061030a6040518060600160405280602a8152602001610ec8602a9139878787876040516020016102f694939291906108a7565b6040516020818303038152906040526104a0565b9050808060200190518101906103209190610b8b565b9695505050505050565b6060600061035d6040518060600160405280602a8152602001610f1c602a913985856040516020016102f6929190610bc0565b9050808060200190518101906103739190610beb565b9150505b92915050565b6103c28160405160240161039391815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610615565b50565b60006103f86040518060600160405280602a8152602001610ef2602a91398585856040516020016102f693929190610c9c565b90508080602001905181019061040e9190610cd1565b50505050565b606060006104476040518060600160405280602a8152602001610e9e602a913985856040516020016102f6929190610ce5565b9050808060200190518101906103739190610d08565b6103c2816040516024016104719190610d51565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b179052610615565b606060006104ad83610636565b60408051600480825260a0820190925291925060009190816020015b60608152602001906001900390816104c957905050905060405180604001604052806005815260200164737561766560d81b8152508160008151811061051157610511610d64565b602002602001018190525060405180604001604052806005815260200164666f72676560d81b8152508160018151811061054d5761054d610d64565b6020026020010181905250848160028151811061056c5761056c610d64565b6020026020010181905250818160038151811061058b5761058b610d64565b6020908102919091010152604051638916046760e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906389160467906105d0908590600401610d7a565b600060405180830381865afa1580156105ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103209190810190610d08565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606000825160026106489190610df2565b67ffffffffffffffff811115610660576106606108fb565b6040519080825280601f01601f19166020018201604052801561068a576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156107d0578182518683815181106106d6576106d6610d64565b01602001516106e8919060f81c610e1f565b815181106106f8576106f8610d64565b01602001516001600160f81b03191683610713836002610df2565b8151811061072357610723610d64565b60200101906001600160f81b031916908160001a90535081825186838151811061074f5761074f610d64565b0160200151610761919060f81c610e33565b8151811061077157610771610d64565b01602001516001600160f81b0319168361078c836002610df2565b610797906001610e47565b815181106107a7576107a7610d64565b60200101906001600160f81b031916908160001a905350806107c881610e5a565b9150506106b8565b50816040516020016107e29190610e73565b60405160208183030381529060405292505050919050565b60006020828403121561080c57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561084c5781516001600160a01b031687529582019590820190600101610827565b509495945050505050565b60005b8381101561087257818101518382015260200161085a565b50506000910152565b60008151808452610893816020860160208601610857565b601f01601f19169290920160200192915050565b67ffffffffffffffff851681526080602082015260006108ca6080830186610813565b82810360408401526108dc8186610813565b905082810360608401526108f0818561087b565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715610934576109346108fb565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610963576109636108fb565b604052919050565b80516fffffffffffffffffffffffffffffffff198116811461098c57600080fd5b919050565b805167ffffffffffffffff8116811461098c57600080fd5b600067ffffffffffffffff8211156109c3576109c36108fb565b5060051b60200190565b600082601f8301126109de57600080fd5b815160206109f36109ee836109a9565b61093a565b82815260059290921b84018101918181019086841115610a1257600080fd5b8286015b84811015610a435780516001600160a01b0381168114610a365760008081fd5b8352918301918301610a16565b509695505050505050565b600067ffffffffffffffff831115610a6857610a686108fb565b610a7b601f8401601f191660200161093a565b9050828152838383011115610a8f57600080fd5b610a9d836020830184610857565b9392505050565b600082601f830112610ab557600080fd5b610a9d83835160208501610a4e565b600060c08284031215610ad657600080fd5b610ade610911565b9050610ae98261096b565b8152610af76020830161096b565b6020820152610b0860408301610991565b6040820152606082015167ffffffffffffffff80821115610b2857600080fd5b610b34858386016109cd565b60608401526080840151915080821115610b4d57600080fd5b610b59858386016109cd565b608084015260a0840151915080821115610b7257600080fd5b50610b7f84828501610aa4565b60a08301525092915050565b600060208284031215610b9d57600080fd5b815167ffffffffffffffff811115610bb457600080fd5b61037384828501610ac4565b67ffffffffffffffff83168152604060208201526000610be3604083018461087b565b949350505050565b60006020808385031215610bfe57600080fd5b825167ffffffffffffffff80821115610c1657600080fd5b818501915085601f830112610c2a57600080fd5b8151610c386109ee826109a9565b81815260059190911b83018401908481019088831115610c5757600080fd5b8585015b83811015610c8f57805185811115610c735760008081fd5b610c818b89838a0101610ac4565b845250918601918601610c5b565b5098975050505050505050565b6001600160801b031984168152606060208201526000610cbf606083018561087b565b8281036040840152610320818561087b565b60008183031215610ce157600080fd5b5050565b6001600160801b031983168152604060208201526000610be3604083018461087b565b600060208284031215610d1a57600080fd5b815167ffffffffffffffff811115610d3157600080fd5b8201601f81018413610d4257600080fd5b61037384825160208401610a4e565b602081526000610a9d602083018461087b565b634e487b7160e01b600052603260045260246000fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015610dcf57603f19888603018452610dbd85835161087b565b94509285019290850190600101610da1565b5092979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037757610377610ddc565b634e487b7160e01b600052601260045260246000fd5b600082610e2e57610e2e610e09565b500490565b600082610e4257610e42610e09565b500690565b8082018082111561037757610377610ddc565b600060018201610e6c57610e6c610ddc565b5060010190565b61060f60f31b815260008251610e90816002850160208701610857565b919091016002019291505056fe307830303030303030303030303030303030303030303030303030303030303030303432303230303031307830303030303030303030303030303030303030303030303030303030303030303432303330303030307830303030303030303030303030303030303030303030303030303030303030303432303230303030307830303030303030303030303030303030303030303030303030303030303030303432303330303031a164736f6c6343000813000a" } } diff --git a/suave/e2e/workflow_test.go b/suave/e2e/workflow_test.go index f8e21ba882..591789fee8 100644 --- a/suave/e2e/workflow_test.go +++ b/suave/e2e/workflow_test.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/downloader" @@ -59,20 +60,16 @@ func TestIsConfidential(t *testing.T) { { // Verify eth_call of isConfidentialAddress returns 1/0 depending on confidential compute setting - var result string + var result hexutil.Bytes requireNoRpcError(t, rpc.Call(&result, "eth_call", setTxArgsDefaults(ethapi.TransactionArgs{ To: &isConfidentialAddress, IsConfidential: true, ChainID: &chainId, }), "latest")) - require.Equal(t, []byte{1}, hexutil.MustDecode(result)) - requireNoRpcError(t, rpc.Call(&result, "eth_call", ethapi.TransactionArgs{ - To: &isConfidentialAddress, - IsConfidential: false, - ChainID: &chainId, - }, "latest")) - require.Equal(t, []byte{0}, hexutil.MustDecode(result)) + res, err := artifacts.SuaveAbi.Methods["isConfidential"].Outputs.Unpack(result) + require.NoError(t, err) + require.Equal(t, true, res[0]) } { @@ -124,7 +121,10 @@ func TestIsConfidential(t *testing.T) { require.Equal(t, uint64(1), receipts[1].Status) require.Equal(t, 2, len(block.Transactions())) - require.Equal(t, []byte{1}, block.Transactions()[0].Data()) + + res, err := artifacts.SuaveAbi.Methods["isConfidential"].Outputs.Unpack(block.Transactions()[0].Data()) + require.NoError(t, err) + require.Equal(t, true, res[0]) require.Equal(t, []byte{}, block.Transactions()[1].Data()) } } @@ -1027,7 +1027,7 @@ func TestE2E_ForgeIntegration(t *testing.T) { require.NoError(t, err) doCall := func(methodName string, args ...interface{}) []interface{} { - toAddr, ok := artifacts.SuaveMethods[methodName] + toAddr, ok := vm.GetRuntime().GetAddrFromName(methodName) require.True(t, ok, fmt.Sprintf("suave method %s not found", methodName)) method := artifacts.SuaveAbi.Methods[methodName] @@ -1047,11 +1047,6 @@ func TestE2E_ForgeIntegration(t *testing.T) { err = rpcClient.Call(&simResult, "eth_call", setTxArgsDefaults(callArgs), "latest") require.NoError(t, err) - if methodName == "confidentialStoreRetrieve" { - // this method does not abi pack the output - return []interface{}{[]byte(simResult)} - } - result, err := method.Outputs.Unpack(simResult) require.NoError(t, err) return result diff --git a/suave/gen/main.go b/suave/gen/main.go index 4d69881ca9..67003ce8fc 100644 --- a/suave/gen/main.go +++ b/suave/gen/main.go @@ -2,22 +2,20 @@ package main import ( "bytes" - "encoding/hex" "encoding/json" + "errors" "flag" "fmt" - goformat "go/format" - "html/template" "os" "os/exec" "path/filepath" "sort" "strings" + "text/template" "unicode" "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/crypto" - "gopkg.in/yaml.v3" + "github.com/ethereum/go-ethereum/core/vm" ) var ( @@ -25,77 +23,67 @@ var ( writeFlag bool ) -func applyTemplate(templateText string, input desc, out string) error { - // hash the content of the description - raw, err := yaml.Marshal(input) - if err != nil { - return err - } - hash := crypto.Keccak256(raw) +var structs []structObj - funcMap := template.FuncMap{ - "hash": func() string { - return hex.EncodeToString(hash) - }, - "typ2": func(param interface{}) string { - return encodeTypeToGolang(param.(string), false, false) - }, - "typ3": func(param interface{}) string { - return encodeTypeToGolang(param.(string), true, true) - }, - "title": func(param interface{}) string { - return strings.Title(param.(string)) - }, - "isComplex": func(param interface{}) bool { - _, err := abi.NewType(param.(string), "", nil) - return err != nil - }, - "encodeAddrName": func(param interface{}) string { - return toAddressName(param.(string)) - }, - "styp2": func(param interface{}, param2 interface{}) string { - return encodeTypeName(param.(string), param2.(bool), true) - }, - "styp": func(param interface{}) string { - return encodeTypeName(param.(string), true, false) - }, +type structObj struct { + Name string + Type *abi.Type + Types []abi.Argument +} + +func tryAddStruct(typ abi.Type) { + // de-reference any slice first + for { + if typ.T == abi.SliceTy { + typ = *typ.Elem + } else { + break + } } - t, err := template.New("template").Funcs(funcMap).Parse(templateText) - if err != nil { - return err + name := typ.InternalType + if name == "" { + // not a complex type + return } - var outputRaw bytes.Buffer - if err = t.Execute(&outputRaw, input); err != nil { - return err + // check if we already have this struct + for _, s := range structs { + if s.Name == name { + return + } } - // escape any quotes - str := outputRaw.String() - str = strings.Replace(str, """, "\"", -1) - str = strings.Replace(str, "&", "&", -1) - str = strings.Replace(str, ", )", ")", -1) - str = strings.Replace(str, "<", "<", -1) + if typ.T != abi.TupleTy { + // Basic type (i.e. type Bid is uint256). Since we use `InternalType` + // to represent the type on the template, we remove it here so that + // when the type declaration is generated, it will use the basic type. + typ.InternalType = "" - if formatFlag || writeFlag { - // The output is always formatted if it is going to be written - ext := filepath.Ext(out) - if ext == ".go" { - if str, err = formatGo(str); err != nil { - return err - } - } else if ext == ".sol" { - if str, err = formatSolidity(str); err != nil { - return err - } - } + structs = append(structs, structObj{ + Name: name, + Type: &typ, + }) + return } - if err := outputFile(out, str); err != nil { - return err + // figure out if any internal element is a struct itself + for _, arg := range typ.TupleElems { + tryAddStruct(*arg) } - return nil + + args := []abi.Argument{} + for indx, arg := range typ.TupleElems { + args = append(args, abi.Argument{ + Name: typ.TupleRawNames[indx], + Type: *arg, + }) + } + + structs = append(structs, structObj{ + Name: name, + Types: args, + }) } func main() { @@ -103,281 +91,218 @@ func main() { flag.BoolVar(&writeFlag, "write", false, "write the output to the file") flag.Parse() - data, err := os.ReadFile("./suave/gen/suave_spec.yaml") - if err != nil { - panic(err) - } - var ff desc - if err := yaml.Unmarshal(data, &ff); err != nil { - panic(err) + methods := vm.GetRuntime().GetMethods() + for _, method := range methods { + for _, input := range method.Inputs { + tryAddStruct(input.Type) + } + for _, output := range method.Outputs { + tryAddStruct(output.Type) + } } // sort the structs by name - sort.Slice(ff.Structs, func(i, j int) bool { - return ff.Structs[i].Name < ff.Structs[j].Name + sort.Slice(structs, func(i, j int) bool { + return structs[i].Name < structs[j].Name }) // sort the methods by name - sort.Slice(ff.Functions, func(i, j int) bool { - return ff.Functions[i].Name < ff.Functions[j].Name + sort.Slice(methods, func(i, j int) bool { + return methods[i].Name < methods[j].Name }) - if err := applyTemplate(structsTemplate, ff, "./core/types/suave_structs.go"); err != nil { - panic(err) + input := map[string]interface{}{ + "Methods": methods, + "Structs": structs, } - - if err := applyTemplate(adapterTemplate, ff, "./core/vm/contracts_suave_runtime_adapter.go"); err != nil { + if err := applyTemplate(suaveLibTemplate, input, "./suave/sol/libraries/Suave.sol"); err != nil { panic(err) } - - if err := applyTemplate(suaveMethodsGoTemplate, ff, "./suave/artifacts/addresses.go"); err != nil { + if err := applyTemplate(suaveForgeLibTemplate, input, "./suave/sol/libraries/SuaveForge.sol"); err != nil { panic(err) } - - if err := applyTemplate(suaveLibTemplate, ff, "./suave/sol/libraries/Suave.sol"); err != nil { + if err := generateABI(); err != nil { panic(err) } +} - if err := applyTemplate(suaveForgeLibTemplate, ff, "./suave/sol/libraries/SuaveForge.sol"); err != nil { - panic(err) +func generateABI() error { + command := "forge" + args := []string{ + "build", + "--contracts", "./suave/sol/libraries/Suave.sol", + "--out", "/tmp/forge-artifacts", + "--cache-path", "/tmp", } - if err := generateABI("./suave/artifacts/SuaveLib.json", ff); err != nil { - panic(err) + cmd := exec.Command(command, args...) + + var outBuf, errBuf bytes.Buffer + cmd.Stdout = &outBuf + cmd.Stderr = &errBuf + + if err := cmd.Run(); err != nil { + return err } -} -func encodeTypeToGolang(str string, insideTypes bool, slicePointers bool) string { - typ, err := abi.NewType(str, "", nil) - if err == nil { - // basic type that has an easy match with Go - if typ.T == abi.SliceTy { - return "[]" + encodeTypeToGolang(typ.Elem.String(), insideTypes, slicePointers) - } + data, err := os.ReadFile("/tmp/forge-artifacts/Suave.sol/Suave.json") + if err != nil { + return err + } + var forgeArtifact struct { + Abi json.RawMessage + } + if err := json.Unmarshal(data, &forgeArtifact); err != nil { + return err + } - switch str { - case "uint256": - return "*big.Int" - case "address": - return "common.Address" - case "bytes": - return "[]byte" - case "bytes32": - return "common.Hash" - case "bool": - return "bool" - case "string": - return "string" - } + // remove line breaks and spaces from the abi + abiStr := strings.Replace(string(forgeArtifact.Abi), "\n", "", -1) + abiStr = strings.Replace(abiStr, " ", "", -1) - if strings.HasPrefix(str, "uint") { - // uint8, uint16, uint32, uint64 are encoded the same way in Go - return str - } - if strings.HasPrefix(str, "bytes") { - // fixed bytesX are encoded as [X]byte - return fmt.Sprintf("[%s]byte", strings.TrimPrefix(str, "bytes")) - } - } else { - var ref string - if !insideTypes { - ref = "types." - } + if err := outputFile("./suave/artifacts/SuaveLib.json", abiStr); err != nil { + return err + } + return nil +} - // complex type with a struct. If it a slice (i.e. Struct[]) - // convert to []*Struct. - if strings.HasSuffix(str, "[]") { - if slicePointers { - // This is a hack to keep compatibility with the old generated code - return fmt.Sprintf("[]*%s%s", ref, strings.TrimSuffix(str, "[]")) - } else { - return fmt.Sprintf("[]%s%s", ref, strings.TrimSuffix(str, "[]")) - } +func renderType(param interface{}, inFunc bool, libRef bool) string { + typ, ok := param.(abi.Type) + if !ok { + typP, ok := param.(*abi.Type) + if !ok { + panic(errors.New("typ: invalid type")) } - return ref + str + typ = *typP } - panic(fmt.Sprintf("input not done for type: %s", str)) -} + isMemory := false -var structsTemplate = `// Code generated by suave/gen. DO NOT EDIT. -// Hash: {{hash}} -package types + suffix := "" + if typ.T == abi.SliceTy { + typ = *typ.Elem + suffix += "[]" + isMemory = true + } + if typ.T == abi.StringTy || typ.T == abi.BytesTy || typ.T == abi.TupleTy { + isMemory = true + } -import "github.com/ethereum/go-ethereum/common" + if isMemory && inFunc { + suffix += " memory" + } -{{range .Types}} -type {{.Name}} {{typ3 .Typ}} -{{end}} + if typ.InternalType != "" { + prefix := "" + if libRef { + prefix = "Suave." + } + return prefix + typ.InternalType + suffix + } -// Structs -{{range .Structs}} -type {{.Name}} struct { - {{range .Fields}}{{title .Name}} {{typ3 .Typ}} - {{end}} + return typ.String() + suffix } -{{end}} -` - -var adapterTemplate = `// Code generated by suave/gen. DO NOT EDIT. -// Hash: {{hash}} -package vm -import ( - "fmt" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/suave/artifacts" - "github.com/mitchellh/mapstructure" -) - -var ( - errFailedToUnpackInput = fmt.Errorf("failed to decode input") - errFailedToDecodeField = fmt.Errorf("failed to decode field") - errFailedToPackOutput = fmt.Errorf("failed to encode output") -) +func toAddressName(input string) string { + var result strings.Builder + upperPrev := true -type SuaveRuntime interface { - {{range .Functions}} - {{.Name}}({{range .Input}}{{.Name}} {{typ2 .Typ}}, {{end}}) ({{range .Output.Fields}}{{typ2 .Typ}}, {{end}}error){{end}} -} + for _, r := range input { + if unicode.IsUpper(r) && !upperPrev { + result.WriteString("_") + } + result.WriteRune(unicode.ToUpper(r)) + upperPrev = unicode.IsUpper(r) + } -type SuaveRuntimeAdapter struct { - impl SuaveRuntime + return result.String() } -{{range .Functions}} -func (b *SuaveRuntimeAdapter) {{.Name}}(input []byte) (res []byte, err error) { - var ( - unpacked []interface{} - result []byte - ) - - _ = unpacked - _ = result +func applyTemplate(templateText string, input interface{}, out string) error { + funcMap := template.FuncMap{ + "typS": func(param interface{}) string { + return renderType(param, false, false) + }, + "typ": func(param interface{}) string { + return renderType(param, true, false) + }, + "styp2": func(param interface{}, param2 interface{}, param3 interface{}) string { + return renderType(param, param2.(bool), param3.(bool)) + }, + "toLower": func(param interface{}) string { + str := param.(string) + if str == "Address" { + return str + } + return firstLetterToLower(param.(string)) + }, + "encodeAddrName": func(param interface{}) string { + return toAddressName(param.(string)) + }, + } - unpacked, err = artifacts.SuaveAbi.Methods["{{.Name}}"].Inputs.Unpack(input) + t, err := template.New("template").Funcs(funcMap).Parse(templateText) if err != nil { - err = errFailedToUnpackInput - return + return err } - var ( - {{range .Input}}{{.Name}} {{typ2 .Typ}} - {{end}}) - - {{range $index, $item := .Input}}{{ if isComplex .Typ }} - if err = mapstructure.Decode(unpacked[{{$index}}], &{{.Name}}); err != nil { - err = errFailedToDecodeField - return + var outputRaw bytes.Buffer + if err = t.Execute(&outputRaw, input); err != nil { + return err } - {{else}}{{.Name}} = unpacked[{{$index}}].({{typ2 .Typ}}){{end}} - {{end}} - var ( - {{range .Output.Fields}}{{.Name}} {{typ2 .Typ}} - {{end}}) - - if {{range .Output.Fields}}{{.Name}},{{end}} err = b.impl.{{.Name}}({{range .Input}}{{.Name}}, {{end}}); err != nil { - return - } + // escape any quotes + str := outputRaw.String() + str = strings.Replace(str, """, "\"", -1) + str = strings.Replace(str, "&", "&", -1) + str = strings.Replace(str, ", )", ")", -1) - {{ if eq (len .Output.Fields) 0 }} - return nil, nil - {{else if .Output.Packed}} - result = {{range .Output.Fields}}{{.Name}} {{end}} - return result, nil - {{else}} - result, err = artifacts.SuaveAbi.Methods["{{.Name}}"].Outputs.Pack({{range .Output.Fields}}{{.Name}}, {{end}}) - if err != nil { - err = errFailedToPackOutput - return + if formatFlag || writeFlag { + if str, err = formatSolidity(str); err != nil { + return err + } } - return result, nil - {{end}} -} -{{end}} -` - -var suaveMethodsGoTemplate = `// Code generated by suave/gen. DO NOT EDIT. -// Hash: {{hash}} -package artifacts - -import ( - "github.com/ethereum/go-ethereum/common" -) - -// List of suave precompile addresses -var ( {{range .Functions}}{{.Name}}Addr = common.HexToAddress("{{.Address}}") -{{end}} -) - -var SuaveMethods = map[string]common.Address{ -{{range .Functions}}"{{.Name}}": {{.Name}}Addr, -{{end}}} -func PrecompileAddressToName(addr common.Address) string { - switch addr { {{range .Functions}} - case {{.Name}}Addr: - return "{{.Name}}"{{end}} + if err := outputFile(out, str); err != nil { + return err } - return "" + return nil } -` var suaveLibTemplate = `// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.8; library Suave { - error PeekerReverted(address, bytes); - -{{range .Types}} -type {{.Name}} is {{.Typ}}; -{{end}} - -{{range .Structs}} -struct {{.Name}} { - {{range .Fields}}{{.Typ}} {{.Name}}; - {{end}} } -{{end}} - -address public constant IS_CONFIDENTIAL_ADDR = -0x0000000000000000000000000000000042010000; -{{range .Functions}} -address public constant {{encodeAddrName .Name}} = -{{.Address}}; -{{end}} - -// Returns whether execution is off- or on-chain -function isConfidential() internal view returns (bool b) { - (bool success, bytes memory isConfidentialBytes) = IS_CONFIDENTIAL_ADDR.staticcall(""); - if (!success) { - revert PeekerReverted(IS_CONFIDENTIAL_ADDR, isConfidentialBytes); - } - assembly { - // Load the length of data (first 32 bytes) - let len := mload(isConfidentialBytes) - // Load the data after 32 bytes, so add 0x20 - b := mload(add(isConfidentialBytes, 0x20)) - } -} + error PeekerReverted(address, bytes); + + {{range .Structs}} + {{ if .Type }} + type {{ .Name }} is {{ typS .Type }}; + {{ else }} + struct {{.Name}} { + {{ range .Types }} + {{ typS .Type }} {{ toLower .Name }}; + {{ end }} + } + {{ end }} + {{end}} -{{range .Functions}} -function {{.Name}}({{range .Input}}{{styp .Typ}} {{.Name}}, {{end}}) internal view returns ({{range .Output.Fields}}{{styp .Typ}}, {{end}}) { - {{if .IsConfidential}}require(isConfidential());{{end}} - (bool success, bytes memory data) = {{encodeAddrName .Name}}.staticcall(abi.encode({{range .Input}}{{.Name}}, {{end}})); - if (!success) { - revert PeekerReverted({{encodeAddrName .Name}}, data); - } - {{ if eq (len .Output.Fields) 0 }} - {{else if .Output.Packed}} - return data; - {{else}} - return abi.decode(data, ({{range .Output.Fields}}{{.Typ}}, {{end}})); + address public constant IS_CONFIDENTIAL_ADDR = + 0x0000000000000000000000000000000042010000; + {{range .Methods}} + address public constant {{encodeAddrName .Name}} = + {{.Addr}}; {{end}} -} -{{end}} + {{ range .Methods }} + function {{.Name}} ( {{range .Inputs }} {{typ .Type}} {{toLower .Name}}, {{ end }}) public view returns ( {{range .Outputs }} {{typ .Type}}, {{ end }}) { + (bool success, bytes memory data) = {{encodeAddrName .Name}}.staticcall(abi.encode({{range .Inputs}}{{toLower .Name}}, {{end}})); + if (!success) { + revert PeekerReverted({{encodeAddrName .Name}}, data); + } + return abi.decode(data, ({{range .Outputs}}{{typS .Type}}, {{end}})); + } + {{ end }} } ` @@ -419,78 +344,16 @@ library SuaveForge { return string(abi.encodePacked("0x", converted)); } -{{range .Functions}} -function {{.Name}}({{range .Input}}{{styp2 .Typ true}} {{.Name}}, {{end}}) internal view returns ({{range .Output.Fields}}{{styp2 .Typ true}}, {{end}}) { - bytes memory data = forgeIt("{{.Address}}", abi.encode({{range .Input}}{{.Name}}, {{end}})); - {{ if eq (len .Output.Fields) 0 }} - {{else if .Output.Packed}} - return data; - {{else}} - return abi.decode(data, ({{range .Output.Fields}}{{styp2 .Typ false}}, {{end}})); - {{end}} +{{ range .Methods }} +function {{.Name}}({{range .Inputs}}{{styp2 .Type true true}} {{toLower .Name}}, {{end}}) internal view returns ({{range .Outputs}}{{styp2 .Type true true}}, {{end}}) { + bytes memory data = forgeIt("{{.Addr}}", abi.encode({{range .Inputs}}{{toLower .Name}}, {{end}})); + return abi.decode(data, ({{range .Outputs}}{{styp2 .Type false true}}, {{end}})); } {{end}} } ` -type functionDef struct { - Name string - Address string - Input []field - Output output - IsConfidential bool `yaml:"isConfidential"` -} - -type output struct { - Packed bool - Fields []field -} - -type field struct { - Name string - Typ string `yaml:"type"` -} - -type typ struct { - Name string - Typ string `yaml:"type"` -} - -type structsDef struct { - Name string - Fields []typ -} - -type desc struct { - Types []typ - Structs []structsDef - Functions []functionDef -} - -func toAddressName(input string) string { - var result strings.Builder - upperPrev := true - - for _, r := range input { - if unicode.IsUpper(r) && !upperPrev { - result.WriteString("_") - } - result.WriteRune(unicode.ToUpper(r)) - upperPrev = unicode.IsUpper(r) - } - - return result.String() -} - -func formatGo(code string) (string, error) { - srcFormatted, err := goformat.Source([]byte(code)) - if err != nil { - return "", err - } - return string(srcFormatted), nil -} - func formatSolidity(code string) (string, error) { // Check if "forge" command is available in PATH _, err := exec.LookPath("forge") @@ -521,107 +384,6 @@ func formatSolidity(code string) (string, error) { return outBuf.String(), nil } -type abiField struct { - Type string `json:"type"` - Name string `json:"name"` - Inputs []arguments `json:"inputs,omitempty"` - Outputs []arguments `json:"outputs,omitempty"` -} - -type arguments struct { - Name string `json:"name"` - Type string `json:"type"` - InternalType string `json:"internalType,omitempty"` - Components []arguments `json:"components,omitempty"` - Indexed bool `json:"indexed,omitempty"` -} - -func generateABI(out string, dd desc) error { - abiEncode := []*abiField{} - - var encodeType func(name, typ string) arguments - - encodeType = func(name, typ string) arguments { - arg := arguments{ - Name: name, - } - _, err := abi.NewType(typ, "", nil) - if err == nil { - // basic type - arg.Type = typ - arg.InternalType = typ - } else { - // struct type - arg.InternalType = fmt.Sprintf("struct Suave.%s", typ) - if strings.HasSuffix(typ, "[]") { - arg.Type = "tuple[]" - typ = strings.TrimSuffix(typ, "[]") - } else { - arg.Type = "tuple" - } - - var subElem structsDef - var found bool - - for _, f := range dd.Structs { - if f.Name == typ { - subElem = f - found = true - break - } - } - if found { - for _, ff := range subElem.Fields { - arg.Components = append(arg.Components, encodeType(ff.Name, ff.Typ)) - } - } else { - // try to search as an alias - for _, a := range dd.Types { - if a.Name == typ { - arg.Type = a.Typ - } - } - } - } - - return arg - } - - for _, f := range dd.Functions { - field := &abiField{ - Name: f.Name, - Type: "function", - Inputs: []arguments{}, - } - - for _, i := range f.Input { - field.Inputs = append(field.Inputs, encodeType(i.Name, i.Typ)) - } - for _, i := range f.Output.Fields { - field.Outputs = append(field.Outputs, encodeType(i.Name, i.Typ)) - } - - abiEncode = append(abiEncode, field) - } - - // marshal the object - raw, err := json.Marshal(abiEncode) - if err != nil { - return err - } - - // try to decode the output with abi.ABI to validate - // that the result is correct - if _, err := abi.JSON(bytes.NewReader(raw)); err != nil { - return err - } - - if err := outputFile(out, string(raw)); err != nil { - return err - } - return nil -} - func outputFile(out string, str string) error { if !writeFlag { fmt.Println("=> " + out) @@ -639,27 +401,13 @@ func outputFile(out string, str string) error { return nil } -func encodeTypeName(typName string, addMemory bool, addLink bool) string { - var isMemoryType bool - - typ, err := abi.NewType(typName, "", nil) - if err != nil { - // not a basic type (i.e. struct or []struct) - if typName != "BidId" { - isMemoryType = true - } - // add the link reference to Suave library if necessary - if addLink { - typName = "Suave." + typName - } - } else { - if typ.T == abi.StringTy || typ.T == abi.BytesTy || typ.T == abi.SliceTy { - isMemoryType = true - } +func firstLetterToLower(s string) string { + if len(s) == 0 { + return s } - if isMemoryType && addMemory { - return typName + " memory" - } - return typName + r := []rune(s) + r[0] = unicode.ToLower(r[0]) + + return string(r) } diff --git a/suave/gen/main_test.go b/suave/gen/main_test.go deleted file mode 100644 index b8c1259d37..0000000000 --- a/suave/gen/main_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package main - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestToAddressName(t *testing.T) { - cases := []struct { - name string - expected string - }{ - {"newBid", "NEW_BID"}, - {"confidentialStoreRetrieve", "CONFIDENTIAL_STORE_RETRIEVE"}, - } - - for _, c := range cases { - actual := toAddressName(c.name) - require.Equal(t, c.expected, actual) - } -} - -func TestEncodeTypeToGolang(t *testing.T) { - cases := []struct { - name string - expected string - }{ - {"uint256", "*big.Int"}, - {"address", "common.Address"}, - {"bool", "bool"}, - {"bytes", "[]byte"}, - {"bytes32", "common.Hash"}, - {"bytes16", "[16]byte"}, - {"string", "string"}, - {"address[]", "[]common.Address"}, - {"Bid", "Bid"}, - {"Bid[]", "[]*Bid"}, - } - - for _, c := range cases { - actual := encodeTypeToGolang(c.name, true, true) - require.Equal(t, c.expected, actual) - } -} diff --git a/suave/gen/suave_spec.yaml b/suave/gen/suave_spec.yaml deleted file mode 100644 index e60fc74434..0000000000 --- a/suave/gen/suave_spec.yaml +++ /dev/null @@ -1,199 +0,0 @@ -types: - - name: BidId - type: bytes16 -structs: - - name: Bid - fields: - - name: id - type: BidId - - name: salt - type: BidId - - name: decryptionCondition - type: uint64 - - name: allowedPeekers - type: address[] - - name: allowedStores - type: address[] - - name: version - type: string - - name: Withdrawal - fields: - - name: index - type: uint64 - - name: validator - type: uint64 - - name: Address - type: address - - name: amount - type: uint64 - - name: BuildBlockArgs - fields: - - name: slot - type: uint64 - - name: proposerPubkey - type: bytes - - name: parent - type: bytes32 - - name: timestamp - type: uint64 - - name: feeRecipient - type: address - - name: gasLimit - type: uint64 - - name: random - type: bytes32 - - name: withdrawals - type: Withdrawal[] -functions: - - name: confidentialInputs - address: "0x0000000000000000000000000000000042010001" - output: - packed: true - fields: - - name: output1 - type: bytes - - name: newBid - address: "0x0000000000000000000000000000000042030000" - input: - - name: decryptionCondition - type: uint64 - - name: allowedPeekers - type: address[] - - name: allowedStores - type: address[] - - name: bidType - type: string - output: - fields: - - name: bid - type: Bid - - name: fetchBids - address: "0x0000000000000000000000000000000042030001" - input: - - name: cond - type: uint64 - - name: namespace - type: string - output: - fields: - - name: bid - type: Bid[] - - name: confidentialStoreStore - address: "0x0000000000000000000000000000000042020000" - input: - - name: bidId - type: BidId - - name: key - type: string - - name: data1 - type: bytes - - name: confidentialStoreRetrieve - address: "0x0000000000000000000000000000000042020001" - input: - - name: bidId - type: BidId - - name: key - type: string - output: - packed: true - fields: - - name: output1 - type: bytes - - name: signEthTransaction - address: "0x0000000000000000000000000000000040100001" - input: - - name: txn - type: bytes - - name: chainId - type: string - - name: signingKey - type: string - output: - fields: - - name: output1 - type: bytes - - name: simulateBundle - address: "0x0000000000000000000000000000000042100000" - input: - - name: bundleData - type: bytes - output: - fields: - - name: output1 - type: uint64 - - name: extractHint - address: "0x0000000000000000000000000000000042100037" - isConfidential: true - input: - - name: bundleData - type: bytes - output: - packed: true - fields: - - name: output1 - type: bytes - - name: buildEthBlock - address: "0x0000000000000000000000000000000042100001" - input: - - name: blockArgs - type: BuildBlockArgs - - name: bidId - type: BidId - - name: namespace - type: string - output: - fields: - - name: output1 - type: bytes - - name: output2 - type: bytes - - name: submitEthBlockBidToRelay - address: "0x0000000000000000000000000000000042100002" - isConfidential: true - input: - - name: relayUrl - type: string - - name: builderBid - type: bytes - output: - packed: true - fields: - - name: output1 - type: bytes - - name: ethcall - address: "0x0000000000000000000000000000000042100003" - input: - - name: contractAddr - type: address - - name: input1 - type: bytes - output: - fields: - - name: output1 - type: bytes - - name: submitBundleJsonRPC - address: "0x0000000000000000000000000000000043000001" - isConfidential: true - input: - - name: url - type: string - - name: method - type: string - - name: params - type: bytes - output: - packed: true - fields: - - name: output1 - type: bytes - - name: fillMevShareBundle - address: "0x0000000000000000000000000000000043200001" - isConfidential: true - input: - - name: bidId - type: BidId - output: - packed: true - fields: - - name: encodedBundle - type: bytes diff --git a/suave/sol/libraries/Suave.sol b/suave/sol/libraries/Suave.sol index 3923371d53..6d7a317cbf 100644 --- a/suave/sol/libraries/Suave.sol +++ b/suave/sol/libraries/Suave.sol @@ -4,8 +4,6 @@ pragma solidity ^0.8.8; library Suave { error PeekerReverted(address, bytes); - type BidId is bytes16; - struct Bid { BidId id; BidId salt; @@ -15,6 +13,8 @@ library Suave { string version; } + type BidId is bytes16; + struct BuildBlockArgs { uint64 slot; bytes proposerPubkey; @@ -51,6 +51,8 @@ library Suave { address public constant FILL_MEV_SHARE_BUNDLE = 0x0000000000000000000000000000000043200001; + address public constant IS_CONFIDENTIAL = 0x0000000000000000000000000000000042010000; + address public constant NEW_BID = 0x0000000000000000000000000000000042030000; address public constant SIGN_ETH_TRANSACTION = 0x0000000000000000000000000000000040100001; @@ -61,158 +63,131 @@ library Suave { address public constant SUBMIT_ETH_BLOCK_BID_TO_RELAY = 0x0000000000000000000000000000000042100002; - // Returns whether execution is off- or on-chain - function isConfidential() internal view returns (bool b) { - (bool success, bytes memory isConfidentialBytes) = IS_CONFIDENTIAL_ADDR.staticcall(""); - if (!success) { - revert PeekerReverted(IS_CONFIDENTIAL_ADDR, isConfidentialBytes); - } - assembly { - // Load the length of data (first 32 bytes) - let len := mload(isConfidentialBytes) - // Load the data after 32 bytes, so add 0x20 - b := mload(add(isConfidentialBytes, 0x20)) - } - } - - function buildEthBlock(BuildBlockArgs memory blockArgs, BidId bidId, string memory namespace) - internal + function buildEthBlock(BuildBlockArgs memory param1, BidId param2, string memory param3) + public view returns (bytes memory, bytes memory) { - (bool success, bytes memory data) = BUILD_ETH_BLOCK.staticcall(abi.encode(blockArgs, bidId, namespace)); + (bool success, bytes memory data) = BUILD_ETH_BLOCK.staticcall(abi.encode(param1, param2, param3)); if (!success) { revert PeekerReverted(BUILD_ETH_BLOCK, data); } - return abi.decode(data, (bytes, bytes)); } - function confidentialInputs() internal view returns (bytes memory) { + function confidentialInputs() public view returns (bytes memory) { (bool success, bytes memory data) = CONFIDENTIAL_INPUTS.staticcall(abi.encode()); if (!success) { revert PeekerReverted(CONFIDENTIAL_INPUTS, data); } - - return data; + return abi.decode(data, (bytes)); } - function confidentialStoreRetrieve(BidId bidId, string memory key) internal view returns (bytes memory) { - (bool success, bytes memory data) = CONFIDENTIAL_STORE_RETRIEVE.staticcall(abi.encode(bidId, key)); + function confidentialStoreRetrieve(BidId param1, string memory param2) public view returns (bytes memory) { + (bool success, bytes memory data) = CONFIDENTIAL_STORE_RETRIEVE.staticcall(abi.encode(param1, param2)); if (!success) { revert PeekerReverted(CONFIDENTIAL_STORE_RETRIEVE, data); } - - return data; + return abi.decode(data, (bytes)); } - function confidentialStoreStore(BidId bidId, string memory key, bytes memory data1) internal view { - (bool success, bytes memory data) = CONFIDENTIAL_STORE_STORE.staticcall(abi.encode(bidId, key, data1)); + function confidentialStoreStore(BidId param1, string memory param2, bytes memory param3) public view { + (bool success, bytes memory data) = CONFIDENTIAL_STORE_STORE.staticcall(abi.encode(param1, param2, param3)); if (!success) { revert PeekerReverted(CONFIDENTIAL_STORE_STORE, data); } + return abi.decode(data, ()); } - function ethcall(address contractAddr, bytes memory input1) internal view returns (bytes memory) { - (bool success, bytes memory data) = ETHCALL.staticcall(abi.encode(contractAddr, input1)); + function ethcall(address param1, bytes memory param2) public view returns (bytes memory) { + (bool success, bytes memory data) = ETHCALL.staticcall(abi.encode(param1, param2)); if (!success) { revert PeekerReverted(ETHCALL, data); } - return abi.decode(data, (bytes)); } - function extractHint(bytes memory bundleData) internal view returns (bytes memory) { - require(isConfidential()); - (bool success, bytes memory data) = EXTRACT_HINT.staticcall(abi.encode(bundleData)); + function extractHint(bytes memory param1) public view returns (bytes memory) { + (bool success, bytes memory data) = EXTRACT_HINT.staticcall(abi.encode(param1)); if (!success) { revert PeekerReverted(EXTRACT_HINT, data); } - - return data; + return abi.decode(data, (bytes)); } - function fetchBids(uint64 cond, string memory namespace) internal view returns (Bid[] memory) { - (bool success, bytes memory data) = FETCH_BIDS.staticcall(abi.encode(cond, namespace)); + function fetchBids(uint64 param1, string memory param2) public view returns (Bid[] memory) { + (bool success, bytes memory data) = FETCH_BIDS.staticcall(abi.encode(param1, param2)); if (!success) { revert PeekerReverted(FETCH_BIDS, data); } - return abi.decode(data, (Bid[])); } - function fillMevShareBundle(BidId bidId) internal view returns (bytes memory) { - require(isConfidential()); - (bool success, bytes memory data) = FILL_MEV_SHARE_BUNDLE.staticcall(abi.encode(bidId)); + function fillMevShareBundle(BidId param1) public view returns (bytes memory) { + (bool success, bytes memory data) = FILL_MEV_SHARE_BUNDLE.staticcall(abi.encode(param1)); if (!success) { revert PeekerReverted(FILL_MEV_SHARE_BUNDLE, data); } + return abi.decode(data, (bytes)); + } - return data; + function isConfidential() public view returns (bool) { + (bool success, bytes memory data) = IS_CONFIDENTIAL.staticcall(abi.encode()); + if (!success) { + revert PeekerReverted(IS_CONFIDENTIAL, data); + } + return abi.decode(data, (bool)); } - function newBid( - uint64 decryptionCondition, - address[] memory allowedPeekers, - address[] memory allowedStores, - string memory bidType - ) internal view returns (Bid memory) { - (bool success, bytes memory data) = - NEW_BID.staticcall(abi.encode(decryptionCondition, allowedPeekers, allowedStores, bidType)); + function newBid(uint64 param1, address[] memory param2, address[] memory param3, string memory param4) + public + view + returns (Bid memory) + { + (bool success, bytes memory data) = NEW_BID.staticcall(abi.encode(param1, param2, param3, param4)); if (!success) { revert PeekerReverted(NEW_BID, data); } - return abi.decode(data, (Bid)); } - function signEthTransaction(bytes memory txn, string memory chainId, string memory signingKey) - internal + function signEthTransaction(bytes memory param1, string memory param2, string memory param3) + public view returns (bytes memory) { - (bool success, bytes memory data) = SIGN_ETH_TRANSACTION.staticcall(abi.encode(txn, chainId, signingKey)); + (bool success, bytes memory data) = SIGN_ETH_TRANSACTION.staticcall(abi.encode(param1, param2, param3)); if (!success) { revert PeekerReverted(SIGN_ETH_TRANSACTION, data); } - return abi.decode(data, (bytes)); } - function simulateBundle(bytes memory bundleData) internal view returns (uint64) { - (bool success, bytes memory data) = SIMULATE_BUNDLE.staticcall(abi.encode(bundleData)); + function simulateBundle(bytes memory param1) public view returns (uint64) { + (bool success, bytes memory data) = SIMULATE_BUNDLE.staticcall(abi.encode(param1)); if (!success) { revert PeekerReverted(SIMULATE_BUNDLE, data); } - return abi.decode(data, (uint64)); } - function submitBundleJsonRPC(string memory url, string memory method, bytes memory params) - internal + function submitBundleJsonRPC(string memory param1, string memory param2, bytes memory param3) + public view returns (bytes memory) { - require(isConfidential()); - (bool success, bytes memory data) = SUBMIT_BUNDLE_JSON_RPC.staticcall(abi.encode(url, method, params)); + (bool success, bytes memory data) = SUBMIT_BUNDLE_JSON_RPC.staticcall(abi.encode(param1, param2, param3)); if (!success) { revert PeekerReverted(SUBMIT_BUNDLE_JSON_RPC, data); } - - return data; + return abi.decode(data, (bytes)); } - function submitEthBlockBidToRelay(string memory relayUrl, bytes memory builderBid) - internal - view - returns (bytes memory) - { - require(isConfidential()); - (bool success, bytes memory data) = SUBMIT_ETH_BLOCK_BID_TO_RELAY.staticcall(abi.encode(relayUrl, builderBid)); + function submitEthBlockBidToRelay(string memory param1, bytes memory param2) public view returns (bytes memory) { + (bool success, bytes memory data) = SUBMIT_ETH_BLOCK_BID_TO_RELAY.staticcall(abi.encode(param1, param2)); if (!success) { revert PeekerReverted(SUBMIT_ETH_BLOCK_BID_TO_RELAY, data); } - - return data; + return abi.decode(data, (bytes)); } } diff --git a/suave/sol/libraries/SuaveForge.sol b/suave/sol/libraries/SuaveForge.sol index 490a94a680..679ed273b4 100644 --- a/suave/sol/libraries/SuaveForge.sol +++ b/suave/sol/libraries/SuaveForge.sol @@ -36,104 +36,90 @@ library SuaveForge { return string(abi.encodePacked("0x", converted)); } - function buildEthBlock(Suave.BuildBlockArgs memory blockArgs, Suave.BidId bidId, string memory namespace) + function buildEthBlock(Suave.BuildBlockArgs memory param1, Suave.BidId param2, string memory param3) internal view returns (bytes memory, bytes memory) { - bytes memory data = - forgeIt("0x0000000000000000000000000000000042100001", abi.encode(blockArgs, bidId, namespace)); - + bytes memory data = forgeIt("0x0000000000000000000000000000000042100001", abi.encode(param1, param2, param3)); return abi.decode(data, (bytes, bytes)); } function confidentialInputs() internal view returns (bytes memory) { bytes memory data = forgeIt("0x0000000000000000000000000000000042010001", abi.encode()); - - return data; + return abi.decode(data, (bytes)); } - function confidentialStoreRetrieve(Suave.BidId bidId, string memory key) internal view returns (bytes memory) { - bytes memory data = forgeIt("0x0000000000000000000000000000000042020001", abi.encode(bidId, key)); - - return data; + function confidentialStoreRetrieve(Suave.BidId param1, string memory param2) internal view returns (bytes memory) { + bytes memory data = forgeIt("0x0000000000000000000000000000000042020001", abi.encode(param1, param2)); + return abi.decode(data, (bytes)); } - function confidentialStoreStore(Suave.BidId bidId, string memory key, bytes memory data1) internal view { - bytes memory data = forgeIt("0x0000000000000000000000000000000042020000", abi.encode(bidId, key, data1)); + function confidentialStoreStore(Suave.BidId param1, string memory param2, bytes memory param3) internal view { + bytes memory data = forgeIt("0x0000000000000000000000000000000042020000", abi.encode(param1, param2, param3)); + return abi.decode(data, ()); } - function ethcall(address contractAddr, bytes memory input1) internal view returns (bytes memory) { - bytes memory data = forgeIt("0x0000000000000000000000000000000042100003", abi.encode(contractAddr, input1)); - + function ethcall(address param1, bytes memory param2) internal view returns (bytes memory) { + bytes memory data = forgeIt("0x0000000000000000000000000000000042100003", abi.encode(param1, param2)); return abi.decode(data, (bytes)); } - function extractHint(bytes memory bundleData) internal view returns (bytes memory) { - bytes memory data = forgeIt("0x0000000000000000000000000000000042100037", abi.encode(bundleData)); - - return data; + function extractHint(bytes memory param1) internal view returns (bytes memory) { + bytes memory data = forgeIt("0x0000000000000000000000000000000042100037", abi.encode(param1)); + return abi.decode(data, (bytes)); } - function fetchBids(uint64 cond, string memory namespace) internal view returns (Suave.Bid[] memory) { - bytes memory data = forgeIt("0x0000000000000000000000000000000042030001", abi.encode(cond, namespace)); - + function fetchBids(uint64 param1, string memory param2) internal view returns (Suave.Bid[] memory) { + bytes memory data = forgeIt("0x0000000000000000000000000000000042030001", abi.encode(param1, param2)); return abi.decode(data, (Suave.Bid[])); } - function fillMevShareBundle(Suave.BidId bidId) internal view returns (bytes memory) { - bytes memory data = forgeIt("0x0000000000000000000000000000000043200001", abi.encode(bidId)); - - return data; + function fillMevShareBundle(Suave.BidId param1) internal view returns (bytes memory) { + bytes memory data = forgeIt("0x0000000000000000000000000000000043200001", abi.encode(param1)); + return abi.decode(data, (bytes)); } - function newBid( - uint64 decryptionCondition, - address[] memory allowedPeekers, - address[] memory allowedStores, - string memory bidType - ) internal view returns (Suave.Bid memory) { - bytes memory data = forgeIt( - "0x0000000000000000000000000000000042030000", - abi.encode(decryptionCondition, allowedPeekers, allowedStores, bidType) - ); + function isConfidential() internal view returns (bool) { + bytes memory data = forgeIt("0x0000000000000000000000000000000042010000", abi.encode()); + return abi.decode(data, (bool)); + } + function newBid(uint64 param1, address[] memory param2, address[] memory param3, string memory param4) + internal + view + returns (Suave.Bid memory) + { + bytes memory data = + forgeIt("0x0000000000000000000000000000000042030000", abi.encode(param1, param2, param3, param4)); return abi.decode(data, (Suave.Bid)); } - function signEthTransaction(bytes memory txn, string memory chainId, string memory signingKey) + function signEthTransaction(bytes memory param1, string memory param2, string memory param3) internal view returns (bytes memory) { - bytes memory data = forgeIt("0x0000000000000000000000000000000040100001", abi.encode(txn, chainId, signingKey)); - + bytes memory data = forgeIt("0x0000000000000000000000000000000040100001", abi.encode(param1, param2, param3)); return abi.decode(data, (bytes)); } - function simulateBundle(bytes memory bundleData) internal view returns (uint64) { - bytes memory data = forgeIt("0x0000000000000000000000000000000042100000", abi.encode(bundleData)); - + function simulateBundle(bytes memory param1) internal view returns (uint64) { + bytes memory data = forgeIt("0x0000000000000000000000000000000042100000", abi.encode(param1)); return abi.decode(data, (uint64)); } - function submitBundleJsonRPC(string memory url, string memory method, bytes memory params) + function submitBundleJsonRPC(string memory param1, string memory param2, bytes memory param3) internal view returns (bytes memory) { - bytes memory data = forgeIt("0x0000000000000000000000000000000043000001", abi.encode(url, method, params)); - - return data; + bytes memory data = forgeIt("0x0000000000000000000000000000000043000001", abi.encode(param1, param2, param3)); + return abi.decode(data, (bytes)); } - function submitEthBlockBidToRelay(string memory relayUrl, bytes memory builderBid) - internal - view - returns (bytes memory) - { - bytes memory data = forgeIt("0x0000000000000000000000000000000042100002", abi.encode(relayUrl, builderBid)); - - return data; + function submitEthBlockBidToRelay(string memory param1, bytes memory param2) internal view returns (bytes memory) { + bytes memory data = forgeIt("0x0000000000000000000000000000000042100002", abi.encode(param1, param2)); + return abi.decode(data, (bytes)); } }