From a3fabb316127cbdaefcd086c1f04244ba6db4ee9 Mon Sep 17 00:00:00 2001 From: Diego Essaya Date: Wed, 3 Sep 2025 11:33:30 -0300 Subject: [PATCH] remove ISC events --- components/webapi/component.go | 2 - packages/evm/evmtest/ERC20Basic.bin | 2 +- packages/evm/evmtest/ERC20Basic.bin-runtime | 2 +- packages/evm/evmtest/ERC20Coin.bin | 2 +- packages/evm/evmtest/EndlessLoop.bin | 2 +- packages/evm/evmtest/Fibonacci.bin | 2 +- packages/evm/evmtest/GasTestExecutionTime.bin | 2 +- packages/evm/evmtest/GasTestMemory.bin | 2 +- packages/evm/evmtest/GasTestStorage.bin | 2 +- packages/evm/evmtest/ISCTest.abi | 2 +- packages/evm/evmtest/ISCTest.bin | 2 +- packages/evm/evmtest/ISCTest.sol | 24 +-- packages/evm/evmtest/RevertTest.bin | 2 +- packages/evm/evmtest/SelfDestruct6780.bin | 2 +- packages/evm/evmtest/Storage.bin | 2 +- .../evm/evmtest/wiki_how_tos/ERC20Coin.bin | 2 +- packages/evm/evmtest/wiki_how_tos/Entropy.bin | 2 +- .../evm/evmtest/wiki_how_tos/GetBalance.bin | 2 +- .../evm/jsonrpc/jsonrpctest/jsonrpc_test.go | 2 +- packages/isc/event.go | 30 --- packages/isc/event_test.go | 31 --- packages/isc/sandbox_interface.go | 2 - packages/origin/origin.go | 2 - packages/publisher/events.go | 23 +-- packages/publisher/publisher.go | 2 - packages/solo/chain.go | 19 -- packages/vm/core/blocklog/blocklog_test.go | 69 ------- packages/vm/core/blocklog/events.go | 36 ---- packages/vm/core/blocklog/external.go | 18 -- packages/vm/core/blocklog/impl.go | 30 --- packages/vm/core/blocklog/interface.go | 20 +- packages/vm/core/blocklog/internal.go | 88 +-------- packages/vm/core/coreprocessors/all.go | 2 - .../vm/core/evm/evmimpl/iscmagic_sandbox.go | 5 - packages/vm/core/evm/evmtest/evm_test.go | 44 +---- packages/vm/core/evm/evmtest/utils_test.go | 8 - .../core/evm/iscmagic/ERC20Coin.bin-runtime | 2 +- packages/vm/core/evm/iscmagic/ISCSandbox.abi | 2 +- packages/vm/core/evm/iscmagic/ISCSandbox.sol | 6 - .../testcore/contracts/inccounter/events.go | 12 -- .../testcore/contracts/inccounter/impl.go | 1 - .../contracts/manyevents/manyevents.go | 31 --- packages/vm/core/testcore/events_test.go | 183 ------------------ .../core/testcore/sbtests/sbtestsc/events.go | 14 -- .../vm/core/testcore/sbtests/sbtestsc/impl.go | 18 -- .../testcore/sbtests/sbtestsc/interface.go | 10 - packages/vm/errors.go | 1 - packages/vm/gas/table.go | 4 +- packages/vm/vmimpl/internal.go | 27 +-- packages/vm/vmimpl/sandbox.go | 17 -- packages/vm/vmimpl/vmcontext.go | 17 +- .../controllers/corecontracts/blocklog.go | 64 ------ .../controllers/corecontracts/controller.go | 23 --- packages/webapi/corecontracts/blocklog.go | 16 -- packages/webapi/models/core_blocklog.go | 4 - packages/webapi/models/event.go | 22 --- packages/webapi/services/committee.go | 6 - packages/webapi/websocket/eventhandler.go | 20 +- packages/webapi/websocket/websocket_test.go | 2 - tools/client-gen/serialization_client_test.go | 6 +- 60 files changed, 59 insertions(+), 938 deletions(-) delete mode 100644 packages/isc/event.go delete mode 100644 packages/isc/event_test.go delete mode 100644 packages/vm/core/blocklog/events.go delete mode 100644 packages/vm/core/testcore/contracts/inccounter/events.go delete mode 100644 packages/vm/core/testcore/contracts/manyevents/manyevents.go delete mode 100644 packages/vm/core/testcore/events_test.go delete mode 100644 packages/vm/core/testcore/sbtests/sbtestsc/events.go delete mode 100644 packages/webapi/models/event.go diff --git a/components/webapi/component.go b/components/webapi/component.go index 8c7522c0e0..9df034e107 100644 --- a/components/webapi/component.go +++ b/components/webapi/component.go @@ -258,8 +258,6 @@ func provide(c *dig.Container) error { websocketService := websocket.NewWebsocketService(logger, hub, []publisher.ISCEventType{ publisher.ISCEventKindNewBlock, publisher.ISCEventKindReceipt, - publisher.ISCEventIssuerVM, - publisher.ISCEventKindBlockEvents, }, deps.Publisher, websocket.WithMaxTopicSubscriptionsPerClient(ParamsWebAPI.Limits.MaxTopicSubscriptionsPerClient)) if ParamsWebAPI.DebugRequestLoggerEnabled { diff --git a/packages/evm/evmtest/ERC20Basic.bin b/packages/evm/evmtest/ERC20Basic.bin index f0696c416a..cd47e46eb9 100644 --- a/packages/evm/evmtest/ERC20Basic.bin +++ b/packages/evm/evmtest/ERC20Basic.bin @@ -1 +1 @@ -608060405234801561000f575f5ffd5b506040516113c43803806113c483398181016040528101906100319190610272565b815f908161003f91906104f8565b50806001908161004f91906104f8565b50601260ff16600a6100619190610723565b606461006d919061076d565b60048190555060045460025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161011691906107bd565b60405180910390a350506107d6565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101848261013e565b810181811067ffffffffffffffff821117156101a3576101a261014e565b5b80604052505050565b5f6101b5610125565b90506101c1828261017b565b919050565b5f67ffffffffffffffff8211156101e0576101df61014e565b5b6101e98261013e565b9050602081019050919050565b8281835e5f83830152505050565b5f610216610211846101c6565b6101ac565b9050828152602081018484840111156102325761023161013a565b5b61023d8482856101f6565b509392505050565b5f82601f83011261025957610258610136565b5b8151610269848260208601610204565b91505092915050565b5f5f604083850312156102885761028761012e565b5b5f83015167ffffffffffffffff8111156102a5576102a4610132565b5b6102b185828601610245565b925050602083015167ffffffffffffffff8111156102d2576102d1610132565b5b6102de85828601610245565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061033657607f821691505b602082108103610349576103486102f2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610370565b6103b58683610370565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103f96103f46103ef846103cd565b6103d6565b6103cd565b9050919050565b5f819050919050565b610412836103df565b61042661041e82610400565b84845461037c565b825550505050565b5f5f905090565b61043d61042e565b610448818484610409565b505050565b5b8181101561046b576104605f82610435565b60018101905061044e565b5050565b601f8211156104b0576104818161034f565b61048a84610361565b81016020851015610499578190505b6104ad6104a585610361565b83018261044d565b50505b505050565b5f82821c905092915050565b5f6104d05f19846008026104b5565b1980831691505092915050565b5f6104e883836104c1565b9150826002028217905092915050565b610501826102e8565b67ffffffffffffffff81111561051a5761051961014e565b5b610524825461031f565b61052f82828561046f565b5f60209050601f831160018114610560575f841561054e578287015190505b61055885826104dd565b8655506105bf565b601f19841661056e8661034f565b5f5b8281101561059557848901518255600182019150602085019450602081019050610570565b868310156105b257848901516105ae601f8916826104c1565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561064957808604811115610625576106246105c7565b5b60018516156106345780820291505b8081029050610642856105f4565b9450610609565b94509492505050565b5f82610661576001905061071c565b8161066e575f905061071c565b8160018114610684576002811461068e576106bd565b600191505061071c565b60ff8411156106a05761069f6105c7565b5b8360020a9150848211156106b7576106b66105c7565b5b5061071c565b5060208310610133831016604e8410600b84101617156106f25782820a9050838111156106ed576106ec6105c7565b5b61071c565b6106ff8484846001610600565b92509050818404811115610716576107156105c7565b5b81810290505b9392505050565b5f61072d826103cd565b9150610738836103cd565b92506107657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610652565b905092915050565b5f610777826103cd565b9150610782836103cd565b9250828202610790816103cd565b915082820484148315176107a7576107a66105c7565b5b5092915050565b6107b7816103cd565b82525050565b5f6020820190506107d05f8301846107ae565b92915050565b610be1806107e35f395ff3fe608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063313ce56711610059578063313ce567146100fd57806370a082311461011b578063a9059cbb1461014b578063dd62ed3e1461017b5761007b565b8063095ea7b31461007f57806318160ddd146100af57806323b872dd146100cd575b5f5ffd5b61009960048036038101906100949190610965565b6101ab565b6040516100a691906109bd565b60405180910390f35b6100b7610298565b6040516100c491906109e5565b60405180910390f35b6100e760048036038101906100e291906109fe565b6102a1565b6040516100f491906109bd565b60405180910390f35b6101056105ed565b6040516101129190610a69565b60405180910390f35b61013560048036038101906101309190610a82565b6105f2565b60405161014291906109e5565b60405180910390f35b61016560048036038101906101609190610965565b610638565b60405161017291906109bd565b60405180910390f35b61019560048036038101906101909190610aad565b610801565b6040516101a291906109e5565b60405180910390f35b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161028691906109e5565b60405180910390a36001905092915050565b5f600454905090565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156102eb575f5ffd5b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482111561036f575f5ffd5b6103b660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061047960035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061053c60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105da91906109e5565b60405180910390a3600190509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610682575f5ffd5b6106c960025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061075160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107ef91906109e5565b60405180910390a36001905092915050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8282111561089557610894610aeb565b5b81836108a19190610b45565b905092915050565b5f5f82846108b79190610b78565b9050838110156108ca576108c9610aeb565b5b8091505092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f5ffd5b50565b5f8135905061092c81610908565b92915050565b5f819050919050565b61094481610932565b811461094e575f5ffd5b50565b5f8135905061095f8161093b565b92915050565b5f5f6040838503121561097b5761097a6108d4565b5b5f6109888582860161091e565b925050602061099985828601610951565b9150509250929050565b5f8115159050919050565b6109b7816109a3565b82525050565b5f6020820190506109d05f8301846109ae565b92915050565b6109df81610932565b82525050565b5f6020820190506109f85f8301846109d6565b92915050565b5f5f5f60608486031215610a1557610a146108d4565b5b5f610a228682870161091e565b9350506020610a338682870161091e565b9250506040610a4486828701610951565b9150509250925092565b5f60ff82169050919050565b610a6381610a4e565b82525050565b5f602082019050610a7c5f830184610a5a565b92915050565b5f60208284031215610a9757610a966108d4565b5b5f610aa48482850161091e565b91505092915050565b5f5f60408385031215610ac357610ac26108d4565b5b5f610ad08582860161091e565b9250506020610ae18582860161091e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b4f82610932565b9150610b5a83610932565b9250828203905081811115610b7257610b71610b18565b5b92915050565b5f610b8282610932565b9150610b8d83610932565b9250828201905080821115610ba557610ba4610b18565b5b9291505056fea264697066735822122077c2254d3d11ad67825c7f5380fff46610c8f17ad1452f01c6bc23eacec6ce9664736f6c634300081d0033 \ No newline at end of file +608060405234801561000f575f5ffd5b506040516113c43803806113c483398181016040528101906100319190610272565b815f908161003f91906104f8565b50806001908161004f91906104f8565b50601260ff16600a6100619190610723565b606461006d919061076d565b60048190555060045460025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161011691906107bd565b60405180910390a350506107d6565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101848261013e565b810181811067ffffffffffffffff821117156101a3576101a261014e565b5b80604052505050565b5f6101b5610125565b90506101c1828261017b565b919050565b5f67ffffffffffffffff8211156101e0576101df61014e565b5b6101e98261013e565b9050602081019050919050565b8281835e5f83830152505050565b5f610216610211846101c6565b6101ac565b9050828152602081018484840111156102325761023161013a565b5b61023d8482856101f6565b509392505050565b5f82601f83011261025957610258610136565b5b8151610269848260208601610204565b91505092915050565b5f5f604083850312156102885761028761012e565b5b5f83015167ffffffffffffffff8111156102a5576102a4610132565b5b6102b185828601610245565b925050602083015167ffffffffffffffff8111156102d2576102d1610132565b5b6102de85828601610245565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061033657607f821691505b602082108103610349576103486102f2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610370565b6103b58683610370565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103f96103f46103ef846103cd565b6103d6565b6103cd565b9050919050565b5f819050919050565b610412836103df565b61042661041e82610400565b84845461037c565b825550505050565b5f5f905090565b61043d61042e565b610448818484610409565b505050565b5b8181101561046b576104605f82610435565b60018101905061044e565b5050565b601f8211156104b0576104818161034f565b61048a84610361565b81016020851015610499578190505b6104ad6104a585610361565b83018261044d565b50505b505050565b5f82821c905092915050565b5f6104d05f19846008026104b5565b1980831691505092915050565b5f6104e883836104c1565b9150826002028217905092915050565b610501826102e8565b67ffffffffffffffff81111561051a5761051961014e565b5b610524825461031f565b61052f82828561046f565b5f60209050601f831160018114610560575f841561054e578287015190505b61055885826104dd565b8655506105bf565b601f19841661056e8661034f565b5f5b8281101561059557848901518255600182019150602085019450602081019050610570565b868310156105b257848901516105ae601f8916826104c1565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561064957808604811115610625576106246105c7565b5b60018516156106345780820291505b8081029050610642856105f4565b9450610609565b94509492505050565b5f82610661576001905061071c565b8161066e575f905061071c565b8160018114610684576002811461068e576106bd565b600191505061071c565b60ff8411156106a05761069f6105c7565b5b8360020a9150848211156106b7576106b66105c7565b5b5061071c565b5060208310610133831016604e8410600b84101617156106f25782820a9050838111156106ed576106ec6105c7565b5b61071c565b6106ff8484846001610600565b92509050818404811115610716576107156105c7565b5b81810290505b9392505050565b5f61072d826103cd565b9150610738836103cd565b92506107657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610652565b905092915050565b5f610777826103cd565b9150610782836103cd565b9250828202610790816103cd565b915082820484148315176107a7576107a66105c7565b5b5092915050565b6107b7816103cd565b82525050565b5f6020820190506107d05f8301846107ae565b92915050565b610be1806107e35f395ff3fe608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063313ce56711610059578063313ce567146100fd57806370a082311461011b578063a9059cbb1461014b578063dd62ed3e1461017b5761007b565b8063095ea7b31461007f57806318160ddd146100af57806323b872dd146100cd575b5f5ffd5b61009960048036038101906100949190610965565b6101ab565b6040516100a691906109bd565b60405180910390f35b6100b7610298565b6040516100c491906109e5565b60405180910390f35b6100e760048036038101906100e291906109fe565b6102a1565b6040516100f491906109bd565b60405180910390f35b6101056105ed565b6040516101129190610a69565b60405180910390f35b61013560048036038101906101309190610a82565b6105f2565b60405161014291906109e5565b60405180910390f35b61016560048036038101906101609190610965565b610638565b60405161017291906109bd565b60405180910390f35b61019560048036038101906101909190610aad565b610801565b6040516101a291906109e5565b60405180910390f35b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161028691906109e5565b60405180910390a36001905092915050565b5f600454905090565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156102eb575f5ffd5b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482111561036f575f5ffd5b6103b660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061047960035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061053c60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105da91906109e5565b60405180910390a3600190509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610682575f5ffd5b6106c960025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061075160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107ef91906109e5565b60405180910390a36001905092915050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8282111561089557610894610aeb565b5b81836108a19190610b45565b905092915050565b5f5f82846108b79190610b78565b9050838110156108ca576108c9610aeb565b5b8091505092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f5ffd5b50565b5f8135905061092c81610908565b92915050565b5f819050919050565b61094481610932565b811461094e575f5ffd5b50565b5f8135905061095f8161093b565b92915050565b5f5f6040838503121561097b5761097a6108d4565b5b5f6109888582860161091e565b925050602061099985828601610951565b9150509250929050565b5f8115159050919050565b6109b7816109a3565b82525050565b5f6020820190506109d05f8301846109ae565b92915050565b6109df81610932565b82525050565b5f6020820190506109f85f8301846109d6565b92915050565b5f5f5f60608486031215610a1557610a146108d4565b5b5f610a228682870161091e565b9350506020610a338682870161091e565b9250506040610a4486828701610951565b9150509250925092565b5f60ff82169050919050565b610a6381610a4e565b82525050565b5f602082019050610a7c5f830184610a5a565b92915050565b5f60208284031215610a9757610a966108d4565b5b5f610aa48482850161091e565b91505092915050565b5f5f60408385031215610ac357610ac26108d4565b5b5f610ad08582860161091e565b9250506020610ae18582860161091e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b4f82610932565b9150610b5a83610932565b9250828203905081811115610b7257610b71610b18565b5b92915050565b5f610b8282610932565b9150610b8d83610932565b9250828201905080821115610ba557610ba4610b18565b5b9291505056fea2646970667358221220cd69300f14d47cf899628e60fc6836d8b98eb929c9dc136150810b2fd9147f4e64736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/ERC20Basic.bin-runtime b/packages/evm/evmtest/ERC20Basic.bin-runtime index 72f2d39d1e..8be6074e2b 100644 --- a/packages/evm/evmtest/ERC20Basic.bin-runtime +++ b/packages/evm/evmtest/ERC20Basic.bin-runtime @@ -1 +1 @@ -608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063313ce56711610059578063313ce567146100fd57806370a082311461011b578063a9059cbb1461014b578063dd62ed3e1461017b5761007b565b8063095ea7b31461007f57806318160ddd146100af57806323b872dd146100cd575b5f5ffd5b61009960048036038101906100949190610965565b6101ab565b6040516100a691906109bd565b60405180910390f35b6100b7610298565b6040516100c491906109e5565b60405180910390f35b6100e760048036038101906100e291906109fe565b6102a1565b6040516100f491906109bd565b60405180910390f35b6101056105ed565b6040516101129190610a69565b60405180910390f35b61013560048036038101906101309190610a82565b6105f2565b60405161014291906109e5565b60405180910390f35b61016560048036038101906101609190610965565b610638565b60405161017291906109bd565b60405180910390f35b61019560048036038101906101909190610aad565b610801565b6040516101a291906109e5565b60405180910390f35b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161028691906109e5565b60405180910390a36001905092915050565b5f600454905090565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156102eb575f5ffd5b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482111561036f575f5ffd5b6103b660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061047960035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061053c60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105da91906109e5565b60405180910390a3600190509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610682575f5ffd5b6106c960025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061075160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107ef91906109e5565b60405180910390a36001905092915050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8282111561089557610894610aeb565b5b81836108a19190610b45565b905092915050565b5f5f82846108b79190610b78565b9050838110156108ca576108c9610aeb565b5b8091505092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f5ffd5b50565b5f8135905061092c81610908565b92915050565b5f819050919050565b61094481610932565b811461094e575f5ffd5b50565b5f8135905061095f8161093b565b92915050565b5f5f6040838503121561097b5761097a6108d4565b5b5f6109888582860161091e565b925050602061099985828601610951565b9150509250929050565b5f8115159050919050565b6109b7816109a3565b82525050565b5f6020820190506109d05f8301846109ae565b92915050565b6109df81610932565b82525050565b5f6020820190506109f85f8301846109d6565b92915050565b5f5f5f60608486031215610a1557610a146108d4565b5b5f610a228682870161091e565b9350506020610a338682870161091e565b9250506040610a4486828701610951565b9150509250925092565b5f60ff82169050919050565b610a6381610a4e565b82525050565b5f602082019050610a7c5f830184610a5a565b92915050565b5f60208284031215610a9757610a966108d4565b5b5f610aa48482850161091e565b91505092915050565b5f5f60408385031215610ac357610ac26108d4565b5b5f610ad08582860161091e565b9250506020610ae18582860161091e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b4f82610932565b9150610b5a83610932565b9250828203905081811115610b7257610b71610b18565b5b92915050565b5f610b8282610932565b9150610b8d83610932565b9250828201905080821115610ba557610ba4610b18565b5b9291505056fea264697066735822122077c2254d3d11ad67825c7f5380fff46610c8f17ad1452f01c6bc23eacec6ce9664736f6c634300081d0033 \ No newline at end of file +608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063313ce56711610059578063313ce567146100fd57806370a082311461011b578063a9059cbb1461014b578063dd62ed3e1461017b5761007b565b8063095ea7b31461007f57806318160ddd146100af57806323b872dd146100cd575b5f5ffd5b61009960048036038101906100949190610965565b6101ab565b6040516100a691906109bd565b60405180910390f35b6100b7610298565b6040516100c491906109e5565b60405180910390f35b6100e760048036038101906100e291906109fe565b6102a1565b6040516100f491906109bd565b60405180910390f35b6101056105ed565b6040516101129190610a69565b60405180910390f35b61013560048036038101906101309190610a82565b6105f2565b60405161014291906109e5565b60405180910390f35b61016560048036038101906101609190610965565b610638565b60405161017291906109bd565b60405180910390f35b61019560048036038101906101909190610aad565b610801565b6040516101a291906109e5565b60405180910390f35b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161028691906109e5565b60405180910390a36001905092915050565b5f600454905090565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156102eb575f5ffd5b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482111561036f575f5ffd5b6103b660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061047960035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061053c60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105da91906109e5565b60405180910390a3600190509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610682575f5ffd5b6106c960025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061075160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107ef91906109e5565b60405180910390a36001905092915050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8282111561089557610894610aeb565b5b81836108a19190610b45565b905092915050565b5f5f82846108b79190610b78565b9050838110156108ca576108c9610aeb565b5b8091505092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f5ffd5b50565b5f8135905061092c81610908565b92915050565b5f819050919050565b61094481610932565b811461094e575f5ffd5b50565b5f8135905061095f8161093b565b92915050565b5f5f6040838503121561097b5761097a6108d4565b5b5f6109888582860161091e565b925050602061099985828601610951565b9150509250929050565b5f8115159050919050565b6109b7816109a3565b82525050565b5f6020820190506109d05f8301846109ae565b92915050565b6109df81610932565b82525050565b5f6020820190506109f85f8301846109d6565b92915050565b5f5f5f60608486031215610a1557610a146108d4565b5b5f610a228682870161091e565b9350506020610a338682870161091e565b9250506040610a4486828701610951565b9150509250925092565b5f60ff82169050919050565b610a6381610a4e565b82525050565b5f602082019050610a7c5f830184610a5a565b92915050565b5f60208284031215610a9757610a966108d4565b5b5f610aa48482850161091e565b91505092915050565b5f5f60408385031215610ac357610ac26108d4565b5b5f610ad08582860161091e565b9250506020610ae18582860161091e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b4f82610932565b9150610b5a83610932565b9250828203905081811115610b7257610b71610b18565b5b92915050565b5f610b8282610932565b9150610b8d83610932565b9250828201905080821115610ba557610ba4610b18565b5b9291505056fea2646970667358221220cd69300f14d47cf899628e60fc6836d8b98eb929c9dc136150810b2fd9147f4e64736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/ERC20Coin.bin b/packages/evm/evmtest/ERC20Coin.bin index 396d570c45..ef9a3affbc 100644 --- a/packages/evm/evmtest/ERC20Coin.bin +++ b/packages/evm/evmtest/ERC20Coin.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506120148061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea26469706673582212203a7cd319511f44764131658a92a2dc4f3f729fd4eff3700fdb7d8f8a8b81f14f64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506120148061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea26469706673582212205e706ef38563743d77458a67bfa5e9301b6697cf1492be63103566dcf9406a2664736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/EndlessLoop.bin b/packages/evm/evmtest/EndlessLoop.bin index b01f264153..73ff2d8fce 100644 --- a/packages/evm/evmtest/EndlessLoop.bin +++ b/packages/evm/evmtest/EndlessLoop.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b50607080601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063a92100cb14602a575b5f5ffd5b60306032565b005b5b600160335756fea264697066735822122057f701e6197aff242ae38db09a14a0cd87ac420a47264722fb0103e24529cc3d64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b50607080601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063a92100cb14602a575b5f5ffd5b60306032565b005b5b600160335756fea26469706673582212204c3bb423a752dfe559e55b13ce43cc4545451682ec21a4114e5cade05266b79b64736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/Fibonacci.bin b/packages/evm/evmtest/Fibonacci.bin index b7180d21df..d426120b41 100644 --- a/packages/evm/evmtest/Fibonacci.bin +++ b/packages/evm/evmtest/Fibonacci.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061032e8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063f9b7c7e51461002d575b5f5ffd5b610047600480360381019061004291906101cb565b61005d565b6040516100549190610205565b60405180910390f35b5f60018263ffffffff161161007457819050610189565b3073ffffffffffffffffffffffffffffffffffffffff1663f9b7c7e560028461009d919061024b565b6040518263ffffffff1660e01b81526004016100b99190610205565b602060405180830381865afa1580156100d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100f89190610296565b3073ffffffffffffffffffffffffffffffffffffffff1663f9b7c7e5600185610121919061024b565b6040518263ffffffff1660e01b815260040161013d9190610205565b602060405180830381865afa158015610158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017c9190610296565b61018691906102c1565b90505b919050565b5f5ffd5b5f63ffffffff82169050919050565b6101aa81610192565b81146101b4575f5ffd5b50565b5f813590506101c5816101a1565b92915050565b5f602082840312156101e0576101df61018e565b5b5f6101ed848285016101b7565b91505092915050565b6101ff81610192565b82525050565b5f6020820190506102185f8301846101f6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61025582610192565b915061026083610192565b9250828203905063ffffffff81111561027c5761027b61021e565b5b92915050565b5f81519050610290816101a1565b92915050565b5f602082840312156102ab576102aa61018e565b5b5f6102b884828501610282565b91505092915050565b5f6102cb82610192565b91506102d683610192565b9250828201905063ffffffff8111156102f2576102f161021e565b5b9291505056fea2646970667358221220fb933601983faaff6b25f59ed82bcc13bf9432b8ddb1f0256ba6953518d6775664736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b5061032e8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063f9b7c7e51461002d575b5f5ffd5b610047600480360381019061004291906101cb565b61005d565b6040516100549190610205565b60405180910390f35b5f60018263ffffffff161161007457819050610189565b3073ffffffffffffffffffffffffffffffffffffffff1663f9b7c7e560028461009d919061024b565b6040518263ffffffff1660e01b81526004016100b99190610205565b602060405180830381865afa1580156100d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100f89190610296565b3073ffffffffffffffffffffffffffffffffffffffff1663f9b7c7e5600185610121919061024b565b6040518263ffffffff1660e01b815260040161013d9190610205565b602060405180830381865afa158015610158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017c9190610296565b61018691906102c1565b90505b919050565b5f5ffd5b5f63ffffffff82169050919050565b6101aa81610192565b81146101b4575f5ffd5b50565b5f813590506101c5816101a1565b92915050565b5f602082840312156101e0576101df61018e565b5b5f6101ed848285016101b7565b91505092915050565b6101ff81610192565b82525050565b5f6020820190506102185f8301846101f6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61025582610192565b915061026083610192565b9250828203905063ffffffff81111561027c5761027b61021e565b5b92915050565b5f81519050610290816101a1565b92915050565b5f602082840312156102ab576102aa61018e565b5b5f6102b884828501610282565b91505092915050565b5f6102cb82610192565b91506102d683610192565b9250828201905063ffffffff8111156102f2576102f161021e565b5b9291505056fea26469706673582212202ae4d82c303a50db6d83f6440fb79831f11ede3224646390a4ee754b42a3022464736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/GasTestExecutionTime.bin b/packages/evm/evmtest/GasTestExecutionTime.bin index c4333e974e..97fc4cf62b 100644 --- a/packages/evm/evmtest/GasTestExecutionTime.bin +++ b/packages/evm/evmtest/GasTestExecutionTime.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061028f8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b61004760048036038101906100429190610109565b61005d565b6040516100549190610143565b60405180910390f35b5f5f5f90505f5f90505f5f90505b8463ffffffff168163ffffffff1610156100c15760018361008c9190610189565b9250600a8361009b91906101ed565b60036100a7919061021d565b826100b29190610189565b9150808060010191505061006b565b508092505050919050565b5f5ffd5b5f63ffffffff82169050919050565b6100e8816100d0565b81146100f2575f5ffd5b50565b5f81359050610103816100df565b92915050565b5f6020828403121561011e5761011d6100cc565b5b5f61012b848285016100f5565b91505092915050565b61013d816100d0565b82525050565b5f6020820190506101565f830184610134565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610193826100d0565b915061019e836100d0565b9250828201905063ffffffff8111156101ba576101b961015c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6101f7826100d0565b9150610202836100d0565b925082610212576102116101c0565b5b828206905092915050565b5f610227826100d0565b9150610232836100d0565b9250828202610240816100d0565b91508082146102525761025161015c565b5b509291505056fea26469706673582212201e5290bedc9bfe6d341a4181313098c25b354409fbefc526c94ac18a556e4c4d64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b5061028f8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b61004760048036038101906100429190610109565b61005d565b6040516100549190610143565b60405180910390f35b5f5f5f90505f5f90505f5f90505b8463ffffffff168163ffffffff1610156100c15760018361008c9190610189565b9250600a8361009b91906101ed565b60036100a7919061021d565b826100b29190610189565b9150808060010191505061006b565b508092505050919050565b5f5ffd5b5f63ffffffff82169050919050565b6100e8816100d0565b81146100f2575f5ffd5b50565b5f81359050610103816100df565b92915050565b5f6020828403121561011e5761011d6100cc565b5b5f61012b848285016100f5565b91505092915050565b61013d816100d0565b82525050565b5f6020820190506101565f830184610134565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610193826100d0565b915061019e836100d0565b9250828201905063ffffffff8111156101ba576101b961015c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6101f7826100d0565b9150610202836100d0565b925082610212576102116101c0565b5b828206905092915050565b5f610227826100d0565b9150610232836100d0565b9250828202610240816100d0565b91508082146102525761025161015c565b5b509291505056fea26469706673582212202fee374265024c3e2b4973cdc24003e0ab8e712376411d3ddefc351aaa202e6064736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/GasTestMemory.bin b/packages/evm/evmtest/GasTestMemory.bin index ac9adf6a90..ab96f19630 100644 --- a/packages/evm/evmtest/GasTestMemory.bin +++ b/packages/evm/evmtest/GasTestMemory.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506101f28061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b61004760048036038101906100429190610137565b610049565b005b5f8163ffffffff1667ffffffffffffffff81111561006a57610069610162565b5b6040519080825280602002602001820160405280156100985781602001602082028036833780820191505090505b5090505f5f90505b8263ffffffff168163ffffffff1610156100f55780828263ffffffff16815181106100ce576100cd61018f565b5b602002602001019063ffffffff16908163ffffffff168152505080806001019150506100a0565b505050565b5f5ffd5b5f63ffffffff82169050919050565b610116816100fe565b8114610120575f5ffd5b50565b5f813590506101318161010d565b92915050565b5f6020828403121561014c5761014b6100fa565b5b5f61015984828501610123565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212205421c04bc8cafd5c6cc3de292443660446e0e8767863529d99903a75a543138e64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506101f28061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b61004760048036038101906100429190610137565b610049565b005b5f8163ffffffff1667ffffffffffffffff81111561006a57610069610162565b5b6040519080825280602002602001820160405280156100985781602001602082028036833780820191505090505b5090505f5f90505b8263ffffffff168163ffffffff1610156100f55780828263ffffffff16815181106100ce576100cd61018f565b5b602002602001019063ffffffff16908163ffffffff168152505080806001019150506100a0565b505050565b5f5ffd5b5f63ffffffff82169050919050565b610116816100fe565b8114610120575f5ffd5b50565b5f813590506101318161010d565b92915050565b5f6020828403121561014c5761014b6100fa565b5b5f61015984828501610123565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea2646970667358221220870cd207fa1243a30d5808ac79e7fb8cce73d9cf0491b20b2184fc9eceb2fa2564736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/GasTestStorage.bin b/packages/evm/evmtest/GasTestStorage.bin index c3833036e6..0a4330c298 100644 --- a/packages/evm/evmtest/GasTestStorage.bin +++ b/packages/evm/evmtest/GasTestStorage.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061015c8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b610047600480360381019061004291906100fb565b610049565b005b5f5f90505b8163ffffffff168163ffffffff1610156100ba575f81908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550808060010191505061004e565b5050565b5f5ffd5b5f63ffffffff82169050919050565b6100da816100c2565b81146100e4575f5ffd5b50565b5f813590506100f5816100d1565b92915050565b5f602082840312156101105761010f6100be565b5b5f61011d848285016100e7565b9150509291505056fea26469706673582212203f476227472fc4b1c0db0813dffc1bdcbcb2b182eca4b9082d667f67d28d28f164736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b5061015c8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b610047600480360381019061004291906100fb565b610049565b005b5f5f90505b8163ffffffff168163ffffffff1610156100ba575f81908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550808060010191505061004e565b5050565b5f5ffd5b5f63ffffffff82169050919050565b6100da816100c2565b81146100e4575f5ffd5b50565b5f813590506100f5816100d1565b92915050565b5f602082840312156101105761010f6100be565b5b5f61011d848285016100e7565b9150509291505056fea26469706673582212207154088e60b1aa90bbebb8a8953002da907215dc83f140a02125ff600a13f13c64736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/ISCTest.abi b/packages/evm/evmtest/ISCTest.abi index 65bd756145..0e24101b33 100644 --- a/packages/evm/evmtest/ISCTest.abi +++ b/packages/evm/evmtest/ISCTest.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"CustomError","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"s","type":"string"}],"name":"DummyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"entropy","type":"bytes32"}],"name":"EntropyEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"LoopEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"ISCRequestID","name":"reqID","type":"bytes32"}],"name":"RequestIDEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"indexed":false,"internalType":"struct ISCAgentID","name":"sender","type":"tuple"}],"name":"SenderAccountEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"SomeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"TestSelfDestruct6780ContractCreated","type":"event"},{"inputs":[],"name":"callInccounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitDummyEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitEntropy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitEventAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitRequestID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitSenderAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"ISCChainID","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loopWithGasLeft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"makeISCPanic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISCAgentID","name":"targetAgentID","type":"tuple"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"moveToAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revertWithCustomError","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"IotaAddress","name":"receiver","type":"bytes32"},{"internalType":"uint64","name":"baseTokens","type":"uint64"}],"name":"sendBaseTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"testCallViewCaller","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testRevertReason","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"beneficiary","type":"address"}],"name":"testSelfDestruct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testSelfDestruct6780","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testStackOverflow","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testStaticCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"s","type":"string"}],"name":"triggerEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"s","type":"string"}],"name":"triggerEventFail","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"CustomError","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"s","type":"string"}],"name":"DummyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"entropy","type":"bytes32"}],"name":"EntropyEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"LoopEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"ISCRequestID","name":"reqID","type":"bytes32"}],"name":"RequestIDEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"indexed":false,"internalType":"struct ISCAgentID","name":"sender","type":"tuple"}],"name":"SenderAccountEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"SomeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"TestSelfDestruct6780ContractCreated","type":"event"},{"inputs":[],"name":"callInccounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitDummyEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitEntropy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitEventAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitRequestID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitSenderAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"ISCChainID","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loopWithGasLeft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"makeISCPanic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISCAgentID","name":"targetAgentID","type":"tuple"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"moveToAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revertWithCustomError","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"IotaAddress","name":"receiver","type":"bytes32"},{"internalType":"uint64","name":"baseTokens","type":"uint64"}],"name":"sendBaseTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"testCallViewCaller","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testRevertReason","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"beneficiary","type":"address"}],"name":"testSelfDestruct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testSelfDestruct6780","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testStackOverflow","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testStaticCall","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/packages/evm/evmtest/ISCTest.bin b/packages/evm/evmtest/ISCTest.bin index ba87fbffa3..831e3a0bb6 100644 --- a/packages/evm/evmtest/ISCTest.bin +++ b/packages/evm/evmtest/ISCTest.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061403f8061001c5f395ff3fe608060405260043610610129575f3560e01c8063a4a05e21116100aa578063bd819cf11161006e578063bd819cf1146102c9578063c36ba856146102f1578063d411defb14610307578063e1782c2f1461031d578063e29a58a314610339578063e6c75c6b1461034f57610129565b8063a4a05e2114610235578063b3ee69421461024b578063bb21d92114610261578063bcaeb8a814610277578063bcfb1959146102a157610129565b8063564b81ef116100f1578063564b81ef1461019b5780636a68a760146101c5578063904b8870146101db5780639e1a00aa146101f1578063a038a3e61461020d57610129565b806336c346401461012d5780633772d53f1461014357806346d116761461015957806346fc4bb11461016f5780634e522e4b14610185575b5f5ffd5b348015610138575f5ffd5b50610141610377565b005b34801561014e575f5ffd5b50610157610430565b005b348015610164575f5ffd5b5061016d6104ee565b005b34801561017a575f5ffd5b506101836105af565b005b348015610190575f5ffd5b506101996105ed565b005b3480156101a6575f5ffd5b506101af610624565b6040516101bc9190611f35565b60405180910390f35b3480156101d0575f5ffd5b506101d96106ab565b005b3480156101e6575f5ffd5b506101ef6106e6565b005b61020b60048036038101906102069190611fec565b6107af565b005b348015610218575f5ffd5b50610233600480360381019061022e9190612166565b6107f7565b005b348015610240575f5ffd5b50610249610871565b005b348015610256575f5ffd5b5061025f610bad565b005b34801561026c575f5ffd5b50610275610e19565b005b348015610282575f5ffd5b5061028b610e49565b604051610298919061220d565b60405180910390f35b3480156102ac575f5ffd5b506102c760048036038101906102c2919061222d565b6110cb565b005b3480156102d4575f5ffd5b506102ef60048036038101906102ea91906126d1565b6110e4565b005b3480156102fc575f5ffd5b50610305611336565b005b348015610312575f5ffd5b5061031b611618565b005b61033760048036038101906103329190612771565b6119f6565b005b348015610344575f5ffd5b5061034d611def565b005b34801561035a575f5ffd5b5061037560048036038101906103709190612166565b611e2c565b005b7fd6ddc34e1c1497550557bbba599c9651590b8ca92acb717afae575a6c390460173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca6528ce6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041991906127d9565b6040516104269190612813565b60405180910390a1565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b29190612856565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516104e39190612890565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa15801561054b573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610573919061296c565b90507faded0c26c8cc65771b245ec36a4a290a35b0cd003545068bcef2dcac18b8815c816040516105a49190612a22565b60405180910390a150565b602a6040517fa8b4db620000000000000000000000000000000000000000000000000000000081526004016105e49190612a90565b60405180910390fd5b7f5d1ca04f16bd7543edfc3334447b8976b0504f3a3e449dcd9992eb93781a80f360405161061a90612b03565b60405180910390a1565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663564b81ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610682573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a69190612b4b565b905090565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dd90612b03565b60405180910390fd5b5f6040516106f390611ea9565b604051809103905ff08015801561070c573d5f5f3e3d5ffd5b5090507f619e004505ac1d1c1c901fa7ad8f849ad75977fe395f6df05966aac8702a22a28160405161073e9190612b96565b60405180910390a18073ffffffffffffffffffffffffffffffffffffffff1663bcfb1959336040518263ffffffff1660e01b815260040161077f9190612bbe565b5f604051808303815f87803b158015610796575f5ffd5b505af11580156107a8573d5f5f3e3d5ffd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156107f2573d5f5f3e3d5ffd5b505050565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6c75c6b826040518263ffffffff1660e01b81526004016108449190612c19565b5f604051808303815f87803b15801561085b575f5ffd5b505af115801561086d573d5f5f3e3d5ffd5b5f5ffd5b5f600167ffffffffffffffff81111561088d5761088c612042565b5b6040519080825280602002602001820160405280156108c057816020015b60608152602001906001900390816108ab5790505b5090506040518060400160405280600981526020017f012a000000000000000000000000000000000000000000000000000000000000815250815f8151811061090c5761090b612c39565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016109a890612cb0565b602060405180830381865afa1580156109c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e79190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610a3d90612d7c565b602060405180830381865afa158015610a58573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a7c9190612d07565b63ffffffff1681525081526020018481525060405180604001604052805f67ffffffffffffffff811115610ab357610ab2612042565b5b604051908082528060200260200182016040528015610aec57816020015b610ad9611eb6565b815260200190600190039081610ad15790505b5081526020015f67ffffffffffffffff811115610b0c57610b0b612042565b5b604051908082528060200260200182016040528015610b4557816020015b610b32611ed9565b815260200190600190039081610b2a5790505b508152506040518363ffffffff1660e01b8152600401610b6692919061317d565b5f604051808303815f875af1158015610b81573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ba99190613290565b5050565b5f600167ffffffffffffffff811115610bc957610bc8612042565b5b604051908082528060200260200182016040528015610bfc57816020015b6060815260200190600190039081610be75790505b5090503060601b604051602001610c139190613358565b604051602081830303815290604052815f81518110610c3557610c34612c39565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663125ff5f96040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610cd1906133da565b602060405180830381865afa158015610cec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d109190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610d6690613442565b602060405180830381865afa158015610d81573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da59190612d07565b63ffffffff168152508152602001848152506040518263ffffffff1660e01b8152600401610dd39190613460565b5f60405180830381865afa158015610ded573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610e159190613290565b5050565b7fb7575244c27f0af0a38da3d7e04920b4409766ef4699eea08f74dff24db98a1a60405160405180910390a15f5ffd5b60605f600167ffffffffffffffff811115610e6757610e66612042565b5b604051908082528060200260200182016040528015610e9a57816020015b6060815260200190600190039081610e855790505b5090506040518060400160405280600181526020015f815250815f81518110610ec657610ec5612c39565b5b60200260200101819052505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663125ff5f96040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610f63906134ca565b602060405180830381865afa158015610f7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa29190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610ff890613532565b602060405180830381865afa158015611013573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110379190612d07565b63ffffffff168152508152602001858152506040518263ffffffff1660e01b81526004016110659190613460565b5f60405180830381865afa15801561107f573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906110a79190613290565b9050805f815181106110bc576110bb612c39565b5b60200260200101519250505090565b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f600167ffffffffffffffff811115611100576110ff612042565b5b60405190808252806020026020018201604052801561113357816020015b606081526020019060019003908161111e5790505b509050825f0151815f8151811061114d5761114c612c39565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016111e9906134ca565b602060405180830381865afa158015611204573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112289190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161127e9061359a565b602060405180830381865afa158015611299573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190612d07565b63ffffffff16815250815260200184815250846040518363ffffffff1660e01b81526004016112ed92919061317d565b5f604051808303815f875af1158015611308573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906113309190613290565b50505050565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016113c790613602565b602060405180830381865afa1580156113e2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114069190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161145c9061366a565b602060405180830381865afa158015611477573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149b9190612d07565b63ffffffff1681525081526020015f67ffffffffffffffff8111156114c3576114c2612042565b5b6040519080825280602002602001820160405280156114f657816020015b60608152602001906001900390816114e15790505b5081525060405180604001604052805f67ffffffffffffffff81111561151f5761151e612042565b5b60405190808252806020026020018201604052801561155857816020015b611545611eb6565b81526020019060019003908161153d5790505b5081526020015f67ffffffffffffffff81111561157857611577612042565b5b6040519080825280602002602001820160405280156115b157816020015b61159e611ed9565b8152602001906001900390816115965790505b508152506040518363ffffffff1660e01b81526004016115d292919061317d565b5f604051808303815f875af11580156115ed573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906116159190613290565b50565b5f606073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16604051602401611655906136d2565b6040516020818303038152906040527fe6c75c6b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116df919061372a565b5f604051808303815f865af19150503d805f8114611718576040519150601f19603f3d011682016040523d82523d5f602084013e61171d565b606091505b50809250819350505081611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9061378a565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f564b81ef000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611821919061372a565b5f60405180830381855afa9150503d805f8114611859576040519150601f19603f3d011682016040523d82523d5f602084013e61185e565b606091505b508092508193505050816118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90613818565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166040516024016118e190613880565b6040516020818303038152906040527fe6c75c6b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161196b919061372a565b5f60405180830381855afa9150503d805f81146119a3576040519150601f19603f3d011682016040523d82523d5f602084013e6119a8565b606091505b50809250819350505081156119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e99061390e565b60405180910390fd5b5050565b6119fe611ef2565b5f8267ffffffffffffffff1603611aa55773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b8152600401611a5c9190612b96565b5f60405180830381865afa158015611a76573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a9e9190613c7f565b9050611bea565b600167ffffffffffffffff811115611ac057611abf612042565b5b604051908082528060200260200182016040528015611af957816020015b611ae6611eb6565b815260200190600190039081611ade5790505b50815f018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632386557b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611b5d573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611b859190613e2d565b5f0151815f01515f81518110611b9e57611b9d612c39565b5b60200260200101515f018190525081815f01515f81518110611bc357611bc2612c39565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff16815250505b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a8c0e41f33836040518363ffffffff1660e01b8152600401611c39929190613e74565b5f604051808303815f87803b158015611c50575f5ffd5b505af1158015611c62573d5f5f3e3d5ffd5b50505050611c6e611ef2565b600167ffffffffffffffff811115611c8957611c88612042565b5b604051908082528060200260200182016040528015611cc257816020015b611caf611eb6565b815260200190600190039081611ca75790505b50815f0181905250815f01515f81518110611ce057611cdf612c39565b5b60200260200101515f0151815f01515f81518110611d0157611d00612c39565b5b60200260200101515f0181905250815f01515f81518110611d2557611d24612c39565b5b602002602001015160200151815f01515f81518110611d4757611d46612c39565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636bc6442e85836040518363ffffffff1660e01b8152600401611dbc929190613eb1565b5f604051808303815f87803b158015611dd3575f5ffd5b505af1158015611de5573d5f5f3e3d5ffd5b5050505050505050565b5b6127105a10611e2a577ff9c7a13c2c2ddb716633ae77fd03fb7d2e3bf5ab3a45ba50ec2d3decc9ee650c60405160405180910390a1611df0565b565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6c75c6b826040518263ffffffff1660e01b8152600401611e799190612c19565b5f604051808303815f87803b158015611e90575f5ffd5b505af1158015611ea2573d5f5f3e3d5ffd5b5050505050565b61012a80613ee083390190565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b60405180604001604052805f8152602001606081525090565b604051806040016040528060608152602001606081525090565b5f819050919050565b5f611f1f82611f0c565b9050919050565b611f2f81611f15565b82525050565b5f602082019050611f485f830184611f26565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f8882611f5f565b9050919050565b611f9881611f7e565b8114611fa2575f5ffd5b50565b5f81359050611fb381611f8f565b92915050565b5f819050919050565b611fcb81611fb9565b8114611fd5575f5ffd5b50565b5f81359050611fe681611fc2565b92915050565b5f5f6040838503121561200257612001611f57565b5b5f61200f85828601611fa5565b925050602061202085828601611fd8565b9150509250929050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61207882612032565b810181811067ffffffffffffffff8211171561209757612096612042565b5b80604052505050565b5f6120a9611f4e565b90506120b5828261206f565b919050565b5f67ffffffffffffffff8211156120d4576120d3612042565b5b6120dd82612032565b9050602081019050919050565b828183375f83830152505050565b5f61210a612105846120ba565b6120a0565b9050828152602081018484840111156121265761212561202e565b5b6121318482856120ea565b509392505050565b5f82601f83011261214d5761214c61202a565b5b813561215d8482602086016120f8565b91505092915050565b5f6020828403121561217b5761217a611f57565b5b5f82013567ffffffffffffffff81111561219857612197611f5b565b5b6121a484828501612139565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6121df826121ad565b6121e981856121b7565b93506121f98185602086016121c7565b61220281612032565b840191505092915050565b5f6020820190508181035f83015261222581846121d5565b905092915050565b5f6020828403121561224257612241611f57565b5b5f61224f84828501611fa5565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561227a57612279612042565b5b61228382612032565b9050602081019050919050565b5f6122a261229d84612260565b6120a0565b9050828152602081018484840111156122be576122bd61202e565b5b6122c98482856120ea565b509392505050565b5f82601f8301126122e5576122e461202a565b5b81356122f5848260208601612290565b91505092915050565b5f6020828403121561231357612312612258565b5b61231d60206120a0565b90505f82013567ffffffffffffffff81111561233c5761233b61225c565b5b612348848285016122d1565b5f8301525092915050565b5f67ffffffffffffffff82111561236d5761236c612042565b5b602082029050602081019050919050565b5f5ffd5b5f67ffffffffffffffff82169050919050565b61239e81612382565b81146123a8575f5ffd5b50565b5f813590506123b981612395565b92915050565b5f604082840312156123d4576123d3612258565b5b6123de60406120a0565b90505f82013567ffffffffffffffff8111156123fd576123fc61225c565b5b61240984828501612139565b5f83015250602061241c848285016123ab565b60208301525092915050565b5f61243a61243584612353565b6120a0565b9050808382526020820190506020840283018581111561245d5761245c61237e565b5b835b818110156124a457803567ffffffffffffffff8111156124825761248161202a565b5b80860161248f89826123bf565b8552602085019450505060208101905061245f565b5050509392505050565b5f82601f8301126124c2576124c161202a565b5b81356124d2848260208601612428565b91505092915050565b5f67ffffffffffffffff8211156124f5576124f4612042565b5b602082029050602081019050919050565b61250f81611f0c565b8114612519575f5ffd5b50565b5f8135905061252a81612506565b92915050565b5f6040828403121561254557612544612258565b5b61254f60406120a0565b90505f61255e8482850161251c565b5f83015250602082013567ffffffffffffffff8111156125815761258061225c565b5b61258d84828501612139565b60208301525092915050565b5f6125ab6125a6846124db565b6120a0565b905080838252602082019050602084028301858111156125ce576125cd61237e565b5b835b8181101561261557803567ffffffffffffffff8111156125f3576125f261202a565b5b8086016126008982612530565b855260208501945050506020810190506125d0565b5050509392505050565b5f82601f8301126126335761263261202a565b5b8135612643848260208601612599565b91505092915050565b5f6040828403121561266157612660612258565b5b61266b60406120a0565b90505f82013567ffffffffffffffff81111561268a5761268961225c565b5b612696848285016124ae565b5f83015250602082013567ffffffffffffffff8111156126b9576126b861225c565b5b6126c58482850161261f565b60208301525092915050565b5f5f604083850312156126e7576126e6611f57565b5b5f83013567ffffffffffffffff81111561270457612703611f5b565b5b612710858286016122fe565b925050602083013567ffffffffffffffff81111561273157612730611f5b565b5b61273d8582860161264c565b9150509250929050565b61275081611f0c565b811461275a575f5ffd5b50565b5f8135905061276b81612747565b92915050565b5f5f6040838503121561278757612786611f57565b5b5f6127948582860161275d565b92505060206127a5858286016123ab565b9150509250929050565b6127b881611f0c565b81146127c2575f5ffd5b50565b5f815190506127d3816127af565b92915050565b5f602082840312156127ee576127ed611f57565b5b5f6127fb848285016127c5565b91505092915050565b61280d81611f15565b82525050565b5f6020820190506128265f830184612804565b92915050565b61283581611f0c565b811461283f575f5ffd5b50565b5f815190506128508161282c565b92915050565b5f6020828403121561286b5761286a611f57565b5b5f61287884828501612842565b91505092915050565b61288a81611f0c565b82525050565b5f6020820190506128a35f830184612881565b92915050565b5f6128bb6128b684612260565b6120a0565b9050828152602081018484840111156128d7576128d661202e565b5b6128e28482856121c7565b509392505050565b5f82601f8301126128fe576128fd61202a565b5b815161290e8482602086016128a9565b91505092915050565b5f6020828403121561292c5761292b612258565b5b61293660206120a0565b90505f82015167ffffffffffffffff8111156129555761295461225c565b5b612961848285016128ea565b5f8301525092915050565b5f6020828403121561298157612980611f57565b5b5f82015167ffffffffffffffff81111561299e5761299d611f5b565b5b6129aa84828501612917565b91505092915050565b5f82825260208201905092915050565b5f6129cd826121ad565b6129d781856129b3565b93506129e78185602086016121c7565b6129f081612032565b840191505092915050565b5f602083015f8301518482035f860152612a1582826129c3565b9150508091505092915050565b5f6020820190508181035f830152612a3a81846129fb565b905092915050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f612a7a612a75612a7084612a42565b612a57565b612a4b565b9050919050565b612a8a81612a60565b82525050565b5f602082019050612aa35f830184612a81565b92915050565b5f82825260208201905092915050565b7f666f6f62617200000000000000000000000000000000000000000000000000005f82015250565b5f612aed600683612aa9565b9150612af882612ab9565b602082019050919050565b5f6020820190508181035f830152612b1a81612ae1565b9050919050565b612b2a81611f0c565b8114612b34575f5ffd5b50565b5f81519050612b4581612b21565b92915050565b5f60208284031215612b6057612b5f611f57565b5b5f612b6d84828501612b37565b91505092915050565b5f612b8082611f5f565b9050919050565b612b9081612b76565b82525050565b5f602082019050612ba95f830184612b87565b92915050565b612bb881611f7e565b82525050565b5f602082019050612bd15f830184612baf565b92915050565b5f81519050919050565b5f612beb82612bd7565b612bf58185612aa9565b9350612c058185602086016121c7565b612c0e81612032565b840191505092915050565b5f6020820190508181035f830152612c318184612be1565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f696e63636f756e746572000000000000000000000000000000000000000000005f82015250565b5f612c9a600a83612aa9565b9150612ca582612c66565b602082019050919050565b5f6020820190508181035f830152612cc781612c8e565b9050919050565b5f63ffffffff82169050919050565b612ce681612cce565b8114612cf0575f5ffd5b50565b5f81519050612d0181612cdd565b92915050565b5f60208284031215612d1c57612d1b611f57565b5b5f612d2984828501612cf3565b91505092915050565b7f696e63436f756e746572000000000000000000000000000000000000000000005f82015250565b5f612d66600a83612aa9565b9150612d7182612d32565b602082019050919050565b5f6020820190508181035f830152612d9381612d5a565b9050919050565b5f612db4612daf612daa84612cce565b612a57565b612cce565b9050919050565b612dc481612d9a565b82525050565b604082015f820151612dde5f850182612dbb565b506020820151612df16020850182612dbb565b50505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612e2b83836129c3565b905092915050565b5f602082019050919050565b5f612e4982612df7565b612e538185612e01565b935083602082028501612e6585612e11565b805f5b85811015612ea05784840389528151612e818582612e20565b9450612e8c83612e33565b925060208a01995050600181019050612e68565b50829750879550505050505092915050565b5f606083015f830151612ec75f860182612dca565b5060208301518482036040860152612edf8282612e3f565b9150508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f612f2f82612bd7565b612f398185612f15565b9350612f498185602086016121c7565b612f5281612032565b840191505092915050565b612f6681612382565b82525050565b5f604083015f8301518482035f860152612f868282612f25565b9150506020830151612f9b6020860182612f5d565b508091505092915050565b5f612fb18383612f6c565b905092915050565b5f602082019050919050565b5f612fcf82612eec565b612fd98185612ef6565b935083602082028501612feb85612f06565b805f5b8581101561302657848403895281516130078582612fa6565b945061301283612fb9565b925060208a01995050600181019050612fee565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61306a81611f15565b82525050565b5f604083015f8301516130855f860182613061565b506020830151848203602086015261309d8282612f25565b9150508091505092915050565b5f6130b58383613070565b905092915050565b5f602082019050919050565b5f6130d382613038565b6130dd8185613042565b9350836020820285016130ef85613052565b805f5b8581101561312a578484038952815161310b85826130aa565b9450613116836130bd565b925060208a019950506001810190506130f2565b50829750879550505050505092915050565b5f604083015f8301518482035f8601526131568282612fc5565b9150506020830151848203602086015261317082826130c9565b9150508091505092915050565b5f6040820190508181035f8301526131958185612eb2565b905081810360208301526131a9818461313c565b90509392505050565b5f67ffffffffffffffff8211156131cc576131cb612042565b5b602082029050602081019050919050565b5f6131ef6131ea846131b2565b6120a0565b905080838252602082019050602084028301858111156132125761321161237e565b5b835b8181101561325957805167ffffffffffffffff8111156132375761323661202a565b5b80860161324489826128ea565b85526020850194505050602081019050613214565b5050509392505050565b5f82601f8301126132775761327661202a565b5b81516132878482602086016131dd565b91505092915050565b5f602082840312156132a5576132a4611f57565b5b5f82015167ffffffffffffffff8111156132c2576132c1611f5b565b5b6132ce84828501613263565b91505092915050565b6b010000000000000000000000815250565b5f7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b5f819050919050565b61332e613329826132e9565b613314565b82525050565b7d04b3ee694200000000000000000000000000000000000000000000000000815250565b5f613362826132d7565b601582019150613372828461331d565b60148201915061338182613334565b60078201915081905092915050565b7f65766d00000000000000000000000000000000000000000000000000000000005f82015250565b5f6133c4600383612aa9565b91506133cf82613390565b602082019050919050565b5f6020820190508181035f8301526133f1816133b8565b9050919050565b7f63616c6c436f6e747261637400000000000000000000000000000000000000005f82015250565b5f61342c600c83612aa9565b9150613437826133f8565b602082019050919050565b5f6020820190508181035f83015261345981613420565b9050919050565b5f6020820190508181035f8301526134788184612eb2565b905092915050565b7f6163636f756e74730000000000000000000000000000000000000000000000005f82015250565b5f6134b4600883612aa9565b91506134bf82613480565b602082019050919050565b5f6020820190508181035f8301526134e1816134a8565b9050919050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f61351c600783612aa9565b9150613527826134e8565b602082019050919050565b5f6020820190508181035f83015261354981613510565b9050919050565b7f7472616e73666572416c6c6f77616e6365546f000000000000000000000000005f82015250565b5f613584601383612aa9565b915061358f82613550565b602082019050919050565b5f6020820190508181035f8301526135b181613578565b9050919050565b7f676f7665726e616e6365000000000000000000000000000000000000000000005f82015250565b5f6135ec600a83612aa9565b91506135f7826135b8565b602082019050919050565b5f6020820190508181035f830152613619816135e0565b9050919050565b7f636c61696d436861696e41646d696e00000000000000000000000000000000005f82015250565b5f613654600f83612aa9565b915061365f82613620565b602082019050919050565b5f6020820190508181035f83015261368181613648565b9050919050565b7f6e6f6e2d737461746963000000000000000000000000000000000000000000005f82015250565b5f6136bc600a83612aa9565b91506136c782613688565b602082019050919050565b5f6020820190508181035f8301526136e9816136b0565b9050919050565b5f81905092915050565b5f613704826121ad565b61370e81856136f0565b935061371e8185602086016121c7565b80840191505092915050565b5f61373582846136fa565b915081905092915050565b7f63616c6c2073686f756c642073756363656564000000000000000000000000005f82015250565b5f613774601383612aa9565b915061377f82613740565b602082019050919050565b5f6020820190508181035f8301526137a181613768565b9050919050565b7f73746174696363616c6c20746f20766965772073686f756c64207375636365655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f613802602183612aa9565b915061380d826137a8565b604082019050919050565b5f6020820190508181035f83015261382f816137f6565b9050919050565b7f73746174696300000000000000000000000000000000000000000000000000005f82015250565b5f61386a600683612aa9565b915061387582613836565b602082019050919050565b5f6020820190508181035f8301526138978161385e565b9050919050565b7f73746174696363616c6c20746f206e6f6e2d766965772073686f756c642066615f8201527f696c000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138f8602283612aa9565b91506139038261389e565b604082019050919050565b5f6020820190508181035f830152613925816138ec565b9050919050565b5f61393e613939846120ba565b6120a0565b90508281526020810184848401111561395a5761395961202e565b5b6139658482856121c7565b509392505050565b5f82601f8301126139815761398061202a565b5b815161399184826020860161392c565b91505092915050565b5f815190506139a881612395565b92915050565b5f604082840312156139c3576139c2612258565b5b6139cd60406120a0565b90505f82015167ffffffffffffffff8111156139ec576139eb61225c565b5b6139f88482850161396d565b5f830152506020613a0b8482850161399a565b60208301525092915050565b5f613a29613a2484612353565b6120a0565b90508083825260208201905060208402830185811115613a4c57613a4b61237e565b5b835b81811015613a9357805167ffffffffffffffff811115613a7157613a7061202a565b5b808601613a7e89826139ae565b85526020850194505050602081019050613a4e565b5050509392505050565b5f82601f830112613ab157613ab061202a565b5b8151613ac1848260208601613a17565b91505092915050565b5f81519050613ad881612506565b92915050565b5f60408284031215613af357613af2612258565b5b613afd60406120a0565b90505f613b0c84828501613aca565b5f83015250602082015167ffffffffffffffff811115613b2f57613b2e61225c565b5b613b3b8482850161396d565b60208301525092915050565b5f613b59613b54846124db565b6120a0565b90508083825260208201905060208402830185811115613b7c57613b7b61237e565b5b835b81811015613bc357805167ffffffffffffffff811115613ba157613ba061202a565b5b808601613bae8982613ade565b85526020850194505050602081019050613b7e565b5050509392505050565b5f82601f830112613be157613be061202a565b5b8151613bf1848260208601613b47565b91505092915050565b5f60408284031215613c0f57613c0e612258565b5b613c1960406120a0565b90505f82015167ffffffffffffffff811115613c3857613c3761225c565b5b613c4484828501613a9d565b5f83015250602082015167ffffffffffffffff811115613c6757613c6661225c565b5b613c7384828501613bcd565b60208301525092915050565b5f60208284031215613c9457613c93611f57565b5b5f82015167ffffffffffffffff811115613cb157613cb0611f5b565b5b613cbd84828501613bfa565b91505092915050565b613ccf81612a4b565b8114613cd9575f5ffd5b50565b5f81519050613cea81613cc6565b92915050565b5f60e08284031215613d0557613d04612258565b5b613d0f60e06120a0565b90505f82015167ffffffffffffffff811115613d2e57613d2d61225c565b5b613d3a8482850161396d565b5f830152506020613d4d84828501613cdc565b602083015250604082015167ffffffffffffffff811115613d7157613d7061225c565b5b613d7d8482850161396d565b604083015250606082015167ffffffffffffffff811115613da157613da061225c565b5b613dad8482850161396d565b606083015250608082015167ffffffffffffffff811115613dd157613dd061225c565b5b613ddd8482850161396d565b60808301525060a082015167ffffffffffffffff811115613e0157613e0061225c565b5b613e0d8482850161396d565b60a08301525060c0613e218482850161399a565b60c08301525092915050565b5f60208284031215613e4257613e41611f57565b5b5f82015167ffffffffffffffff811115613e5f57613e5e611f5b565b5b613e6b84828501613cf0565b91505092915050565b5f604082019050613e875f830185612b87565b8181036020830152613e99818461313c565b90509392505050565b613eab81611f15565b82525050565b5f604082019050613ec45f830185613ea2565b8181036020830152613ed6818461313c565b9050939250505056fe6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea2646970667358221220dade1035a0f173d8ea48a6e6cd294cef766c3e99667ac5a5af101b96ddee8fff64736f6c634300081d0033a26469706673582212209f38af213ccf968006e2311f584a1e42979c310cff7d11146517d847c8932be664736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b50613f898061001c5f395ff3fe608060405260043610610113575f3560e01c8063a4a05e211161009f578063bd819cf111610063578063bd819cf11461028b578063c36ba856146102b3578063d411defb146102c9578063e1782c2f146102df578063e29a58a3146102fb57610113565b8063a4a05e21146101f7578063b3ee69421461020d578063bb21d92114610223578063bcaeb8a814610239578063bcfb19591461026357610113565b80634e522e4b116100e65780634e522e4b1461016f578063564b81ef146101855780636a68a760146101af578063904b8870146101c55780639e1a00aa146101db57610113565b806336c34640146101175780633772d53f1461012d57806346d116761461014357806346fc4bb114610159575b5f5ffd5b348015610122575f5ffd5b5061012b610311565b005b348015610138575f5ffd5b506101416103ca565b005b34801561014e575f5ffd5b50610157610488565b005b348015610164575f5ffd5b5061016d610549565b005b34801561017a575f5ffd5b50610183610587565b005b348015610190575f5ffd5b506101996105be565b6040516101a69190611f69565b60405180910390f35b3480156101ba575f5ffd5b506101c3610645565b005b3480156101d0575f5ffd5b506101d9610680565b005b6101f560048036038101906101f09190612020565b610749565b005b348015610202575f5ffd5b5061020b610791565b005b348015610218575f5ffd5b50610221610acd565b005b34801561022e575f5ffd5b50610237610d39565b005b348015610244575f5ffd5b5061024d610d69565b60405161025a91906120ce565b60405180910390f35b34801561026e575f5ffd5b50610289600480360381019061028491906120ee565b610feb565b005b348015610296575f5ffd5b506102b160048036038101906102ac91906126be565b611004565b005b3480156102be575f5ffd5b506102c7611256565b005b3480156102d4575f5ffd5b506102dd611538565b005b6102f960048036038101906102f4919061275e565b611aa7565b005b348015610306575f5ffd5b5061030f611ea0565b005b7fd6ddc34e1c1497550557bbba599c9651590b8ca92acb717afae575a6c390460173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca6528ce6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b391906127c6565b6040516103c09190612800565b60405180910390a1565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610428573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044c9190612843565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc8160405161047d919061287d565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa1580156104e5573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061050d9190612959565b90507faded0c26c8cc65771b245ec36a4a290a35b0cd003545068bcef2dcac18b8815c8160405161053e9190612a0f565b60405180910390a150565b602a6040517fa8b4db6200000000000000000000000000000000000000000000000000000000815260040161057e9190612a7d565b60405180910390fd5b7f5d1ca04f16bd7543edfc3334447b8976b0504f3a3e449dcd9992eb93781a80f36040516105b490612af0565b60405180910390a1565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663564b81ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106409190612b38565b905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790612af0565b60405180910390fd5b5f60405161068d90611edd565b604051809103905ff0801580156106a6573d5f5f3e3d5ffd5b5090507f619e004505ac1d1c1c901fa7ad8f849ad75977fe395f6df05966aac8702a22a2816040516106d89190612b83565b60405180910390a18073ffffffffffffffffffffffffffffffffffffffff1663bcfb1959336040518263ffffffff1660e01b81526004016107199190612bab565b5f604051808303815f87803b158015610730575f5ffd5b505af1158015610742573d5f5f3e3d5ffd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561078c573d5f5f3e3d5ffd5b505050565b5f600167ffffffffffffffff8111156107ad576107ac61211d565b5b6040519080825280602002602001820160405280156107e057816020015b60608152602001906001900390816107cb5790505b5090506040518060400160405280600981526020017f012a000000000000000000000000000000000000000000000000000000000000815250815f8151811061082c5761082b612bc4565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016108c890612c3b565b602060405180830381865afa1580156108e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109079190612c92565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161095d90612d07565b602060405180830381865afa158015610978573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099c9190612c92565b63ffffffff1681525081526020018481525060405180604001604052805f67ffffffffffffffff8111156109d3576109d261211d565b5b604051908082528060200260200182016040528015610a0c57816020015b6109f9611eea565b8152602001906001900390816109f15790505b5081526020015f67ffffffffffffffff811115610a2c57610a2b61211d565b5b604051908082528060200260200182016040528015610a6557816020015b610a52611f0d565b815260200190600190039081610a4a5790505b508152506040518363ffffffff1660e01b8152600401610a86929190613112565b5f604051808303815f875af1158015610aa1573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ac99190613225565b5050565b5f600167ffffffffffffffff811115610ae957610ae861211d565b5b604051908082528060200260200182016040528015610b1c57816020015b6060815260200190600190039081610b075790505b5090503060601b604051602001610b3391906132ed565b604051602081830303815290604052815f81518110610b5557610b54612bc4565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663125ff5f96040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610bf19061336f565b602060405180830381865afa158015610c0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c309190612c92565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610c86906133d7565b602060405180830381865afa158015610ca1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc59190612c92565b63ffffffff168152508152602001848152506040518263ffffffff1660e01b8152600401610cf391906133f5565b5f60405180830381865afa158015610d0d573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610d359190613225565b5050565b7fb7575244c27f0af0a38da3d7e04920b4409766ef4699eea08f74dff24db98a1a60405160405180910390a15f5ffd5b60605f600167ffffffffffffffff811115610d8757610d8661211d565b5b604051908082528060200260200182016040528015610dba57816020015b6060815260200190600190039081610da55790505b5090506040518060400160405280600181526020015f815250815f81518110610de657610de5612bc4565b5b60200260200101819052505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663125ff5f96040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610e839061345f565b602060405180830381865afa158015610e9e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec29190612c92565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610f18906134c7565b602060405180830381865afa158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f579190612c92565b63ffffffff168152508152602001858152506040518263ffffffff1660e01b8152600401610f8591906133f5565b5f60405180830381865afa158015610f9f573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610fc79190613225565b9050805f81518110610fdc57610fdb612bc4565b5b60200260200101519250505090565b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f600167ffffffffffffffff8111156110205761101f61211d565b5b60405190808252806020026020018201604052801561105357816020015b606081526020019060019003908161103e5790505b509050825f0151815f8151811061106d5761106c612bc4565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016111099061345f565b602060405180830381865afa158015611124573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111489190612c92565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161119e9061352f565b602060405180830381865afa1580156111b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111dd9190612c92565b63ffffffff16815250815260200184815250846040518363ffffffff1660e01b815260040161120d929190613112565b5f604051808303815f875af1158015611228573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112509190613225565b50505050565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016112e790613597565b602060405180830381865afa158015611302573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113269190612c92565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161137c906135ff565b602060405180830381865afa158015611397573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb9190612c92565b63ffffffff1681525081526020015f67ffffffffffffffff8111156113e3576113e261211d565b5b60405190808252806020026020018201604052801561141657816020015b60608152602001906001900390816114015790505b5081525060405180604001604052805f67ffffffffffffffff81111561143f5761143e61211d565b5b60405190808252806020026020018201604052801561147857816020015b611465611eea565b81526020019060019003908161145d5790505b5081526020015f67ffffffffffffffff8111156114985761149761211d565b5b6040519080825280602002602001820160405280156114d157816020015b6114be611f0d565b8152602001906001900390816114b65790505b508152506040518363ffffffff1660e01b81526004016114f2929190613112565b5f604051808303815f875af115801561150d573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906115359190613225565b50565b5f60605f604051806060016040528060358152602001613f1f6035913990505f611560611f26565b600167ffffffffffffffff81111561157b5761157a61211d565b5b6040519080825280602002602001820160405280156115b457816020015b6115a1611eea565b8152602001906001900390816115995790505b50815f018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632386557b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611618573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906116409190613806565b5f0151815f01515f8151811061165957611658612bc4565b5b60200260200101515f01819052506001815f01515f8151811061167f5761167e612bc4565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff16815250505f6040518060400160405280600c81526020017f676574436861696e494428290000000000000000000000000000000000000000815250905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1684848460405160240161171d92919061384d565b6040516020818303038152906040529060405161173a91906138b5565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161179c9190613905565b5f604051808303815f865af19150503d805f81146117d5576040519150601f19603f3d011682016040523d82523d5f602084013e6117da565b606091505b50809650819750505085611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613965565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16816040516024016040516020818303038152906040529060405161187291906138b5565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516118d49190613905565b5f60405180830381855afa9150503d805f811461190c576040519150601f19603f3d011682016040523d82523d5f602084013e611911565b606091505b5080965081975050508561195a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611951906139f3565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1684848460405160240161199992919061384d565b604051602081830303815290604052906040516119b691906138b5565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611a189190613905565b5f60405180830381855afa9150503d805f8114611a50576040519150601f19603f3d011682016040523d82523d5f602084013e611a55565b606091505b5080965081975050508515611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9690613a81565b60405180910390fd5b505050505050565b611aaf611f26565b5f8267ffffffffffffffff1603611b565773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b8152600401611b0d9190612b83565b5f60405180830381865afa158015611b27573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611b4f9190613d70565b9050611c9b565b600167ffffffffffffffff811115611b7157611b7061211d565b5b604051908082528060200260200182016040528015611baa57816020015b611b97611eea565b815260200190600190039081611b8f5790505b50815f018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632386557b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611c0e573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611c369190613806565b5f0151815f01515f81518110611c4f57611c4e612bc4565b5b60200260200101515f018190525081815f01515f81518110611c7457611c73612bc4565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff16815250505b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a8c0e41f33836040518363ffffffff1660e01b8152600401611cea92919061384d565b5f604051808303815f87803b158015611d01575f5ffd5b505af1158015611d13573d5f5f3e3d5ffd5b50505050611d1f611f26565b600167ffffffffffffffff811115611d3a57611d3961211d565b5b604051908082528060200260200182016040528015611d7357816020015b611d60611eea565b815260200190600190039081611d585790505b50815f0181905250815f01515f81518110611d9157611d90612bc4565b5b60200260200101515f0151815f01515f81518110611db257611db1612bc4565b5b60200260200101515f0181905250815f01515f81518110611dd657611dd5612bc4565b5b602002602001015160200151815f01515f81518110611df857611df7612bc4565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636bc6442e85836040518363ffffffff1660e01b8152600401611e6d929190613dc6565b5f604051808303815f87803b158015611e84575f5ffd5b505af1158015611e96573d5f5f3e3d5ffd5b5050505050505050565b5b6127105a10611edb577ff9c7a13c2c2ddb716633ae77fd03fb7d2e3bf5ab3a45ba50ec2d3decc9ee650c60405160405180910390a1611ea1565b565b61012a80613df583390190565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b60405180604001604052805f8152602001606081525090565b604051806040016040528060608152602001606081525090565b5f819050919050565b5f611f5382611f40565b9050919050565b611f6381611f49565b82525050565b5f602082019050611f7c5f830184611f5a565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fbc82611f93565b9050919050565b611fcc81611fb2565b8114611fd6575f5ffd5b50565b5f81359050611fe781611fc3565b92915050565b5f819050919050565b611fff81611fed565b8114612009575f5ffd5b50565b5f8135905061201a81611ff6565b92915050565b5f5f6040838503121561203657612035611f8b565b5b5f61204385828601611fd9565b92505060206120548582860161200c565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6120a08261205e565b6120aa8185612068565b93506120ba818560208601612078565b6120c381612086565b840191505092915050565b5f6020820190508181035f8301526120e68184612096565b905092915050565b5f6020828403121561210357612102611f8b565b5b5f61211084828501611fd9565b91505092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61215382612086565b810181811067ffffffffffffffff821117156121725761217161211d565b5b80604052505050565b5f612184611f82565b9050612190828261214a565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156121bb576121ba61211d565b5b6121c482612086565b9050602081019050919050565b828183375f83830152505050565b5f6121f16121ec846121a1565b61217b565b90508281526020810184848401111561220d5761220c61219d565b5b6122188482856121d1565b509392505050565b5f82601f83011261223457612233612199565b5b81356122448482602086016121df565b91505092915050565b5f6020828403121561226257612261612119565b5b61226c602061217b565b90505f82013567ffffffffffffffff81111561228b5761228a612195565b5b61229784828501612220565b5f8301525092915050565b5f67ffffffffffffffff8211156122bc576122bb61211d565b5b602082029050602081019050919050565b5f5ffd5b5f67ffffffffffffffff8211156122eb576122ea61211d565b5b6122f482612086565b9050602081019050919050565b5f61231361230e846122d1565b61217b565b90508281526020810184848401111561232f5761232e61219d565b5b61233a8482856121d1565b509392505050565b5f82601f83011261235657612355612199565b5b8135612366848260208601612301565b91505092915050565b5f67ffffffffffffffff82169050919050565b61238b8161236f565b8114612395575f5ffd5b50565b5f813590506123a681612382565b92915050565b5f604082840312156123c1576123c0612119565b5b6123cb604061217b565b90505f82013567ffffffffffffffff8111156123ea576123e9612195565b5b6123f684828501612342565b5f83015250602061240984828501612398565b60208301525092915050565b5f612427612422846122a2565b61217b565b9050808382526020820190506020840283018581111561244a576124496122cd565b5b835b8181101561249157803567ffffffffffffffff81111561246f5761246e612199565b5b80860161247c89826123ac565b8552602085019450505060208101905061244c565b5050509392505050565b5f82601f8301126124af576124ae612199565b5b81356124bf848260208601612415565b91505092915050565b5f67ffffffffffffffff8211156124e2576124e161211d565b5b602082029050602081019050919050565b6124fc81611f40565b8114612506575f5ffd5b50565b5f81359050612517816124f3565b92915050565b5f6040828403121561253257612531612119565b5b61253c604061217b565b90505f61254b84828501612509565b5f83015250602082013567ffffffffffffffff81111561256e5761256d612195565b5b61257a84828501612342565b60208301525092915050565b5f612598612593846124c8565b61217b565b905080838252602082019050602084028301858111156125bb576125ba6122cd565b5b835b8181101561260257803567ffffffffffffffff8111156125e0576125df612199565b5b8086016125ed898261251d565b855260208501945050506020810190506125bd565b5050509392505050565b5f82601f8301126126205761261f612199565b5b8135612630848260208601612586565b91505092915050565b5f6040828403121561264e5761264d612119565b5b612658604061217b565b90505f82013567ffffffffffffffff81111561267757612676612195565b5b6126838482850161249b565b5f83015250602082013567ffffffffffffffff8111156126a6576126a5612195565b5b6126b28482850161260c565b60208301525092915050565b5f5f604083850312156126d4576126d3611f8b565b5b5f83013567ffffffffffffffff8111156126f1576126f0611f8f565b5b6126fd8582860161224d565b925050602083013567ffffffffffffffff81111561271e5761271d611f8f565b5b61272a85828601612639565b9150509250929050565b61273d81611f40565b8114612747575f5ffd5b50565b5f8135905061275881612734565b92915050565b5f5f6040838503121561277457612773611f8b565b5b5f6127818582860161274a565b925050602061279285828601612398565b9150509250929050565b6127a581611f40565b81146127af575f5ffd5b50565b5f815190506127c08161279c565b92915050565b5f602082840312156127db576127da611f8b565b5b5f6127e8848285016127b2565b91505092915050565b6127fa81611f49565b82525050565b5f6020820190506128135f8301846127f1565b92915050565b61282281611f40565b811461282c575f5ffd5b50565b5f8151905061283d81612819565b92915050565b5f6020828403121561285857612857611f8b565b5b5f6128658482850161282f565b91505092915050565b61287781611f40565b82525050565b5f6020820190506128905f83018461286e565b92915050565b5f6128a86128a3846121a1565b61217b565b9050828152602081018484840111156128c4576128c361219d565b5b6128cf848285612078565b509392505050565b5f82601f8301126128eb576128ea612199565b5b81516128fb848260208601612896565b91505092915050565b5f6020828403121561291957612918612119565b5b612923602061217b565b90505f82015167ffffffffffffffff81111561294257612941612195565b5b61294e848285016128d7565b5f8301525092915050565b5f6020828403121561296e5761296d611f8b565b5b5f82015167ffffffffffffffff81111561298b5761298a611f8f565b5b61299784828501612904565b91505092915050565b5f82825260208201905092915050565b5f6129ba8261205e565b6129c481856129a0565b93506129d4818560208601612078565b6129dd81612086565b840191505092915050565b5f602083015f8301518482035f860152612a0282826129b0565b9150508091505092915050565b5f6020820190508181035f830152612a2781846129e8565b905092915050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f612a67612a62612a5d84612a2f565b612a44565b612a38565b9050919050565b612a7781612a4d565b82525050565b5f602082019050612a905f830184612a6e565b92915050565b5f82825260208201905092915050565b7f666f6f62617200000000000000000000000000000000000000000000000000005f82015250565b5f612ada600683612a96565b9150612ae582612aa6565b602082019050919050565b5f6020820190508181035f830152612b0781612ace565b9050919050565b612b1781611f40565b8114612b21575f5ffd5b50565b5f81519050612b3281612b0e565b92915050565b5f60208284031215612b4d57612b4c611f8b565b5b5f612b5a84828501612b24565b91505092915050565b5f612b6d82611f93565b9050919050565b612b7d81612b63565b82525050565b5f602082019050612b965f830184612b74565b92915050565b612ba581611fb2565b82525050565b5f602082019050612bbe5f830184612b9c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f696e63636f756e746572000000000000000000000000000000000000000000005f82015250565b5f612c25600a83612a96565b9150612c3082612bf1565b602082019050919050565b5f6020820190508181035f830152612c5281612c19565b9050919050565b5f63ffffffff82169050919050565b612c7181612c59565b8114612c7b575f5ffd5b50565b5f81519050612c8c81612c68565b92915050565b5f60208284031215612ca757612ca6611f8b565b5b5f612cb484828501612c7e565b91505092915050565b7f696e63436f756e746572000000000000000000000000000000000000000000005f82015250565b5f612cf1600a83612a96565b9150612cfc82612cbd565b602082019050919050565b5f6020820190508181035f830152612d1e81612ce5565b9050919050565b5f612d3f612d3a612d3584612c59565b612a44565b612c59565b9050919050565b612d4f81612d25565b82525050565b604082015f820151612d695f850182612d46565b506020820151612d7c6020850182612d46565b50505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612db683836129b0565b905092915050565b5f602082019050919050565b5f612dd482612d82565b612dde8185612d8c565b935083602082028501612df085612d9c565b805f5b85811015612e2b5784840389528151612e0c8582612dab565b9450612e1783612dbe565b925060208a01995050600181019050612df3565b50829750879550505050505092915050565b5f606083015f830151612e525f860182612d55565b5060208301518482036040860152612e6a8282612dca565b9150508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f612ec482612ea0565b612ece8185612eaa565b9350612ede818560208601612078565b612ee781612086565b840191505092915050565b612efb8161236f565b82525050565b5f604083015f8301518482035f860152612f1b8282612eba565b9150506020830151612f306020860182612ef2565b508091505092915050565b5f612f468383612f01565b905092915050565b5f602082019050919050565b5f612f6482612e77565b612f6e8185612e81565b935083602082028501612f8085612e91565b805f5b85811015612fbb5784840389528151612f9c8582612f3b565b9450612fa783612f4e565b925060208a01995050600181019050612f83565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612fff81611f49565b82525050565b5f604083015f83015161301a5f860182612ff6565b50602083015184820360208601526130328282612eba565b9150508091505092915050565b5f61304a8383613005565b905092915050565b5f602082019050919050565b5f61306882612fcd565b6130728185612fd7565b93508360208202850161308485612fe7565b805f5b858110156130bf57848403895281516130a0858261303f565b94506130ab83613052565b925060208a01995050600181019050613087565b50829750879550505050505092915050565b5f604083015f8301518482035f8601526130eb8282612f5a565b91505060208301518482036020860152613105828261305e565b9150508091505092915050565b5f6040820190508181035f83015261312a8185612e3d565b9050818103602083015261313e81846130d1565b90509392505050565b5f67ffffffffffffffff8211156131615761316061211d565b5b602082029050602081019050919050565b5f61318461317f84613147565b61217b565b905080838252602082019050602084028301858111156131a7576131a66122cd565b5b835b818110156131ee57805167ffffffffffffffff8111156131cc576131cb612199565b5b8086016131d989826128d7565b855260208501945050506020810190506131a9565b5050509392505050565b5f82601f83011261320c5761320b612199565b5b815161321c848260208601613172565b91505092915050565b5f6020828403121561323a57613239611f8b565b5b5f82015167ffffffffffffffff81111561325757613256611f8f565b5b613263848285016131f8565b91505092915050565b6b010000000000000000000000815250565b5f7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b5f819050919050565b6132c36132be8261327e565b6132a9565b82525050565b7d04b3ee694200000000000000000000000000000000000000000000000000815250565b5f6132f78261326c565b60158201915061330782846132b2565b601482019150613316826132c9565b60078201915081905092915050565b7f65766d00000000000000000000000000000000000000000000000000000000005f82015250565b5f613359600383612a96565b915061336482613325565b602082019050919050565b5f6020820190508181035f8301526133868161334d565b9050919050565b7f63616c6c436f6e747261637400000000000000000000000000000000000000005f82015250565b5f6133c1600c83612a96565b91506133cc8261338d565b602082019050919050565b5f6020820190508181035f8301526133ee816133b5565b9050919050565b5f6020820190508181035f83015261340d8184612e3d565b905092915050565b7f6163636f756e74730000000000000000000000000000000000000000000000005f82015250565b5f613449600883612a96565b915061345482613415565b602082019050919050565b5f6020820190508181035f8301526134768161343d565b9050919050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f6134b1600783612a96565b91506134bc8261347d565b602082019050919050565b5f6020820190508181035f8301526134de816134a5565b9050919050565b7f7472616e73666572416c6c6f77616e6365546f000000000000000000000000005f82015250565b5f613519601383612a96565b9150613524826134e5565b602082019050919050565b5f6020820190508181035f8301526135468161350d565b9050919050565b7f676f7665726e616e6365000000000000000000000000000000000000000000005f82015250565b5f613581600a83612a96565b915061358c8261354d565b602082019050919050565b5f6020820190508181035f8301526135ae81613575565b9050919050565b7f636c61696d436861696e41646d696e00000000000000000000000000000000005f82015250565b5f6135e9600f83612a96565b91506135f4826135b5565b602082019050919050565b5f6020820190508181035f830152613616816135dd565b9050919050565b5f61362f61362a846122d1565b61217b565b90508281526020810184848401111561364b5761364a61219d565b5b613656848285612078565b509392505050565b5f82601f83011261367257613671612199565b5b815161368284826020860161361d565b91505092915050565b61369481612a38565b811461369e575f5ffd5b50565b5f815190506136af8161368b565b92915050565b5f815190506136c381612382565b92915050565b5f60e082840312156136de576136dd612119565b5b6136e860e061217b565b90505f82015167ffffffffffffffff81111561370757613706612195565b5b6137138482850161365e565b5f830152506020613726848285016136a1565b602083015250604082015167ffffffffffffffff81111561374a57613749612195565b5b6137568482850161365e565b604083015250606082015167ffffffffffffffff81111561377a57613779612195565b5b6137868482850161365e565b606083015250608082015167ffffffffffffffff8111156137aa576137a9612195565b5b6137b68482850161365e565b60808301525060a082015167ffffffffffffffff8111156137da576137d9612195565b5b6137e68482850161365e565b60a08301525060c06137fa848285016136b5565b60c08301525092915050565b5f6020828403121561381b5761381a611f8b565b5b5f82015167ffffffffffffffff81111561383857613837611f8f565b5b613844848285016136c9565b91505092915050565b5f6040820190506138605f830185612b74565b818103602083015261387281846130d1565b90509392505050565b5f81905092915050565b5f61388f82612ea0565b613899818561387b565b93506138a9818560208601612078565b80840191505092915050565b5f6138c08284613885565b915081905092915050565b5f81905092915050565b5f6138df8261205e565b6138e981856138cb565b93506138f9818560208601612078565b80840191505092915050565b5f61391082846138d5565b915081905092915050565b7f63616c6c2073686f756c642073756363656564000000000000000000000000005f82015250565b5f61394f601383612a96565b915061395a8261391b565b602082019050919050565b5f6020820190508181035f83015261397c81613943565b9050919050565b7f73746174696363616c6c20746f20766965772073686f756c64207375636365655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139dd602183612a96565b91506139e882613983565b604082019050919050565b5f6020820190508181035f830152613a0a816139d1565b9050919050565b7f73746174696363616c6c20746f206e6f6e2d766965772073686f756c642066615f8201527f696c000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a6b602283612a96565b9150613a7682613a11565b604082019050919050565b5f6020820190508181035f830152613a9881613a5f565b9050919050565b5f60408284031215613ab457613ab3612119565b5b613abe604061217b565b90505f82015167ffffffffffffffff811115613add57613adc612195565b5b613ae98482850161365e565b5f830152506020613afc848285016136b5565b60208301525092915050565b5f613b1a613b15846122a2565b61217b565b90508083825260208201905060208402830185811115613b3d57613b3c6122cd565b5b835b81811015613b8457805167ffffffffffffffff811115613b6257613b61612199565b5b808601613b6f8982613a9f565b85526020850194505050602081019050613b3f565b5050509392505050565b5f82601f830112613ba257613ba1612199565b5b8151613bb2848260208601613b08565b91505092915050565b5f81519050613bc9816124f3565b92915050565b5f60408284031215613be457613be3612119565b5b613bee604061217b565b90505f613bfd84828501613bbb565b5f83015250602082015167ffffffffffffffff811115613c2057613c1f612195565b5b613c2c8482850161365e565b60208301525092915050565b5f613c4a613c45846124c8565b61217b565b90508083825260208201905060208402830185811115613c6d57613c6c6122cd565b5b835b81811015613cb457805167ffffffffffffffff811115613c9257613c91612199565b5b808601613c9f8982613bcf565b85526020850194505050602081019050613c6f565b5050509392505050565b5f82601f830112613cd257613cd1612199565b5b8151613ce2848260208601613c38565b91505092915050565b5f60408284031215613d0057613cff612119565b5b613d0a604061217b565b90505f82015167ffffffffffffffff811115613d2957613d28612195565b5b613d3584828501613b8e565b5f83015250602082015167ffffffffffffffff811115613d5857613d57612195565b5b613d6484828501613cbe565b60208301525092915050565b5f60208284031215613d8557613d84611f8b565b5b5f82015167ffffffffffffffff811115613da257613da1611f8f565b5b613dae84828501613ceb565b91505092915050565b613dc081611f49565b82525050565b5f604082019050613dd95f830185613db7565b8181036020830152613deb81846130d1565b9050939250505056fe6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea2646970667358221220c43309bbea4954373bf9d1d4d5b30ec47163f5d29c1f8ca440fbb108f3c5f9db64736f6c634300081e0033616c6c6f7728616464726573732c2828737472696e672c75696e743634295b5d2c28627974657333322c737472696e67295b5d2929a2646970667358221220f90af4e02511571008b3deff37fc9cde153bfd547e241a1bb42b7573f2e5a66764736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/ISCTest.sol b/packages/evm/evmtest/ISCTest.sol index 06affca14c..0c4421a895 100644 --- a/packages/evm/evmtest/ISCTest.sol +++ b/packages/evm/evmtest/ISCTest.sol @@ -10,15 +10,6 @@ contract ISCTest { return ISC.sandbox.getChainID(); } - function triggerEvent(string memory s) public { - ISC.sandbox.triggerEvent(s); - } - - function triggerEventFail(string memory s) public { - ISC.sandbox.triggerEvent(s); - revert(); - } - event EntropyEvent(bytes32 entropy); function emitEntropy() public { @@ -156,13 +147,22 @@ contract ISCTest { bool success; bytes memory result; - (success, result) = address(ISC.sandbox).call(abi.encodeWithSignature("triggerEvent(string)", "non-static")); + string memory allowSelector = "allow(address,((string,uint64)[],(bytes32,string)[]))"; // non-view + address addr; + ISCAssets memory allowance; + allowance.coins = new CoinBalance[](1); + allowance.coins[0].coinType = ISC.sandbox.getBaseTokenInfo().coinType; + allowance.coins[0].amount = 1; + + string memory getChainIDSelector = "getChainID()"; // view + + (success, result) = address(ISC.sandbox).call(abi.encodeWithSignature(allowSelector, addr, allowance)); require(success, "call should succeed"); - (success, result) = address(ISC.sandbox).staticcall(abi.encodeWithSignature("getChainID()")); + (success, result) = address(ISC.sandbox).staticcall(abi.encodeWithSignature(getChainIDSelector)); require(success, "staticcall to view should succeed"); - (success, result) = address(ISC.sandbox).staticcall(abi.encodeWithSignature("triggerEvent(string)", "static")); + (success, result) = address(ISC.sandbox).staticcall(abi.encodeWithSignature(allowSelector, addr, allowance)); require(!success, "staticcall to non-view should fail"); } diff --git a/packages/evm/evmtest/RevertTest.bin b/packages/evm/evmtest/RevertTest.bin index edee2c4b78..ad34155a59 100644 --- a/packages/evm/evmtest/RevertTest.bin +++ b/packages/evm/evmtest/RevertTest.bin @@ -1 +1 @@ -60806040525f5f5f6101000a81548163ffffffff021916908363ffffffff160217905550348015602d575f5ffd5b5061022e8061003b5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806306661abd146100435780630f1146e914610061578063e3b2f8311461006b575b5f5ffd5b61004b610075565b604051610058919061017b565b60405180910390f35b610069610089565b005b6100736100c7565b005b5f5f9054906101000a900463ffffffff1681565b60015f5f9054906101000a900463ffffffff166100a691906101c1565b5f5f6101000a81548163ffffffff021916908363ffffffff16021790555f5ffd5b5f3073ffffffffffffffffffffffffffffffffffffffff16630f1146e96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561010d575f5ffd5b505af192505050801561011e575060015b61012a575f905061012f565b600190505b8015610139575f5ffd5b5f5f5f9054906101000a900463ffffffff1663ffffffff161461015a575f5ffd5b50565b5f63ffffffff82169050919050565b6101758161015d565b82525050565b5f60208201905061018e5f83018461016c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101cb8261015d565b91506101d68361015d565b9250828201905063ffffffff8111156101f2576101f1610194565b5b9291505056fea26469706673582212207d39b231e672f14521c9d52c4c4b3a62e690ae1bc475243e58b14875d658709b64736f6c634300081d0033 \ No newline at end of file +60806040525f5f5f6101000a81548163ffffffff021916908363ffffffff160217905550348015602d575f5ffd5b5061022e8061003b5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806306661abd146100435780630f1146e914610061578063e3b2f8311461006b575b5f5ffd5b61004b610075565b604051610058919061017b565b60405180910390f35b610069610089565b005b6100736100c7565b005b5f5f9054906101000a900463ffffffff1681565b60015f5f9054906101000a900463ffffffff166100a691906101c1565b5f5f6101000a81548163ffffffff021916908363ffffffff16021790555f5ffd5b5f3073ffffffffffffffffffffffffffffffffffffffff16630f1146e96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561010d575f5ffd5b505af192505050801561011e575060015b61012a575f905061012f565b600190505b8015610139575f5ffd5b5f5f5f9054906101000a900463ffffffff1663ffffffff161461015a575f5ffd5b50565b5f63ffffffff82169050919050565b6101758161015d565b82525050565b5f60208201905061018e5f83018461016c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101cb8261015d565b91506101d68361015d565b9250828201905063ffffffff8111156101f2576101f1610194565b5b9291505056fea264697066735822122004c2e56ec436d2d62b024881d142b6a0c2385330dad1f9ebd40b3f1bd9db301d64736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/SelfDestruct6780.bin b/packages/evm/evmtest/SelfDestruct6780.bin index 9f9767424d..cbff3530f9 100644 --- a/packages/evm/evmtest/SelfDestruct6780.bin +++ b/packages/evm/evmtest/SelfDestruct6780.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea2646970667358221220dade1035a0f173d8ea48a6e6cd294cef766c3e99667ac5a5af101b96ddee8fff64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea2646970667358221220c43309bbea4954373bf9d1d4d5b30ec47163f5d29c1f8ca440fbb108f3c5f9db64736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/Storage.bin b/packages/evm/evmtest/Storage.bin index 7986c9930e..f679f3a1b5 100644 --- a/packages/evm/evmtest/Storage.bin +++ b/packages/evm/evmtest/Storage.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506040516102653803806102658339818101604052810190602e9190608a565b805f5f6101000a81548163ffffffff021916908363ffffffff1602179055505060b0565b5f5ffd5b5f63ffffffff82169050919050565b606c816056565b81146075575f5ffd5b50565b5f815190506084816065565b92915050565b5f60208284031215609c57609b6052565b5b5f60a7848285016078565b91505092915050565b6101a8806100bd5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80632e64cec114610038578063b9e9538214610056575b5f5ffd5b610040610072565b60405161004d9190610100565b60405180910390f35b610070600480360381019061006b9190610147565b610089565b005b5f5f5f9054906101000a900463ffffffff16905090565b805f5f6101000a81548163ffffffff021916908363ffffffff1602179055507f1216415e6088a976b049b2d1fc9e52c96a2199b400aa37dc4aa9585710d03b87816040516100d79190610100565b60405180910390a150565b5f63ffffffff82169050919050565b6100fa816100e2565b82525050565b5f6020820190506101135f8301846100f1565b92915050565b5f5ffd5b610126816100e2565b8114610130575f5ffd5b50565b5f813590506101418161011d565b92915050565b5f6020828403121561015c5761015b610119565b5b5f61016984828501610133565b9150509291505056fea2646970667358221220511c1772ce98a11d06e833809d341bb69e31bab47b980d3e98730b60a578344664736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506040516102653803806102658339818101604052810190602e9190608a565b805f5f6101000a81548163ffffffff021916908363ffffffff1602179055505060b0565b5f5ffd5b5f63ffffffff82169050919050565b606c816056565b81146075575f5ffd5b50565b5f815190506084816065565b92915050565b5f60208284031215609c57609b6052565b5b5f60a7848285016078565b91505092915050565b6101a8806100bd5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80632e64cec114610038578063b9e9538214610056575b5f5ffd5b610040610072565b60405161004d9190610100565b60405180910390f35b610070600480360381019061006b9190610147565b610089565b005b5f5f5f9054906101000a900463ffffffff16905090565b805f5f6101000a81548163ffffffff021916908363ffffffff1602179055507f1216415e6088a976b049b2d1fc9e52c96a2199b400aa37dc4aa9585710d03b87816040516100d79190610100565b60405180910390a150565b5f63ffffffff82169050919050565b6100fa816100e2565b82525050565b5f6020820190506101135f8301846100f1565b92915050565b5f5ffd5b610126816100e2565b8114610130575f5ffd5b50565b5f813590506101418161011d565b92915050565b5f6020828403121561015c5761015b610119565b5b5f61016984828501610133565b9150509291505056fea264697066735822122011e2dba61a4bb075b117a8feaeadf5378eeef83174c2b6bbe4c080bcf0916ac364736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin b/packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin index 396d570c45..ef9a3affbc 100644 --- a/packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin +++ b/packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506120148061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea26469706673582212203a7cd319511f44764131658a92a2dc4f3f729fd4eff3700fdb7d8f8a8b81f14f64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506120148061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea26469706673582212205e706ef38563743d77458a67bfa5e9301b6697cf1492be63103566dcf9406a2664736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/Entropy.bin b/packages/evm/evmtest/wiki_how_tos/Entropy.bin index 4ae2ddd364..2771d81782 100644 --- a/packages/evm/evmtest/wiki_how_tos/Entropy.bin +++ b/packages/evm/evmtest/wiki_how_tos/Entropy.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506101b58061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80633772d53f1461002d575b5f5ffd5b610035610037565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610095573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b9919061012c565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516100ea9190610166565b60405180910390a150565b5f5ffd5b5f819050919050565b61010b816100f9565b8114610115575f5ffd5b50565b5f8151905061012681610102565b92915050565b5f60208284031215610141576101406100f5565b5b5f61014e84828501610118565b91505092915050565b610160816100f9565b82525050565b5f6020820190506101795f830184610157565b9291505056fea264697066735822122070259ac312ce2e9d6a2c3ba80554a13780d83c1638e197a6ee1b842bf003fd9764736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506101b58061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80633772d53f1461002d575b5f5ffd5b610035610037565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610095573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b9919061012c565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516100ea9190610166565b60405180910390a150565b5f5ffd5b5f819050919050565b61010b816100f9565b8114610115575f5ffd5b50565b5f8151905061012681610102565b92915050565b5f60208284031215610141576101406100f5565b5b5f61014e84828501610118565b91505092915050565b610160816100f9565b82525050565b5f6020820190506101795f830184610157565b9291505056fea2646970667358221220a4e80460275b1da226e7d1c1a5f7dddc248a48ce876bc45a6c527b6a8f1be00164736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/GetBalance.bin b/packages/evm/evmtest/wiki_how_tos/GetBalance.bin index 5388fec81b..afee6e0bb5 100644 --- a/packages/evm/evmtest/wiki_how_tos/GetBalance.bin +++ b/packages/evm/evmtest/wiki_how_tos/GetBalance.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b50610af58061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806319a5506a1461004e5780636b0c71b91461005857806390cdadcd14610074578063cdfd0a661461007e575b5f5ffd5b610056610088565b005b610072600480360381019061006d919061068a565b6101d9565b005b61007c610328565b005b6100866103ec565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa1580156100e5573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061010d91906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bff9472b836040518263ffffffff1660e01b815260040161015d919061089a565b602060405180830381865afa158015610178573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019c91906108ed565b90507f52c249d568f18754049ea99591153f1f0ad8c7ab03a3bcdcf8454bc274e54101816040516101cd9190610927565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610236573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061025e91906107da565b90507f4b5ba48e0a779444da21bd00cfee0a4b3439fc344fb75bbf2266a2a5036ebe1373107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c84846040518363ffffffff1660e01b81526004016102d0929190610992565b602060405180830381865afa1580156102eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f9190610a04565b60405161031c9190610a3e565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610385573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906103ad91906107da565b90507f28b3d377892d8db500fb9a9bbd4731605ca2a642c3c62a7e64d47b7d42024368815f01516040516103e19190610a9f565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610449573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061047191906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b019204f836040518263ffffffff1660e01b81526004016104c1919061089a565b602060405180830381865afa1580156104dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105009190610a04565b90507f23ce6861f26687742455d6955fcd53a5587ecf279e37422d0cd9636e2a2a9f7f816040516105319190610a3e565b60405180910390a15050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61059c82610556565b810181811067ffffffffffffffff821117156105bb576105ba610566565b5b80604052505050565b5f6105cd61053d565b90506105d98282610593565b919050565b5f67ffffffffffffffff8211156105f8576105f7610566565b5b61060182610556565b9050602081019050919050565b828183375f83830152505050565b5f61062e610629846105de565b6105c4565b90508281526020810184848401111561064a57610649610552565b5b61065584828561060e565b509392505050565b5f82601f8301126106715761067061054e565b5b813561068184826020860161061c565b91505092915050565b5f6020828403121561069f5761069e610546565b5b5f82013567ffffffffffffffff8111156106bc576106bb61054a565b5b6106c88482850161065d565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156106f3576106f2610566565b5b6106fc82610556565b9050602081019050919050565b8281835e5f83830152505050565b5f610729610724846106d9565b6105c4565b90508281526020810184848401111561074557610744610552565b5b610750848285610709565b509392505050565b5f82601f83011261076c5761076b61054e565b5b815161077c848260208601610717565b91505092915050565b5f6020828403121561079a576107996106d1565b5b6107a460206105c4565b90505f82015167ffffffffffffffff8111156107c3576107c26106d5565b5b6107cf84828501610758565b5f8301525092915050565b5f602082840312156107ef576107ee610546565b5b5f82015167ffffffffffffffff81111561080c5761080b61054a565b5b61081884828501610785565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61084582610821565b61084f818561082b565b935061085f818560208601610709565b61086881610556565b840191505092915050565b5f602083015f8301518482035f86015261088d828261083b565b9150508091505092915050565b5f6020820190508181035f8301526108b28184610873565b905092915050565b5f819050919050565b6108cc816108ba565b81146108d6575f5ffd5b50565b5f815190506108e7816108c3565b92915050565b5f6020828403121561090257610901610546565b5b5f61090f848285016108d9565b91505092915050565b610921816108ba565b82525050565b5f60208201905061093a5f830184610918565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f61096482610940565b61096e818561094a565b935061097e818560208601610709565b61098781610556565b840191505092915050565b5f6040820190508181035f8301526109aa818561095a565b905081810360208301526109be8184610873565b90509392505050565b5f67ffffffffffffffff82169050919050565b6109e3816109c7565b81146109ed575f5ffd5b50565b5f815190506109fe816109da565b92915050565b5f60208284031215610a1957610a18610546565b5b5f610a26848285016109f0565b91505092915050565b610a38816109c7565b82525050565b5f602082019050610a515f830184610a2f565b92915050565b5f82825260208201905092915050565b5f610a7182610821565b610a7b8185610a57565b9350610a8b818560208601610709565b610a9481610556565b840191505092915050565b5f6020820190508181035f830152610ab78184610a67565b90509291505056fea26469706673582212207c3c908a0400da42609c223e90d1633b917fb47d0de0837301e461421ef7c46e64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b50610af58061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806319a5506a1461004e5780636b0c71b91461005857806390cdadcd14610074578063cdfd0a661461007e575b5f5ffd5b610056610088565b005b610072600480360381019061006d919061068a565b6101d9565b005b61007c610328565b005b6100866103ec565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa1580156100e5573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061010d91906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bff9472b836040518263ffffffff1660e01b815260040161015d919061089a565b602060405180830381865afa158015610178573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019c91906108ed565b90507f52c249d568f18754049ea99591153f1f0ad8c7ab03a3bcdcf8454bc274e54101816040516101cd9190610927565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610236573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061025e91906107da565b90507f4b5ba48e0a779444da21bd00cfee0a4b3439fc344fb75bbf2266a2a5036ebe1373107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c84846040518363ffffffff1660e01b81526004016102d0929190610992565b602060405180830381865afa1580156102eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f9190610a04565b60405161031c9190610a3e565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610385573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906103ad91906107da565b90507f28b3d377892d8db500fb9a9bbd4731605ca2a642c3c62a7e64d47b7d42024368815f01516040516103e19190610a9f565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610449573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061047191906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b019204f836040518263ffffffff1660e01b81526004016104c1919061089a565b602060405180830381865afa1580156104dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105009190610a04565b90507f23ce6861f26687742455d6955fcd53a5587ecf279e37422d0cd9636e2a2a9f7f816040516105319190610a3e565b60405180910390a15050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61059c82610556565b810181811067ffffffffffffffff821117156105bb576105ba610566565b5b80604052505050565b5f6105cd61053d565b90506105d98282610593565b919050565b5f67ffffffffffffffff8211156105f8576105f7610566565b5b61060182610556565b9050602081019050919050565b828183375f83830152505050565b5f61062e610629846105de565b6105c4565b90508281526020810184848401111561064a57610649610552565b5b61065584828561060e565b509392505050565b5f82601f8301126106715761067061054e565b5b813561068184826020860161061c565b91505092915050565b5f6020828403121561069f5761069e610546565b5b5f82013567ffffffffffffffff8111156106bc576106bb61054a565b5b6106c88482850161065d565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156106f3576106f2610566565b5b6106fc82610556565b9050602081019050919050565b8281835e5f83830152505050565b5f610729610724846106d9565b6105c4565b90508281526020810184848401111561074557610744610552565b5b610750848285610709565b509392505050565b5f82601f83011261076c5761076b61054e565b5b815161077c848260208601610717565b91505092915050565b5f6020828403121561079a576107996106d1565b5b6107a460206105c4565b90505f82015167ffffffffffffffff8111156107c3576107c26106d5565b5b6107cf84828501610758565b5f8301525092915050565b5f602082840312156107ef576107ee610546565b5b5f82015167ffffffffffffffff81111561080c5761080b61054a565b5b61081884828501610785565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61084582610821565b61084f818561082b565b935061085f818560208601610709565b61086881610556565b840191505092915050565b5f602083015f8301518482035f86015261088d828261083b565b9150508091505092915050565b5f6020820190508181035f8301526108b28184610873565b905092915050565b5f819050919050565b6108cc816108ba565b81146108d6575f5ffd5b50565b5f815190506108e7816108c3565b92915050565b5f6020828403121561090257610901610546565b5b5f61090f848285016108d9565b91505092915050565b610921816108ba565b82525050565b5f60208201905061093a5f830184610918565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f61096482610940565b61096e818561094a565b935061097e818560208601610709565b61098781610556565b840191505092915050565b5f6040820190508181035f8301526109aa818561095a565b905081810360208301526109be8184610873565b90509392505050565b5f67ffffffffffffffff82169050919050565b6109e3816109c7565b81146109ed575f5ffd5b50565b5f815190506109fe816109da565b92915050565b5f60208284031215610a1957610a18610546565b5b5f610a26848285016109f0565b91505092915050565b610a38816109c7565b82525050565b5f602082019050610a515f830184610a2f565b92915050565b5f82825260208201905092915050565b5f610a7182610821565b610a7b8185610a57565b9350610a8b818560208601610709565b610a9481610556565b840191505092915050565b5f6020820190508181035f830152610ab78184610a67565b90509291505056fea2646970667358221220a8cb870ddc345a27ed8c51f267af1b97e7362e6323f01ec0920c9ab0483f165564736f6c634300081e0033 \ No newline at end of file diff --git a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go index f67d95d176..b2b6548cdf 100644 --- a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go +++ b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go @@ -490,7 +490,7 @@ func TestRPCCallNonView(t *testing.T) { require.NoError(t, err) _, _, contractAddress := env.DeployEVMContract(creator, contractABI, evmtest.ISCTestContractBytecode) - callArguments, err := contractABI.Pack("triggerEvent", "hello") + callArguments, err := contractABI.Pack("emitEntropy") require.NoError(t, err) _, err = env.Client.CallContract(context.Background(), ethereum.CallMsg{ diff --git a/packages/isc/event.go b/packages/isc/event.go deleted file mode 100644 index e3926d248b..0000000000 --- a/packages/isc/event.go +++ /dev/null @@ -1,30 +0,0 @@ -package isc - -import ( - bcs "github.com/iotaledger/bcs-go" -) - -type Event struct { - ContractID Hname `json:"contractID"` - Topic string `json:"topic"` - Timestamp uint64 `json:"timestamp"` - Payload []byte `json:"payload"` -} - -func EventFromBytes(data []byte) (*Event, error) { - return bcs.Unmarshal[*Event](data) -} - -// ContractIDFromEventBytes is used by blocklog to filter out specific events per contract -// For performance reasons it is working directly with the event bytes. -func ContractIDFromEventBytes(eventBytes []byte) (Hname, error) { - if len(eventBytes) > 4 { - return HnameFromBytes(eventBytes[:4]) - } - - return HnameNil, nil -} - -func (e *Event) Bytes() []byte { - return bcs.MustMarshal(e) -} diff --git a/packages/isc/event_test.go b/packages/isc/event_test.go deleted file mode 100644 index 7ce32ac136..0000000000 --- a/packages/isc/event_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package isc_test - -import ( - "testing" - "time" - - bcs "github.com/iotaledger/bcs-go" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/util/rwutil" -) - -func TestEventSerialize(t *testing.T) { - event := &isc.Event{ - ContractID: isc.Hname(1223), - Topic: "this is a topic", - Timestamp: uint64(time.Now().UnixNano()), - Payload: []byte("message payload"), - } - bcs.TestCodec(t, event) - rwutil.BytesTest(t, event, func(data []byte) (*isc.Event, error) { - return bcs.Unmarshal[*isc.Event](data) - }) - - event = &isc.Event{ - ContractID: isc.Hname(1223), - Topic: "this is a topic", - Timestamp: uint64(123456789), - Payload: []byte("message payload"), - } - bcs.TestCodecAndHash(t, event, "ac816b79c1ca") -} diff --git a/packages/isc/sandbox_interface.go b/packages/isc/sandbox_interface.go index 5166f94f50..8e83a3848a 100644 --- a/packages/isc/sandbox_interface.go +++ b/packages/isc/sandbox_interface.go @@ -103,8 +103,6 @@ type Sandbox interface { // If the entry point is full entry point, allowance tokens are available to be moved from the caller's // accounts (if enough). If the entry point is view, 'allowance' has no effect Call(msg Message, allowance *Assets) CallArguments - // Event emits an event - Event(topic string, payload []byte) // RegisterError registers an error RegisterError(messageFormat string) *VMErrorTemplate // GetEntropy 32 random bytes based on the hash of the current state transaction diff --git a/packages/origin/origin.go b/packages/origin/origin.go index 48744c1d8a..d2262d4b6e 100644 --- a/packages/origin/origin.go +++ b/packages/origin/origin.go @@ -25,7 +25,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/vm/core/governance" "github.com/iotaledger/wasp/v2/packages/vm/core/root" "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/contracts/inccounter" - "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/contracts/manyevents" "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/contracts/testerrors" "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/sbtests/sbtestsc" "github.com/iotaledger/wasp/v2/packages/vm/gas" @@ -138,7 +137,6 @@ func InitChain( } if initParams.DeployTestContracts { contracts = append(contracts, inccounter.Contract) - contracts = append(contracts, manyevents.Contract) contracts = append(contracts, testerrors.Contract) contracts = append(contracts, sbtestsc.Contract) } diff --git a/packages/publisher/events.go b/packages/publisher/events.go index 5d0a015cfe..91f09152e5 100644 --- a/packages/publisher/events.go +++ b/packages/publisher/events.go @@ -17,10 +17,8 @@ import ( type ISCEventType string const ( - ISCEventKindNewBlock ISCEventType = "new_block" - ISCEventKindReceipt ISCEventType = "receipt" // issuer will be the request sender - ISCEventKindBlockEvents ISCEventType = "block_events" - ISCEventIssuerVM ISCEventType = "vm" + ISCEventKindNewBlock ISCEventType = "new_block" + ISCEventKindReceipt ISCEventType = "receipt" // issuer will be the request sender ) type ISCEvent[T any] struct { @@ -118,21 +116,4 @@ func PublishBlockEvents(blockApplied *blockApplied, events *Events, log log.Logg }) } } - - // Publish contract-issued events. - blockEvents := blocklogState.GetEventsByBlockIndex(blockIndex, blockInfo.TotalRequests) - var payload []*isc.Event - for _, eventData := range blockEvents { - event, err := isc.EventFromBytes(eventData) - if err != nil { - panic(err) - } - payload = append(payload, event) - } - triggerEvent(events, events.BlockEvents, &ISCEvent[[]*isc.Event]{ - Kind: ISCEventKindBlockEvents, - Issuer: &isc.NilAgentID{}, - Payload: payload, - ChainID: chainID, - }) } diff --git a/packages/publisher/publisher.go b/packages/publisher/publisher.go index da1d19faff..5bf71e9821 100644 --- a/packages/publisher/publisher.go +++ b/packages/publisher/publisher.go @@ -15,7 +15,6 @@ import ( ) type Events struct { - BlockEvents *event.Event1[*ISCEvent[[]*isc.Event]] NewBlock *event.Event1[*ISCEvent[*BlockWithTrieRoot]] RequestReceipt *event.Event1[*ISCEvent[*ReceiptWithError]] @@ -49,7 +48,6 @@ func New(log log.Logger) *Publisher { Events: &Events{ NewBlock: event.New1[*ISCEvent[*BlockWithTrieRoot]](), RequestReceipt: event.New1[*ISCEvent[*ReceiptWithError]](), - BlockEvents: event.New1[*ISCEvent[[]*isc.Event]](), Published: event.New1[*ISCEvent[any]](), }, } diff --git a/packages/solo/chain.go b/packages/solo/chain.go index 489642748a..2b72ef2e28 100644 --- a/packages/solo/chain.go +++ b/packages/solo/chain.go @@ -164,25 +164,6 @@ func (ch *Chain) GetInfo() (isc.ChainID, isc.AgentID, map[isc.Hname]*root.Contra }) } -// GetEventsForRequest calls the view in the 'blocklog' core smart contract to retrieve events for a given request. -func (ch *Chain) GetEventsForRequest(reqID isc.RequestID) ([]*isc.Event, error) { - viewResult, err := ch.CallView(blocklog.ViewGetEventsForRequest.Message(reqID)) - if err != nil { - return nil, err - } - return blocklog.ViewGetEventsForRequest.DecodeOutput(viewResult) -} - -// GetEventsForBlock calls the view in the 'blocklog' core smart contract to retrieve events for a given block. -func (ch *Chain) GetEventsForBlock(blockIndex uint32) ([]*isc.Event, error) { - viewResult, err := ch.CallView(blocklog.ViewGetEventsForBlock.Message(&blockIndex)) - if err != nil { - return nil, err - } - _, events := lo.Must2(blocklog.ViewGetEventsForBlock.DecodeOutput(viewResult)) - return events, nil -} - // GetLatestBlockInfo return BlockInfo for the latest block in the chain func (ch *Chain) GetLatestBlockInfo() *blocklog.BlockInfo { ret, err := ch.CallView(blocklog.ViewGetBlockInfo.Message(nil)) diff --git a/packages/vm/core/blocklog/blocklog_test.go b/packages/vm/core/blocklog/blocklog_test.go index ce4e6bdf46..a3efc8c0dd 100644 --- a/packages/vm/core/blocklog/blocklog_test.go +++ b/packages/vm/core/blocklog/blocklog_test.go @@ -2,7 +2,6 @@ package blocklog import ( "encoding/hex" - "fmt" "testing" "time" @@ -84,74 +83,6 @@ func TestPruneRequestIndexLookupTable(t *testing.T) { require.Equal(t, len(RequestLookupKey{})*requestsToCreate, digest1Size-digest0Size) } -func eventTopic(block uint32, requestIndex uint16, eventIndex uint16) string { - topic := fmt.Sprintf("fakeEvent:%d.%d.%d", block, requestIndex, eventIndex) - return topic -} - -func createEventLookupKeys(registryArray *collections.Array, eventMap *collections.Map, contractID isc.Hname, maxBlocks uint32, maxRequests uint16, maxEvents uint16) { - for blockIndex := uint32(0); blockIndex < maxBlocks; blockIndex++ { - for reqIndex := uint16(0); reqIndex < maxRequests; reqIndex++ { - for eventIndex := uint16(0); eventIndex < maxEvents; eventIndex++ { - key := NewEventLookupKey(blockIndex, reqIndex, eventIndex).Bytes() - topic := eventTopic(blockIndex, reqIndex, eventIndex) - - event := isc.Event{ - Topic: topic, - Payload: nil, - Timestamp: uint64(time.Now().UnixNano()), - ContractID: contractID, - } - - eventMap.SetAt(key, event.Bytes()) - } - } - - registryArray.Push([]byte{0}) - } -} - -func validateEvents(t *testing.T, eventsInBytes [][]byte, maxRequests uint16, maxEvents uint16, blockFrom uint32, blockTo uint32) { - require.Len(t, eventsInBytes, int(maxRequests*maxEvents)*int(blockTo-blockFrom+1)) - - eventTopics := make([]string, 0) - for _, eventBytes := range eventsInBytes { - event, err := isc.EventFromBytes(eventBytes) - require.NoError(t, err) - eventTopics = append(eventTopics, event.Topic) - } - - for blockIndex := blockFrom; blockIndex <= blockTo; blockIndex++ { - for reqIndex := uint16(0); reqIndex < maxRequests; reqIndex++ { - for eventIndex := uint16(0); eventIndex < maxEvents; eventIndex++ { - topic := eventTopic(blockIndex, reqIndex, eventIndex) - require.True(t, lo.Contains(eventTopics, topic)) - } - } - } -} - -func TestGetEventsInternal(t *testing.T) { - const maxBlocks = 20 - const maxRequests = 5 - const maxEventsPerRequest = 10 - - const blockFrom = 5 - const blockTo = blockFrom + 5 - - contractID := isc.Hn("testytest") - - d := dict.Dict{} - - registry := collections.NewArray(d, prefixBlockRegistry) - - eventMap := collections.NewMap(d, prefixRequestEvents) - createEventLookupKeys(registry, eventMap, contractID, maxBlocks, maxRequests, maxEventsPerRequest) - - events := NewStateWriter(d).getSmartContractEventsInternal(EventsForContractQuery{contractID, &BlockRange{blockFrom, blockTo}}) - validateEvents(t, events, maxRequests, maxEventsPerRequest, blockFrom, blockTo) -} - func TestBlockInfoMarshalling(t *testing.T) { t.Run("v0", func(t *testing.T) { const v0hex = "002a00000000b421501f01000000640000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000e80300000000000000000000000000009edb91da930100000000000000000000005c2605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204696f746104494f5441000004496f746104494f544104494f54410f687474703a2f2f696f74612e6f726709e0afdabfb6f592bd8a010a0008000200e807f403" diff --git a/packages/vm/core/blocklog/events.go b/packages/vm/core/blocklog/events.go deleted file mode 100644 index 50779c68e0..0000000000 --- a/packages/vm/core/blocklog/events.go +++ /dev/null @@ -1,36 +0,0 @@ -package blocklog - -import ( - bcs "github.com/iotaledger/bcs-go" - "github.com/iotaledger/wasp/v2/packages/kv/codec" -) - -const EventLookupKeyLength = 8 - -// EventLookupKey is a globally unique reference to the event: -// block index + index of the request within block + index of the event within the request -type EventLookupKey [EventLookupKeyLength]byte - -func NewEventLookupKey(blockIndex uint32, requestIndex, eventIndex uint16) *EventLookupKey { - var ret EventLookupKey - copy(ret[:4], codec.Encode[uint32](blockIndex)) - copy(ret[4:6], codec.Encode[uint16](requestIndex)) - copy(ret[6:8], codec.Encode[uint16](eventIndex)) - return &ret -} - -func (k *EventLookupKey) BlockIndex() uint32 { - return codec.MustDecode[uint32](k[:4]) -} - -func (k *EventLookupKey) RequestIndex() uint16 { - return codec.MustDecode[uint16](k[4:6]) -} - -func (k *EventLookupKey) RequestEventIndex() uint16 { - return codec.MustDecode[uint16](k[6:8]) -} - -func (k *EventLookupKey) Bytes() []byte { - return bcs.MustMarshal(k) -} diff --git a/packages/vm/core/blocklog/external.go b/packages/vm/core/blocklog/external.go index 2cf089924a..e4d9e314f3 100644 --- a/packages/vm/core/blocklog/external.go +++ b/packages/vm/core/blocklog/external.go @@ -66,24 +66,6 @@ func (s *StateReader) GetRequestRecordDataByRequestID(reqID isc.RequestID) (*Req return nil, nil } -func (s *StateReader) GetEventsByBlockIndex(blockIndex uint32, totalRequests uint16) [][]byte { - var ret [][]byte - events := collections.NewMapReadOnly(s.state, prefixRequestEvents) - for reqIdx := uint16(0); reqIdx < totalRequests; reqIdx++ { - eventIndex := uint16(0) - for { - key := NewEventLookupKey(blockIndex, reqIdx, eventIndex).Bytes() - eventData := events.GetAt(key) - if eventData == nil { - break - } - ret = append(ret, eventData) - eventIndex++ - } - } - return ret -} - func (s *StateReader) GetBlockInfo(blockIndex uint32) (*BlockInfo, bool) { data := s.getBlockInfoBytes(blockIndex) if data == nil { diff --git a/packages/vm/core/blocklog/impl.go b/packages/vm/core/blocklog/impl.go index f49f0750df..4c795e44e8 100644 --- a/packages/vm/core/blocklog/impl.go +++ b/packages/vm/core/blocklog/impl.go @@ -13,8 +13,6 @@ import ( var Processor = Contract.Processor(nil, ViewGetBlockInfo.WithHandler(viewGetBlockInfo), - ViewGetEventsForBlock.WithHandler(viewGetEventsForBlock), - ViewGetEventsForRequest.WithHandler(viewGetEventsForRequest), ViewGetRequestIDsForBlock.WithHandler(viewGetRequestIDsForBlock), ViewGetRequestReceipt.WithHandler(viewGetRequestReceipt), ViewGetRequestReceiptsForBlock.WithHandler(viewGetRequestReceiptsForBlock), @@ -106,31 +104,3 @@ func viewIsRequestProcessed(ctx isc.SandboxView, requestID isc.RequestID) bool { ctx.RequireNoError(err) return requestReceipt != nil } - -// viewGetEventsForRequest returns a list of events for a given request. -func viewGetEventsForRequest(ctx isc.SandboxView, requestID isc.RequestID) []*isc.Event { - events, err := NewStateReaderFromSandbox(ctx).getRequestEventsInternal(requestID) - ctx.RequireNoError(err) - return lo.Map(events, func(b []byte, _ int) *isc.Event { - return lo.Must(isc.EventFromBytes(b)) - }) -} - -// viewGetEventsForBlock returns a list of events for a given block. -func viewGetEventsForBlock(ctx isc.SandboxView, blockIndexOptional *uint32) (uint32, []*isc.Event) { - blockIndex := getBlockIndexParams(ctx, blockIndexOptional) - - if blockIndex == 0 { - // block 0 is an empty state - return 0, nil - } - - state := NewStateReaderFromSandbox(ctx) - blockInfo, ok := state.GetBlockInfo(blockIndex) - ctx.Requiref(ok, "block not found: %d", blockIndex) - events := state.GetEventsByBlockIndex(blockIndex, blockInfo.TotalRequests) - - return blockIndex, lo.Map(events, func(b []byte, _ int) *isc.Event { - return lo.Must(isc.EventFromBytes(b)) - }) -} diff --git a/packages/vm/core/blocklog/interface.go b/packages/vm/core/blocklog/interface.go index dfbe6b8417..7137078053 100644 --- a/packages/vm/core/blocklog/interface.go +++ b/packages/vm/core/blocklog/interface.go @@ -6,10 +6,9 @@ // - Block registry mapping block indices to block information // - Request lookup indices for efficiently finding requests // - Request receipts storing the results of request processing -// - Event storage for block and request-related events // -// This contract provides views for retrieving block information, request IDs, receipts, -// and events, making it possible to query the chain's historical activity. +// This contract provides views for retrieving block information, request IDs +// and receipts, making it possible to query the chain's historical activity. package blocklog import ( @@ -17,6 +16,7 @@ import ( "reflect" "fortio.org/safecast" + bcs "github.com/iotaledger/bcs-go" "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/isc/coreutil" @@ -48,15 +48,6 @@ var ( coreutil.Field[isc.RequestID]("requestID"), coreutil.Field[bool]("isProcessed"), ) - ViewGetEventsForRequest = coreutil.NewViewEP11(Contract, "getEventsForRequest", - coreutil.Field[isc.RequestID]("requestID"), - coreutil.Field[[]*isc.Event]("events"), - ) - ViewGetEventsForBlock = coreutil.NewViewEP12(Contract, "getEventsForBlock", - coreutil.FieldOptional[uint32]("blockIndex"), - coreutil.Field[uint32]("blockIndex"), - coreutil.Field[[]*isc.Event]("events"), - ) ) const ( @@ -74,11 +65,6 @@ const ( // RequestLookupKey = blockIndex | requestIndex // Covered in: TestGetEvents prefixRequestReceipts = "c" - - // Map of EventLookupKey => event (pruned) - // EventLookupKey = blockIndex | requestIndex | eventIndex - // Covered in: TestGetEvents - prefixRequestEvents = "d" ) type OutputRequestReceipt struct{} diff --git a/packages/vm/core/blocklog/internal.go b/packages/vm/core/blocklog/internal.go index c98e65842c..084ff94e4a 100644 --- a/packages/vm/core/blocklog/internal.go +++ b/packages/vm/core/blocklog/internal.go @@ -3,12 +3,12 @@ package blocklog import ( "errors" "fmt" + "slices" "github.com/samber/lo" "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/kv" - "github.com/iotaledger/wasp/v2/packages/kv/codec" "github.com/iotaledger/wasp/v2/packages/kv/collections" ) @@ -51,11 +51,9 @@ func (s *StateWriter) SaveRequestReceipt(rec *RequestReceipt, key RequestLookupK return fmt.Errorf("SaveRequestReceipt: %w", err2) } } - for i := range lst { - if lst[i] == key { - // already in list. Not normal - return errors.New("SaveRequestReceipt: inconsistency: duplicate lookup key") - } + if slices.Contains(lst, key) { + // already in list. Not normal + return errors.New("SaveRequestReceipt: inconsistency: duplicate lookup key") } lst = append(lst, key) lookupTable.SetAt(digest[:], lst.Bytes()) @@ -65,10 +63,6 @@ func (s *StateWriter) SaveRequestReceipt(rec *RequestReceipt, key RequestLookupK return nil } -func (s *StateWriter) SaveEvent(eventKey []byte, event *isc.Event) { - collections.NewMap(s.state, prefixRequestEvents).SetAt(eventKey, event.Bytes()) -} - func (s *StateReader) mustGetLookupKeyListFromReqID(reqID isc.RequestID) RequestLookupKeyList { lookupTable := collections.NewMapReadOnly(s.state, prefixRequestLookupIndex) digest := reqID.LookupDigest() @@ -111,79 +105,6 @@ func (s *StateReader) GetRequestReceipt(reqID isc.RequestID) (*RequestReceipt, e return record, nil } -func (s *StateReader) getRequestEventsInternal(reqID isc.RequestID) ([][]byte, error) { - lst := s.mustGetLookupKeyListFromReqID(reqID) - record, err := s.getCorrectRecordFromLookupKeyList(lst, reqID) - if err != nil { - return nil, err - } - if record == nil { - return nil, nil - } - eventIndex := uint16(0) - events := collections.NewMapReadOnly(s.state, prefixRequestEvents) - var ret [][]byte - for { - key := NewEventLookupKey(record.BlockIndex, record.RequestIndex, eventIndex).Bytes() - eventData := events.GetAt(key) - if eventData == nil { - return ret, nil - } - ret = append(ret, eventData) - eventIndex++ - } -} - -type BlockRange struct { - From uint32 - To uint32 -} - -type EventsForContractQuery struct { - Contract isc.Hname - BlockRange *BlockRange -} - -func (s *StateReader) getSmartContractEventsInternal(q EventsForContractQuery) [][]byte { - registry := collections.NewArrayReadOnly(s.state, prefixBlockRegistry) - latestBlockIndex := registry.Len() - 1 - adjustedToBlock := q.BlockRange.To - - if adjustedToBlock > latestBlockIndex { - adjustedToBlock = latestBlockIndex - } - - filteredEvents := make([][]byte, 0) - for blockNumber := q.BlockRange.From; blockNumber <= adjustedToBlock; blockNumber++ { - eventBlockKey := collections.MapElemKey(prefixRequestEvents, codec.Encode[uint32](blockNumber)) - s.state.Iterate(eventBlockKey, func(_ kv.Key, value []byte) bool { - parsedContractID, _ := isc.ContractIDFromEventBytes(value) - if parsedContractID == q.Contract { - filteredEvents = append(filteredEvents, value) - } - return true - }) - } - - return filteredEvents -} - -func (s *StateWriter) pruneEventsByBlockIndex(blockIndex uint32, totalRequests uint16) { - events := collections.NewMap(s.state, prefixRequestEvents) - for reqIdx := uint16(0); reqIdx < totalRequests; reqIdx++ { - eventIndex := uint16(0) - for { - key := NewEventLookupKey(blockIndex, reqIdx, eventIndex).Bytes() - eventData := events.GetAt(key) - if eventData == nil { - break - } - events.DelAt(key) - eventIndex++ - } - } -} - func (s *StateReader) getRequestLogRecordsForBlockBin(blockIndex uint32) ([][]byte, bool) { blockInfo, ok := s.GetBlockInfo(blockIndex) if !ok { @@ -294,5 +215,4 @@ func (s *StateWriter) pruneBlock(blockIndex uint32) { registry := collections.NewArray(s.state, prefixBlockRegistry) registry.PruneAt(blockIndex) s.pruneRequestLogRecordsByBlockIndex(blockIndex, blockInfo.TotalRequests) - s.pruneEventsByBlockIndex(blockIndex, blockInfo.TotalRequests) } diff --git a/packages/vm/core/coreprocessors/all.go b/packages/vm/core/coreprocessors/all.go index c92694fddd..de7aabb8db 100644 --- a/packages/vm/core/coreprocessors/all.go +++ b/packages/vm/core/coreprocessors/all.go @@ -18,7 +18,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/vm/core/root" "github.com/iotaledger/wasp/v2/packages/vm/core/root/rootimpl" "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/contracts/inccounter" - "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/contracts/manyevents" "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/contracts/testerrors" "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/sbtests/sbtestsc" "github.com/iotaledger/wasp/v2/packages/vm/processors" @@ -35,7 +34,6 @@ var All = map[isc.Hname]isc.VMProcessor{ var Test = map[isc.Hname]isc.VMProcessor{ inccounter.Contract.Hname(): inccounter.Processor, - manyevents.Contract.Hname(): manyevents.Processor, testerrors.Contract.Hname(): testerrors.Processor, sbtestsc.Contract.Hname(): sbtestsc.Processor, } diff --git a/packages/vm/core/evm/evmimpl/iscmagic_sandbox.go b/packages/vm/core/evm/evmimpl/iscmagic_sandbox.go index 5b66f821b6..2b90c5dd3c 100644 --- a/packages/vm/core/evm/evmimpl/iscmagic_sandbox.go +++ b/packages/vm/core/evm/evmimpl/iscmagic_sandbox.go @@ -23,11 +23,6 @@ func (h *magicContractHandler) GetEntropy() hashing.HashValue { return h.ctx.GetEntropy() } -// handler for ISCSandbox::triggerEvent -func (h *magicContractHandler) TriggerEvent(s string) { - h.ctx.Event("evm.event", []byte(s)) -} - // handler for ISCSandbox::getRequestID func (h *magicContractHandler) GetRequestID() isc.RequestID { return h.ctx.Request().ID() diff --git a/packages/vm/core/evm/evmtest/evm_test.go b/packages/vm/core/evm/evmtest/evm_test.go index 67cccd6078..75b4dc76a0 100644 --- a/packages/vm/core/evm/evmtest/evm_test.go +++ b/packages/vm/core/evm/evmtest/evm_test.go @@ -463,38 +463,6 @@ func TestISCCallView(t *testing.T) { require.NotEmpty(t, ret) } -func TestISCTriggerEvent(t *testing.T) { - env := InitEVM(t) - ethKey, _ := env.Chain.NewEthereumAccountWithL2Funds() - iscTest := env.deployISCTestContract(ethKey) - - // call ISCTest.triggerEvent(string) function of isc-test.sol which in turn: - // calls the ISC.iscTriggerEvent(string) function of isc.sol at 0x1074..., which: - // triggers an ISC event with the given string parameter - res, err := iscTest.triggerEvent("Hi from EVM!") - require.NoError(t, err) - require.Equal(t, types.ReceiptStatusSuccessful, res.EVMReceipt.Status) - events, err := env.Chain.GetEventsForBlock(env.Chain.GetLatestBlockInfo().BlockIndex) - require.NoError(t, err) - require.Len(t, events, 1) - require.Equal(t, string(events[0].Payload), "Hi from EVM!") -} - -func TestISCTriggerEventThenFail(t *testing.T) { - env := InitEVM(t) - ethKey, _ := env.Chain.NewEthereumAccountWithL2Funds() - iscTest := env.deployISCTestContract(ethKey) - - // test that triggerEvent() followed by revert() does not actually trigger the event - _, err := iscTest.triggerEventFail("Hi from EVM!", ethCallOptions{ - gasLimit: 100_000, // skip estimate gas (which will fail) - }) - require.Error(t, err) - events, err := env.Chain.GetEventsForBlock(env.Chain.GetLatestBlockInfo().BlockIndex) - require.NoError(t, err) - require.Len(t, events, 0) -} - func TestISCEntropy(t *testing.T) { env := InitEVM(t) ethKey, _ := env.Chain.NewEthereumAccountWithL2Funds() @@ -1310,15 +1278,8 @@ func TestStaticCall(t *testing.T) { ethKey, _ := env.Chain.NewEthereumAccountWithL2Funds() iscTest := env.deployISCTestContract(ethKey) - res, err := iscTest.CallFn([]ethCallOptions{{ - sender: ethKey, - }}, "testStaticCall") + _, err := iscTest.CallFn(nil, "testStaticCall") require.NoError(t, err) - require.Equal(t, types.ReceiptStatusSuccessful, res.EVMReceipt.Status) - events, err := env.Chain.GetEventsForBlock(env.Chain.GetLatestBlockInfo().BlockIndex) - require.NoError(t, err) - require.Len(t, events, 1) - require.Equal(t, string(events[0].Payload), "non-static") } func TestSelfDestruct(t *testing.T) { @@ -1530,8 +1491,7 @@ func TestTraceTransaction(t *testing.T) { } { iscTest := env.deployISCTestContract(ethKey) - _, err := iscTest.triggerEvent("Hi from EVM!") - require.NoError(t, err) + _ = iscTest.CallFnExpectEvent(nil, "EntropyEvent(bytes32)", nil, "emitEntropy") trace := traceLatestTx() require.EqualValues(t, ethAddr, trace.From) require.EqualValues(t, iscTest.address, *trace.To) diff --git a/packages/vm/core/evm/evmtest/utils_test.go b/packages/vm/core/evm/evmtest/utils_test.go index 0df92f02e3..108ecf7d40 100644 --- a/packages/vm/core/evm/evmtest/utils_test.go +++ b/packages/vm/core/evm/evmtest/utils_test.go @@ -21,14 +21,6 @@ func (i *iscTestContractInstance) getChainID() isc.ChainID { return v } -func (i *iscTestContractInstance) triggerEvent(s string) (res CallFnResult, err error) { - return i.CallFn(nil, "triggerEvent", s) -} - -func (i *iscTestContractInstance) triggerEventFail(s string, opts ...ethCallOptions) (res CallFnResult, err error) { - return i.CallFn(opts, "triggerEventFail", s) -} - func (s *storageContractInstance) retrieve() uint32 { var v uint32 require.NoError(s.chain.t, s.callView("retrieve", nil, &v)) diff --git a/packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime b/packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime index 926ec66444..37a6fc4343 100644 --- a/packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime +++ b/packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime @@ -1 +1 @@ -608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea2646970667358221220c017dabec63e09f8b1a688348f6fe6d81d6900c00dabdecb2ecfc38e9ae720d964736f6c634300081d0033 \ No newline at end of file +608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea2646970667358221220f8fc1a38e4a2ae75076536f3fcdf0d5cab4fb9d12e700f3171295d13904e286364736f6c634300081e0033 \ No newline at end of file diff --git a/packages/vm/core/evm/iscmagic/ISCSandbox.abi b/packages/vm/core/evm/iscmagic/ISCSandbox.abi index 39bd6dffc9..e75a3bfac6 100644 --- a/packages/vm/core/evm/iscmagic/ISCSandbox.abi +++ b/packages/vm/core/evm/iscmagic/ISCSandbox.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"string","name":"coinType","type":"string"}],"name":"ERC20CoinAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"ISCHname","name":"contractHname","type":"uint32"},{"internalType":"ISCHname","name":"entryPoint","type":"uint32"}],"internalType":"struct ISCTarget","name":"target","type":"tuple"},{"internalType":"bytes[]","name":"params","type":"bytes[]"}],"internalType":"struct ISCMessage","name":"message","type":"tuple"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"call","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"ISCHname","name":"contractHname","type":"uint32"},{"internalType":"ISCHname","name":"entryPoint","type":"uint32"}],"internalType":"struct ISCTarget","name":"target","type":"tuple"},{"internalType":"bytes[]","name":"params","type":"bytes[]"}],"internalType":"struct ISCMessage","name":"message","type":"tuple"}],"name":"callView","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"getAllowance","outputs":[{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAllowanceFrom","outputs":[{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"getAllowanceTo","outputs":[{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseTokenInfo","outputs":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"iconUrl","type":"string"},{"internalType":"uint64","name":"totalSupply","type":"uint64"}],"internalType":"struct IotaCoinInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainAdmin","outputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISCAgentID","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"ISCChainID","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"coinType","type":"string"}],"name":"getCoinInfo","outputs":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"iconUrl","type":"string"},{"internalType":"uint64","name":"totalSupply","type":"uint64"}],"internalType":"struct IotaCoinInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEntropy","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRequestID","outputs":[{"internalType":"ISCRequestID","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSenderAccount","outputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISCAgentID","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimestampUnixSeconds","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct LegacyL1Address","name":"targetAddress","type":"tuple"},{"components":[{"internalType":"uint64","name":"baseTokens","type":"uint64"},{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct LegacyNativeTokenID","name":"ID","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct LegacyNativeToken[]","name":"nativeTokens","type":"tuple[]"},{"internalType":"LegacyNFTID[]","name":"nfts","type":"bytes32[]"}],"internalType":"struct LegacyISCAssets","name":"assets","type":"tuple"},{"internalType":"bool","name":"adjustMinimumStorageDeposit","type":"bool"},{"components":[{"internalType":"ISCHname","name":"targetContract","type":"uint32"},{"internalType":"ISCHname","name":"entrypoint","type":"uint32"},{"components":[{"components":[{"internalType":"bytes","name":"key","type":"bytes"},{"internalType":"bytes","name":"value","type":"bytes"}],"internalType":"struct ISCDictItem[]","name":"items","type":"tuple[]"}],"internalType":"struct ISCDict","name":"params","type":"tuple"},{"components":[{"internalType":"uint64","name":"baseTokens","type":"uint64"},{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct LegacyNativeTokenID","name":"ID","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct LegacyNativeToken[]","name":"nativeTokens","type":"tuple[]"},{"internalType":"LegacyNFTID[]","name":"nfts","type":"bytes32[]"}],"internalType":"struct LegacyISCAssets","name":"allowance","type":"tuple"},{"internalType":"uint64","name":"gasBudget","type":"uint64"}],"internalType":"struct LegacyISCSendMetadata","name":"metadata","type":"tuple"},{"components":[{"internalType":"int64","name":"timelock","type":"int64"},{"components":[{"internalType":"int64","name":"time","type":"int64"},{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct LegacyL1Address","name":"returnAddress","type":"tuple"}],"internalType":"struct LegacyISCExpiration","name":"expiration","type":"tuple"}],"internalType":"struct LegacyISCSendOptions","name":"sendOptions","type":"tuple"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"takeAllowedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"IotaAddress","name":"targetAddress","type":"bytes32"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"assets","type":"tuple"}],"name":"transferToL1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"s","type":"string"}],"name":"triggerEvent","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"string","name":"coinType","type":"string"}],"name":"ERC20CoinAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"ISCHname","name":"contractHname","type":"uint32"},{"internalType":"ISCHname","name":"entryPoint","type":"uint32"}],"internalType":"struct ISCTarget","name":"target","type":"tuple"},{"internalType":"bytes[]","name":"params","type":"bytes[]"}],"internalType":"struct ISCMessage","name":"message","type":"tuple"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"call","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"ISCHname","name":"contractHname","type":"uint32"},{"internalType":"ISCHname","name":"entryPoint","type":"uint32"}],"internalType":"struct ISCTarget","name":"target","type":"tuple"},{"internalType":"bytes[]","name":"params","type":"bytes[]"}],"internalType":"struct ISCMessage","name":"message","type":"tuple"}],"name":"callView","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"getAllowance","outputs":[{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAllowanceFrom","outputs":[{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"getAllowanceTo","outputs":[{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseTokenInfo","outputs":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"iconUrl","type":"string"},{"internalType":"uint64","name":"totalSupply","type":"uint64"}],"internalType":"struct IotaCoinInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainAdmin","outputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISCAgentID","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"ISCChainID","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"coinType","type":"string"}],"name":"getCoinInfo","outputs":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"iconUrl","type":"string"},{"internalType":"uint64","name":"totalSupply","type":"uint64"}],"internalType":"struct IotaCoinInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEntropy","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRequestID","outputs":[{"internalType":"ISCRequestID","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSenderAccount","outputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISCAgentID","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimestampUnixSeconds","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct LegacyL1Address","name":"targetAddress","type":"tuple"},{"components":[{"internalType":"uint64","name":"baseTokens","type":"uint64"},{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct LegacyNativeTokenID","name":"ID","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct LegacyNativeToken[]","name":"nativeTokens","type":"tuple[]"},{"internalType":"LegacyNFTID[]","name":"nfts","type":"bytes32[]"}],"internalType":"struct LegacyISCAssets","name":"assets","type":"tuple"},{"internalType":"bool","name":"adjustMinimumStorageDeposit","type":"bool"},{"components":[{"internalType":"ISCHname","name":"targetContract","type":"uint32"},{"internalType":"ISCHname","name":"entrypoint","type":"uint32"},{"components":[{"components":[{"internalType":"bytes","name":"key","type":"bytes"},{"internalType":"bytes","name":"value","type":"bytes"}],"internalType":"struct ISCDictItem[]","name":"items","type":"tuple[]"}],"internalType":"struct ISCDict","name":"params","type":"tuple"},{"components":[{"internalType":"uint64","name":"baseTokens","type":"uint64"},{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct LegacyNativeTokenID","name":"ID","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct LegacyNativeToken[]","name":"nativeTokens","type":"tuple[]"},{"internalType":"LegacyNFTID[]","name":"nfts","type":"bytes32[]"}],"internalType":"struct LegacyISCAssets","name":"allowance","type":"tuple"},{"internalType":"uint64","name":"gasBudget","type":"uint64"}],"internalType":"struct LegacyISCSendMetadata","name":"metadata","type":"tuple"},{"components":[{"internalType":"int64","name":"timelock","type":"int64"},{"components":[{"internalType":"int64","name":"time","type":"int64"},{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct LegacyL1Address","name":"returnAddress","type":"tuple"}],"internalType":"struct LegacyISCExpiration","name":"expiration","type":"tuple"}],"internalType":"struct LegacyISCSendOptions","name":"sendOptions","type":"tuple"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"takeAllowedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"IotaAddress","name":"targetAddress","type":"bytes32"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"assets","type":"tuple"}],"name":"transferToL1","outputs":[],"stateMutability":"payable","type":"function"}] \ No newline at end of file diff --git a/packages/vm/core/evm/iscmagic/ISCSandbox.sol b/packages/vm/core/evm/iscmagic/ISCSandbox.sol index b794a5f588..86843f6df3 100644 --- a/packages/vm/core/evm/iscmagic/ISCSandbox.sol +++ b/packages/vm/core/evm/iscmagic/ISCSandbox.sol @@ -23,12 +23,6 @@ interface ISCSandbox { */ function getSenderAccount() external view returns (ISCAgentID memory); - /** - * @notice Triggers an event with the given string parameter. - * @param s The string parameter that will be used to trigger the event. - */ - function triggerEvent(string memory s) external; - /** * @notice Retrieves a 32-byte entropy value. * @return A 32-byte value representing the entropy. diff --git a/packages/vm/core/testcore/contracts/inccounter/events.go b/packages/vm/core/testcore/contracts/inccounter/events.go deleted file mode 100644 index 2486d9d4d0..0000000000 --- a/packages/vm/core/testcore/contracts/inccounter/events.go +++ /dev/null @@ -1,12 +0,0 @@ -package inccounter - -import ( - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/util/rwutil" -) - -func eventCounter(ctx isc.Sandbox, val int64) { - ww := rwutil.NewBytesWriter() - ww.WriteInt64(val) - ctx.Event("inccounter.counter", ww.Bytes()) -} diff --git a/packages/vm/core/testcore/contracts/inccounter/impl.go b/packages/vm/core/testcore/contracts/inccounter/impl.go index 8a615e02df..74ea47c719 100644 --- a/packages/vm/core/testcore/contracts/inccounter/impl.go +++ b/packages/vm/core/testcore/contracts/inccounter/impl.go @@ -42,7 +42,6 @@ func incCounter(ctx isc.Sandbox, incOpt *int64) { } ctx.Log().Infof("incCounter: allowance available: %s", tra) ctx.State().Set(VarCounter, codec.Encode(val+inc)) - eventCounter(ctx, val+inc) } func getCounter(ctx isc.SandboxView) int64 { diff --git a/packages/vm/core/testcore/contracts/manyevents/manyevents.go b/packages/vm/core/testcore/contracts/manyevents/manyevents.go deleted file mode 100644 index d5288da1ce..0000000000 --- a/packages/vm/core/testcore/contracts/manyevents/manyevents.go +++ /dev/null @@ -1,31 +0,0 @@ -// Package manyevents contains test helpers for contract events -package manyevents - -import ( - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/coreutil" - "github.com/iotaledger/wasp/v2/packages/kv/codec" -) - -var ( - ContractName = "ManyEventsContract" - Contract = coreutil.NewContract(ContractName) - - FuncManyEvents = Contract.Func("manyevents") - FuncBigEvent = Contract.Func("bigevent") - - Processor = Contract.Processor(nil, - FuncManyEvents.WithHandler(func(ctx isc.Sandbox) isc.CallArguments { - n := codec.MustDecode[uint32](ctx.Params().MustAt(0)) - for i := uint32(0); i < n; i++ { - ctx.Event("event.test", codec.Encode(n)) - } - return nil - }), - FuncBigEvent.WithHandler(func(ctx isc.Sandbox) isc.CallArguments { - n := codec.MustDecode[uint32](ctx.Params().MustAt(0)) - ctx.Event("event.big", make([]byte, n)) - return nil - }), - ) -) diff --git a/packages/vm/core/testcore/events_test.go b/packages/vm/core/testcore/events_test.go deleted file mode 100644 index 62616b1de7..0000000000 --- a/packages/vm/core/testcore/events_test.go +++ /dev/null @@ -1,183 +0,0 @@ -// excluded temporarily because of compilation errors - -package testcore - -import ( - "math" - "testing" - - "github.com/samber/lo" - "github.com/stretchr/testify/require" - - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/coreutil" - "github.com/iotaledger/wasp/v2/packages/kv/codec" - "github.com/iotaledger/wasp/v2/packages/solo" - "github.com/iotaledger/wasp/v2/packages/testutil/testdbhash" - "github.com/iotaledger/wasp/v2/packages/vm/core/blocklog" - "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/contracts/inccounter" - "github.com/iotaledger/wasp/v2/packages/vm/core/testcore/contracts/manyevents" -) - -func setupTest(t *testing.T) *solo.Chain { - env := solo.New(t, &solo.InitOptions{Debug: true, PrintStackTrace: true}) - ch := env.NewChain() - - // allow "infinite" gas per request - limits := ch.GetGasLimits() - limits.MaxGasPerBlock = math.MaxUint64 - limits.MaxGasPerRequest = math.MaxUint64 - ch.SetGasLimits(ch.ChainAdmin, limits) - - // set gas very cheap - fp := ch.GetGasFeePolicy() - fp.GasPerToken.A = 1000000 - ch.SetGasFeePolicy(ch.ChainAdmin, fp) - - ch.MustDepositBaseTokensToL2(10_000_000, nil) - return ch -} - -func checkNEvents(t *testing.T, ch *solo.Chain, reqid isc.RequestID, n int) { - events, err := ch.GetEventsForRequest(reqid) - require.NoError(t, err) - require.Len(t, events, n) -} - -func getBurnedGas(ch *solo.Chain, reqID isc.RequestID, err error) (uint64, error) { - if err != nil { - return 0, err - } - receipt, ok := ch.GetRequestReceipt(reqID) - require.True(ch.Env.T, ok) - return receipt.GasBurned, nil -} - -func TestManyEvents(t *testing.T) { - ch := setupTest(t) - - postEvents := func(n uint32) (uint64, error) { - // post a request that issues too many events (nEvents) - req, _, _, _, err := ch.PostRequestSyncTx( - solo.NewCallParamsEx(manyevents.Contract.Name, manyevents.FuncManyEvents.Name, isc.NewCallArguments( - codec.Encode(n), - )). - WithMaxAffordableGasBudget(), - nil, - ) - return getBurnedGas(ch, req.ID(), err) - } - - gas1000, err := postEvents(1000) - require.NoError(t, err) - checkNEvents(t, ch, ch.LastReceipt().DeserializedRequest().ID(), 1000) - - gas2000, err := postEvents(2000) - require.NoError(t, err) - checkNEvents(t, ch, ch.LastReceipt().DeserializedRequest().ID(), 2000) - - t.Log(gas1000, gas2000) - require.Greater(t, gas2000, gas1000) - - _, err = postEvents(math.MaxUint16) - require.NoError(t, err) - checkNEvents(t, ch, ch.LastReceipt().DeserializedRequest().ID(), math.MaxUint16) - - _, err = postEvents(math.MaxUint16 + 1) - require.ErrorContains(t, err, "too many events") - checkNEvents(t, ch, ch.LastReceipt().DeserializedRequest().ID(), 0) -} - -func TestEventTooLarge(t *testing.T) { - ch := setupTest(t) - - postEvent := func(n uint32) (uint64, error) { - // post a request that issues too many events (nEvents) - req, _, _, _, err := ch.PostRequestSyncTx( - solo.NewCallParamsEx(manyevents.Contract.Name, manyevents.FuncBigEvent.Name, isc.NewCallArguments( - codec.Encode(n), - )). - WithMaxAffordableGasBudget(), - nil, - ) - return getBurnedGas(ch, req.ID(), err) - } - - gas1k, err := postEvent(100_000) - require.NoError(t, err) - checkNEvents(t, ch, ch.LastReceipt().DeserializedRequest().ID(), 1) - - gas2k, err := postEvent(200_000) - require.NoError(t, err) - checkNEvents(t, ch, ch.LastReceipt().DeserializedRequest().ID(), 1) - - t.Log(gas1k, gas2k) - require.Greater(t, gas2k, gas1k) -} - -func incrementSCCounter(t *testing.T, ch *solo.Chain) isc.RequestID { - req, _, _, _, err := ch.PostRequestSyncTx( - solo.NewCallParams(inccounter.FuncIncCounter.Message(nil)).WithGasBudget(math.MaxUint64), - nil, - ) - require.NoError(t, err) - return req.ID() -} - -func getEventsForRequest(t *testing.T, chain *solo.Chain, reqID isc.RequestID) []*isc.Event { - res, err := chain.CallView(blocklog.ViewGetEventsForRequest.Message(reqID)) - require.NoError(t, err) - return lo.Must(blocklog.ViewGetEventsForRequest.DecodeOutput(res)) -} - -func getEventsForBlock(t *testing.T, chain *solo.Chain, blockNumber ...uint32) []*isc.Event { - res, err := chain.CallView(blocklog.ViewGetEventsForBlock.Message(coreutil.Optional(blockNumber...))) - require.NoError(t, err) - _, events := lo.Must2(blocklog.ViewGetEventsForBlock.DecodeOutput(res)) - return events -} - -func TestGetEvents(t *testing.T) { - env := solo.New(t) - ch := env.NewChain() - - err := ch.DepositBaseTokensToL2(10_000, nil) - require.NoError(t, err) - - bi := ch.LatestBlockIndex() - reqID1 := incrementSCCounter(t, ch) // #block bi+1 - reqID2 := incrementSCCounter(t, ch) // #block bi+2 - reqID3 := incrementSCCounter(t, ch) // #block bi+3 - - testdbhash.VerifyContractStateHash(env, blocklog.Contract, "", t.Name()) - - events := getEventsForRequest(t, ch, reqID1) - require.Len(t, events, 1) - checkEventCounter(t, events[0], 1) - - events = getEventsForRequest(t, ch, reqID2) - require.Len(t, events, 1) - checkEventCounter(t, events[0], 2) - - events = getEventsForRequest(t, ch, reqID3) - require.Len(t, events, 1) - checkEventCounter(t, events[0], 3) - - events = getEventsForBlock(t, ch, bi+1) - require.Len(t, events, 1) - checkEventCounter(t, events[0], 1) - - events = getEventsForBlock(t, ch, bi+2) - require.Len(t, events, 1) - checkEventCounter(t, events[0], 2) - - events = getEventsForBlock(t, ch, bi+3) - require.Len(t, events, 1) - checkEventCounter(t, events[0], 3) -} - -func checkEventCounter(t *testing.T, event *isc.Event, value uint64) { - counter, err := codec.Decode[uint64](event.Payload) - require.NoError(t, err) - require.EqualValues(t, counter, value) -} diff --git a/packages/vm/core/testcore/sbtests/sbtestsc/events.go b/packages/vm/core/testcore/sbtests/sbtestsc/events.go deleted file mode 100644 index 9bc6c13e11..0000000000 --- a/packages/vm/core/testcore/sbtests/sbtestsc/events.go +++ /dev/null @@ -1,14 +0,0 @@ -package sbtestsc - -import ( - bcs "github.com/iotaledger/bcs-go" - "github.com/iotaledger/wasp/v2/packages/isc" -) - -func eventCounter(ctx isc.Sandbox, value uint64) { - ctx.Event("testcore.counter", bcs.MustMarshal(&value)) -} - -func eventTest(ctx isc.Sandbox) { - ctx.Event("testcore.test", nil) -} diff --git a/packages/vm/core/testcore/sbtests/sbtestsc/impl.go b/packages/vm/core/testcore/sbtests/sbtestsc/impl.go index 218fa3538b..ffedc8a0c3 100644 --- a/packages/vm/core/testcore/sbtests/sbtestsc/impl.go +++ b/packages/vm/core/testcore/sbtests/sbtestsc/impl.go @@ -1,22 +1,10 @@ package sbtestsc import ( - "github.com/samber/lo" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/vm/core/governance" ) -// testEventLogGenericData is called several times in log_test.go -func testEventLogGenericData(ctx isc.Sandbox, inc *uint64) { - incV := lo.FromPtrOr(inc, 1) - eventCounter(ctx, incV) -} - -func testEventLogEventData(ctx isc.Sandbox) { - eventTest(ctx) -} - func testChainAdminView(ctx isc.SandboxView) isc.AgentID { return ctx.ChainAdmin() } @@ -29,12 +17,6 @@ func testSandboxCall(ctx isc.SandboxView) isc.CallArguments { return ctx.CallView(governance.ViewGetChainInfo.Message()) } -func testEventLogDeploy(ctx isc.Sandbox) { - // Deploy the same contract with another name - panic("TODO: contract deployment") - // ctx.DeployContract(Contract.ProgramHash, VarContractNameDeployed, nil) -} - func testPanicFullEP(ctx isc.Sandbox) { ctx.Log().Panicf(MsgFullPanic) } diff --git a/packages/vm/core/testcore/sbtests/sbtestsc/interface.go b/packages/vm/core/testcore/sbtests/sbtestsc/interface.go index 1a7f34b78f..73307c9403 100644 --- a/packages/vm/core/testcore/sbtests/sbtestsc/interface.go +++ b/packages/vm/core/testcore/sbtests/sbtestsc/interface.go @@ -12,9 +12,6 @@ var Processor = Contract.Processor(nil, FuncChainAdminView.WithHandler(testChainAdminView), FuncChainAdminFull.WithHandler(testChainAdminFull), - FuncEventLogGenericData.WithHandler(testEventLogGenericData), - FuncEventLogEventData.WithHandler(testEventLogEventData), - FuncEventLogDeploy.WithHandler(testEventLogDeploy), FuncSandboxCall.WithHandler(testSandboxCall), FuncPanicFullEP.WithHandler(testPanicFullEP), @@ -53,13 +50,6 @@ var Processor = Contract.Processor(nil, ) var ( - // function eventlog test - FuncEventLogGenericData = coreutil.NewEP1(Contract, "testEventLogGenericData", - coreutil.FieldOptional[uint64](""), - ) - FuncEventLogEventData = coreutil.NewEP0(Contract, "testEventLogEventData") - FuncEventLogDeploy = coreutil.NewEP0(Contract, "testEventLogDeploy") - // Function sandbox test FuncChainAdminView = coreutil.NewViewEP01(Contract, "testChainAdminView", coreutil.Field[isc.AgentID](""), diff --git a/packages/vm/errors.go b/packages/vm/errors.go index 97e3821c61..71654c53e4 100644 --- a/packages/vm/errors.go +++ b/packages/vm/errors.go @@ -9,7 +9,6 @@ var ( ErrInvalidAllowance = coreerrors.Register("invalid allowance").Create() ErrContractNotFound = coreerrors.Register("contract with hname %08x not found") ErrTargetEntryPointNotFound = coreerrors.Register("entry point not found").Create() - ErrTooManyEvents = coreerrors.Register("too many events issued for contract").Create() ErrPrivilegedCallFailed = coreerrors.Register("privileged call failed").Create() ErrGasBudgetExceeded = coreerrors.Register("gas budget exceeded").Create() ErrSenderUnknown = coreerrors.Register("sender unknown").Create() diff --git a/packages/vm/gas/table.go b/packages/vm/gas/table.go index 0be548586d..a434595b4b 100644 --- a/packages/vm/gas/table.go +++ b/packages/vm/gas/table.go @@ -12,7 +12,7 @@ const ( BurnCodeGetBalance BurnCodeGetCoinInfo BurnCodeCallContract - BurnCodeEmitEvent1P + BurnCodeEmitEvent1PDeprecated BurnCodeTransferAllowance BurnCodeSendL1Request @@ -40,7 +40,7 @@ var burnTable = BurnTable{ BurnCodeGetBalance: {"balance", constValue(20)}, BurnCodeGetCoinInfo: {"coin info", constValue(10)}, BurnCodeCallContract: {"call", constValue(100)}, - BurnCodeEmitEvent1P: {"event", linear(1)}, // 1 gas per byte + BurnCodeEmitEvent1PDeprecated: {"event", linear(1)}, // 1 gas per byte BurnCodeGetAllowance: {"allowance", constValue(10)}, BurnCodeTransferAllowance: {"transfer", constValue(10)}, BurnCodeSendL1Request: {"send", linear(Coef1Send)}, diff --git a/packages/vm/vmimpl/internal.go b/packages/vm/vmimpl/internal.go index dac4499133..04cb888f12 100644 --- a/packages/vm/vmimpl/internal.go +++ b/packages/vm/vmimpl/internal.go @@ -1,7 +1,6 @@ package vmimpl import ( - "math" "math/big" "github.com/samber/lo" @@ -10,7 +9,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/kv" "github.com/iotaledger/wasp/v2/packages/parameters" - "github.com/iotaledger/wasp/v2/packages/vm" "github.com/iotaledger/wasp/v2/packages/vm/core/accounts" "github.com/iotaledger/wasp/v2/packages/vm/core/blocklog" "github.com/iotaledger/wasp/v2/packages/vm/core/corecontracts" @@ -117,10 +115,6 @@ func (reqctx *requestContext) requestLookupKey() blocklog.RequestLookupKey { return blocklog.NewRequestLookupKey(reqctx.vm.stateDraft.BlockIndex(), reqctx.requestIndex) } -func (reqctx *requestContext) eventLookupKey() *blocklog.EventLookupKey { - return blocklog.NewEventLookupKey(reqctx.vm.stateDraft.BlockIndex(), reqctx.requestIndex, reqctx.requestEventIndex) -} - func (reqctx *requestContext) writeReceiptToBlockLog(vmError *isc.VMError) *blocklog.RequestReceipt { receipt := &blocklog.RequestReceipt{ Request: reqctx.req, @@ -129,7 +123,7 @@ func (reqctx *requestContext) writeReceiptToBlockLog(vmError *isc.VMError) *bloc GasFeeCharged: reqctx.gas.feeCharged, GasBurnLog: reqctx.gas.burnLog, BlockIndex: reqctx.vm.stateDraft.BlockIndex(), - RequestIndex: reqctx.requestEventIndex, + RequestIndex: reqctx.requestIndex, } if vmError != nil { @@ -158,25 +152,6 @@ func (reqctx *requestContext) writeReceiptToBlockLog(vmError *isc.VMError) *bloc return receipt } -func (reqctx *requestContext) mustSaveEvent(hContract isc.Hname, topic string, payload []byte) { - if reqctx.requestEventIndex == math.MaxUint16 { - panic(vm.ErrTooManyEvents) - } - reqctx.Debugf("MustSaveEvent/%s: topic: '%s'", hContract.String(), topic) - - event := &isc.Event{ - ContractID: hContract, - Topic: topic, - Payload: payload, - Timestamp: uint64(reqctx.Timestamp().UnixNano()), //nolint: gosec //todo: verify fixing this wont break everything - } - eventKey := reqctx.eventLookupKey().Bytes() - reqctx.callCore(blocklog.Contract, func(s kv.KVStore) { - blocklog.NewStateWriter(s).SaveEvent(eventKey, event) - }) - reqctx.requestEventIndex++ -} - // updateOffLedgerRequestNonce updates stored nonce for ISC off ledger requests func (reqctx *requestContext) updateOffLedgerRequestNonce() { reqctx.callAccounts(func(s *accounts.StateWriter) { diff --git a/packages/vm/vmimpl/sandbox.go b/packages/vm/vmimpl/sandbox.go index b9b1386b23..6fd7a1c1b5 100644 --- a/packages/vm/vmimpl/sandbox.go +++ b/packages/vm/vmimpl/sandbox.go @@ -6,8 +6,6 @@ package vmimpl import ( "math/big" - "fortio.org/safecast" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/eth/tracers" "github.com/iotaledger/wasp/v2/packages/hashing" @@ -36,21 +34,6 @@ func (s *contractSandbox) Call(msg isc.Message, allowance *isc.Assets) isc.CallA return s.Ctx.Call(msg, allowance) } -func (s *contractSandbox) Event(topic string, payload []byte) { - totalLen, err := safecast.Convert[uint64](len(topic) + len(payload)) - if err != nil { - panic(err) - } - s.Ctx.GasBurn(gas.BurnCodeEmitEvent1P, totalLen) - hContract := s.reqctx.CurrentContractHname() - hex := hexutil.Encode(payload) - if len(hex) > 80 { - hex = hex[:40] + "..." - } - s.Log().Infof("event::%s -> %s(%s)", hContract.String(), topic, hex) - s.reqctx.mustSaveEvent(hContract, topic, payload) -} - func (s *contractSandbox) GetEntropy() hashing.HashValue { s.Ctx.GasBurn(gas.BurnCodeGetContext) return s.reqctx.entropy diff --git a/packages/vm/vmimpl/vmcontext.go b/packages/vm/vmimpl/vmcontext.go index ced63cf249..1fe5e5efa2 100644 --- a/packages/vm/vmimpl/vmcontext.go +++ b/packages/vm/vmimpl/vmcontext.go @@ -45,15 +45,14 @@ type blockGas struct { type requestContext struct { vm *vmContext - uncommittedState *buffered.BufferedKVStore - callStack []*callContext - req isc.Request - numPostedOutputs int - requestIndex uint16 - requestEventIndex uint16 - entropy hashing.HashValue - onWriteReceipt []coreCallbackFunc - gas requestGas + uncommittedState *buffered.BufferedKVStore + callStack []*callContext + req isc.Request + numPostedOutputs int + requestIndex uint16 + entropy hashing.HashValue + onWriteReceipt []coreCallbackFunc + gas requestGas // snapshots taken via ctx.TakeStateSnapshot() snapshots []stateSnapshot } diff --git a/packages/webapi/controllers/corecontracts/blocklog.go b/packages/webapi/controllers/corecontracts/blocklog.go index 9bab9609b6..d8596b6ce8 100644 --- a/packages/webapi/controllers/corecontracts/blocklog.go +++ b/packages/webapi/controllers/corecontracts/blocklog.go @@ -209,67 +209,3 @@ func (c *Controller) getIsRequestProcessed(e echo.Context) error { return e.JSON(http.StatusOK, requestProcessedResponse) } - -func eventsResponse(e echo.Context, events []*isc.Event) error { - eventsJSON := make([]*models.EventJSON, len(events)) - for i, ev := range events { - eventsJSON[i] = models.ToJSONStruct(ev) - } - return e.JSON(http.StatusOK, models.EventsResponse{ - Events: eventsJSON, - }) -} - -func (c *Controller) getBlockEvents(e echo.Context) error { - ch, err := c.chainService.GetChain() - if err != nil { - return err - } - - var events []*isc.Event - blockIndex := e.Param(params.ParamBlockIndex) - - if blockIndex != "" { - blockIndexNum, err := params.DecodeUInt(e, params.ParamBlockIndex) - if err != nil { - return err - } - - blockIndexUint32, convertErr := safecast.Convert[uint32](blockIndexNum) - if convertErr != nil { - return echo.NewHTTPError(http.StatusBadRequest, "Block index out of range for uint32") - } - _, events, err = corecontracts.GetEventsForBlock(ch, blockIndexUint32, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) - if err != nil { - return c.handleViewCallError(err) - } - } else { - _, blockInfo, err := corecontracts.GetLatestBlockInfo(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) - if err != nil { - return c.handleViewCallError(err) - } - - _, events, err = corecontracts.GetEventsForBlock(ch, blockInfo.BlockIndex, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) - if err != nil { - return c.handleViewCallError(err) - } - } - return eventsResponse(e, events) -} - -func (c *Controller) getRequestEvents(e echo.Context) error { - ch, err := c.chainService.GetChain() - if err != nil { - return err - } - requestID, err := params.DecodeRequestID(e) - if err != nil { - return err - } - - events, err := corecontracts.GetEventsForRequest(ch, requestID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) - if err != nil { - return c.handleViewCallError(err) - } - return eventsResponse(e, events) -} diff --git a/packages/webapi/controllers/corecontracts/controller.go b/packages/webapi/controllers/corecontracts/controller.go index bbd9e8f66e..79369914e1 100644 --- a/packages/webapi/controllers/corecontracts/controller.go +++ b/packages/webapi/controllers/corecontracts/controller.go @@ -187,29 +187,6 @@ func (c *Controller) addBlockLogContractRoutes(api echoswagger.ApiGroup, mocker AddResponse(http.StatusOK, "The processing result", mocker.Get(models.RequestProcessedResponse{}), nil). SetOperationId("blocklogGetRequestIsProcessed"). SetSummary("Get the request processing status") - - api.GET("chain/core/blocklog/events/block/:blockIndex", c.getBlockEvents). - AddParamPathNested(blocks{}). - AddParamQuery("", params.ParamBlockIndexOrTrieRoot, params.DescriptionBlockIndexOrTrieRoot, false). - AddResponse(http.StatusUnauthorized, "Unauthorized (Wrong permissions, missing token)", authentication.ValidationError{}, nil). - AddResponse(http.StatusOK, "The events", mocker.Get(models.EventsResponse{}), nil). - SetOperationId("blocklogGetEventsOfBlock"). - SetSummary("Get events of a block") - - api.GET("chain/core/blocklog/events/block/latest", c.getBlockEvents). - AddParamQuery("", params.ParamBlockIndexOrTrieRoot, params.DescriptionBlockIndexOrTrieRoot, false). - AddResponse(http.StatusUnauthorized, "Unauthorized (Wrong permissions, missing token)", authentication.ValidationError{}, nil). - AddResponse(http.StatusOK, "The receipts", mocker.Get(models.EventsResponse{}), nil). - SetOperationId("blocklogGetEventsOfLatestBlock"). - SetSummary("Get events of the latest block") - - api.GET("chain/core/blocklog/events/request/:requestID", c.getRequestEvents). - AddParamPath("", params.ParamRequestID, params.DescriptionRequestID). - AddParamQuery("", params.ParamBlockIndexOrTrieRoot, params.DescriptionBlockIndexOrTrieRoot, false). - AddResponse(http.StatusUnauthorized, "Unauthorized (Wrong permissions, missing token)", authentication.ValidationError{}, nil). - AddResponse(http.StatusOK, "The events", mocker.Get(models.EventsResponse{}), nil). - SetOperationId("blocklogGetEventsOfRequest"). - SetSummary("Get events of a request") } func (c *Controller) RegisterPublic(publicAPI echoswagger.ApiGroup, mocker interfaces.Mocker) { diff --git a/packages/webapi/corecontracts/blocklog.go b/packages/webapi/corecontracts/blocklog.go index 814ef3e9f3..d37bb4fec9 100644 --- a/packages/webapi/corecontracts/blocklog.go +++ b/packages/webapi/corecontracts/blocklog.go @@ -84,19 +84,3 @@ func IsRequestProcessed(ch chain.Chain, requestID isc.RequestID, blockIndexOrTri } return blocklog.ViewIsRequestProcessed.DecodeOutput(ret) } - -func GetEventsForRequest(ch chain.Chain, requestID isc.RequestID, blockIndexOrTrieRoot string) ([]*isc.Event, error) { - ret, err := common.CallView(ch, blocklog.ViewGetEventsForRequest.Message(requestID), blockIndexOrTrieRoot) - if err != nil { - return nil, err - } - return blocklog.ViewGetEventsForRequest.DecodeOutput(ret) -} - -func GetEventsForBlock(ch chain.Chain, blockIndex uint32, blockIndexOrTrieRoot string) (uint32, []*isc.Event, error) { - ret, err := common.CallView(ch, blocklog.ViewGetEventsForBlock.Message(&blockIndex), blockIndexOrTrieRoot) - if err != nil { - return 0, nil, err - } - return blocklog.ViewGetEventsForBlock.DecodeOutput(ret) -} diff --git a/packages/webapi/models/core_blocklog.go b/packages/webapi/models/core_blocklog.go index 60609f551e..306dbc0cde 100644 --- a/packages/webapi/models/core_blocklog.go +++ b/packages/webapi/models/core_blocklog.go @@ -44,7 +44,3 @@ type RequestProcessedResponse struct { RequestID string `json:"requestId" swagger:"required"` IsProcessed bool `json:"isProcessed" swagger:"required"` } - -type EventsResponse struct { - Events []*EventJSON `json:"events" swagger:"required"` -} diff --git a/packages/webapi/models/event.go b/packages/webapi/models/event.go deleted file mode 100644 index 2f9f46edac..0000000000 --- a/packages/webapi/models/event.go +++ /dev/null @@ -1,22 +0,0 @@ -package models - -import ( - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/iotaledger/wasp/v2/packages/isc" -) - -type EventJSON struct { - ContractID isc.Hname `json:"contractID" swagger:"desc(ID of the Contract that issued the event),required,min(1)"` - Topic string `json:"topic" swagger:"desc(topic),required"` - Timestamp uint64 `json:"timestamp" swagger:"desc(timestamp),required"` - Payload string `json:"payload" swagger:"desc(payload),required"` -} - -func ToJSONStruct(e *isc.Event) *EventJSON { - return &EventJSON{ - ContractID: e.ContractID, - Topic: e.Topic, - Timestamp: e.Timestamp, - Payload: hexutil.Encode(e.Payload), - } -} diff --git a/packages/webapi/services/committee.go b/packages/webapi/services/committee.go index e05ecce831..86245e74f6 100644 --- a/packages/webapi/services/committee.go +++ b/packages/webapi/services/committee.go @@ -52,9 +52,6 @@ func (c *CommitteeService) GetCommitteeInfo(chainID isc.ChainID) (*dto.ChainNode peeringStatus := peeringStatusIncludeSelf(c.networkProvider) candidateNodes := c.getCandidateNodesAccessNodeInfo(chain.GetCandidateNodes()) - if err != nil { - return nil, err - } chainNodes := chain.GetChainNodes() inChainNodes := make(map[cryptolib.PublicKeyKey]bool) @@ -70,9 +67,6 @@ func (c *CommitteeService) GetCommitteeInfo(chainID isc.ChainID) (*dto.ChainNode // Candidate nodes have supplied applications, but are not included // in the committee and to the set of the access nodes. filteredCandidateNodes := c.getCandidateNodes(peeringStatus, candidateNodes, inChainNodes) - if err != nil { - return nil, err - } chainNodeInfo := dto.ChainNodeInfo{ Address: committeeInfo.Address, diff --git a/packages/webapi/websocket/eventhandler.go b/packages/webapi/websocket/eventhandler.go index 38574bd4d4..3765e576a8 100644 --- a/packages/webapi/websocket/eventhandler.go +++ b/packages/webapi/websocket/eventhandler.go @@ -4,7 +4,6 @@ import ( "context" "github.com/iotaledger/hive.go/runtime/event" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/publisher" "github.com/iotaledger/wasp/v2/packages/webapi/models" ) @@ -48,18 +47,18 @@ func NewEventHandler(pub *publisher.Publisher, publishEvent *event.Event1[*ISCEv } } -func batch(callbacks ...func()) func() { +func unhookBatch(unhookFns ...func()) func() { return func() { - for _, callback := range callbacks { - if callback != nil { - callback() + for _, f := range unhookFns { + if f != nil { + f() } } } } func (p *EventHandler) AttachToEvents() context.CancelFunc { - return batch( + return unhookBatch( p.publisher.Events.NewBlock.Hook(func(block *publisher.ISCEvent[*publisher.BlockWithTrieRoot]) { if !p.subscriptionValidator.shouldProcessEvent(block.ChainID.String(), block.Kind) { return @@ -79,14 +78,5 @@ func (p *EventHandler) AttachToEvents() context.CancelFunc { iscEvent := MapISCEvent(block, receipt) p.publishEvent.Trigger(iscEvent) }).Unhook, - - p.publisher.Events.BlockEvents.Hook(func(block *publisher.ISCEvent[[]*isc.Event]) { - if !p.subscriptionValidator.shouldProcessEvent(block.ChainID.String(), block.Kind) { - return - } - - iscEvent := MapISCEvent(block, block.Payload) - p.publishEvent.Trigger(iscEvent) - }).Unhook, ) } diff --git a/packages/webapi/websocket/websocket_test.go b/packages/webapi/websocket/websocket_test.go index b276f292a6..00dc539c02 100644 --- a/packages/webapi/websocket/websocket_test.go +++ b/packages/webapi/websocket/websocket_test.go @@ -28,8 +28,6 @@ func InitWebsocket(ctx context.Context, t *testing.T, eventsToSubscribe []publis ws := NewWebsocketService(log.NewChildLogger("Service"), websocketHub, []publisher.ISCEventType{ publisher.ISCEventKindNewBlock, publisher.ISCEventKindReceipt, - publisher.ISCEventKindBlockEvents, - publisher.ISCEventIssuerVM, }, env.Publisher()) ws.subscriptionManager.Connect(websockethub.ClientID(0)) diff --git a/tools/client-gen/serialization_client_test.go b/tools/client-gen/serialization_client_test.go index ec27eeebe4..ea697671bd 100644 --- a/tools/client-gen/serialization_client_test.go +++ b/tools/client-gen/serialization_client_test.go @@ -100,7 +100,7 @@ func TestB(t *testing.T) { t.Skip() gen := NewTypeGenerator() - gen.GenerateFunction(constructCoreContractFunction(&blocklog.ViewGetEventsForRequest)) + gen.GenerateFunction(constructCoreContractFunction(&blocklog.ViewGetBlockInfo)) t.Log(gen.GetOutput()) } @@ -126,8 +126,6 @@ func TestDumpJson(t *testing.T) { constructCoreContractFunction(&blocklog.ViewGetRequestReceipt), constructCoreContractFunction(&blocklog.ViewGetRequestReceiptsForBlock), constructCoreContractFunction(&blocklog.ViewIsRequestProcessed), - constructCoreContractFunction(&blocklog.ViewGetEventsForRequest), - constructCoreContractFunction(&blocklog.ViewGetEventsForBlock), constructCoreContractFunction(&errors.FuncRegisterError), constructCoreContractFunction(&errors.ViewGetErrorMessageFormat), constructCoreContractFunction(&evm.FuncSendTransaction), @@ -192,8 +190,6 @@ func TestA(t *testing.T) { constructCoreContractFunction(&blocklog.ViewGetRequestReceipt), constructCoreContractFunction(&blocklog.ViewGetRequestReceiptsForBlock), constructCoreContractFunction(&blocklog.ViewIsRequestProcessed), - constructCoreContractFunction(&blocklog.ViewGetEventsForRequest), - constructCoreContractFunction(&blocklog.ViewGetEventsForBlock), constructCoreContractFunction(&errors.FuncRegisterError), constructCoreContractFunction(&errors.ViewGetErrorMessageFormat), constructCoreContractFunction(&evm.FuncSendTransaction),