Skip to content

Instantly share code, notes, and snippets.

@cryptoleek-eth
Last active January 13, 2023 06:26
Show Gist options
  • Save cryptoleek-eth/76ab418d42730e6c516ed2f38cad9959 to your computer and use it in GitHub Desktop.
Save cryptoleek-eth/76ab418d42730e6c516ed2f38cad9959 to your computer and use it in GitHub Desktop.
l1-l2-integration-messaging-example-l1code
{
"overrides": [
{
"files": "*.sol",
"options": {
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": false
}
},
{
"files": "*.yml",
"options": {}
},
{
"files": "*.yaml",
"options": {}
},
{
"files": "*.toml",
"options": {}
},
{
"files": "*.json",
"options": {}
},
{
"files": "*.js",
"options": {}
},
{
"files": "*.ts",
"options": {}
}
]
}
REMIX DEFAULT WORKSPACE
Remix default workspace is present when:
i. Remix loads for the very first time
ii. A new workspace is created with 'Default' template
iii. There are no files existing in the File Explorer
This workspace contains 3 directories:
1. 'contracts': Holds three contracts with increasing levels of complexity.
2. 'scripts': Contains four typescript files to deploy a contract. It is explained below.
3. 'tests': Contains one Solidity test file for 'Ballot' contract & one JS test file for 'Storage' contract.
SCRIPTS
The 'scripts' folder has four typescript files which help to deploy the 'Storage' contract using 'web3.js' and 'ethers.js' libraries.
For the deployment of any other contract, just update the contract's name from 'Storage' to the desired contract and provide constructor arguments accordingly
in the file `deploy_with_ethers.ts` or `deploy_with_web3.ts`
In the 'tests' folder there is a script containing Mocha-Chai unit tests for 'Storage' contract.
To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled.
Output from script will appear in remix terminal.
Please note, require/import is supported in a limited manner for Remix supported modules.
For now, modules supported by Remix are ethers, web3, swarmgw, chai, multihashes, remix and hardhat only for hardhat.ethers object/plugin.
For unsupported modules, an error like this will be thrown: '<module_name> module require is not supported by Remix IDE' will be shown.
{
"id": "095f9438496d9f8c387e4fc4aecb4032",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.6.12",
"solcLongVersion": "0.6.12+commit.27d51765",
"input": {
"language": "Solidity",
"sources": {
"contracts/IStarknetMessaging.sol": {
"content": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"./IStarknetMessagingEvents.sol\";\n\ninterface IStarknetMessaging is IStarknetMessagingEvents {\n /**\n Sends a message to an L2 contract.\n This function is payable, the payed amount is the message fee.\n\n Returns the hash of the message and the nonce of the message.\n */\n function sendMessageToL2(\n uint256 toAddress,\n uint256 selector,\n uint256[] calldata payload\n ) external payable returns (bytes32, uint256);\n\n /**\n Consumes a message that was sent from an L2 contract.\n\n Returns the hash of the message.\n */\n function consumeMessageFromL2(uint256 fromAddress, uint256[] calldata payload)\n external\n returns (bytes32);\n\n /**\n Starts the cancellation of an L1 to L2 message.\n A message can be canceled messageCancellationDelay() seconds after this function is called.\n\n Note: This function may only be called for a message that is currently pending and the caller\n must be the sender of the that message.\n */\n function startL1ToL2MessageCancellation(\n uint256 toAddress,\n uint256 selector,\n uint256[] calldata payload,\n uint256 nonce\n ) external returns (bytes32);\n\n /**\n Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds\n after the call to startL1ToL2MessageCancellation().\n\n Note that the message fee is not refunded.\n */\n function cancelL1ToL2Message(\n uint256 toAddress,\n uint256 selector,\n uint256[] calldata payload,\n uint256 nonce\n ) external returns (bytes32);\n}"
},
"contracts/IStarknetMessagingEvents.sol": {
"content": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\ninterface IStarknetMessagingEvents {\n // This event needs to be compatible with the one defined in Output.sol.\n event LogMessageToL1(uint256 indexed fromAddress, address indexed toAddress, uint256[] payload);\n\n // An event that is raised when a message is sent from L1 to L2.\n event LogMessageToL2(\n address indexed fromAddress,\n uint256 indexed toAddress,\n uint256 indexed selector,\n uint256[] payload,\n uint256 nonce,\n uint256 fee\n );\n\n // An event that is raised when a message from L2 to L1 is consumed.\n event ConsumedMessageToL1(\n uint256 indexed fromAddress,\n address indexed toAddress,\n uint256[] payload\n );\n\n // An event that is raised when a message from L1 to L2 is consumed.\n event ConsumedMessageToL2(\n address indexed fromAddress,\n uint256 indexed toAddress,\n uint256 indexed selector,\n uint256[] payload,\n uint256 nonce\n );\n\n // An event that is raised when a message from L1 to L2 Cancellation is started.\n event MessageToL2CancellationStarted(\n address indexed fromAddress,\n uint256 indexed toAddress,\n uint256 indexed selector,\n uint256[] payload,\n uint256 nonce\n );\n\n // An event that is raised when a message from L1 to L2 is canceled.\n event MessageToL2Canceled(\n address indexed fromAddress,\n uint256 indexed toAddress,\n uint256 indexed selector,\n uint256[] payload,\n uint256 nonce\n );\n}"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"contracts/IStarknetMessaging.sol": {
"IStarknetMessaging": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "cancelL1ToL2Message",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "consumeMessageFromL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "sendMessageToL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "startL1ToL2MessageCancellation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": "6170ff1b",
"consumeMessageFromL2(uint256,uint256[])": "2c9dd5c0",
"sendMessageToL2(uint256,uint256,uint256[])": "3e3aa6c5",
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": "7a98660b"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"ConsumedMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ConsumedMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"LogMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"LogMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2Canceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2CancellationStarted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"cancelL1ToL2Message\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"consumeMessageFromL2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"sendMessageToL2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"startL1ToL2MessageCancellation\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)\":{\"notice\":\"Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). Note that the message fee is not refunded.\"},\"consumeMessageFromL2(uint256,uint256[])\":{\"notice\":\"Consumes a message that was sent from an L2 contract. Returns the hash of the message.\"},\"sendMessageToL2(uint256,uint256,uint256[])\":{\"notice\":\"Sends a message to an L2 contract. This function is payable, the payed amount is the message fee. Returns the hash of the message and the nonce of the message.\"},\"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)\":{\"notice\":\"Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IStarknetMessaging.sol\":\"IStarknetMessaging\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/IStarknetMessaging.sol\":{\"keccak256\":\"0xda9dbafa1cd2bb313df72bf48c1fc7096d2ed0328898137001e7d047e693647a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://802d3eac4aef2da65a0dcda9fe149cf0c247233312aab47113bb9de6d44ba72e\",\"dweb:/ipfs/QmaYjHtMrE8JK9oxqcytDH1cBhyp9yah2mRWFE8vJeaJhe\"]},\"contracts/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0xc3d883a6eb17b070787bf6e60393d41eddc8807591df1a828689574c150ac2a4\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://90d1fbc98c7a052aef9360089838b00a214513c538579381e858c98df989e1f1\",\"dweb:/ipfs/QmaD6Sxgc9GCXqbnmAev8Tj3LYHH6jphEHvZGkxRNCTCfr\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": {
"notice": "Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). Note that the message fee is not refunded."
},
"consumeMessageFromL2(uint256,uint256[])": {
"notice": "Consumes a message that was sent from an L2 contract. Returns the hash of the message."
},
"sendMessageToL2(uint256,uint256,uint256[])": {
"notice": "Sends a message to an L2 contract. This function is payable, the payed amount is the message fee. Returns the hash of the message and the nonce of the message."
},
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": {
"notice": "Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message."
}
},
"version": 1
}
}
},
"contracts/IStarknetMessagingEvents.sol": {
"IStarknetMessagingEvents": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"ConsumedMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ConsumedMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"LogMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"LogMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2Canceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2CancellationStarted\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IStarknetMessagingEvents.sol\":\"IStarknetMessagingEvents\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0xc3d883a6eb17b070787bf6e60393d41eddc8807591df1a828689574c150ac2a4\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://90d1fbc98c7a052aef9360089838b00a214513c538579381e858c98df989e1f1\",\"dweb:/ipfs/QmaD6Sxgc9GCXqbnmAev8Tj3LYHH6jphEHvZGkxRNCTCfr\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"sources": {
"contracts/IStarknetMessaging.sol": {
"ast": {
"absolutePath": "contracts/IStarknetMessaging.sol",
"exportedSymbols": {
"IStarknetMessaging": [
61
]
},
"id": 62,
"license": "Apache-2.0.",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "40:24:0"
},
{
"absolutePath": "contracts/IStarknetMessagingEvents.sol",
"file": "./IStarknetMessagingEvents.sol",
"id": 2,
"nodeType": "ImportDirective",
"scope": 62,
"sourceUnit": 137,
"src": "66:40:0",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 3,
"name": "IStarknetMessagingEvents",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 136,
"src": "140:24:0",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IStarknetMessagingEvents_$136",
"typeString": "contract IStarknetMessagingEvents"
}
},
"id": 4,
"nodeType": "InheritanceSpecifier",
"src": "140:24:0"
}
],
"contractDependencies": [
136
],
"contractKind": "interface",
"documentation": null,
"fullyImplemented": false,
"id": 61,
"linearizedBaseContracts": [
61,
136
],
"name": "IStarknetMessaging",
"nodeType": "ContractDefinition",
"nodes": [
{
"body": null,
"documentation": {
"id": 5,
"nodeType": "StructuredDocumentation",
"src": "171:189:0",
"text": "Sends a message to an L2 contract.\nThis function is payable, the payed amount is the message fee.\nReturns the hash of the message and the nonce of the message."
},
"functionSelector": "3e3aa6c5",
"id": 19,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "sendMessageToL2",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 13,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 7,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19,
"src": "399:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 6,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "399:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19,
"src": "426:16:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 8,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "426:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 12,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19,
"src": "452:26:0",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 10,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "452:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 11,
"length": null,
"nodeType": "ArrayTypeName",
"src": "452:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "389:95:0"
},
"returnParameters": {
"id": 18,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 15,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19,
"src": "511:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 14,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "511:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 17,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19,
"src": "520:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 16,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "520:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "510:18:0"
},
"scope": 61,
"src": "365:164:0",
"stateMutability": "payable",
"virtual": false,
"visibility": "external"
},
{
"body": null,
"documentation": {
"id": 20,
"nodeType": "StructuredDocumentation",
"src": "535:110:0",
"text": "Consumes a message that was sent from an L2 contract.\nReturns the hash of the message."
},
"functionSelector": "2c9dd5c0",
"id": 30,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "consumeMessageFromL2",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 26,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 30,
"src": "680:19:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 21,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "680:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 25,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 30,
"src": "701:26:0",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 23,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "701:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 24,
"length": null,
"nodeType": "ArrayTypeName",
"src": "701:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "679:49:0"
},
"returnParameters": {
"id": 29,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 28,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 30,
"src": "763:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 27,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "763:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "762:9:0"
},
"scope": 61,
"src": "650:122:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"body": null,
"documentation": {
"id": 31,
"nodeType": "StructuredDocumentation",
"src": "778:309:0",
"text": "Starts the cancellation of an L1 to L2 message.\nA message can be canceled messageCancellationDelay() seconds after this function is called.\nNote: This function may only be called for a message that is currently pending and the caller\nmust be the sender of the that message."
},
"functionSelector": "7a98660b",
"id": 45,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "startL1ToL2MessageCancellation",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 41,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 33,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 45,
"src": "1141:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 32,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1141:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 35,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 45,
"src": "1168:16:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 34,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1168:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 38,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 45,
"src": "1194:26:0",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 36,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1194:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 37,
"length": null,
"nodeType": "ArrayTypeName",
"src": "1194:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 40,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 45,
"src": "1230:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1230:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1131:118:0"
},
"returnParameters": {
"id": 44,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 43,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 45,
"src": "1268:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 42,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1268:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1267:9:0"
},
"scope": 61,
"src": "1092:185:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"body": null,
"documentation": {
"id": 46,
"nodeType": "StructuredDocumentation",
"src": "1283:219:0",
"text": "Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds\nafter the call to startL1ToL2MessageCancellation().\nNote that the message fee is not refunded."
},
"functionSelector": "6170ff1b",
"id": 60,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "cancelL1ToL2Message",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 56,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 48,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1545:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 47,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1545:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 50,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1572:16:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 49,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1572:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 53,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1598:26:0",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 51,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1598:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 52,
"length": null,
"nodeType": "ArrayTypeName",
"src": "1598:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 55,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1634:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 54,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1634:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1535:118:0"
},
"returnParameters": {
"id": 59,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 58,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1672:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 57,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1672:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1671:9:0"
},
"scope": 61,
"src": "1507:174:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
}
],
"scope": 62,
"src": "108:1575:0"
}
],
"src": "40:1643:0"
},
"id": 0
},
"contracts/IStarknetMessagingEvents.sol": {
"ast": {
"absolutePath": "contracts/IStarknetMessagingEvents.sol",
"exportedSymbols": {
"IStarknetMessagingEvents": [
136
]
},
"id": 137,
"license": "Apache-2.0.",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 63,
"literals": [
"solidity",
"^",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "40:24:1"
},
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "interface",
"documentation": null,
"fullyImplemented": true,
"id": 136,
"linearizedBaseContracts": [
136
],
"name": "IStarknetMessagingEvents",
"nodeType": "ContractDefinition",
"nodes": [
{
"anonymous": false,
"documentation": null,
"id": 72,
"name": "LogMessageToL1",
"nodeType": "EventDefinition",
"parameters": {
"id": 71,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 65,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 72,
"src": "205:27:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 64,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "205:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 67,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 72,
"src": "234:25:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 66,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "234:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 70,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 72,
"src": "261:17:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 68,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "261:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 69,
"length": null,
"nodeType": "ArrayTypeName",
"src": "261:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "204:75:1"
},
"src": "184:96:1"
},
{
"anonymous": false,
"documentation": null,
"id": 87,
"name": "LogMessageToL2",
"nodeType": "EventDefinition",
"parameters": {
"id": 86,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 74,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 87,
"src": "385:27:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 73,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "385:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 76,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 87,
"src": "422:25:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 75,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "422:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 78,
"indexed": true,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 87,
"src": "457:24:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 77,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "457:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 81,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 87,
"src": "491:17:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 79,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "491:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 80,
"length": null,
"nodeType": "ArrayTypeName",
"src": "491:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 83,
"indexed": false,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 87,
"src": "518:13:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 82,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "518:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 85,
"indexed": false,
"mutability": "mutable",
"name": "fee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 87,
"src": "541:11:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 84,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "541:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "375:183:1"
},
"src": "355:204:1"
},
{
"anonymous": false,
"documentation": null,
"id": 96,
"name": "ConsumedMessageToL1",
"nodeType": "EventDefinition",
"parameters": {
"id": 95,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 89,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 96,
"src": "673:27:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 88,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "673:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 91,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 96,
"src": "710:25:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 90,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "710:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 94,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 96,
"src": "745:17:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 92,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "745:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 93,
"length": null,
"nodeType": "ArrayTypeName",
"src": "745:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "663:105:1"
},
"src": "638:131:1"
},
{
"anonymous": false,
"documentation": null,
"id": 109,
"name": "ConsumedMessageToL2",
"nodeType": "EventDefinition",
"parameters": {
"id": 108,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 98,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 109,
"src": "883:27:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 97,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "883:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 100,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 109,
"src": "920:25:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 99,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "920:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 102,
"indexed": true,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 109,
"src": "955:24:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 101,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "955:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 105,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 109,
"src": "989:17:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 103,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "989:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 104,
"length": null,
"nodeType": "ArrayTypeName",
"src": "989:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 107,
"indexed": false,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 109,
"src": "1016:13:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 106,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1016:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "873:162:1"
},
"src": "848:188:1"
},
{
"anonymous": false,
"documentation": null,
"id": 122,
"name": "MessageToL2CancellationStarted",
"nodeType": "EventDefinition",
"parameters": {
"id": 121,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 111,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 122,
"src": "1173:27:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 110,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1173:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 113,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 122,
"src": "1210:25:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 112,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1210:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 115,
"indexed": true,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 122,
"src": "1245:24:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 114,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1245:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 118,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 122,
"src": "1279:17:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 116,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1279:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 117,
"length": null,
"nodeType": "ArrayTypeName",
"src": "1279:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 120,
"indexed": false,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 122,
"src": "1306:13:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 119,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1306:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1163:162:1"
},
"src": "1127:199:1"
},
{
"anonymous": false,
"documentation": null,
"id": 135,
"name": "MessageToL2Canceled",
"nodeType": "EventDefinition",
"parameters": {
"id": 134,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 124,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 135,
"src": "1440:27:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 123,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1440:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 126,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 135,
"src": "1477:25:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 125,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1477:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 128,
"indexed": true,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 135,
"src": "1512:24:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 127,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1512:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 131,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 135,
"src": "1546:17:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 129,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1546:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 130,
"length": null,
"nodeType": "ArrayTypeName",
"src": "1546:9:1",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 133,
"indexed": false,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 135,
"src": "1573:13:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 132,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1573:7:1",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1430:162:1"
},
"src": "1405:188:1"
}
],
"scope": 137,
"src": "66:1529:1"
}
],
"src": "40:1555:1"
},
"id": 1
}
}
}
}
{
"id": "43c5a9ab32d74435b4644ab7011acc42",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.6.12",
"solcLongVersion": "0.6.12+commit.27d51765",
"input": {
"language": "Solidity",
"sources": {
"contracts/IStarknetMessagingEvents.sol": {
"content": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\ninterface IStarknetMessagingEvents {\n // This event needs to be compatible with the one defined in Output.sol.\n event LogMessageToL1(uint256 indexed fromAddress, address indexed toAddress, uint256[] payload);\n\n // An event that is raised when a message is sent from L1 to L2.\n event LogMessageToL2(\n address indexed fromAddress,\n uint256 indexed toAddress,\n uint256 indexed selector,\n uint256[] payload,\n uint256 nonce,\n uint256 fee\n );\n\n // An event that is raised when a message from L2 to L1 is consumed.\n event ConsumedMessageToL1(\n uint256 indexed fromAddress,\n address indexed toAddress,\n uint256[] payload\n );\n\n // An event that is raised when a message from L1 to L2 is consumed.\n event ConsumedMessageToL2(\n address indexed fromAddress,\n uint256 indexed toAddress,\n uint256 indexed selector,\n uint256[] payload,\n uint256 nonce\n );\n\n // An event that is raised when a message from L1 to L2 Cancellation is started.\n event MessageToL2CancellationStarted(\n address indexed fromAddress,\n uint256 indexed toAddress,\n uint256 indexed selector,\n uint256[] payload,\n uint256 nonce\n );\n\n // An event that is raised when a message from L1 to L2 is canceled.\n event MessageToL2Canceled(\n address indexed fromAddress,\n uint256 indexed toAddress,\n uint256 indexed selector,\n uint256[] payload,\n uint256 nonce\n );\n}"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"contracts/IStarknetMessagingEvents.sol": {
"IStarknetMessagingEvents": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"ConsumedMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ConsumedMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"fromAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"}],\"name\":\"LogMessageToL1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"LogMessageToL2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2Canceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"toAddress\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"selector\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payload\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"MessageToL2CancellationStarted\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IStarknetMessagingEvents.sol\":\"IStarknetMessagingEvents\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0xc3d883a6eb17b070787bf6e60393d41eddc8807591df1a828689574c150ac2a4\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://90d1fbc98c7a052aef9360089838b00a214513c538579381e858c98df989e1f1\",\"dweb:/ipfs/QmaD6Sxgc9GCXqbnmAev8Tj3LYHH6jphEHvZGkxRNCTCfr\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"sources": {
"contracts/IStarknetMessagingEvents.sol": {
"ast": {
"absolutePath": "contracts/IStarknetMessagingEvents.sol",
"exportedSymbols": {
"IStarknetMessagingEvents": [
74
]
},
"id": 75,
"license": "Apache-2.0.",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "40:24:0"
},
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "interface",
"documentation": null,
"fullyImplemented": true,
"id": 74,
"linearizedBaseContracts": [
74
],
"name": "IStarknetMessagingEvents",
"nodeType": "ContractDefinition",
"nodes": [
{
"anonymous": false,
"documentation": null,
"id": 10,
"name": "LogMessageToL1",
"nodeType": "EventDefinition",
"parameters": {
"id": 9,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 3,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10,
"src": "205:27:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "205:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 5,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10,
"src": "234:25:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 4,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "234:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 8,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10,
"src": "261:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 6,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "261:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 7,
"length": null,
"nodeType": "ArrayTypeName",
"src": "261:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "204:75:0"
},
"src": "184:96:0"
},
{
"anonymous": false,
"documentation": null,
"id": 25,
"name": "LogMessageToL2",
"nodeType": "EventDefinition",
"parameters": {
"id": 24,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 12,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 25,
"src": "385:27:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 11,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "385:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 14,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 25,
"src": "422:25:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 13,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "422:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 16,
"indexed": true,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 25,
"src": "457:24:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 15,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "457:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 19,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 25,
"src": "491:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 17,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "491:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 18,
"length": null,
"nodeType": "ArrayTypeName",
"src": "491:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21,
"indexed": false,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 25,
"src": "518:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 20,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "518:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 23,
"indexed": false,
"mutability": "mutable",
"name": "fee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 25,
"src": "541:11:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "541:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "375:183:0"
},
"src": "355:204:0"
},
{
"anonymous": false,
"documentation": null,
"id": 34,
"name": "ConsumedMessageToL1",
"nodeType": "EventDefinition",
"parameters": {
"id": 33,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 27,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 34,
"src": "673:27:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 26,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "673:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 29,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 34,
"src": "710:25:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 28,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "710:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 32,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 34,
"src": "745:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 30,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "745:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 31,
"length": null,
"nodeType": "ArrayTypeName",
"src": "745:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "663:105:0"
},
"src": "638:131:0"
},
{
"anonymous": false,
"documentation": null,
"id": 47,
"name": "ConsumedMessageToL2",
"nodeType": "EventDefinition",
"parameters": {
"id": 46,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 36,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 47,
"src": "883:27:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "883:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 38,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 47,
"src": "920:25:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 37,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "920:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 40,
"indexed": true,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 47,
"src": "955:24:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 39,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "955:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 43,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 47,
"src": "989:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 41,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "989:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 42,
"length": null,
"nodeType": "ArrayTypeName",
"src": "989:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 45,
"indexed": false,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 47,
"src": "1016:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 44,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1016:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "873:162:0"
},
"src": "848:188:0"
},
{
"anonymous": false,
"documentation": null,
"id": 60,
"name": "MessageToL2CancellationStarted",
"nodeType": "EventDefinition",
"parameters": {
"id": 59,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 49,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1173:27:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 48,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1173:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 51,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1210:25:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 50,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1210:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 53,
"indexed": true,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1245:24:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 52,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1245:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 56,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1279:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 54,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1279:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 55,
"length": null,
"nodeType": "ArrayTypeName",
"src": "1279:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 58,
"indexed": false,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1306:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 57,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1306:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1163:162:0"
},
"src": "1127:199:0"
},
{
"anonymous": false,
"documentation": null,
"id": 73,
"name": "MessageToL2Canceled",
"nodeType": "EventDefinition",
"parameters": {
"id": 72,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 62,
"indexed": true,
"mutability": "mutable",
"name": "fromAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 73,
"src": "1440:27:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 61,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1440:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 64,
"indexed": true,
"mutability": "mutable",
"name": "toAddress",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 73,
"src": "1477:25:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 63,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1477:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 66,
"indexed": true,
"mutability": "mutable",
"name": "selector",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 73,
"src": "1512:24:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 65,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1512:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 69,
"indexed": false,
"mutability": "mutable",
"name": "payload",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 73,
"src": "1546:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
"typeString": "uint256[]"
},
"typeName": {
"baseType": {
"id": 67,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1546:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 68,
"length": null,
"nodeType": "ArrayTypeName",
"src": "1546:9:0",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
"typeString": "uint256[]"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 71,
"indexed": false,
"mutability": "mutable",
"name": "nonce",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 73,
"src": "1573:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 70,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1573:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1430:162:0"
},
"src": "1405:188:0"
}
],
"scope": 75,
"src": "66:1529:0"
}
],
"src": "40:1555:0"
},
"id": 0
}
}
}
}
{
"id": "c87ec17b5466ea9bc6d64785278caf94",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.6.12",
"solcLongVersion": "0.6.12+commit.27d51765",
"input": {
"language": "Solidity",
"sources": {
"contracts/NamedStorage.sol": {
"content": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\n/*\n Library to provide basic storage, in storage location out of the low linear address space.\n New types of storage variables should be added here upon need.\n*/\nlibrary NamedStorage {\n function bytes32ToUint256Mapping(string memory tag_)\n internal\n pure\n returns (mapping(bytes32 => uint256) storage randomVariable)\n {\n bytes32 location = keccak256(abi.encodePacked(tag_));\n assembly {\n randomVariable_slot := location\n }\n }\n\n function bytes32ToAddressMapping(string memory tag_)\n internal\n pure\n returns (mapping(bytes32 => address) storage randomVariable)\n {\n bytes32 location = keccak256(abi.encodePacked(tag_));\n assembly {\n randomVariable_slot := location\n }\n }\n\n function addressToBoolMapping(string memory tag_)\n internal\n pure\n returns (mapping(address => bool) storage randomVariable)\n {\n bytes32 location = keccak256(abi.encodePacked(tag_));\n assembly {\n randomVariable_slot := location\n }\n }\n\n function getUintValue(string memory tag_) internal view returns (uint256 retVal) {\n bytes32 slot = keccak256(abi.encodePacked(tag_));\n assembly {\n retVal := sload(slot)\n }\n }\n\n function setUintValue(string memory tag_, uint256 value) internal {\n bytes32 slot = keccak256(abi.encodePacked(tag_));\n assembly {\n sstore(slot, value)\n }\n }\n\n function setUintValueOnce(string memory tag_, uint256 value) internal {\n require(getUintValue(tag_) == 0, \"ALREADY_SET\");\n setUintValue(tag_, value);\n }\n\n function getAddressValue(string memory tag_) internal view returns (address retVal) {\n bytes32 slot = keccak256(abi.encodePacked(tag_));\n assembly {\n retVal := sload(slot)\n }\n }\n\n function setAddressValue(string memory tag_, address value) internal {\n bytes32 slot = keccak256(abi.encodePacked(tag_));\n assembly {\n sstore(slot, value)\n }\n }\n\n function setAddressValueOnce(string memory tag_, address value) internal {\n require(getAddressValue(tag_) == address(0x0), \"ALREADY_SET\");\n setAddressValue(tag_, value);\n }\n\n function getBoolValue(string memory tag_) internal view returns (bool retVal) {\n bytes32 slot = keccak256(abi.encodePacked(tag_));\n assembly {\n retVal := sload(slot)\n }\n }\n\n function setBoolValue(string memory tag_, bool value) internal {\n bytes32 slot = keccak256(abi.encodePacked(tag_));\n assembly {\n sstore(slot, value)\n }\n }\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"contracts/NamedStorage.sol": {
"NamedStorage": {
"abi": [],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"contracts/NamedStorage.sol\":230:2768 library NamedStorage {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n invalid\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"contracts/NamedStorage.sol\":230:2768 library NamedStorage {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212201ad17719c1db2d6c495f50e684d05a9ee5c476965df1c17f356988b55747bf2e64736f6c634300060c0033\n}\n",
"bytecode": {
"linkReferences": {},
"object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201ad17719c1db2d6c495f50e684d05a9ee5c476965df1c17f356988b55747bf2e64736f6c634300060c0033",
"opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE 0xD1 PUSH24 0x19C1DB2D6C495F50E684D05A9EE5C476965DF1C17F356988 0xB5 JUMPI SELFBALANCE 0xBF 0x2E PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ",
"sourceMap": "230:2538:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201ad17719c1db2d6c495f50e684d05a9ee5c476965df1c17f356988b55747bf2e64736f6c634300060c0033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE 0xD1 PUSH24 0x19C1DB2D6C495F50E684D05A9EE5C476965DF1C17F356988 0xB5 JUMPI SELFBALANCE 0xBF 0x2E PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ",
"sourceMap": "230:2538:0:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"addressToBoolMapping(string memory)": "infinite",
"bytes32ToAddressMapping(string memory)": "infinite",
"bytes32ToUint256Mapping(string memory)": "infinite",
"getAddressValue(string memory)": "infinite",
"getBoolValue(string memory)": "infinite",
"getUintValue(string memory)": "infinite",
"setAddressValue(string memory,address)": "infinite",
"setAddressValueOnce(string memory,address)": "infinite",
"setBoolValue(string memory,bool)": "infinite",
"setUintValue(string memory,uint256)": "infinite",
"setUintValueOnce(string memory,uint256)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 230,
"end": 2768,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 230,
"end": 2768,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 230,
"end": 2768,
"name": "PUSH",
"source": 0,
"value": "B"
},
{
"begin": 230,
"end": 2768,
"name": "DUP3",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "DUP3",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "DUP3",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "CODECOPY",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "DUP1",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "MLOAD",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 230,
"end": 2768,
"name": "BYTE",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "PUSH",
"source": 0,
"value": "73"
},
{
"begin": 230,
"end": 2768,
"name": "EQ",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "PUSH [tag]",
"source": 0,
"value": "1"
},
{
"begin": 230,
"end": 2768,
"name": "JUMPI",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "INVALID",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "tag",
"source": 0,
"value": "1"
},
{
"begin": 230,
"end": 2768,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "ADDRESS",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 230,
"end": 2768,
"name": "MSTORE",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "PUSH",
"source": 0,
"value": "73"
},
{
"begin": 230,
"end": 2768,
"name": "DUP2",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "MSTORE8",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "DUP3",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "DUP2",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "RETURN",
"source": 0
}
],
".data": {
"0": {
".auxdata": "a26469706673582212201ad17719c1db2d6c495f50e684d05a9ee5c476965df1c17f356988b55747bf2e64736f6c634300060c0033",
".code": [
{
"begin": 230,
"end": 2768,
"name": "PUSHDEPLOYADDRESS",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "ADDRESS",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "EQ",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "PUSH",
"source": 0,
"value": "80"
},
{
"begin": 230,
"end": 2768,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 230,
"end": 2768,
"name": "MSTORE",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 230,
"end": 2768,
"name": "DUP1",
"source": 0
},
{
"begin": 230,
"end": 2768,
"name": "REVERT",
"source": 0
}
]
}
}
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/NamedStorage.sol\":\"NamedStorage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/NamedStorage.sol\":{\"keccak256\":\"0x49ad9a02df0c76a084989eadacd46566b65dbeb0cd443a3685832592701d2d50\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://7c0d331bee821a0db40603299d0ccf239cfc1d46710af97c28bbe4221cdc2866\",\"dweb:/ipfs/QmawroFrFWHBJTJXGXyyjdnmj7nsFpUmqNGNgEZSkAQVLu\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"sources": {
"contracts/NamedStorage.sol": {
"ast": {
"absolutePath": "contracts/NamedStorage.sol",
"exportedSymbols": {
"NamedStorage": [
217
]
},
"id": 218,
"license": "Apache-2.0.",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "40:24:0"
},
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "library",
"documentation": null,
"fullyImplemented": true,
"id": 217,
"linearizedBaseContracts": [
217
],
"name": "NamedStorage",
"nodeType": "ContractDefinition",
"nodes": [
{
"body": {
"id": 20,
"nodeType": "Block",
"src": "413:142:0",
"statements": [
{
"assignments": [
11
],
"declarations": [
{
"constant": false,
"id": 11,
"mutability": "mutable",
"name": "location",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 20,
"src": "423:16:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 10,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "423:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 18,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 15,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3,
"src": "469:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 13,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "452:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 14,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "452:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 16,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "452:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 12,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "442:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 17,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "442:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "423:52:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "494:55:0",
"statements": [
{
"nodeType": "YulAssignment",
"src": "508:31:0",
"value": {
"name": "location",
"nodeType": "YulIdentifier",
"src": "531:8:0"
},
"variableNames": [
{
"name": "randomVariable_slot",
"nodeType": "YulIdentifier",
"src": "508:19:0"
}
]
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 11,
"isOffset": false,
"isSlot": false,
"src": "531:8:0",
"valueSize": 1
},
{
"declaration": 8,
"isOffset": false,
"isSlot": true,
"src": "508:19:0",
"valueSize": 1
}
],
"id": 19,
"nodeType": "InlineAssembly",
"src": "485:64:0"
}
]
},
"documentation": null,
"id": 21,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "bytes32ToUint256Mapping",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 4,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 3,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21,
"src": "290:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 2,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "290:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "289:20:0"
},
"returnParameters": {
"id": 9,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 8,
"mutability": "mutable",
"name": "randomVariable",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21,
"src": "357:50:0",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
"typeString": "mapping(bytes32 => uint256)"
},
"typeName": {
"id": 7,
"keyType": {
"id": 5,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "365:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "Mapping",
"src": "357:27:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
"typeString": "mapping(bytes32 => uint256)"
},
"valueType": {
"id": 6,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "376:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
"value": null,
"visibility": "internal"
}
],
"src": "356:52:0"
},
"scope": 217,
"src": "257:298:0",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 40,
"nodeType": "Block",
"src": "717:142:0",
"statements": [
{
"assignments": [
31
],
"declarations": [
{
"constant": false,
"id": 31,
"mutability": "mutable",
"name": "location",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 40,
"src": "727:16:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 30,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "727:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 38,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 35,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 23,
"src": "773:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 33,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "756:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 34,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "756:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 36,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "756:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 32,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "746:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 37,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "746:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "727:52:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "798:55:0",
"statements": [
{
"nodeType": "YulAssignment",
"src": "812:31:0",
"value": {
"name": "location",
"nodeType": "YulIdentifier",
"src": "835:8:0"
},
"variableNames": [
{
"name": "randomVariable_slot",
"nodeType": "YulIdentifier",
"src": "812:19:0"
}
]
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 31,
"isOffset": false,
"isSlot": false,
"src": "835:8:0",
"valueSize": 1
},
{
"declaration": 28,
"isOffset": false,
"isSlot": true,
"src": "812:19:0",
"valueSize": 1
}
],
"id": 39,
"nodeType": "InlineAssembly",
"src": "789:64:0"
}
]
},
"documentation": null,
"id": 41,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "bytes32ToAddressMapping",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 24,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 23,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 41,
"src": "594:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 22,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "594:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "593:20:0"
},
"returnParameters": {
"id": 29,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 28,
"mutability": "mutable",
"name": "randomVariable",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 41,
"src": "661:50:0",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
"typeString": "mapping(bytes32 => address)"
},
"typeName": {
"id": 27,
"keyType": {
"id": 25,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "669:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "Mapping",
"src": "661:27:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
"typeString": "mapping(bytes32 => address)"
},
"valueType": {
"id": 26,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "680:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
},
"value": null,
"visibility": "internal"
}
],
"src": "660:52:0"
},
"scope": 217,
"src": "561:298:0",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 60,
"nodeType": "Block",
"src": "1015:142:0",
"statements": [
{
"assignments": [
51
],
"declarations": [
{
"constant": false,
"id": 51,
"mutability": "mutable",
"name": "location",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 60,
"src": "1025:16:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 50,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1025:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 58,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 55,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 43,
"src": "1071:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 53,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "1054:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 54,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "1054:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 56,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1054:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 52,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "1044:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 57,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1044:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "1025:52:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "1096:55:0",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1110:31:0",
"value": {
"name": "location",
"nodeType": "YulIdentifier",
"src": "1133:8:0"
},
"variableNames": [
{
"name": "randomVariable_slot",
"nodeType": "YulIdentifier",
"src": "1110:19:0"
}
]
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 51,
"isOffset": false,
"isSlot": false,
"src": "1133:8:0",
"valueSize": 1
},
{
"declaration": 48,
"isOffset": false,
"isSlot": true,
"src": "1110:19:0",
"valueSize": 1
}
],
"id": 59,
"nodeType": "InlineAssembly",
"src": "1087:64:0"
}
]
},
"documentation": null,
"id": 61,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "addressToBoolMapping",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 44,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 43,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 61,
"src": "895:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 42,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "895:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "894:20:0"
},
"returnParameters": {
"id": 49,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 48,
"mutability": "mutable",
"name": "randomVariable",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 61,
"src": "962:47:0",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
"typeString": "mapping(address => bool)"
},
"typeName": {
"id": 47,
"keyType": {
"id": 45,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "970:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "962:24:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
"typeString": "mapping(address => bool)"
},
"valueType": {
"id": 46,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "981:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
},
"value": null,
"visibility": "internal"
}
],
"src": "961:49:0"
},
"scope": 217,
"src": "865:292:0",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 78,
"nodeType": "Block",
"src": "1244:128:0",
"statements": [
{
"assignments": [
69
],
"declarations": [
{
"constant": false,
"id": 69,
"mutability": "mutable",
"name": "slot",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 78,
"src": "1254:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 68,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1254:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 76,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 73,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 63,
"src": "1296:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 71,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "1279:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 72,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "1279:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 74,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1279:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 70,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "1269:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 75,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1269:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "1254:48:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "1321:45:0",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1335:21:0",
"value": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "1351:4:0"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "1345:5:0"
},
"nodeType": "YulFunctionCall",
"src": "1345:11:0"
},
"variableNames": [
{
"name": "retVal",
"nodeType": "YulIdentifier",
"src": "1335:6:0"
}
]
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 66,
"isOffset": false,
"isSlot": false,
"src": "1335:6:0",
"valueSize": 1
},
{
"declaration": 69,
"isOffset": false,
"isSlot": false,
"src": "1351:4:0",
"valueSize": 1
}
],
"id": 77,
"nodeType": "InlineAssembly",
"src": "1312:54:0"
}
]
},
"documentation": null,
"id": 79,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getUintValue",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 64,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 63,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 79,
"src": "1185:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 62,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "1185:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1184:20:0"
},
"returnParameters": {
"id": 67,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 66,
"mutability": "mutable",
"name": "retVal",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 79,
"src": "1228:14:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 65,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1228:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1227:16:0"
},
"scope": 217,
"src": "1163:209:0",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 96,
"nodeType": "Block",
"src": "1444:126:0",
"statements": [
{
"assignments": [
87
],
"declarations": [
{
"constant": false,
"id": 87,
"mutability": "mutable",
"name": "slot",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 96,
"src": "1454:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 86,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1454:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 94,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 91,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 81,
"src": "1496:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 89,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "1479:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 90,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "1479:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 92,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1479:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 88,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "1469:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 93,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1469:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "1454:48:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "1521:43:0",
"statements": [
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "1542:4:0"
},
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1548:5:0"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "1535:6:0"
},
"nodeType": "YulFunctionCall",
"src": "1535:19:0"
},
"nodeType": "YulExpressionStatement",
"src": "1535:19:0"
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 87,
"isOffset": false,
"isSlot": false,
"src": "1542:4:0",
"valueSize": 1
},
{
"declaration": 83,
"isOffset": false,
"isSlot": false,
"src": "1548:5:0",
"valueSize": 1
}
],
"id": 95,
"nodeType": "InlineAssembly",
"src": "1512:52:0"
}
]
},
"documentation": null,
"id": 97,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setUintValue",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 84,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 81,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 97,
"src": "1400:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 80,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "1400:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 83,
"mutability": "mutable",
"name": "value",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 97,
"src": "1420:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 82,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1420:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1399:35:0"
},
"returnParameters": {
"id": 85,
"nodeType": "ParameterList",
"parameters": [],
"src": "1444:0:0"
},
"scope": 217,
"src": "1378:192:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 118,
"nodeType": "Block",
"src": "1646:99:0",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 109,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 106,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 99,
"src": "1677:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 105,
"name": "getUintValue",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 79,
"src": "1664:12:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_uint256_$",
"typeString": "function (string memory) view returns (uint256)"
}
},
"id": 107,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1664:18:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 108,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1686:1:0",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "1664:23:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "414c52454144595f534554",
"id": 110,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1689:13:0",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2ac415d63f7bfddf01bbdcc5854dc09291d050329f4bbe1ac28952dd17e0d24a",
"typeString": "literal_string \"ALREADY_SET\""
},
"value": "ALREADY_SET"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2ac415d63f7bfddf01bbdcc5854dc09291d050329f4bbe1ac28952dd17e0d24a",
"typeString": "literal_string \"ALREADY_SET\""
}
],
"id": 104,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "1656:7:0",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 111,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1656:47:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 112,
"nodeType": "ExpressionStatement",
"src": "1656:47:0"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 114,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 99,
"src": "1726:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
},
{
"argumentTypes": null,
"id": 115,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 101,
"src": "1732:5:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 113,
"name": "setUintValue",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 97,
"src": "1713:12:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$",
"typeString": "function (string memory,uint256)"
}
},
"id": 116,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1713:25:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 117,
"nodeType": "ExpressionStatement",
"src": "1713:25:0"
}
]
},
"documentation": null,
"id": 119,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setUintValueOnce",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 102,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 99,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 119,
"src": "1602:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 98,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "1602:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 101,
"mutability": "mutable",
"name": "value",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 119,
"src": "1622:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 100,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1622:7:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1601:35:0"
},
"returnParameters": {
"id": 103,
"nodeType": "ParameterList",
"parameters": [],
"src": "1646:0:0"
},
"scope": 217,
"src": "1576:169:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 136,
"nodeType": "Block",
"src": "1835:128:0",
"statements": [
{
"assignments": [
127
],
"declarations": [
{
"constant": false,
"id": 127,
"mutability": "mutable",
"name": "slot",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 136,
"src": "1845:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 126,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1845:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 134,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 131,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 121,
"src": "1887:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 129,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "1870:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 130,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "1870:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 132,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1870:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 128,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "1860:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 133,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1860:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "1845:48:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "1912:45:0",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1926:21:0",
"value": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "1942:4:0"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "1936:5:0"
},
"nodeType": "YulFunctionCall",
"src": "1936:11:0"
},
"variableNames": [
{
"name": "retVal",
"nodeType": "YulIdentifier",
"src": "1926:6:0"
}
]
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 124,
"isOffset": false,
"isSlot": false,
"src": "1926:6:0",
"valueSize": 1
},
{
"declaration": 127,
"isOffset": false,
"isSlot": false,
"src": "1942:4:0",
"valueSize": 1
}
],
"id": 135,
"nodeType": "InlineAssembly",
"src": "1903:54:0"
}
]
},
"documentation": null,
"id": 137,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getAddressValue",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 122,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 121,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 137,
"src": "1776:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 120,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "1776:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1775:20:0"
},
"returnParameters": {
"id": 125,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 124,
"mutability": "mutable",
"name": "retVal",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 137,
"src": "1819:14:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 123,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1819:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1818:16:0"
},
"scope": 217,
"src": "1751:212:0",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 154,
"nodeType": "Block",
"src": "2038:126:0",
"statements": [
{
"assignments": [
145
],
"declarations": [
{
"constant": false,
"id": 145,
"mutability": "mutable",
"name": "slot",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 154,
"src": "2048:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 144,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2048:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 152,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 149,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 139,
"src": "2090:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 147,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "2073:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 148,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2073:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 150,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2073:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 146,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "2063:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 151,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2063:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2048:48:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "2115:43:0",
"statements": [
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "2136:4:0"
},
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2142:5:0"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "2129:6:0"
},
"nodeType": "YulFunctionCall",
"src": "2129:19:0"
},
"nodeType": "YulExpressionStatement",
"src": "2129:19:0"
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 145,
"isOffset": false,
"isSlot": false,
"src": "2136:4:0",
"valueSize": 1
},
{
"declaration": 141,
"isOffset": false,
"isSlot": false,
"src": "2142:5:0",
"valueSize": 1
}
],
"id": 153,
"nodeType": "InlineAssembly",
"src": "2106:52:0"
}
]
},
"documentation": null,
"id": 155,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setAddressValue",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 142,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 139,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 155,
"src": "1994:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 138,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "1994:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 141,
"mutability": "mutable",
"name": "value",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 155,
"src": "2014:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 140,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2014:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1993:35:0"
},
"returnParameters": {
"id": 143,
"nodeType": "ParameterList",
"parameters": [],
"src": "2038:0:0"
},
"scope": 217,
"src": "1969:195:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 179,
"nodeType": "Block",
"src": "2243:116:0",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 170,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 164,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 157,
"src": "2277:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 163,
"name": "getAddressValue",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 137,
"src": "2261:15:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_address_$",
"typeString": "function (string memory) view returns (address)"
}
},
"id": 165,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2261:21:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "307830",
"id": 168,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2294:3:0",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0x0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 167,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2286:7:0",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 166,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2286:7:0",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 169,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2286:12:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "2261:37:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "414c52454144595f534554",
"id": 171,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2300:13:0",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2ac415d63f7bfddf01bbdcc5854dc09291d050329f4bbe1ac28952dd17e0d24a",
"typeString": "literal_string \"ALREADY_SET\""
},
"value": "ALREADY_SET"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2ac415d63f7bfddf01bbdcc5854dc09291d050329f4bbe1ac28952dd17e0d24a",
"typeString": "literal_string \"ALREADY_SET\""
}
],
"id": 162,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "2253:7:0",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 172,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2253:61:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 173,
"nodeType": "ExpressionStatement",
"src": "2253:61:0"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 175,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 157,
"src": "2340:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
},
{
"argumentTypes": null,
"id": 176,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 159,
"src": "2346:5:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 174,
"name": "setAddressValue",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 155,
"src": "2324:15:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$",
"typeString": "function (string memory,address)"
}
},
"id": 177,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2324:28:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 178,
"nodeType": "ExpressionStatement",
"src": "2324:28:0"
}
]
},
"documentation": null,
"id": 180,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setAddressValueOnce",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 160,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 157,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 180,
"src": "2199:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 156,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "2199:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 159,
"mutability": "mutable",
"name": "value",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 180,
"src": "2219:13:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 158,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2219:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2198:35:0"
},
"returnParameters": {
"id": 161,
"nodeType": "ParameterList",
"parameters": [],
"src": "2243:0:0"
},
"scope": 217,
"src": "2170:189:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 197,
"nodeType": "Block",
"src": "2443:128:0",
"statements": [
{
"assignments": [
188
],
"declarations": [
{
"constant": false,
"id": 188,
"mutability": "mutable",
"name": "slot",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 197,
"src": "2453:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 187,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2453:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 195,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 192,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 182,
"src": "2495:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 190,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "2478:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 191,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2478:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 193,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2478:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 189,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "2468:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 194,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2468:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2453:48:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "2520:45:0",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2534:21:0",
"value": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "2550:4:0"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "2544:5:0"
},
"nodeType": "YulFunctionCall",
"src": "2544:11:0"
},
"variableNames": [
{
"name": "retVal",
"nodeType": "YulIdentifier",
"src": "2534:6:0"
}
]
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 185,
"isOffset": false,
"isSlot": false,
"src": "2534:6:0",
"valueSize": 1
},
{
"declaration": 188,
"isOffset": false,
"isSlot": false,
"src": "2550:4:0",
"valueSize": 1
}
],
"id": 196,
"nodeType": "InlineAssembly",
"src": "2511:54:0"
}
]
},
"documentation": null,
"id": 198,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getBoolValue",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 183,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 182,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 198,
"src": "2387:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 181,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "2387:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2386:20:0"
},
"returnParameters": {
"id": 186,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 185,
"mutability": "mutable",
"name": "retVal",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 198,
"src": "2430:11:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 184,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2430:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2429:13:0"
},
"scope": 217,
"src": "2365:206:0",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 215,
"nodeType": "Block",
"src": "2640:126:0",
"statements": [
{
"assignments": [
206
],
"declarations": [
{
"constant": false,
"id": 206,
"mutability": "mutable",
"name": "slot",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 215,
"src": "2650:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 205,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2650:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 213,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 210,
"name": "tag_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 200,
"src": "2692:4:0",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"argumentTypes": null,
"id": 208,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -1,
"src": "2675:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 209,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2675:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 211,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2675:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 207,
"name": "keccak256",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -8,
"src": "2665:9:0",
"typeDescriptions": {
"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
"typeString": "function (bytes memory) pure returns (bytes32)"
}
},
"id": 212,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2665:33:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "2650:48:0"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "2717:43:0",
"statements": [
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "2738:4:0"
},
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2744:5:0"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "2731:6:0"
},
"nodeType": "YulFunctionCall",
"src": "2731:19:0"
},
"nodeType": "YulExpressionStatement",
"src": "2731:19:0"
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 206,
"isOffset": false,
"isSlot": false,
"src": "2738:4:0",
"valueSize": 1
},
{
"declaration": 202,
"isOffset": false,
"isSlot": false,
"src": "2744:5:0",
"valueSize": 1
}
],
"id": 214,
"nodeType": "InlineAssembly",
"src": "2708:52:0"
}
]
},
"documentation": null,
"id": 216,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setBoolValue",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 203,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 200,
"mutability": "mutable",
"name": "tag_",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 216,
"src": "2599:18:0",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 199,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "2599:6:0",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 202,
"mutability": "mutable",
"name": "value",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 216,
"src": "2619:10:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 201,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2619:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2598:32:0"
},
"returnParameters": {
"id": 204,
"nodeType": "ParameterList",
"parameters": [],
"src": "2640:0:0"
},
"scope": 217,
"src": "2577:189:0",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
}
],
"scope": 218,
"src": "230:2538:0"
}
],
"src": "40:2729:0"
},
"id": 0
}
}
}
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": "6170ff1b",
"consumeMessageFromL2(uint256,uint256[])": "2c9dd5c0",
"sendMessageToL2(uint256,uint256,uint256[])": "3e3aa6c5",
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": "7a98660b"
}
},
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "cancelL1ToL2Message",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "consumeMessageFromL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "sendMessageToL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "startL1ToL2MessageCancellation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "cancelL1ToL2Message",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "consumeMessageFromL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "sendMessageToL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "startL1ToL2MessageCancellation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": {
"notice": "Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). Note that the message fee is not refunded."
},
"consumeMessageFromL2(uint256,uint256[])": {
"notice": "Consumes a message that was sent from an L2 contract. Returns the hash of the message."
},
"sendMessageToL2(uint256,uint256,uint256[])": {
"notice": "Sends a message to an L2 contract. This function is payable, the payed amount is the message fee. Returns the hash of the message and the nonce of the message."
},
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": {
"notice": "Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message."
}
},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/IStarknetMessaging.sol": "IStarknetMessaging"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/IStarknetMessaging.sol": {
"keccak256": "0xda9dbafa1cd2bb313df72bf48c1fc7096d2ed0328898137001e7d047e693647a",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://802d3eac4aef2da65a0dcda9fe149cf0c247233312aab47113bb9de6d44ba72e",
"dweb:/ipfs/QmaYjHtMrE8JK9oxqcytDH1cBhyp9yah2mRWFE8vJeaJhe"
]
},
"contracts/IStarknetMessagingEvents.sol": {
"keccak256": "0xc3d883a6eb17b070787bf6e60393d41eddc8807591df1a828689574c150ac2a4",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://90d1fbc98c7a052aef9360089838b00a214513c538579381e858c98df989e1f1",
"dweb:/ipfs/QmaD6Sxgc9GCXqbnmAev8Tj3LYHH6jphEHvZGkxRNCTCfr"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {}
},
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/IStarknetMessagingEvents.sol": "IStarknetMessagingEvents"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/IStarknetMessagingEvents.sol": {
"keccak256": "0xc3d883a6eb17b070787bf6e60393d41eddc8807591df1a828689574c150ac2a4",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://90d1fbc98c7a052aef9360089838b00a214513c538579381e858c98df989e1f1",
"dweb:/ipfs/QmaD6Sxgc9GCXqbnmAev8Tj3LYHH6jphEHvZGkxRNCTCfr"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "608060405234801561001057600080fd5b5060405161067e38038061067e8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506105ea806100946000396000f3fe608060405234801561001057600080fd5b50600436106100405760003560e01c8062aeef8a14610045578063051475dd14610087578063a41fe49f146100c9575b600080fd5b6100856004803603606081101561005b57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061010b565b005b6100b36004803603602081101561009d57600080fd5b81019080803590602001909291905050506103bb565b6040518082815260200191505060405180910390f35b610109600480360360608110156100df57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506103d3565b005b680100000000000000008110610189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c696420616d6f756e742e000000000000000000000000000000000081525060200191505060405180910390fd5b60016000838152602001908152602001600020548111156101f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061058e6027913960400191505060405180910390fd5b8060016000848152602001908152602001600020600082825403925050819055506060600267ffffffffffffffff8111801561023057600080fd5b5060405190808252806020026020018201604052801561025f5781602001602082028036833780820191505090505b509050828160008151811061027057fe5b602002602001018181525050818160018151811061028a57fe5b60200260200101818152505060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e3aa6c5857ec73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610352578082015181840152602081019050610337565b50505050905001945050505050602060405180830381600087803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b505050506040513d60208110156103a357600080fd5b81019080805190602001909291905050505050505050565b60016020528060005260406000206000915090505481565b6060600367ffffffffffffffff811180156103ed57600080fd5b5060405190808252806020026020018201604052801561041c5781602001602082028036833780820191505090505b50905060008160008151811061042e57fe5b602002602001018181525050828160018151811061044857fe5b602002602001018181525050818160028151811061046257fe5b60200260200101818152505060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c9dd5c085836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156105045780820151818401526020810190506104e9565b505050509050019350505050602060405180830381600087803b15801561052a57600080fd5b505af115801561053e573d6000803e3d6000fd5b505050506040513d602081101561055457600080fd5b8101908080519060200190929190505050508160016000858152602001908152602001600020600082825401925050819055505050505056fe546865207573657227732062616c616e6365206973206e6f74206c6172676520656e6f7567682ea2646970667358221220371a0e7d8fedc228049bd472119a098a1223c952ac21b8d50b052dfef6f141dc64736f6c634300060c0033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x67E CODESIZE SUB DUP1 PUSH2 0x67E DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP PUSH2 0x5EA DUP1 PUSH2 0x94 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xAEEF8A EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0x51475DD EQ PUSH2 0x87 JUMPI DUP1 PUSH4 0xA41FE49F EQ PUSH2 0xC9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x85 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x10B JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3BB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x109 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3D3 JUMP JUMPDEST STOP JUMPDEST PUSH9 0x10000000000000000 DUP2 LT PUSH2 0x189 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x496E76616C696420616D6F756E742E0000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58E PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP PUSH1 0x60 PUSH1 0x2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x270 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3E3AA6C5 DUP6 PUSH31 0xC73F681176FC7B3F9693986FD7B14581E8D540519E27400E88B8713932BE01 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x352 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x337 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x41C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x42E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP3 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x448 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x462 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C9DD5C0 DUP6 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x504 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x4E9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x52A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x53E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x554 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP POP POP POP POP JUMP INVALID SLOAD PUSH9 0x652075736572277320 PUSH3 0x616C61 PUSH15 0x6365206973206E6F74206C61726765 KECCAK256 PUSH6 0x6E6F7567682E LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATACOPY BYTE 0xE PUSH30 0x8FEDC228049BD472119A098A1223C952AC21B8D50B052DFEF6F141DC6473 PUSH16 0x6C634300060C00330000000000000000 ",
"sourceMap": "220:1797:1:-:0;;;642:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;723:13;708:12;;:28;;;;;;;;;;;;;;;;;;642:101;220:1797;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "608060405234801561001057600080fd5b50600436106100405760003560e01c8062aeef8a14610045578063051475dd14610087578063a41fe49f146100c9575b600080fd5b6100856004803603606081101561005b57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061010b565b005b6100b36004803603602081101561009d57600080fd5b81019080803590602001909291905050506103bb565b6040518082815260200191505060405180910390f35b610109600480360360608110156100df57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506103d3565b005b680100000000000000008110610189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c696420616d6f756e742e000000000000000000000000000000000081525060200191505060405180910390fd5b60016000838152602001908152602001600020548111156101f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061058e6027913960400191505060405180910390fd5b8060016000848152602001908152602001600020600082825403925050819055506060600267ffffffffffffffff8111801561023057600080fd5b5060405190808252806020026020018201604052801561025f5781602001602082028036833780820191505090505b509050828160008151811061027057fe5b602002602001018181525050818160018151811061028a57fe5b60200260200101818152505060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e3aa6c5857ec73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be01846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610352578082015181840152602081019050610337565b50505050905001945050505050602060405180830381600087803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b505050506040513d60208110156103a357600080fd5b81019080805190602001909291905050505050505050565b60016020528060005260406000206000915090505481565b6060600367ffffffffffffffff811180156103ed57600080fd5b5060405190808252806020026020018201604052801561041c5781602001602082028036833780820191505090505b50905060008160008151811061042e57fe5b602002602001018181525050828160018151811061044857fe5b602002602001018181525050818160028151811061046257fe5b60200260200101818152505060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c9dd5c085836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156105045780820151818401526020810190506104e9565b505050509050019350505050602060405180830381600087803b15801561052a57600080fd5b505af115801561053e573d6000803e3d6000fd5b505050506040513d602081101561055457600080fd5b8101908080519060200190929190505050508160016000858152602001908152602001600020600082825401925050819055505050505056fe546865207573657227732062616c616e6365206973206e6f74206c6172676520656e6f7567682ea2646970667358221220371a0e7d8fedc228049bd472119a098a1223c952ac21b8d50b052dfef6f141dc64736f6c634300060c0033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xAEEF8A EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0x51475DD EQ PUSH2 0x87 JUMPI DUP1 PUSH4 0xA41FE49F EQ PUSH2 0xC9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x85 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x10B JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3BB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x109 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3D3 JUMP JUMPDEST STOP JUMPDEST PUSH9 0x10000000000000000 DUP2 LT PUSH2 0x189 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x496E76616C696420616D6F756E742E0000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58E PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP PUSH1 0x60 PUSH1 0x2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x270 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3E3AA6C5 DUP6 PUSH31 0xC73F681176FC7B3F9693986FD7B14581E8D540519E27400E88B8713932BE01 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x352 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x337 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x41C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x42E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP3 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x448 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x462 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C9DD5C0 DUP6 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x504 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x4E9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x52A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x53E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x554 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP POP POP POP POP JUMP INVALID SLOAD PUSH9 0x652075736572277320 PUSH3 0x616C61 PUSH15 0x6365206973206E6F74206C61726765 KECCAK256 PUSH6 0x6E6F7567682E LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATACOPY BYTE 0xE PUSH30 0x8FEDC228049BD472119A098A1223C952AC21B8D50B052DFEF6F141DC6473 PUSH16 0x6C634300060C00330000000000000000 ",
"sourceMap": "220:1797:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1374:641;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;316:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;749:619;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1374:641;1514:5;1505:6;:14;1497:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1567:12;:18;1580:4;1567:18;;;;;;;;;;;;1557:6;:28;;1549:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1696:6;1674:12;:18;1687:4;1674:18;;;;;;;;;;;;:28;;;;;;;;;;;1765:24;1806:1;1792:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1765:43;;1831:4;1818:7;1826:1;1818:10;;;;;;;;;;;;;:17;;;;;1858:6;1845:7;1853:1;1845:10;;;;;;;;;;;;;:19;;;;;1934:12;;;;;;;;;;:28;;;1963:17;507:75;2000:7;1934:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1374:641;;;;:::o;316:47::-;;;;;;;;;;;;;;;;;:::o;749:619::-;928:24;969:1;955:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;928:43;;406:1;981:7;989:1;981:10;;;;;;;;;;;;;:29;;;;;1033:4;1020:7;1028:1;1020:10;;;;;;;;;;;;;:17;;;;;1060:6;1047:7;1055:1;1047:10;;;;;;;;;;;;;:19;;;;;1227:12;;;;;;;;;;:33;;;1261:17;1280:7;1227:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1355:6;1333:12;:18;1346:4;1333:18;;;;;;;;;;;;:28;;;;;;;;;;;749:619;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "302800",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"deposit(uint256,uint256,uint256)": "infinite",
"userBalances(uint256)": "1163",
"withdraw(uint256,uint256,uint256)": "infinite"
}
},
"methodIdentifiers": {
"deposit(uint256,uint256,uint256)": "00aeef8a",
"userBalances(uint256)": "051475dd",
"withdraw(uint256,uint256,uint256)": "a41fe49f"
}
},
"abi": [
{
"inputs": [
{
"internalType": "contract MockStarknetMessaging",
"name": "starknetCore_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "l2ContractAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "user",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "deposit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "userBalances",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "l2ContractAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "user",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "contract MockStarknetMessaging",
"name": "starknetCore_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "l2ContractAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "user",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "deposit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "userBalances",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "l2ContractAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "user",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"constructor": "Initializes the contract state."
},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/L1L2.sol": "L1L2"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/IStarknetMessaging.sol": {
"keccak256": "0x9c6055215b69d3287eeba3bd1eac040decb04ae59f69c2fcbc1ec7a716ddb252",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://b50838486de38f49daa8225e97af40c4a5c995463d691f3a29fcbbc65870f04d",
"dweb:/ipfs/QmPmhZ7FFTtX4XFA3U7Qr36RCVkdLzhaFfkEoHT3Lydd5c"
]
},
"contracts/L1L2.sol": {
"keccak256": "0x449588c80df0aa16ffcd80ae234cc225af3486b8895cb600267e140ef15b9cc5",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://cb9b3580580c53078530da105cc16e37eb01ba3460f9970ab75de26103aa6499",
"dweb:/ipfs/QmVMTESMUpP6s4UiiNzCpzcNianjiRhzXQUy299ZXNy6bQ"
]
},
"contracts/MockStarknetMessaging.sol": {
"keccak256": "0x9c7b101d81c870970dc96d84320405dbb115ec5ca579724018107a372039339d",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://87afcc76e0e21b8b53aa4136a6460b385c87873e917a7bdfdb936a678227141b",
"dweb:/ipfs/QmSQGAitXTzG7YU3BokjFgUaChMN8oQ3n6dyhKK7C9spFC"
]
},
"contracts/NamedStorage.sol": {
"keccak256": "0x49ad9a02df0c76a084989eadacd46566b65dbeb0cd443a3685832592701d2d50",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://7c0d331bee821a0db40603299d0ccf239cfc1d46710af97c28bbe4221cdc2866",
"dweb:/ipfs/QmawroFrFWHBJTJXGXyyjdnmj7nsFpUmqNGNgEZSkAQVLu"
]
},
"contracts/StarknetMessaging.sol": {
"keccak256": "0xf226fba62b55cdb65b1f006f956f6561488a46dd256c4c4893a7cdb6c1652799",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://d2e1789d1221ad1797f55650b4c7d3e54dac82ebe9f53c16c7949a0379c94218",
"dweb:/ipfs/QmZg3ZDdUbXDpgq2ofjxfHEXPm3eQ1EzX7E8JzgraMWFzG"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506040516114cd3803806114cd8339818101604052602081101561003357600080fd5b81019080805190602001909291905050506100538161005960201b60201c565b50610106565b6100856040518060600160405280602d81526020016114a0602d91398261008860201b610ff11760201c565b50565b6000826040516020018082805190602001908083835b602083106100c1578051825260208201915060208101905060208303925061009e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b61138b806101156000396000f3fe6080604052600436106100a75760003560e01c80637a98660b116100645780637a98660b146103d85780637cbe06d1146104905780638303bd8a146104bb5780639be446bf146104e6578063a46efaf314610535578063d1fb150914610584576100a7565b8063018cccdf146100ac578063067aba99146100d75780632c9dd5c0146101855780633e3aa6c5146102295780636170ff1b146102d157806377c7d7a914610389575b600080fd5b3480156100b857600080fd5b506100c161061e565b6040518082815260200191505060405180910390f35b3480156100e357600080fd5b50610183600480360360a08110156100fa57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561013557600080fd5b82018360208201111561014757600080fd5b8035906020019184602083028401116401000000008311171561016957600080fd5b909192939192939080359060200190929190505050610663565b005b34801561019157600080fd5b50610213600480360360408110156101a857600080fd5b8101908080359060200190929190803590602001906401000000008111156101cf57600080fd5b8201836020820111156101e157600080fd5b8035906020019184602083028401116401000000008311171561020357600080fd5b909192939192939050505061077c565b6040518082815260200191505060405180910390f35b6102b46004803603606081101561023f57600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561027057600080fd5b82018360208201111561028257600080fd5b803590602001918460208302840111640100000000831117156102a457600080fd5b9091929391929390505050610925565b604051808381526020018281526020019250505060405180910390f35b3480156102dd57600080fd5b50610373600480360360808110156102f457600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561032557600080fd5b82018360208201111561033757600080fd5b8035906020019184602083028401116401000000008311171561035957600080fd5b909192939192939080359060200190929190505050610ac6565b6040518082815260200191505060405180910390f35b34801561039557600080fd5b506103c2600480360360208110156103ac57600080fd5b8101908080359060200190929190505050610d79565b6040518082815260200191505060405180910390f35b3480156103e457600080fd5b5061047a600480360360808110156103fb57600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561042c57600080fd5b82018360208201111561043e57600080fd5b8035906020019184602083028401116401000000008311171561046057600080fd5b909192939192939080359060200190929190505050610d9c565b6040518082815260200191505060405180910390f35b34801561049c57600080fd5b506104a5610ef6565b6040518082815260200191505060405180910390f35b3480156104c757600080fd5b506104d0610f02565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050610f2a565b6040518082815260200191505060405180910390f35b34801561054157600080fd5b5061056e6004803603602081101561055857600080fd5b8101908080359060200190929190505050610f4d565b6040518082815260200191505060405180910390f35b34801561059057600080fd5b5061061c600480360360608110156105a757600080fd5b810190808035906020019092919080359060200190929190803590602001906401000000008111156105d857600080fd5b8201836020820111156105ea57600080fd5b8035906020019184602083028401116401000000008311171561060c57600080fd5b9091929391929390505050610f70565b005b600061065e6040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525061106f565b905090565b600086868387878790508888604051602001808881526020018781526020018681526020018581526020018481526020018383602002808284378083019250505097505050505050505060405160208183030381529060405280519060200120905060006106cf6110f0565b60008381526020019081526020016000205411610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000081525060200191505060405180910390fd5b600061075e6110f0565b60008381526020019081526020016000208190555050505050505050565b600080843373ffffffffffffffffffffffffffffffffffffffff1685859050868660405160200180868152602001858152602001848152602001838360200280828437808301925050509550505050505060405160208183030381529060405280519060200120905060006107ef611118565b60008381526020019081526020016000205411610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b1868660405180806020018281038252848482818152602001925060200280828437600081840152601f19601f820116905080830192505050935050505060405180910390a360016108fc611118565b600083815260200190815260200160002060008282540392505081905550809150509392505050565b600080670de0b6b3a76400003411156109a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d41585f4c315f4d53475f4645455f455843454544454400000000000000000081525060200191505060405180910390fd5b60006109b061061e565b90506109f46040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525060018301610ff1565b85873373ffffffffffffffffffffffffffffffffffffffff167fdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b8888863460405180806020018481526020018381526020018281038252868682818152602001925060200280828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a46000610a928888888886611140565b905060013401610aa06110f0565b600083815260200190815260200160002081905550808293509350505094509492505050565b600084863373ffffffffffffffffffffffffffffffffffffffff167f8abd2ec2e0a10c82f5b60ea00455fa96c41fd144f225fcc52b8d83d94f803ed887878760405180806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000610b5e8787878787611140565b90506000610b6a6110f0565b60008381526020019081526020016000205490506000811415610bf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4d4553534147455f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b6000610bff6111c1565b60008481526020019081526020016000205490506000811415610c6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806113346022913960400191505060405180910390fd5b6000610c77610f02565b8201905081811015610cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43414e43454c5f414c4c4f5745445f54494d455f4f564552464c4f570000000081525060200191505060405180910390fd5b80421015610d4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061126a6024913960400191505060405180910390fd5b6000610d546110f0565b6000868152602001908152602001600020819055508394505050505095945050505050565b6000610d836110f0565b6000838152602001908152602001600020549050919050565b600084863373ffffffffffffffffffffffffffffffffffffffff167f2e00dccd686fd6823ec7dc3e125582aa82881b6ff5f6b5a73856e1ea8338a3be87878760405180806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000610e348787878787611140565b90506000610e406110f0565b600083815260200190815260200160002054905060008111610eca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4d4553534147455f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b42610ed36111c1565b600084815260200190815260200160002081905550819250505095945050505050565b670de0b6b3a764000081565b6000610f256040518060600160405280602d81526020016112be602d913961106f565b905090565b6000610f346111c1565b6000838152602001908152602001600020549050919050565b6000610f57611118565b6000838152602001908152602001600020549050919050565b600084848484905085856040516020018086815260200185815260200184815260200183836020028082843780830192505050955050505050506040516020818303038152906040528051906020012090506001610fcc611118565b6000838152602001908152602001600020600082825401925050819055505050505050565b6000826040516020018082805190602001908083835b6020831061102a5780518252602082019150602081019050602083039250611007565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b600080826040516020018082805190602001908083835b602083106110a95780518252602082019150602081019050602083039250611086565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061111360405180606001604052806026815260200161130e602691396111e9565b905090565b600061113b6040518060600160405280602381526020016112eb602391396111e9565b905090565b60003373ffffffffffffffffffffffffffffffffffffffff16868387878790508888604051602001808881526020018781526020018681526020018581526020018481526020018383602002808284378083019250505097505050505050505060405160208183030381529060405280519060200120905095945050505050565b60006111e460405180606001604052806030815260200161128e603091396111e9565b905090565b600080826040516020018082805190602001908083835b602083106112235780518252602082019150602081019050602083039250611200565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505091905056fe4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f414c4c4f5745445f594554535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e475f56324d4553534147455f43414e43454c4c4154494f4e5f4e4f545f524551554553544544a2646970667358221220d2e44c1bc966286b1d336ec186043b6e9824c95a19f1405aa91ab47d8128b11a64736f6c634300060c0033535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x14CD CODESIZE SUB DUP1 PUSH2 0x14CD DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x53 DUP2 PUSH2 0x59 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP PUSH2 0x106 JUMP JUMPDEST PUSH2 0x85 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14A0 PUSH1 0x2D SWAP2 CODECOPY DUP3 PUSH2 0x88 PUSH1 0x20 SHL PUSH2 0xFF1 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x9E JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x138B DUP1 PUSH2 0x115 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA7 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A98660B GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x7A98660B EQ PUSH2 0x3D8 JUMPI DUP1 PUSH4 0x7CBE06D1 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0x8303BD8A EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0x9BE446BF EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0xA46EFAF3 EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0xD1FB1509 EQ PUSH2 0x584 JUMPI PUSH2 0xA7 JUMP JUMPDEST DUP1 PUSH4 0x18CCCDF EQ PUSH2 0xAC JUMPI DUP1 PUSH4 0x67ABA99 EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0x2C9DD5C0 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x3E3AA6C5 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0x6170FF1B EQ PUSH2 0x2D1 JUMPI DUP1 PUSH4 0x77C7D7A9 EQ PUSH2 0x389 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC1 PUSH2 0x61E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x183 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x663 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x77C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x270 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x373 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xAC6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xD79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x43E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xD9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A5 PUSH2 0xEF6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D0 PUSH2 0xF02 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x51F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x509 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xF2A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x541 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x56E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x558 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xF4D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x5A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x60C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0xF70 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0x65E PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F4D5347494E475F4C31544F4C325F4E4F4E4345 DUP2 MSTORE POP PUSH2 0x106F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP7 DUP4 DUP8 DUP8 DUP8 SWAP1 POP DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x6CF PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD GT PUSH2 0x754 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x75E PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 SWAP1 POP DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x7EF PUSH2 0x1118 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD GT PUSH2 0x874 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH32 0x7A06C571AA77F34D9706C51E5D8122B5595AEBEAA34233BFE866F22BEFB973B1 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 PUSH2 0x8FC PUSH2 0x1118 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH8 0xDE0B6B3A7640000 CALLVALUE GT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4D41585F4C315F4D53475F4645455F4558434545444544000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x9B0 PUSH2 0x61E JUMP JUMPDEST SWAP1 POP PUSH2 0x9F4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F4D5347494E475F4C31544F4C325F4E4F4E4345 DUP2 MSTORE POP PUSH1 0x1 DUP4 ADD PUSH2 0xFF1 JUMP JUMPDEST DUP6 DUP8 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDB80DD488ACF86D17C747445B0EABB5D57C541D3BD7B6B87AF987858E5066B2B DUP9 DUP9 DUP7 CALLVALUE PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP7 DUP7 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0xA92 DUP9 DUP9 DUP9 DUP9 DUP7 PUSH2 0x1140 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 CALLVALUE ADD PUSH2 0xAA0 PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 DUP3 SWAP4 POP SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8ABD2EC2E0A10C82F5B60EA00455FA96C41FD144F225FCC52B8D83D94F803ED8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0xB5E DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1140 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xB6A PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0xBF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F5F4D4553534147455F544F5F43414E43454C000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xBFF PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0xC6D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1334 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xC77 PUSH2 0xF02 JUMP JUMPDEST DUP3 ADD SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0xCF1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414E43454C5F414C4C4F5745445F54494D455F4F564552464C4F5700000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 TIMESTAMP LT ISZERO PUSH2 0xD4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x126A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD54 PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP4 SWAP5 POP POP POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD83 PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2E00DCCD686FD6823EC7DC3E125582AA82881B6FF5F6B5A73856E1EA8338A3BE DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0xE34 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1140 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE40 PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xECA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F5F4D4553534147455F544F5F43414E43454C000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST TIMESTAMP PUSH2 0xED3 PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 SWAP3 POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF25 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12BE PUSH1 0x2D SWAP2 CODECOPY PUSH2 0x106F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF34 PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF57 PUSH2 0x1118 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 SWAP1 POP DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x1 PUSH2 0xFCC PUSH2 0x1118 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x102A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1007 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x10A9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1086 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1113 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x130E PUSH1 0x26 SWAP2 CODECOPY PUSH2 0x11E9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x113B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12EB PUSH1 0x23 SWAP2 CODECOPY PUSH2 0x11E9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP4 DUP8 DUP8 DUP8 SWAP1 POP DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11E4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x128E PUSH1 0x30 SWAP2 CODECOPY PUSH2 0x11E9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1223 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1200 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE GASLIMIT 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4E 0x4F SLOAD 0x5F COINBASE 0x4C 0x4C 0x4F JUMPI GASLIMIT DIFFICULTY 0x5F MSIZE GASLIMIT SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F DIFFICULTY GASLIMIT 0x4C COINBASE MSIZE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C ORIGIN SLOAD 0x4F 0x4C BALANCE 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE 0x5F JUMP ORIGIN 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE GASLIMIT 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4E 0x4F SLOAD 0x5F MSTORE GASLIMIT MLOAD SSTORE GASLIMIT MSTORE8 SLOAD GASLIMIT DIFFICULTY LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0xE4 0x4C SHL 0xC9 PUSH7 0x286B1D336EC186 DIV EXTCODESIZE PUSH15 0x9824C95A19F1405AA91AB47D8128B1 BYTE PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F DIFFICULTY GASLIMIT 0x4C COINBASE MSIZE ",
"sourceMap": "101:1078:2:-:0;;;159:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222:50;247:24;222;;;:50;;:::i;:::-;159:120;101:1078;;2096:162:4;2173:78;2199:35;;;;;;;;;;;;;;;;;2236:14;2173:25;;;;;:78;;:::i;:::-;2096:162;:::o;1378:192:3:-;1454:12;1496:4;1479:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1469:33;;;;;;1454:48;;1548:5;1542:4;1535:19;1521:43;;;:::o;101:1078:2:-;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "6080604052600436106100a75760003560e01c80637a98660b116100645780637a98660b146103d85780637cbe06d1146104905780638303bd8a146104bb5780639be446bf146104e6578063a46efaf314610535578063d1fb150914610584576100a7565b8063018cccdf146100ac578063067aba99146100d75780632c9dd5c0146101855780633e3aa6c5146102295780636170ff1b146102d157806377c7d7a914610389575b600080fd5b3480156100b857600080fd5b506100c161061e565b6040518082815260200191505060405180910390f35b3480156100e357600080fd5b50610183600480360360a08110156100fa57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561013557600080fd5b82018360208201111561014757600080fd5b8035906020019184602083028401116401000000008311171561016957600080fd5b909192939192939080359060200190929190505050610663565b005b34801561019157600080fd5b50610213600480360360408110156101a857600080fd5b8101908080359060200190929190803590602001906401000000008111156101cf57600080fd5b8201836020820111156101e157600080fd5b8035906020019184602083028401116401000000008311171561020357600080fd5b909192939192939050505061077c565b6040518082815260200191505060405180910390f35b6102b46004803603606081101561023f57600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561027057600080fd5b82018360208201111561028257600080fd5b803590602001918460208302840111640100000000831117156102a457600080fd5b9091929391929390505050610925565b604051808381526020018281526020019250505060405180910390f35b3480156102dd57600080fd5b50610373600480360360808110156102f457600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561032557600080fd5b82018360208201111561033757600080fd5b8035906020019184602083028401116401000000008311171561035957600080fd5b909192939192939080359060200190929190505050610ac6565b6040518082815260200191505060405180910390f35b34801561039557600080fd5b506103c2600480360360208110156103ac57600080fd5b8101908080359060200190929190505050610d79565b6040518082815260200191505060405180910390f35b3480156103e457600080fd5b5061047a600480360360808110156103fb57600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561042c57600080fd5b82018360208201111561043e57600080fd5b8035906020019184602083028401116401000000008311171561046057600080fd5b909192939192939080359060200190929190505050610d9c565b6040518082815260200191505060405180910390f35b34801561049c57600080fd5b506104a5610ef6565b6040518082815260200191505060405180910390f35b3480156104c757600080fd5b506104d0610f02565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050610f2a565b6040518082815260200191505060405180910390f35b34801561054157600080fd5b5061056e6004803603602081101561055857600080fd5b8101908080359060200190929190505050610f4d565b6040518082815260200191505060405180910390f35b34801561059057600080fd5b5061061c600480360360608110156105a757600080fd5b810190808035906020019092919080359060200190929190803590602001906401000000008111156105d857600080fd5b8201836020820111156105ea57600080fd5b8035906020019184602083028401116401000000008311171561060c57600080fd5b9091929391929390505050610f70565b005b600061065e6040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525061106f565b905090565b600086868387878790508888604051602001808881526020018781526020018681526020018581526020018481526020018383602002808284378083019250505097505050505050505060405160208183030381529060405280519060200120905060006106cf6110f0565b60008381526020019081526020016000205411610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000081525060200191505060405180910390fd5b600061075e6110f0565b60008381526020019081526020016000208190555050505050505050565b600080843373ffffffffffffffffffffffffffffffffffffffff1685859050868660405160200180868152602001858152602001848152602001838360200280828437808301925050509550505050505060405160208183030381529060405280519060200120905060006107ef611118565b60008381526020019081526020016000205411610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b1868660405180806020018281038252848482818152602001925060200280828437600081840152601f19601f820116905080830192505050935050505060405180910390a360016108fc611118565b600083815260200190815260200160002060008282540392505081905550809150509392505050565b600080670de0b6b3a76400003411156109a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d41585f4c315f4d53475f4645455f455843454544454400000000000000000081525060200191505060405180910390fd5b60006109b061061e565b90506109f46040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525060018301610ff1565b85873373ffffffffffffffffffffffffffffffffffffffff167fdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b8888863460405180806020018481526020018381526020018281038252868682818152602001925060200280828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a46000610a928888888886611140565b905060013401610aa06110f0565b600083815260200190815260200160002081905550808293509350505094509492505050565b600084863373ffffffffffffffffffffffffffffffffffffffff167f8abd2ec2e0a10c82f5b60ea00455fa96c41fd144f225fcc52b8d83d94f803ed887878760405180806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000610b5e8787878787611140565b90506000610b6a6110f0565b60008381526020019081526020016000205490506000811415610bf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4d4553534147455f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b6000610bff6111c1565b60008481526020019081526020016000205490506000811415610c6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806113346022913960400191505060405180910390fd5b6000610c77610f02565b8201905081811015610cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43414e43454c5f414c4c4f5745445f54494d455f4f564552464c4f570000000081525060200191505060405180910390fd5b80421015610d4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061126a6024913960400191505060405180910390fd5b6000610d546110f0565b6000868152602001908152602001600020819055508394505050505095945050505050565b6000610d836110f0565b6000838152602001908152602001600020549050919050565b600084863373ffffffffffffffffffffffffffffffffffffffff167f2e00dccd686fd6823ec7dc3e125582aa82881b6ff5f6b5a73856e1ea8338a3be87878760405180806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000610e348787878787611140565b90506000610e406110f0565b600083815260200190815260200160002054905060008111610eca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4d4553534147455f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b42610ed36111c1565b600084815260200190815260200160002081905550819250505095945050505050565b670de0b6b3a764000081565b6000610f256040518060600160405280602d81526020016112be602d913961106f565b905090565b6000610f346111c1565b6000838152602001908152602001600020549050919050565b6000610f57611118565b6000838152602001908152602001600020549050919050565b600084848484905085856040516020018086815260200185815260200184815260200183836020028082843780830192505050955050505050506040516020818303038152906040528051906020012090506001610fcc611118565b6000838152602001908152602001600020600082825401925050819055505050505050565b6000826040516020018082805190602001908083835b6020831061102a5780518252602082019150602081019050602083039250611007565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b600080826040516020018082805190602001908083835b602083106110a95780518252602082019150602081019050602083039250611086565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061111360405180606001604052806026815260200161130e602691396111e9565b905090565b600061113b6040518060600160405280602381526020016112eb602391396111e9565b905090565b60003373ffffffffffffffffffffffffffffffffffffffff16868387878790508888604051602001808881526020018781526020018681526020018581526020018481526020018383602002808284378083019250505097505050505050505060405160208183030381529060405280519060200120905095945050505050565b60006111e460405180606001604052806030815260200161128e603091396111e9565b905090565b600080826040516020018082805190602001908083835b602083106112235780518252602082019150602081019050602083039250611200565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505091905056fe4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f414c4c4f5745445f594554535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e475f56324d4553534147455f43414e43454c4c4154494f4e5f4e4f545f524551554553544544a2646970667358221220d2e44c1bc966286b1d336ec186043b6e9824c95a19f1405aa91ab47d8128b11a64736f6c634300060c0033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA7 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A98660B GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x7A98660B EQ PUSH2 0x3D8 JUMPI DUP1 PUSH4 0x7CBE06D1 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0x8303BD8A EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0x9BE446BF EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0xA46EFAF3 EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0xD1FB1509 EQ PUSH2 0x584 JUMPI PUSH2 0xA7 JUMP JUMPDEST DUP1 PUSH4 0x18CCCDF EQ PUSH2 0xAC JUMPI DUP1 PUSH4 0x67ABA99 EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0x2C9DD5C0 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x3E3AA6C5 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0x6170FF1B EQ PUSH2 0x2D1 JUMPI DUP1 PUSH4 0x77C7D7A9 EQ PUSH2 0x389 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC1 PUSH2 0x61E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x183 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x663 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x77C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x270 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x373 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xAC6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xD79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x3FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x43E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xD9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A5 PUSH2 0xEF6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D0 PUSH2 0xF02 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x51F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x509 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xF2A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x541 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x56E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x558 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xF4D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x5A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x60C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0xF70 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0x65E PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F4D5347494E475F4C31544F4C325F4E4F4E4345 DUP2 MSTORE POP PUSH2 0x106F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP7 DUP4 DUP8 DUP8 DUP8 SWAP1 POP DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x6CF PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD GT PUSH2 0x754 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x75E PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 SWAP1 POP DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x7EF PUSH2 0x1118 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD GT PUSH2 0x874 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH32 0x7A06C571AA77F34D9706C51E5D8122B5595AEBEAA34233BFE866F22BEFB973B1 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 PUSH2 0x8FC PUSH2 0x1118 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH8 0xDE0B6B3A7640000 CALLVALUE GT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4D41585F4C315F4D53475F4645455F4558434545444544000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x9B0 PUSH2 0x61E JUMP JUMPDEST SWAP1 POP PUSH2 0x9F4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F4D5347494E475F4C31544F4C325F4E4F4E4345 DUP2 MSTORE POP PUSH1 0x1 DUP4 ADD PUSH2 0xFF1 JUMP JUMPDEST DUP6 DUP8 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDB80DD488ACF86D17C747445B0EABB5D57C541D3BD7B6B87AF987858E5066B2B DUP9 DUP9 DUP7 CALLVALUE PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP7 DUP7 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0xA92 DUP9 DUP9 DUP9 DUP9 DUP7 PUSH2 0x1140 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 CALLVALUE ADD PUSH2 0xAA0 PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 DUP3 SWAP4 POP SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8ABD2EC2E0A10C82F5B60EA00455FA96C41FD144F225FCC52B8D83D94F803ED8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0xB5E DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1140 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xB6A PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0xBF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F5F4D4553534147455F544F5F43414E43454C000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xBFF PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0xC6D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1334 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xC77 PUSH2 0xF02 JUMP JUMPDEST DUP3 ADD SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0xCF1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414E43454C5F414C4C4F5745445F54494D455F4F564552464C4F5700000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 TIMESTAMP LT ISZERO PUSH2 0xD4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x126A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD54 PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP4 SWAP5 POP POP POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD83 PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2E00DCCD686FD6823EC7DC3E125582AA82881B6FF5F6B5A73856E1EA8338A3BE DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0xE34 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1140 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE40 PUSH2 0x10F0 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xECA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F5F4D4553534147455F544F5F43414E43454C000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST TIMESTAMP PUSH2 0xED3 PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 SWAP3 POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF25 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12BE PUSH1 0x2D SWAP2 CODECOPY PUSH2 0x106F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF34 PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF57 PUSH2 0x1118 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 SWAP1 POP DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x1 PUSH2 0xFCC PUSH2 0x1118 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x102A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1007 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x10A9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1086 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1113 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x130E PUSH1 0x26 SWAP2 CODECOPY PUSH2 0x11E9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x113B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12EB PUSH1 0x23 SWAP2 CODECOPY PUSH2 0x11E9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP4 DUP8 DUP8 DUP8 SWAP1 POP DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11E4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x128E PUSH1 0x30 SWAP2 CODECOPY PUSH2 0x11E9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1223 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1200 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE GASLIMIT 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4E 0x4F SLOAD 0x5F COINBASE 0x4C 0x4C 0x4F JUMPI GASLIMIT DIFFICULTY 0x5F MSIZE GASLIMIT SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F DIFFICULTY GASLIMIT 0x4C COINBASE MSIZE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C ORIGIN SLOAD 0x4F 0x4C BALANCE 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE 0x5F JUMP ORIGIN 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE GASLIMIT 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4E 0x4F SLOAD 0x5F MSTORE GASLIMIT MLOAD SSTORE GASLIMIT MSTORE8 SLOAD GASLIMIT DIFFICULTY LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0xE4 0x4C SHL 0xC9 PUSH7 0x286B1D336EC186 DIV EXTCODESIZE PUSH15 0x9824C95A19F1405AA91AB47D8128B1 BYTE PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ",
"sourceMap": "101:1078:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1799:133:4;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;721:456:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4356:497:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3462:773;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5449:940;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1195:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4859:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;999:48;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1938:152;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2462:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1323:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;337:311:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1799:133:4;1850:7;1876:49;1902:22;;;;;;;;;;;;;;;;;1876:25;:49::i;:::-;1869:56;;1799:133;:::o;721:456:2:-;919:15;977:11;990:9;1001:5;1008:8;1018:7;;:14;;1034:7;;960:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:115;;;;;;919:133;;1099:1;1071:16;:14;:16::i;:::-;:25;1088:7;1071:25;;;;;;;;;;;;:29;1063:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1169:1;1141:16;:14;:16::i;:::-;:25;1158:7;1141:25;;;;;;;;;;;:29;;;;721:456;;;;;;;:::o;4356:497:4:-;4486:7;4509:15;4567:11;4588:10;4580:19;;4601:7;;:14;;4617:7;;4550:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4527:108;;;;;;4509:126;;4682:1;4654:16;:14;:16::i;:::-;:25;4671:7;4654:25;;;;;;;;;;;;:29;4646:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4762:10;4729:53;;4749:11;4729:53;4774:7;;4729:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4821:1;4792:16;:14;:16::i;:::-;:25;4809:7;4792:25;;;;;;;;;;;;:30;;;;;;;;;;;4839:7;4832:14;;;4356:497;;;;;:::o;3462:773::-;3617:7;3626;1040;3653:9;:27;;3645:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3718:13;3734:20;:18;:20::i;:::-;3718:36;;3764:60;3790:22;;;;;;;;;;;;;;;;;3822:1;3814:5;:9;3764:25;:60::i;:::-;3877:8;3866:9;3854:10;3839:74;;;3887:7;;3896:5;3903:9;3839:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3923:15;3941:53;3958:9;3969:8;3979:7;;3988:5;3941:16;:53::i;:::-;3923:71;;4194:1;4182:9;:13;4154:16;:14;:16::i;:::-;:25;4171:7;4154:25;;;;;;;;;;;:41;;;;4213:7;4222:5;4205:23;;;;;;3462:773;;;;;;;:::o;5449:940::-;5623:7;5690:8;5679:9;5667:10;5647:68;;;5700:7;;5709:5;5647:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5725:15;5743:53;5760:9;5771:8;5781:7;;5790:5;5743:16;:53::i;:::-;5725:71;;5806:21;5830:16;:14;:16::i;:::-;:25;5847:7;5830:25;;;;;;;;;;;;5806:49;;5890:1;5873:13;:18;;5865:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5927:19;5949:28;:26;:28::i;:::-;:37;5978:7;5949:37;;;;;;;;;;;;5927:59;;6019:1;6004:11;:16;;5996:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6070:25;6112:26;:24;:26::i;:::-;6098:11;:40;6070:68;;6177:11;6156:17;:32;;6148:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6258:17;6239:15;:36;;6231:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6355:1;6327:16;:14;:16::i;:::-;:25;6344:7;6327:25;;;;;;;;;;;:29;;;;6374:7;6366:16;;;;;;5449:940;;;;;;;:::o;1195:122::-;1259:7;1285:16;:14;:16::i;:::-;:25;1302:7;1285:25;;;;;;;;;;;;1278:32;;1195:122;;;:::o;4859:584::-;5044:7;5122:8;5111:9;5099:10;5068:79;;;5132:7;;5141:5;5068:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5157:15;5175:53;5192:9;5203:8;5213:7;;5222:5;5175:16;:53::i;:::-;5157:71;;5238:21;5262:16;:14;:16::i;:::-;:25;5279:7;5262:25;;;;;;;;;;;;5238:49;;5321:1;5305:13;:17;5297:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5397:15;5357:28;:26;:28::i;:::-;:37;5386:7;5357:37;;;;;;;;;;;:55;;;;5429:7;5422:14;;;;4859:584;;;;;;;:::o;999:48::-;1040:7;999:48;:::o;1938:152::-;1995:7;2021:62;2047:35;;;;;;;;;;;;;;;;;2021:25;:62::i;:::-;2014:69;;1938:152;:::o;2462:146::-;2538:7;2564:28;:26;:28::i;:::-;:37;2593:7;2564:37;;;;;;;;;;;;2557:44;;2462:146;;;:::o;1323:122::-;1387:7;1413:16;:14;:16::i;:::-;:25;1430:7;1413:25;;;;;;;;;;;;1406:32;;1323:122;;;:::o;337:311:2:-;485:15;543:11;556:9;567:7;;:14;;583:7;;526:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;503:98;;;;;;485:116;;640:1;611:16;:14;:16::i;:::-;:25;628:7;611:25;;;;;;;;;;;;:30;;;;;;;;;;;337:311;;;;;:::o;1378:192:3:-;1454:12;1496:4;1479:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1469:33;;;;;;1454:48;;1548:5;1542:4;1535:19;1521:43;;;:::o;1163:209::-;1228:14;1254:12;1296:4;1279:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1269:33;;;;;;1254:48;;1351:4;1345:11;1335:21;;1321:45;;;;:::o;1451:168:4:-;1500:35;1554:58;1591:20;;;;;;;;;;;;;;;;;1554:36;:58::i;:::-;1547:65;;1451:168;:::o;1625:::-;1674:35;1728:58;1765:20;;;;;;;;;;;;;;;;;1728:36;:58::i;:::-;1721:65;;1625:168;:::o;2919:481::-;3086:7;3197:10;3189:19;;3230:9;3261:5;3288:8;3318:7;;:14;;3354:7;;3151:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3124:269;;;;;;3105:288;;2919:481;;;;;;;:::o;2614:221::-;2699:35;2757:71;2794:33;;;;;;;;;;;;;;;;;2757:36;:71::i;:::-;2750:78;;2614:221;:::o;257:298:3:-;357:50;423:16;469:4;452:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;442:33;;;;;;423:52;;531:8;508:31;;494:55;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "1000600",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"MAX_L1_MSG_FEE()": "227",
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": "infinite",
"consumeMessageFromL2(uint256,uint256[])": "infinite",
"l1ToL2MessageCancellations(bytes32)": "infinite",
"l1ToL2MessageNonce()": "infinite",
"l1ToL2Messages(bytes32)": "infinite",
"l2ToL1Messages(bytes32)": "infinite",
"messageCancellationDelay()": "infinite",
"mockConsumeMessageToL2(uint256,uint256,uint256,uint256[],uint256)": "infinite",
"mockSendMessageFromL2(uint256,uint256,uint256[])": "infinite",
"sendMessageToL2(uint256,uint256,uint256[])": "infinite",
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": "infinite"
}
},
"methodIdentifiers": {
"MAX_L1_MSG_FEE()": "7cbe06d1",
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": "6170ff1b",
"consumeMessageFromL2(uint256,uint256[])": "2c9dd5c0",
"l1ToL2MessageCancellations(bytes32)": "9be446bf",
"l1ToL2MessageNonce()": "018cccdf",
"l1ToL2Messages(bytes32)": "77c7d7a9",
"l2ToL1Messages(bytes32)": "a46efaf3",
"messageCancellationDelay()": "8303bd8a",
"mockConsumeMessageToL2(uint256,uint256,uint256,uint256[],uint256)": "067aba99",
"mockSendMessageFromL2(uint256,uint256,uint256[])": "d1fb1509",
"sendMessageToL2(uint256,uint256,uint256[])": "3e3aa6c5",
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": "7a98660b"
}
},
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "MessageCancellationDelay",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
},
{
"inputs": [],
"name": "MAX_L1_MSG_FEE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "cancelL1ToL2Message",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "consumeMessageFromL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l1ToL2MessageCancellations",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l1ToL2MessageNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l1ToL2Messages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l2ToL1Messages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "messageCancellationDelay",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "mockConsumeMessageToL2",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "mockSendMessageFromL2",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "sendMessageToL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "startL1ToL2MessageCancellation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "MessageCancellationDelay",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
},
{
"inputs": [],
"name": "MAX_L1_MSG_FEE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "cancelL1ToL2Message",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "consumeMessageFromL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l1ToL2MessageCancellations",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l1ToL2MessageNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l1ToL2Messages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l2ToL1Messages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "messageCancellationDelay",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "mockConsumeMessageToL2",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "mockSendMessageFromL2",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "sendMessageToL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "startL1ToL2MessageCancellation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": {
"notice": "Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). Note that the message fee is not refunded."
},
"consumeMessageFromL2(uint256,uint256[])": {
"notice": "Consumes a message that was sent from an L2 contract. Returns the hash of the message."
},
"l1ToL2MessageCancellations(bytes32)": {
"notice": "Returns the timestamp at the time cancelL1ToL2Message was called with a message matching 'msgHash'. The function returns 0 if cancelL1ToL2Message was never called."
},
"l1ToL2Messages(bytes32)": {
"notice": "Returns the msg_fee + 1 for the message with the given 'msgHash', or 0 if no message with such a hash is pending."
},
"mockConsumeMessageToL2(uint256,uint256,uint256,uint256[],uint256)": {
"notice": "Mocks consumption of a message from L1 to L2."
},
"mockSendMessageFromL2(uint256,uint256,uint256[])": {
"notice": "Mocks a message from L2 to L1."
},
"sendMessageToL2(uint256,uint256,uint256[])": {
"notice": "Sends a message to an L2 contract."
},
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": {
"notice": "Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message."
}
},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/MockStarknetMessaging.sol": "MockStarknetMessaging"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/IStarknetMessaging.sol": {
"keccak256": "0xda9dbafa1cd2bb313df72bf48c1fc7096d2ed0328898137001e7d047e693647a",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://802d3eac4aef2da65a0dcda9fe149cf0c247233312aab47113bb9de6d44ba72e",
"dweb:/ipfs/QmaYjHtMrE8JK9oxqcytDH1cBhyp9yah2mRWFE8vJeaJhe"
]
},
"contracts/IStarknetMessagingEvents.sol": {
"keccak256": "0xc3d883a6eb17b070787bf6e60393d41eddc8807591df1a828689574c150ac2a4",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://90d1fbc98c7a052aef9360089838b00a214513c538579381e858c98df989e1f1",
"dweb:/ipfs/QmaD6Sxgc9GCXqbnmAev8Tj3LYHH6jphEHvZGkxRNCTCfr"
]
},
"contracts/MockStarknetMessaging.sol": {
"keccak256": "0x45ec1bb4f6d007629d214eea8f7ac9d5df6c2d5f9c6072bb932489b7ba2f78b7",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://7ced82e7e8f35410a32acf1052aae61c2b4542221895814e67aa55347b25a8c3",
"dweb:/ipfs/QmbM8b3QJybbDfMGKmfRSftfKq9kpZUx51oXi8TzKiQqEZ"
]
},
"contracts/NamedStorage.sol": {
"keccak256": "0x49ad9a02df0c76a084989eadacd46566b65dbeb0cd443a3685832592701d2d50",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://7c0d331bee821a0db40603299d0ccf239cfc1d46710af97c28bbe4221cdc2866",
"dweb:/ipfs/QmawroFrFWHBJTJXGXyyjdnmj7nsFpUmqNGNgEZSkAQVLu"
]
},
"contracts/StarknetMessaging.sol": {
"keccak256": "0xd05eb51b3ab93f5740542efd2d6adf13d0288de6ef837aa376665382b8d40ee1",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://6e65db082262fc4c5999296db0ac158251ce28ad826dcefbe49e7b704890444f",
"dweb:/ipfs/QmYF7mY97besEN3FUy7vUkJBqJdfpyqKnVwk3CcYEjyf3G"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201ad17719c1db2d6c495f50e684d05a9ee5c476965df1c17f356988b55747bf2e64736f6c634300060c0033",
"opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE 0xD1 PUSH24 0x19C1DB2D6C495F50E684D05A9EE5C476965DF1C17F356988 0xB5 JUMPI SELFBALANCE 0xBF 0x2E PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ",
"sourceMap": "230:2538:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201ad17719c1db2d6c495f50e684d05a9ee5c476965df1c17f356988b55747bf2e64736f6c634300060c0033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE 0xD1 PUSH24 0x19C1DB2D6C495F50E684D05A9EE5C476965DF1C17F356988 0xB5 JUMPI SELFBALANCE 0xBF 0x2E PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ",
"sourceMap": "230:2538:0:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"addressToBoolMapping(string memory)": "infinite",
"bytes32ToAddressMapping(string memory)": "infinite",
"bytes32ToUint256Mapping(string memory)": "infinite",
"getAddressValue(string memory)": "infinite",
"getBoolValue(string memory)": "infinite",
"getUintValue(string memory)": "infinite",
"setAddressValue(string memory,address)": "infinite",
"setAddressValueOnce(string memory,address)": "infinite",
"setBoolValue(string memory,bool)": "infinite",
"setUintValue(string memory,uint256)": "infinite",
"setUintValueOnce(string memory,uint256)": "infinite"
}
},
"methodIdentifiers": {}
},
"abi": []
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/NamedStorage.sol": "NamedStorage"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/NamedStorage.sol": {
"keccak256": "0x49ad9a02df0c76a084989eadacd46566b65dbeb0cd443a3685832592701d2d50",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://7c0d331bee821a0db40603299d0ccf239cfc1d46710af97c28bbe4221cdc2866",
"dweb:/ipfs/QmawroFrFWHBJTJXGXyyjdnmj7nsFpUmqNGNgEZSkAQVLu"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "608060405234801561001057600080fd5b50611093806100206000396000f3fe6080604052600436106100915760003560e01c80637a98660b116100595780637a98660b146103145780637cbe06d1146103cc5780638303bd8a146103f75780639be446bf14610422578063a46efaf31461047157610091565b8063018cccdf146100965780632c9dd5c0146100c15780633e3aa6c5146101655780636170ff1b1461020d57806377c7d7a9146102c5575b600080fd5b3480156100a257600080fd5b506100ab6104c0565b6040518082815260200191505060405180910390f35b3480156100cd57600080fd5b5061014f600480360360408110156100e457600080fd5b81019080803590602001909291908035906020019064010000000081111561010b57600080fd5b82018360208201111561011d57600080fd5b8035906020019184602083028401116401000000008311171561013f57600080fd5b9091929391929390505050610505565b6040518082815260200191505060405180910390f35b6101f06004803603606081101561017b57600080fd5b810190808035906020019092919080359060200190929190803590602001906401000000008111156101ac57600080fd5b8201836020820111156101be57600080fd5b803590602001918460208302840111640100000000831117156101e057600080fd5b90919293919293905050506106ae565b604051808381526020018281526020019250505060405180910390f35b34801561021957600080fd5b506102af6004803603608081101561023057600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561026157600080fd5b82018360208201111561027357600080fd5b8035906020019184602083028401116401000000008311171561029557600080fd5b90919293919293908035906020019092919050505061084f565b6040518082815260200191505060405180910390f35b3480156102d157600080fd5b506102fe600480360360208110156102e857600080fd5b8101908080359060200190929190505050610b02565b6040518082815260200191505060405180910390f35b34801561032057600080fd5b506103b66004803603608081101561033757600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561036857600080fd5b82018360208201111561037a57600080fd5b8035906020019184602083028401116401000000008311171561039c57600080fd5b909192939192939080359060200190929190505050610b25565b6040518082815260200191505060405180910390f35b3480156103d857600080fd5b506103e1610c7f565b6040518082815260200191505060405180910390f35b34801561040357600080fd5b5061040c610c8b565b6040518082815260200191505060405180910390f35b34801561042e57600080fd5b5061045b6004803603602081101561044557600080fd5b8101908080359060200190929190505050610cb3565b6040518082815260200191505060405180910390f35b34801561047d57600080fd5b506104aa6004803603602081101561049457600080fd5b8101908080359060200190929190505050610cd6565b6040518082815260200191505060405180910390f35b60006105006040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e4345815250610cf9565b905090565b600080843373ffffffffffffffffffffffffffffffffffffffff168585905086866040516020018086815260200185815260200184815260200183836020028082843780830192505050955050505050506040516020818303038152906040528051906020012090506000610578610d7a565b600083815260200190815260200160002054116105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b1868660405180806020018281038252848482818152602001925060200280828437600081840152601f19601f820116905080830192505050935050505060405180910390a36001610685610d7a565b600083815260200190815260200160002060008282540392505081905550809150509392505050565b600080670de0b6b3a764000034111561072f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d41585f4c315f4d53475f4645455f455843454544454400000000000000000081525060200191505060405180910390fd5b60006107396104c0565b905061077d6040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525060018301610da2565b85873373ffffffffffffffffffffffffffffffffffffffff167fdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b8888863460405180806020018481526020018381526020018281038252868682818152602001925060200280828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a4600061081b8888888886610e20565b905060013401610829610ea1565b600083815260200190815260200160002081905550808293509350505094509492505050565b600084863373ffffffffffffffffffffffffffffffffffffffff167f8abd2ec2e0a10c82f5b60ea00455fa96c41fd144f225fcc52b8d83d94f803ed887878760405180806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f82011690508083019250505094505050505060405180910390a460006108e78787878787610e20565b905060006108f3610ea1565b6000838152602001908152602001600020549050600081141561097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4d4553534147455f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b6000610988610ec9565b600084815260200190815260200160002054905060008114156109f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061103c6022913960400191505060405180910390fd5b6000610a00610c8b565b8201905081811015610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43414e43454c5f414c4c4f5745445f54494d455f4f564552464c4f570000000081525060200191505060405180910390fd5b80421015610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610f726024913960400191505060405180910390fd5b6000610add610ea1565b6000868152602001908152602001600020819055508394505050505095945050505050565b6000610b0c610ea1565b6000838152602001908152602001600020549050919050565b600084863373ffffffffffffffffffffffffffffffffffffffff167f2e00dccd686fd6823ec7dc3e125582aa82881b6ff5f6b5a73856e1ea8338a3be87878760405180806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000610bbd8787878787610e20565b90506000610bc9610ea1565b600083815260200190815260200160002054905060008111610c53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4d4553534147455f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b42610c5c610ec9565b600084815260200190815260200160002081905550819250505095945050505050565b670de0b6b3a764000081565b6000610cae6040518060600160405280602d8152602001610fc6602d9139610cf9565b905090565b6000610cbd610ec9565b6000838152602001908152602001600020549050919050565b6000610ce0610d7a565b6000838152602001908152602001600020549050919050565b600080826040516020018082805190602001908083835b60208310610d335780518252602082019150602081019050602083039250610d10565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b6000610d9d604051806060016040528060238152602001610ff360239139610ef1565b905090565b6000826040516020018082805190602001908083835b60208310610ddb5780518252602082019150602081019050602083039250610db8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b60003373ffffffffffffffffffffffffffffffffffffffff16868387878790508888604051602001808881526020018781526020018681526020018581526020018481526020018383602002808284378083019250505097505050505050505060405160208183030381529060405280519060200120905095945050505050565b6000610ec460405180606001604052806026815260200161101660269139610ef1565b905090565b6000610eec604051806060016040528060308152602001610f9660309139610ef1565b905090565b600080826040516020018082805190602001908083835b60208310610f2b5780518252602082019150602081019050602083039250610f08565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505091905056fe4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f414c4c4f5745445f594554535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e475f56324d4553534147455f43414e43454c4c4154494f4e5f4e4f545f524551554553544544a26469706673582212202fd092cffe940c90cc78ae2cd32a81cae1d82bb7f8efc855b20be78ec457767c64736f6c634300060c0033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1093 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x91 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A98660B GT PUSH2 0x59 JUMPI DUP1 PUSH4 0x7A98660B EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0x7CBE06D1 EQ PUSH2 0x3CC JUMPI DUP1 PUSH4 0x8303BD8A EQ PUSH2 0x3F7 JUMPI DUP1 PUSH4 0x9BE446BF EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xA46EFAF3 EQ PUSH2 0x471 JUMPI PUSH2 0x91 JUMP JUMPDEST DUP1 PUSH4 0x18CCCDF EQ PUSH2 0x96 JUMPI DUP1 PUSH4 0x2C9DD5C0 EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x3E3AA6C5 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x6170FF1B EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x77C7D7A9 EQ PUSH2 0x2C5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAB PUSH2 0x4C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x505 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x17B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x6AE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x261 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x84F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xB02 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xB25 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E1 PUSH2 0xC7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40C PUSH2 0xC8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x445 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xCB3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4AA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH2 0x500 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F4D5347494E475F4C31544F4C325F4E4F4E4345 DUP2 MSTORE POP PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 SWAP1 POP DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x578 PUSH2 0xD7A JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD GT PUSH2 0x5FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH32 0x7A06C571AA77F34D9706C51E5D8122B5595AEBEAA34233BFE866F22BEFB973B1 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 PUSH2 0x685 PUSH2 0xD7A JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH8 0xDE0B6B3A7640000 CALLVALUE GT ISZERO PUSH2 0x72F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4D41585F4C315F4D53475F4645455F4558434545444544000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x739 PUSH2 0x4C0 JUMP JUMPDEST SWAP1 POP PUSH2 0x77D PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F4D5347494E475F4C31544F4C325F4E4F4E4345 DUP2 MSTORE POP PUSH1 0x1 DUP4 ADD PUSH2 0xDA2 JUMP JUMPDEST DUP6 DUP8 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDB80DD488ACF86D17C747445B0EABB5D57C541D3BD7B6B87AF987858E5066B2B DUP9 DUP9 DUP7 CALLVALUE PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP7 DUP7 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0x81B DUP9 DUP9 DUP9 DUP9 DUP7 PUSH2 0xE20 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 CALLVALUE ADD PUSH2 0x829 PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 DUP3 SWAP4 POP SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8ABD2EC2E0A10C82F5B60EA00455FA96C41FD144F225FCC52B8D83D94F803ED8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0x8E7 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xE20 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8F3 PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x97E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F5F4D4553534147455F544F5F43414E43454C000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x988 PUSH2 0xEC9 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x9F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x103C PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xA00 PUSH2 0xC8B JUMP JUMPDEST DUP3 ADD SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0xA7A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414E43454C5F414C4C4F5745445F54494D455F4F564552464C4F5700000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 TIMESTAMP LT ISZERO PUSH2 0xAD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF72 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xADD PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP4 SWAP5 POP POP POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB0C PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2E00DCCD686FD6823EC7DC3E125582AA82881B6FF5F6B5A73856E1EA8338A3BE DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0xBBD DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xE20 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBC9 PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xC53 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F5F4D4553534147455F544F5F43414E43454C000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST TIMESTAMP PUSH2 0xC5C PUSH2 0xEC9 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 SWAP3 POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCAE PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFC6 PUSH1 0x2D SWAP2 CODECOPY PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCBD PUSH2 0xEC9 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE0 PUSH2 0xD7A JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD33 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xD10 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD9D PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFF3 PUSH1 0x23 SWAP2 CODECOPY PUSH2 0xEF1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xDDB JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xDB8 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP4 DUP8 DUP8 DUP8 SWAP1 POP DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEC4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1016 PUSH1 0x26 SWAP2 CODECOPY PUSH2 0xEF1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEEC PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF96 PUSH1 0x30 SWAP2 CODECOPY PUSH2 0xEF1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xF2B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xF08 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE GASLIMIT 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4E 0x4F SLOAD 0x5F COINBASE 0x4C 0x4C 0x4F JUMPI GASLIMIT DIFFICULTY 0x5F MSIZE GASLIMIT SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F DIFFICULTY GASLIMIT 0x4C COINBASE MSIZE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C ORIGIN SLOAD 0x4F 0x4C BALANCE 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE 0x5F JUMP ORIGIN 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE GASLIMIT 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4E 0x4F SLOAD 0x5F MSTORE GASLIMIT MLOAD SSTORE GASLIMIT MSTORE8 SLOAD GASLIMIT DIFFICULTY LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F 0xD0 SWAP3 0xCF INVALID SWAP5 0xC SWAP1 0xCC PUSH25 0xAE2CD32A81CAE1D82BB7F8EFC855B20BE78EC457767C64736F PUSH13 0x634300060C0033000000000000 ",
"sourceMap": "381:6010:3:-:0;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "6080604052600436106100915760003560e01c80637a98660b116100595780637a98660b146103145780637cbe06d1146103cc5780638303bd8a146103f75780639be446bf14610422578063a46efaf31461047157610091565b8063018cccdf146100965780632c9dd5c0146100c15780633e3aa6c5146101655780636170ff1b1461020d57806377c7d7a9146102c5575b600080fd5b3480156100a257600080fd5b506100ab6104c0565b6040518082815260200191505060405180910390f35b3480156100cd57600080fd5b5061014f600480360360408110156100e457600080fd5b81019080803590602001909291908035906020019064010000000081111561010b57600080fd5b82018360208201111561011d57600080fd5b8035906020019184602083028401116401000000008311171561013f57600080fd5b9091929391929390505050610505565b6040518082815260200191505060405180910390f35b6101f06004803603606081101561017b57600080fd5b810190808035906020019092919080359060200190929190803590602001906401000000008111156101ac57600080fd5b8201836020820111156101be57600080fd5b803590602001918460208302840111640100000000831117156101e057600080fd5b90919293919293905050506106ae565b604051808381526020018281526020019250505060405180910390f35b34801561021957600080fd5b506102af6004803603608081101561023057600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561026157600080fd5b82018360208201111561027357600080fd5b8035906020019184602083028401116401000000008311171561029557600080fd5b90919293919293908035906020019092919050505061084f565b6040518082815260200191505060405180910390f35b3480156102d157600080fd5b506102fe600480360360208110156102e857600080fd5b8101908080359060200190929190505050610b02565b6040518082815260200191505060405180910390f35b34801561032057600080fd5b506103b66004803603608081101561033757600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561036857600080fd5b82018360208201111561037a57600080fd5b8035906020019184602083028401116401000000008311171561039c57600080fd5b909192939192939080359060200190929190505050610b25565b6040518082815260200191505060405180910390f35b3480156103d857600080fd5b506103e1610c7f565b6040518082815260200191505060405180910390f35b34801561040357600080fd5b5061040c610c8b565b6040518082815260200191505060405180910390f35b34801561042e57600080fd5b5061045b6004803603602081101561044557600080fd5b8101908080359060200190929190505050610cb3565b6040518082815260200191505060405180910390f35b34801561047d57600080fd5b506104aa6004803603602081101561049457600080fd5b8101908080359060200190929190505050610cd6565b6040518082815260200191505060405180910390f35b60006105006040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e4345815250610cf9565b905090565b600080843373ffffffffffffffffffffffffffffffffffffffff168585905086866040516020018086815260200185815260200184815260200183836020028082843780830192505050955050505050506040516020818303038152906040528051906020012090506000610578610d7a565b600083815260200190815260200160002054116105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f494e56414c49445f4d4553534147455f544f5f434f4e53554d4500000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b1868660405180806020018281038252848482818152602001925060200280828437600081840152601f19601f820116905080830192505050935050505060405180910390a36001610685610d7a565b600083815260200190815260200160002060008282540392505081905550809150509392505050565b600080670de0b6b3a764000034111561072f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d41585f4c315f4d53475f4645455f455843454544454400000000000000000081525060200191505060405180910390fd5b60006107396104c0565b905061077d6040518060400160405280602081526020017f535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4e4f4e434581525060018301610da2565b85873373ffffffffffffffffffffffffffffffffffffffff167fdb80dd488acf86d17c747445b0eabb5d57c541d3bd7b6b87af987858e5066b2b8888863460405180806020018481526020018381526020018281038252868682818152602001925060200280828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a4600061081b8888888886610e20565b905060013401610829610ea1565b600083815260200190815260200160002081905550808293509350505094509492505050565b600084863373ffffffffffffffffffffffffffffffffffffffff167f8abd2ec2e0a10c82f5b60ea00455fa96c41fd144f225fcc52b8d83d94f803ed887878760405180806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f82011690508083019250505094505050505060405180910390a460006108e78787878787610e20565b905060006108f3610ea1565b6000838152602001908152602001600020549050600081141561097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4d4553534147455f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b6000610988610ec9565b600084815260200190815260200160002054905060008114156109f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061103c6022913960400191505060405180910390fd5b6000610a00610c8b565b8201905081811015610a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43414e43454c5f414c4c4f5745445f54494d455f4f564552464c4f570000000081525060200191505060405180910390fd5b80421015610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610f726024913960400191505060405180910390fd5b6000610add610ea1565b6000868152602001908152602001600020819055508394505050505095945050505050565b6000610b0c610ea1565b6000838152602001908152602001600020549050919050565b600084863373ffffffffffffffffffffffffffffffffffffffff167f2e00dccd686fd6823ec7dc3e125582aa82881b6ff5f6b5a73856e1ea8338a3be87878760405180806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f82011690508083019250505094505050505060405180910390a46000610bbd8787878787610e20565b90506000610bc9610ea1565b600083815260200190815260200160002054905060008111610c53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4f5f4d4553534147455f544f5f43414e43454c00000000000000000000000081525060200191505060405180910390fd5b42610c5c610ec9565b600084815260200190815260200160002081905550819250505095945050505050565b670de0b6b3a764000081565b6000610cae6040518060600160405280602d8152602001610fc6602d9139610cf9565b905090565b6000610cbd610ec9565b6000838152602001908152602001600020549050919050565b6000610ce0610d7a565b6000838152602001908152602001600020549050919050565b600080826040516020018082805190602001908083835b60208310610d335780518252602082019150602081019050602083039250610d10565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b6000610d9d604051806060016040528060238152602001610ff360239139610ef1565b905090565b6000826040516020018082805190602001908083835b60208310610ddb5780518252602082019150602081019050602083039250610db8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b60003373ffffffffffffffffffffffffffffffffffffffff16868387878790508888604051602001808881526020018781526020018681526020018581526020018481526020018383602002808284378083019250505097505050505050505060405160208183030381529060405280519060200120905095945050505050565b6000610ec460405180606001604052806026815260200161101660269139610ef1565b905090565b6000610eec604051806060016040528060308152602001610f9660309139610ef1565b905090565b600080826040516020018082805190602001908083835b60208310610f2b5780518252602082019150602081019050602083039250610f08565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505091905056fe4d4553534147455f43414e43454c4c4154494f4e5f4e4f545f414c4c4f5745445f594554535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f43414e43454c4c4154494f4e5f44454c4159535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e475f56324d4553534147455f43414e43454c4c4154494f4e5f4e4f545f524551554553544544a26469706673582212202fd092cffe940c90cc78ae2cd32a81cae1d82bb7f8efc855b20be78ec457767c64736f6c634300060c0033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x91 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A98660B GT PUSH2 0x59 JUMPI DUP1 PUSH4 0x7A98660B EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0x7CBE06D1 EQ PUSH2 0x3CC JUMPI DUP1 PUSH4 0x8303BD8A EQ PUSH2 0x3F7 JUMPI DUP1 PUSH4 0x9BE446BF EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xA46EFAF3 EQ PUSH2 0x471 JUMPI PUSH2 0x91 JUMP JUMPDEST DUP1 PUSH4 0x18CCCDF EQ PUSH2 0x96 JUMPI DUP1 PUSH4 0x2C9DD5C0 EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x3E3AA6C5 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x6170FF1B EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x77C7D7A9 EQ PUSH2 0x2C5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAB PUSH2 0x4C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x505 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x17B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x6AE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x261 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x84F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xB02 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x37A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xB25 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E1 PUSH2 0xC7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40C PUSH2 0xC8B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x445 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xCB3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4AA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH2 0x500 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F4D5347494E475F4C31544F4C325F4E4F4E4345 DUP2 MSTORE POP PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 SWAP1 POP DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x578 PUSH2 0xD7A JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD GT PUSH2 0x5FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH32 0x7A06C571AA77F34D9706C51E5D8122B5595AEBEAA34233BFE866F22BEFB973B1 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 PUSH2 0x685 PUSH2 0xD7A JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH8 0xDE0B6B3A7640000 CALLVALUE GT ISZERO PUSH2 0x72F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4D41585F4C315F4D53475F4645455F4558434545444544000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x739 PUSH2 0x4C0 JUMP JUMPDEST SWAP1 POP PUSH2 0x77D PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F4D5347494E475F4C31544F4C325F4E4F4E4345 DUP2 MSTORE POP PUSH1 0x1 DUP4 ADD PUSH2 0xDA2 JUMP JUMPDEST DUP6 DUP8 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDB80DD488ACF86D17C747445B0EABB5D57C541D3BD7B6B87AF987858E5066B2B DUP9 DUP9 DUP7 CALLVALUE PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP7 DUP7 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0x81B DUP9 DUP9 DUP9 DUP9 DUP7 PUSH2 0xE20 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 CALLVALUE ADD PUSH2 0x829 PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 DUP3 SWAP4 POP SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8ABD2EC2E0A10C82F5B60EA00455FA96C41FD144F225FCC52B8D83D94F803ED8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0x8E7 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xE20 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8F3 PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x97E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F5F4D4553534147455F544F5F43414E43454C000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x988 PUSH2 0xEC9 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x9F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x103C PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xA00 PUSH2 0xC8B JUMP JUMPDEST DUP3 ADD SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0xA7A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414E43454C5F414C4C4F5745445F54494D455F4F564552464C4F5700000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 TIMESTAMP LT ISZERO PUSH2 0xAD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xF72 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xADD PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP4 SWAP5 POP POP POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB0C PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP7 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2E00DCCD686FD6823EC7DC3E125582AA82881B6FF5F6B5A73856E1EA8338A3BE DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 PUSH2 0xBBD DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xE20 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBC9 PUSH2 0xEA1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xC53 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F5F4D4553534147455F544F5F43414E43454C000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST TIMESTAMP PUSH2 0xC5C PUSH2 0xEC9 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 SWAP3 POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCAE PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2D DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFC6 PUSH1 0x2D SWAP2 CODECOPY PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCBD PUSH2 0xEC9 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE0 PUSH2 0xD7A JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD33 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xD10 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD9D PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFF3 PUSH1 0x23 SWAP2 CODECOPY PUSH2 0xEF1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xDDB JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xDB8 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP4 DUP8 DUP8 DUP8 SWAP1 POP DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEC4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1016 PUSH1 0x26 SWAP2 CODECOPY PUSH2 0xEF1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEEC PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF96 PUSH1 0x30 SWAP2 CODECOPY PUSH2 0xEF1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xF2B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0xF08 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE GASLIMIT 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4E 0x4F SLOAD 0x5F COINBASE 0x4C 0x4C 0x4F JUMPI GASLIMIT DIFFICULTY 0x5F MSIZE GASLIMIT SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F DIFFICULTY GASLIMIT 0x4C COINBASE MSIZE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C ORIGIN SLOAD 0x4F 0x4C BALANCE 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE 0x5F JUMP ORIGIN 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE GASLIMIT 0x5F NUMBER COINBASE 0x4E NUMBER GASLIMIT 0x4C 0x4C COINBASE SLOAD 0x49 0x4F 0x4E 0x5F 0x4E 0x4F SLOAD 0x5F MSTORE GASLIMIT MLOAD SSTORE GASLIMIT MSTORE8 SLOAD GASLIMIT DIFFICULTY LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F 0xD0 SWAP3 0xCF INVALID SWAP5 0xC SWAP1 0xCC PUSH25 0xAE2CD32A81CAE1D82BB7F8EFC855B20BE78EC457767C64736F PUSH13 0x634300060C0033000000000000 ",
"sourceMap": "381:6010:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1799:133;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4356:497;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3462:773;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5449:940;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1195:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4859:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;999:48;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1938:152;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2462:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1323:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1799:133;1850:7;1876:49;1902:22;;;;;;;;;;;;;;;;;1876:25;:49::i;:::-;1869:56;;1799:133;:::o;4356:497::-;4486:7;4509:15;4567:11;4588:10;4580:19;;4601:7;;:14;;4617:7;;4550:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4527:108;;;;;;4509:126;;4682:1;4654:16;:14;:16::i;:::-;:25;4671:7;4654:25;;;;;;;;;;;;:29;4646:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4762:10;4729:53;;4749:11;4729:53;4774:7;;4729:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4821:1;4792:16;:14;:16::i;:::-;:25;4809:7;4792:25;;;;;;;;;;;;:30;;;;;;;;;;;4839:7;4832:14;;;4356:497;;;;;:::o;3462:773::-;3617:7;3626;1040;3653:9;:27;;3645:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3718:13;3734:20;:18;:20::i;:::-;3718:36;;3764:60;3790:22;;;;;;;;;;;;;;;;;3822:1;3814:5;:9;3764:25;:60::i;:::-;3877:8;3866:9;3854:10;3839:74;;;3887:7;;3896:5;3903:9;3839:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3923:15;3941:53;3958:9;3969:8;3979:7;;3988:5;3941:16;:53::i;:::-;3923:71;;4194:1;4182:9;:13;4154:16;:14;:16::i;:::-;:25;4171:7;4154:25;;;;;;;;;;;:41;;;;4213:7;4222:5;4205:23;;;;;;3462:773;;;;;;;:::o;5449:940::-;5623:7;5690:8;5679:9;5667:10;5647:68;;;5700:7;;5709:5;5647:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5725:15;5743:53;5760:9;5771:8;5781:7;;5790:5;5743:16;:53::i;:::-;5725:71;;5806:21;5830:16;:14;:16::i;:::-;:25;5847:7;5830:25;;;;;;;;;;;;5806:49;;5890:1;5873:13;:18;;5865:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5927:19;5949:28;:26;:28::i;:::-;:37;5978:7;5949:37;;;;;;;;;;;;5927:59;;6019:1;6004:11;:16;;5996:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6070:25;6112:26;:24;:26::i;:::-;6098:11;:40;6070:68;;6177:11;6156:17;:32;;6148:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6258:17;6239:15;:36;;6231:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6355:1;6327:16;:14;:16::i;:::-;:25;6344:7;6327:25;;;;;;;;;;;:29;;;;6374:7;6366:16;;;;;;5449:940;;;;;;;:::o;1195:122::-;1259:7;1285:16;:14;:16::i;:::-;:25;1302:7;1285:25;;;;;;;;;;;;1278:32;;1195:122;;;:::o;4859:584::-;5044:7;5122:8;5111:9;5099:10;5068:79;;;5132:7;;5141:5;5068:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5157:15;5175:53;5192:9;5203:8;5213:7;;5222:5;5175:16;:53::i;:::-;5157:71;;5238:21;5262:16;:14;:16::i;:::-;:25;5279:7;5262:25;;;;;;;;;;;;5238:49;;5321:1;5305:13;:17;5297:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5397:15;5357:28;:26;:28::i;:::-;:37;5386:7;5357:37;;;;;;;;;;;:55;;;;5429:7;5422:14;;;;4859:584;;;;;;;:::o;999:48::-;1040:7;999:48;:::o;1938:152::-;1995:7;2021:62;2047:35;;;;;;;;;;;;;;;;;2021:25;:62::i;:::-;2014:69;;1938:152;:::o;2462:146::-;2538:7;2564:28;:26;:28::i;:::-;:37;2593:7;2564:37;;;;;;;;;;;;2557:44;;2462:146;;;:::o;1323:122::-;1387:7;1413:16;:14;:16::i;:::-;:25;1430:7;1413:25;;;;;;;;;;;;1406:32;;1323:122;;;:::o;1163:209:2:-;1228:14;1254:12;1296:4;1279:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1269:33;;;;;;1254:48;;1351:4;1345:11;1335:21;;1321:45;;;;:::o;1625:168:3:-;1674:35;1728:58;1765:20;;;;;;;;;;;;;;;;;1728:36;:58::i;:::-;1721:65;;1625:168;:::o;1378:192:2:-;1454:12;1496:4;1479:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1469:33;;;;;;1454:48;;1548:5;1542:4;1535:19;1521:43;;;:::o;2919:481:3:-;3086:7;3197:10;3189:19;;3230:9;3261:5;3288:8;3318:7;;:14;;3354:7;;3151:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3124:269;;;;;;3105:288;;2919:481;;;;;;;:::o;1451:168::-;1500:35;1554:58;1591:20;;;;;;;;;;;;;;;;;1554:36;:58::i;:::-;1547:65;;1451:168;:::o;2614:221::-;2699:35;2757:71;2794:33;;;;;;;;;;;;;;;;;2757:36;:71::i;:::-;2750:78;;2614:221;:::o;257:298:2:-;357:50;423:16;469:4;452:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;442:33;;;;;;423:52;;531:8;508:31;;494:55;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "848600",
"executionCost": "883",
"totalCost": "849483"
},
"external": {
"MAX_L1_MSG_FEE()": "227",
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": "infinite",
"consumeMessageFromL2(uint256,uint256[])": "infinite",
"l1ToL2MessageCancellations(bytes32)": "infinite",
"l1ToL2MessageNonce()": "infinite",
"l1ToL2Messages(bytes32)": "infinite",
"l2ToL1Messages(bytes32)": "infinite",
"messageCancellationDelay()": "infinite",
"sendMessageToL2(uint256,uint256,uint256[])": "infinite",
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": "infinite"
},
"internal": {
"getL1ToL2MsgHash(uint256,uint256,uint256[] calldata,uint256)": "infinite",
"l1ToL2MessageCancellations()": "infinite",
"l1ToL2Messages()": "infinite",
"l2ToL1Messages()": "infinite",
"messageCancellationDelay(uint256)": "infinite"
}
},
"methodIdentifiers": {
"MAX_L1_MSG_FEE()": "7cbe06d1",
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": "6170ff1b",
"consumeMessageFromL2(uint256,uint256[])": "2c9dd5c0",
"l1ToL2MessageCancellations(bytes32)": "9be446bf",
"l1ToL2MessageNonce()": "018cccdf",
"l1ToL2Messages(bytes32)": "77c7d7a9",
"l2ToL1Messages(bytes32)": "a46efaf3",
"messageCancellationDelay()": "8303bd8a",
"sendMessageToL2(uint256,uint256,uint256[])": "3e3aa6c5",
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": "7a98660b"
}
},
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
},
{
"inputs": [],
"name": "MAX_L1_MSG_FEE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "cancelL1ToL2Message",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "consumeMessageFromL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l1ToL2MessageCancellations",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l1ToL2MessageNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l1ToL2Messages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l2ToL1Messages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "messageCancellationDelay",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "sendMessageToL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "startL1ToL2MessageCancellation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.6.12+commit.27d51765"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "ConsumedMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "ConsumedMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "LogMessageToL1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"name": "LogMessageToL2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2Canceled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "MessageToL2CancellationStarted",
"type": "event"
},
{
"inputs": [],
"name": "MAX_L1_MSG_FEE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "cancelL1ToL2Message",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fromAddress",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "consumeMessageFromL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l1ToL2MessageCancellations",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l1ToL2MessageNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l1ToL2Messages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "l2ToL1Messages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "messageCancellationDelay",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
}
],
"name": "sendMessageToL2",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "toAddress",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "selector",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "payload",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "startL1ToL2MessageCancellation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"cancelL1ToL2Message(uint256,uint256,uint256[],uint256)": {
"notice": "Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation(). Note that the message fee is not refunded."
},
"consumeMessageFromL2(uint256,uint256[])": {
"notice": "Consumes a message that was sent from an L2 contract. Returns the hash of the message."
},
"l1ToL2MessageCancellations(bytes32)": {
"notice": "Returns the timestamp at the time cancelL1ToL2Message was called with a message matching 'msgHash'. The function returns 0 if cancelL1ToL2Message was never called."
},
"l1ToL2Messages(bytes32)": {
"notice": "Returns the msg_fee + 1 for the message with the given 'msgHash', or 0 if no message with such a hash is pending."
},
"sendMessageToL2(uint256,uint256,uint256[])": {
"notice": "Sends a message to an L2 contract."
},
"startL1ToL2MessageCancellation(uint256,uint256,uint256[],uint256)": {
"notice": "Starts the cancellation of an L1 to L2 message. A message can be canceled messageCancellationDelay() seconds after this function is called. Note: This function may only be called for a message that is currently pending and the caller must be the sender of the that message."
}
},
"notice": "Implements sending messages to L2 by adding them to a pipe and consuming messages from L2 by removing them from a different pipe. A deriving contract can handle the former pipe and add items to the latter pipe while interacting with L2.",
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/StarknetMessaging.sol": "StarknetMessaging"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/IStarknetMessaging.sol": {
"keccak256": "0xda9dbafa1cd2bb313df72bf48c1fc7096d2ed0328898137001e7d047e693647a",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://802d3eac4aef2da65a0dcda9fe149cf0c247233312aab47113bb9de6d44ba72e",
"dweb:/ipfs/QmaYjHtMrE8JK9oxqcytDH1cBhyp9yah2mRWFE8vJeaJhe"
]
},
"contracts/IStarknetMessagingEvents.sol": {
"keccak256": "0xc3d883a6eb17b070787bf6e60393d41eddc8807591df1a828689574c150ac2a4",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://90d1fbc98c7a052aef9360089838b00a214513c538579381e858c98df989e1f1",
"dweb:/ipfs/QmaD6Sxgc9GCXqbnmAev8Tj3LYHH6jphEHvZGkxRNCTCfr"
]
},
"contracts/NamedStorage.sol": {
"keccak256": "0x49ad9a02df0c76a084989eadacd46566b65dbeb0cd443a3685832592701d2d50",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://7c0d331bee821a0db40603299d0ccf239cfc1d46710af97c28bbe4221cdc2866",
"dweb:/ipfs/QmawroFrFWHBJTJXGXyyjdnmj7nsFpUmqNGNgEZSkAQVLu"
]
},
"contracts/StarknetMessaging.sol": {
"keccak256": "0xd05eb51b3ab93f5740542efd2d6adf13d0288de6ef837aa376665382b8d40ee1",
"license": "Apache-2.0.",
"urls": [
"bzz-raw://6e65db082262fc4c5999296db0ac158251ce28ad826dcefbe49e7b704890444f",
"dweb:/ipfs/QmYF7mY97besEN3FUy7vUkJBqJdfpyqKnVwk3CcYEjyf3G"
]
}
},
"version": 1
}
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
import "./IStarknetMessagingEvents.sol";
interface IStarknetMessaging is IStarknetMessagingEvents {
/**
Sends a message to an L2 contract.
This function is payable, the payed amount is the message fee.
Returns the hash of the message and the nonce of the message.
*/
function sendMessageToL2(
uint256 toAddress,
uint256 selector,
uint256[] calldata payload
) external payable returns (bytes32, uint256);
/**
Consumes a message that was sent from an L2 contract.
Returns the hash of the message.
*/
function consumeMessageFromL2(uint256 fromAddress, uint256[] calldata payload)
external
returns (bytes32);
/**
Starts the cancellation of an L1 to L2 message.
A message can be canceled messageCancellationDelay() seconds after this function is called.
Note: This function may only be called for a message that is currently pending and the caller
must be the sender of the that message.
*/
function startL1ToL2MessageCancellation(
uint256 toAddress,
uint256 selector,
uint256[] calldata payload,
uint256 nonce
) external returns (bytes32);
/**
Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds
after the call to startL1ToL2MessageCancellation().
Note that the message fee is not refunded.
*/
function cancelL1ToL2Message(
uint256 toAddress,
uint256 selector,
uint256[] calldata payload,
uint256 nonce
) external returns (bytes32);
}
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
interface IStarknetMessagingEvents {
// This event needs to be compatible with the one defined in Output.sol.
event LogMessageToL1(uint256 indexed fromAddress, address indexed toAddress, uint256[] payload);
// An event that is raised when a message is sent from L1 to L2.
event LogMessageToL2(
address indexed fromAddress,
uint256 indexed toAddress,
uint256 indexed selector,
uint256[] payload,
uint256 nonce,
uint256 fee
);
// An event that is raised when a message from L2 to L1 is consumed.
event ConsumedMessageToL1(
uint256 indexed fromAddress,
address indexed toAddress,
uint256[] payload
);
// An event that is raised when a message from L1 to L2 is consumed.
event ConsumedMessageToL2(
address indexed fromAddress,
uint256 indexed toAddress,
uint256 indexed selector,
uint256[] payload,
uint256 nonce
);
// An event that is raised when a message from L1 to L2 Cancellation is started.
event MessageToL2CancellationStarted(
address indexed fromAddress,
uint256 indexed toAddress,
uint256 indexed selector,
uint256[] payload,
uint256 nonce
);
// An event that is raised when a message from L1 to L2 is canceled.
event MessageToL2Canceled(
address indexed fromAddress,
uint256 indexed toAddress,
uint256 indexed selector,
uint256[] payload,
uint256 nonce
);
}
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
/**
Demo contract for L1 <-> L2 interaction between an L2 StarkNet contract and this L1 solidity
contract.
*/
import "./MockStarknetMessaging.sol";
contract L1L2 {
// The StarkNet core contract.
MockStarknetMessaging starknetCore;
mapping(uint256 => uint256) public userBalances;
uint256 constant MESSAGE_WITHDRAW = 0;
// The selector of the "deposit" l1_handler.
uint256 constant DEPOSIT_SELECTOR =
352040181584456735608515580760888541466059565068553383579463728554843487745;
/**
Initializes the contract state.
*/
constructor(MockStarknetMessaging starknetCore_) public {
starknetCore = starknetCore_;
}
function withdraw(
uint256 l2ContractAddress,
uint256 user,
uint256 amount
) external {
// Construct the withdrawal message's payload.
uint256[] memory payload = new uint256[](3);
payload[0] = MESSAGE_WITHDRAW;
payload[1] = user;
payload[2] = amount;
// Consume the message from the StarkNet core contract.
// This will revert the (Ethereum) transaction if the message does not exist.
starknetCore.consumeMessageFromL2(l2ContractAddress, payload);
// Update the L1 balance.
userBalances[user] += amount;
}
function deposit(
uint256 l2ContractAddress,
uint256 user,
uint256 amount
) external {
require(amount < 2**64, "Invalid amount.");
require(amount <= userBalances[user], "The user's balance is not large enough.");
// Update the L1 balance.
userBalances[user] -= amount;
// Construct the deposit message's payload.
uint256[] memory payload = new uint256[](2);
payload[0] = user;
payload[1] = amount;
// Send the message to the StarkNet core contract.
starknetCore.sendMessageToL2(l2ContractAddress, DEPOSIT_SELECTOR, payload);
}
}
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
import "./StarknetMessaging.sol";
contract MockStarknetMessaging is StarknetMessaging {
constructor(uint256 MessageCancellationDelay) public {
messageCancellationDelay(MessageCancellationDelay);
}
/**
Mocks a message from L2 to L1.
*/
function mockSendMessageFromL2(
uint256 fromAddress,
uint256 toAddress,
uint256[] calldata payload
) external {
bytes32 msgHash = keccak256(
abi.encodePacked(fromAddress, toAddress, payload.length, payload)
);
l2ToL1Messages()[msgHash] += 1;
}
/**
Mocks consumption of a message from L1 to L2.
*/
function mockConsumeMessageToL2(
uint256 fromAddress,
uint256 toAddress,
uint256 selector,
uint256[] calldata payload,
uint256 nonce
) external {
bytes32 msgHash = keccak256(
abi.encodePacked(fromAddress, toAddress, nonce, selector, payload.length, payload)
);
require(l1ToL2Messages()[msgHash] > 0, "INVALID_MESSAGE_TO_CONSUME");
l1ToL2Messages()[msgHash] = 0;
}
}
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
/*
Library to provide basic storage, in storage location out of the low linear address space.
New types of storage variables should be added here upon need.
*/
library NamedStorage {
function bytes32ToUint256Mapping(string memory tag_)
internal
pure
returns (mapping(bytes32 => uint256) storage randomVariable)
{
bytes32 location = keccak256(abi.encodePacked(tag_));
assembly {
randomVariable_slot := location
}
}
function bytes32ToAddressMapping(string memory tag_)
internal
pure
returns (mapping(bytes32 => address) storage randomVariable)
{
bytes32 location = keccak256(abi.encodePacked(tag_));
assembly {
randomVariable_slot := location
}
}
function addressToBoolMapping(string memory tag_)
internal
pure
returns (mapping(address => bool) storage randomVariable)
{
bytes32 location = keccak256(abi.encodePacked(tag_));
assembly {
randomVariable_slot := location
}
}
function getUintValue(string memory tag_) internal view returns (uint256 retVal) {
bytes32 slot = keccak256(abi.encodePacked(tag_));
assembly {
retVal := sload(slot)
}
}
function setUintValue(string memory tag_, uint256 value) internal {
bytes32 slot = keccak256(abi.encodePacked(tag_));
assembly {
sstore(slot, value)
}
}
function setUintValueOnce(string memory tag_, uint256 value) internal {
require(getUintValue(tag_) == 0, "ALREADY_SET");
setUintValue(tag_, value);
}
function getAddressValue(string memory tag_) internal view returns (address retVal) {
bytes32 slot = keccak256(abi.encodePacked(tag_));
assembly {
retVal := sload(slot)
}
}
function setAddressValue(string memory tag_, address value) internal {
bytes32 slot = keccak256(abi.encodePacked(tag_));
assembly {
sstore(slot, value)
}
}
function setAddressValueOnce(string memory tag_, address value) internal {
require(getAddressValue(tag_) == address(0x0), "ALREADY_SET");
setAddressValue(tag_, value);
}
function getBoolValue(string memory tag_) internal view returns (bool retVal) {
bytes32 slot = keccak256(abi.encodePacked(tag_));
assembly {
retVal := sload(slot)
}
}
function setBoolValue(string memory tag_, bool value) internal {
bytes32 slot = keccak256(abi.encodePacked(tag_));
assembly {
sstore(slot, value)
}
}
}
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
import "./IStarknetMessaging.sol";
import "./NamedStorage.sol";
/**
Implements sending messages to L2 by adding them to a pipe and consuming messages from L2 by
removing them from a different pipe. A deriving contract can handle the former pipe and add items
to the latter pipe while interacting with L2.
*/
contract StarknetMessaging is IStarknetMessaging {
/*
Random slot storage elements and accessors.
*/
string constant L1L2_MESSAGE_MAP_TAG = "STARKNET_1.0_MSGING_L1TOL2_MAPPPING_V2";
string constant L2L1_MESSAGE_MAP_TAG = "STARKNET_1.0_MSGING_L2TOL1_MAPPPING";
string constant L1L2_MESSAGE_NONCE_TAG = "STARKNET_1.0_MSGING_L1TOL2_NONCE";
string constant L1L2_MESSAGE_CANCELLATION_MAP_TAG = (
"STARKNET_1.0_MSGING_L1TOL2_CANCELLATION_MAPPPING"
);
string constant L1L2_MESSAGE_CANCELLATION_DELAY_TAG = (
"STARKNET_1.0_MSGING_L1TOL2_CANCELLATION_DELAY"
);
uint256 public constant MAX_L1_MSG_FEE = 1 ether;
/**
Returns the msg_fee + 1 for the message with the given 'msgHash',
or 0 if no message with such a hash is pending.
*/
function l1ToL2Messages(bytes32 msgHash) external view returns (uint256) {
return l1ToL2Messages()[msgHash];
}
function l2ToL1Messages(bytes32 msgHash) external view returns (uint256) {
return l2ToL1Messages()[msgHash];
}
function l1ToL2Messages() internal pure returns (mapping(bytes32 => uint256) storage) {
return NamedStorage.bytes32ToUint256Mapping(L1L2_MESSAGE_MAP_TAG);
}
function l2ToL1Messages() internal pure returns (mapping(bytes32 => uint256) storage) {
return NamedStorage.bytes32ToUint256Mapping(L2L1_MESSAGE_MAP_TAG);
}
function l1ToL2MessageNonce() public view returns (uint256) {
return NamedStorage.getUintValue(L1L2_MESSAGE_NONCE_TAG);
}
function messageCancellationDelay() public view returns (uint256) {
return NamedStorage.getUintValue(L1L2_MESSAGE_CANCELLATION_DELAY_TAG);
}
function messageCancellationDelay(uint256 delayInSeconds) internal {
NamedStorage.setUintValue(L1L2_MESSAGE_CANCELLATION_DELAY_TAG, delayInSeconds);
}
/**
Returns the timestamp at the time cancelL1ToL2Message was called with a message
matching 'msgHash'.
The function returns 0 if cancelL1ToL2Message was never called.
*/
function l1ToL2MessageCancellations(bytes32 msgHash) external view returns (uint256) {
return l1ToL2MessageCancellations()[msgHash];
}
function l1ToL2MessageCancellations()
internal
pure
returns (mapping(bytes32 => uint256) storage)
{
return NamedStorage.bytes32ToUint256Mapping(L1L2_MESSAGE_CANCELLATION_MAP_TAG);
}
/**
Returns the hash of an L1 -> L2 message from msg.sender.
*/
function getL1ToL2MsgHash(
uint256 toAddress,
uint256 selector,
uint256[] calldata payload,
uint256 nonce
) internal view returns (bytes32) {
return
keccak256(
abi.encodePacked(
uint256(msg.sender),
toAddress,
nonce,
selector,
payload.length,
payload
)
);
}
/**
Sends a message to an L2 contract.
*/
function sendMessageToL2(
uint256 toAddress,
uint256 selector,
uint256[] calldata payload
) external payable override returns (bytes32, uint256) {
require(msg.value <= MAX_L1_MSG_FEE, "MAX_L1_MSG_FEE_EXCEEDED");
uint256 nonce = l1ToL2MessageNonce();
NamedStorage.setUintValue(L1L2_MESSAGE_NONCE_TAG, nonce + 1);
emit LogMessageToL2(msg.sender, toAddress, selector, payload, nonce, msg.value);
bytes32 msgHash = getL1ToL2MsgHash(toAddress, selector, payload, nonce);
// Note that the inclusion of the unique nonce in the message hash implies that
// l1ToL2Messages()[msgHash] was not accessed before.
l1ToL2Messages()[msgHash] = msg.value + 1;
return (msgHash, nonce);
}
/**
Consumes a message that was sent from an L2 contract.
Returns the hash of the message.
*/
function consumeMessageFromL2(uint256 fromAddress, uint256[] calldata payload)
external
override
returns (bytes32)
{
bytes32 msgHash = keccak256(
abi.encodePacked(fromAddress, uint256(msg.sender), payload.length, payload)
);
require(l2ToL1Messages()[msgHash] > 0, "INVALID_MESSAGE_TO_CONSUME");
emit ConsumedMessageToL1(fromAddress, msg.sender, payload);
l2ToL1Messages()[msgHash] -= 1;
return msgHash;
}
function startL1ToL2MessageCancellation(
uint256 toAddress,
uint256 selector,
uint256[] calldata payload,
uint256 nonce
) external override returns (bytes32) {
emit MessageToL2CancellationStarted(msg.sender, toAddress, selector, payload, nonce);
bytes32 msgHash = getL1ToL2MsgHash(toAddress, selector, payload, nonce);
uint256 msgFeePlusOne = l1ToL2Messages()[msgHash];
require(msgFeePlusOne > 0, "NO_MESSAGE_TO_CANCEL");
l1ToL2MessageCancellations()[msgHash] = block.timestamp;
return msgHash;
}
function cancelL1ToL2Message(
uint256 toAddress,
uint256 selector,
uint256[] calldata payload,
uint256 nonce
) external override returns (bytes32) {
emit MessageToL2Canceled(msg.sender, toAddress, selector, payload, nonce);
bytes32 msgHash = getL1ToL2MsgHash(toAddress, selector, payload, nonce);
uint256 msgFeePlusOne = l1ToL2Messages()[msgHash];
require(msgFeePlusOne != 0, "NO_MESSAGE_TO_CANCEL");
uint256 requestTime = l1ToL2MessageCancellations()[msgHash];
require(requestTime != 0, "MESSAGE_CANCELLATION_NOT_REQUESTED");
uint256 cancelAllowedTime = requestTime + messageCancellationDelay();
require(cancelAllowedTime >= requestTime, "CANCEL_ALLOWED_TIME_OVERFLOW");
require(block.timestamp >= cancelAllowedTime, "MESSAGE_CANCELLATION_NOT_ALLOWED_YET");
l1ToL2Messages()[msgHash] = 0;
return (msgHash);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment