{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC20Outbox",
  "sourceName": "src/bridge/ERC20Outbox.sol",
  "abi": [
    {
      "inputs": [],
      "name": "AlreadyInit",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "AlreadySpent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BadPostUpgradeInit",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BridgeCallFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "HadZeroInit",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "actualLength",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxProofLength",
          "type": "uint256"
        }
      ],
      "name": "MerkleProofTooLong",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "NotOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "rollup",
          "type": "address"
        }
      ],
      "name": "NotRollup",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxIndex",
          "type": "uint256"
        }
      ],
      "name": "PathNotMinimal",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "proofLength",
          "type": "uint256"
        }
      ],
      "name": "ProofTooLong",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RollupNotChanged",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SimulationOnlyEntrypoint",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        }
      ],
      "name": "UnknownRoot",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "l2Sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "zero",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "transactionIndex",
          "type": "uint256"
        }
      ],
      "name": "OutBoxTransactionExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "outputRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "l2BlockHash",
          "type": "bytes32"
        }
      ],
      "name": "SendRootUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "OUTBOX_VERSION",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridge",
      "outputs": [
        {
          "internalType": "contract IBridge",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "l2Sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "l2Block",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l1Block",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l2Timestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "calculateItemHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "path",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "item",
          "type": "bytes32"
        }
      ],
      "name": "calculateMerkleRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "l2Sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "l2Block",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l1Block",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l2Timestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "executeTransaction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "l2Sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "l2Block",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l1Block",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "l2Timestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "executeTransactionSimulation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IBridge",
          "name": "_bridge",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "isSpent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ToL1BatchNum",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ToL1Block",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ToL1EthBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ToL1OutputId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ToL1Sender",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ToL1Timestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ToL1WithdrawalAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "postUpgradeInit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rollup",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "roots",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "spent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateRollupAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "l2BlockHash",
          "type": "bytes32"
        }
      ],
      "name": "updateSendRoot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161187561003760003960008181610697015261089d01526118756000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806395fcea78116100b8578063c4d66de81161007c578063c4d66de814610249578063c75184df1461025c578063cb23bcb51461027c578063cbf96f631461028f578063d5b5cc2314610297578063e78cea92146102b757600080fd5b806395fcea78146101f35780639f0c04bf146101fb578063a04cee601461020e578063ae6dead714610221578063b0f305371461024157600080fd5b80635a129efe116100ff5780635a129efe146101985780636ae71f12146101bb57806372f2a8c7146101c357806380648b02146101cb5780638515bc6a146101eb57600080fd5b80627436d31461013b57806308635a95146101615780631198527114610176578063288e5b101461017d5780634654779014610190575b600080fd5b61014e6101493660046110de565b6102ca565b6040519081526020015b60405180910390f35b61017461016f3660046111fe565b610309565b005b600061014e565b61017461018b3660046112f2565b61037c565b61014e6103b7565b6101ab6101a636600461138d565b6103e6565b6040519015158152602001610158565b61017461040b565b61014e610618565b6101d3610635565b6040516001600160a01b039091168152602001610158565b61014e610656565b61017461068c565b61014e6102093660046113a6565b6107aa565b61017461021c366004611434565b6107ef565b61014e61022f36600461138d565b60036020526000908152604090205481565b61014e61086a565b610174610257366004611456565b610892565b610264600281565b6040516001600160801b039091168152602001610158565b6000546101d3906001600160a01b031681565b61014e610a2e565b61014e6102a536600461138d565b60026020526000908152604090205481565b6001546101d3906001600160a01b031681565b60006102ff8484846040516020016102e491815260200190565b60405160208183030381529060405280519060200120610a46565b90505b9392505050565b600061031b89898989898989896107aa565b905061035d8c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e9250859150610ae99050565b61036e8a8a8a8a8a8a8a8a8a610bf2565b505050505050505050505050565b331561039b57604051630e13b69d60e01b815260040160405180910390fd5b6103ac898989898989898989610bf2565b505050505050505050565b6004546000906001600160801b03908116908114156103d857600091505090565b6001600160801b0316919050565b60008060006103f484610e83565b92509250506104038282610ec0565b949350505050565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561045757600080fd5b505afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190611473565b6001600160a01b0316336001600160a01b0316146105475760005460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b1580156104eb57600080fd5b505afa1580156104ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105239190611473565b604051631194af8760e11b815260040161053e929190611490565b60405180910390fd5b6001546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb5916004808301926020929190829003018186803b15801561058c57600080fd5b505afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190611473565b6000549091506001600160a01b03808316911614156105f65760405163d054909f60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60055460009060001981141561063057506000919050565b919050565b6006546000906001600160a01b039081169081141561063057600091505090565b6006546000906001600160601b03600160a01b90910481169081141561067e57600091505090565b6001600160601b0316919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106d55760405162461bcd60e51b815260040161053e906114aa565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610725573381604051631194af8760e11b815260040161053e929190611490565b6004546001600160801b03908116146107515760405163d0afb66160e01b815260040160405180910390fd5b50506040805160c0810182526001600160801b0380825260208201526000199181018290526001600160a01b0360608201526001600160601b03608082015260a001819052600481905560058190556006819055600755565b600088888888888888886040516020016107cb9897969594939291906114f6565b60405160208183030381529060405280519060200120905098975050505050505050565b6000546001600160a01b0316331461082b57600054604051630e4cf1bf60e21b815261053e9133916001600160a01b0390911690600401611490565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b6004546000906001600160801b03600160801b9091048116908114156103d857600091505090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108db5760405162461bcd60e51b815260040161053e906114aa565b6001600160a01b03811661090257604051631ad0f74360e01b815260040160405180910390fd5b6001546001600160a01b03161561092c57604051633bcd329760e21b815260040160405180910390fd5b6040805160c0810182526001600160801b038082526020808301919091526000198284018190526001600160a01b03606084018190526001600160601b03608085015260a0909301819052600481815560058290556006829055600791909155600180546001600160a01b0319169386169384179055835163cb23bcb560e01b81529351929363cb23bcb59381830193929091829003018186803b1580156109d357600080fd5b505afa1580156109e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0b9190611473565b600080546001600160a01b0319166001600160a01b039290921691909117905550565b60075460009060001981141561063057600091505090565b8251600090610100811115610a7957604051637ed6198f60e11b815260048101829052610100602482015260440161053e565b8260005b82811015610adf576000878281518110610a9957610a9961154a565b60200260200101519050816001901b871660001415610ac657826000528060205260406000209250610ad6565b8060005282602052604060002092505b50600101610a7d565b5095945050505050565b610100835110610b1157825160405163ab6a068360e01b815260040161053e91815260200190565b8251610b1e90600261165a565b8210610b55578183516002610b33919061165a565b604051630b8a724b60e01b81526004810192909252602482015260440161053e565b6000610b628484846102ca565b600081815260036020526040902054909150610b94576040516310e61af960e31b81526004810182905260240161053e565b6000806000610ba286610e83565b925092509250610bb28282610ec0565b15610bd357604051639715b8d360e01b81526004810187905260240161053e565b600092835260026020526040909220600190911b909117905550505050565b6000886001600160a01b0316886001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648c604051610c3991815260200190565b60405180910390a46000610c4c84610ecf565b9050600060046040518060c00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600182015481526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160149054906101000a90046001600160601b03166001600160601b03166001600160601b0316815260200160038201548152505090506040518060c00160405280896001600160801b03168152602001876001600160801b031681526020018c60001b81526020018b6001600160a01b03168152602001886001600160601b03168152602001610d868490565b905280516020808301516001600160801b03908116600160801b02921691909117600455604080830151600555606083015160808401516001600160601b0316600160a01b026001600160a01b039091161760065560a0909201516007558151601f8601829004820281018201909252848252610e22918b918591908890889081908401838280828437600092019190915250610f6692505050565b805160208201516001600160801b03908116600160801b029116176004556040810151600555606081015160808201516001600160601b0316600160a01b026001600160a01b039091161760065560a0015160075550505050505050505050565b6000808080610e9360ff8661167c565b90506000610ea260ff87611690565b60008381526002602052604090205492979096509194509092505050565b80821c60011615155b92915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663ad48cb5e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2057600080fd5b505afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5891906116a4565b90506103028360128361102e565b600154604051639e5d4c4960e01b815260009182916001600160a01b0390911690639e5d4c4990610f9f908890889088906004016116f7565b600060405180830381600087803b158015610fb957600080fd5b505af1158015610fcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ff59190810190611740565b91509150816110275780511561100e5780518082602001fd5b604051631bb7daad60e11b815260040160405180910390fd5b5050505050565b60008160ff168360ff161415611045575082610302565b8160ff168360ff1610156110795761105d83836117ee565b61106890600a611811565b6110729085611820565b9050610302565b61108382846117ee565b61108e90600a611811565b611072908561167c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156110d6576110d6611098565b604052919050565b6000806000606084860312156110f357600080fd5b83356001600160401b038082111561110a57600080fd5b818601915086601f83011261111e57600080fd5b813560208282111561113257611132611098565b8160051b92506111438184016110ae565b828152928401810192818101908a85111561115d57600080fd5b948201945b8486101561117b57853582529482019490820190611162565b9a918901359950506040909701359695505050505050565b6001600160a01b03811681146111a857600080fd5b50565b803561063081611193565b60008083601f8401126111c857600080fd5b5081356001600160401b038111156111df57600080fd5b6020830191508360208285010111156111f757600080fd5b9250929050565b60008060008060008060008060008060006101208c8e03121561122057600080fd5b8b356001600160401b038082111561123757600080fd5b818e0191508e601f83011261124b57600080fd5b81358181111561125a57600080fd5b8f60208260051b850101111561126f57600080fd5b60208381019e50909c508e01359a5061128a60408f016111ab565b995061129860608f016111ab565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e01359150808211156112cb57600080fd5b506112d88e828f016111b6565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c03121561131157600080fd5b8935985060208a013561132381611193565b975060408a013561133381611193565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a01356001600160401b0381111561136a57600080fd5b6113768c828d016111b6565b915080935050809150509295985092959850929598565b60006020828403121561139f57600080fd5b5035919050565b60008060008060008060008060e0898b0312156113c257600080fd5b88356113cd81611193565b975060208901356113dd81611193565b965060408901359550606089013594506080890135935060a0890135925060c08901356001600160401b0381111561141457600080fd5b6114208b828c016111b6565b999c989b5096995094979396929594505050565b6000806040838503121561144757600080fd5b50508035926020909101359150565b60006020828403121561146857600080fd5b813561030281611193565b60006020828403121561148557600080fd5b815161030281611193565b6001600160a01b0392831681529116602082015260400190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b60006001600160601b0319808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156115b157816000190482111561159757611597611560565b808516156115a457918102915b93841c939080029061157b565b509250929050565b6000826115c857506001610ec9565b816115d557506000610ec9565b81600181146115eb57600281146115f557611611565b6001915050610ec9565b60ff84111561160657611606611560565b50506001821b610ec9565b5060208310610133831016604e8410600b8410161715611634575081810a610ec9565b61163e8383611576565b806000190482111561165257611652611560565b029392505050565b600061030283836115b9565b634e487b7160e01b600052601260045260246000fd5b60008261168b5761168b611666565b500490565b60008261169f5761169f611666565b500690565b6000602082840312156116b657600080fd5b815160ff8116811461030257600080fd5b60005b838110156116e25781810151838201526020016116ca565b838111156116f1576000848401525b50505050565b60018060a01b0384168152826020820152606060408201526000825180606084015261172a8160808501602087016116c7565b601f01601f191691909101608001949350505050565b6000806040838503121561175357600080fd5b8251801515811461176357600080fd5b60208401519092506001600160401b038082111561178057600080fd5b818501915085601f83011261179457600080fd5b8151818111156117a6576117a6611098565b6117b9601f8201601f19166020016110ae565b91508082528660208285010111156117d057600080fd5b6117e18160208401602086016116c7565b5080925050509250929050565b600060ff821660ff84168082101561180857611808611560565b90039392505050565b600061030260ff8416836115b9565b600081600019048311821515161561183a5761183a611560565b50029056fea264697066735822122055ea09d5909db9ccf61c8ce3529de47fbc3ceb13cd5b65e0be61ae7505b0d4f664736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c806395fcea78116100b8578063c4d66de81161007c578063c4d66de814610249578063c75184df1461025c578063cb23bcb51461027c578063cbf96f631461028f578063d5b5cc2314610297578063e78cea92146102b757600080fd5b806395fcea78146101f35780639f0c04bf146101fb578063a04cee601461020e578063ae6dead714610221578063b0f305371461024157600080fd5b80635a129efe116100ff5780635a129efe146101985780636ae71f12146101bb57806372f2a8c7146101c357806380648b02146101cb5780638515bc6a146101eb57600080fd5b80627436d31461013b57806308635a95146101615780631198527114610176578063288e5b101461017d5780634654779014610190575b600080fd5b61014e6101493660046110de565b6102ca565b6040519081526020015b60405180910390f35b61017461016f3660046111fe565b610309565b005b600061014e565b61017461018b3660046112f2565b61037c565b61014e6103b7565b6101ab6101a636600461138d565b6103e6565b6040519015158152602001610158565b61017461040b565b61014e610618565b6101d3610635565b6040516001600160a01b039091168152602001610158565b61014e610656565b61017461068c565b61014e6102093660046113a6565b6107aa565b61017461021c366004611434565b6107ef565b61014e61022f36600461138d565b60036020526000908152604090205481565b61014e61086a565b610174610257366004611456565b610892565b610264600281565b6040516001600160801b039091168152602001610158565b6000546101d3906001600160a01b031681565b61014e610a2e565b61014e6102a536600461138d565b60026020526000908152604090205481565b6001546101d3906001600160a01b031681565b60006102ff8484846040516020016102e491815260200190565b60405160208183030381529060405280519060200120610a46565b90505b9392505050565b600061031b89898989898989896107aa565b905061035d8c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e9250859150610ae99050565b61036e8a8a8a8a8a8a8a8a8a610bf2565b505050505050505050505050565b331561039b57604051630e13b69d60e01b815260040160405180910390fd5b6103ac898989898989898989610bf2565b505050505050505050565b6004546000906001600160801b03908116908114156103d857600091505090565b6001600160801b0316919050565b60008060006103f484610e83565b92509250506104038282610ec0565b949350505050565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561045757600080fd5b505afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190611473565b6001600160a01b0316336001600160a01b0316146105475760005460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b1580156104eb57600080fd5b505afa1580156104ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105239190611473565b604051631194af8760e11b815260040161053e929190611490565b60405180910390fd5b6001546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb5916004808301926020929190829003018186803b15801561058c57600080fd5b505afa1580156105a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c49190611473565b6000549091506001600160a01b03808316911614156105f65760405163d054909f60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60055460009060001981141561063057506000919050565b919050565b6006546000906001600160a01b039081169081141561063057600091505090565b6006546000906001600160601b03600160a01b90910481169081141561067e57600091505090565b6001600160601b0316919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106d55760405162461bcd60e51b815260040161053e906114aa565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610725573381604051631194af8760e11b815260040161053e929190611490565b6004546001600160801b03908116146107515760405163d0afb66160e01b815260040160405180910390fd5b50506040805160c0810182526001600160801b0380825260208201526000199181018290526001600160a01b0360608201526001600160601b03608082015260a001819052600481905560058190556006819055600755565b600088888888888888886040516020016107cb9897969594939291906114f6565b60405160208183030381529060405280519060200120905098975050505050505050565b6000546001600160a01b0316331461082b57600054604051630e4cf1bf60e21b815261053e9133916001600160a01b0390911690600401611490565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b6004546000906001600160801b03600160801b9091048116908114156103d857600091505090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108db5760405162461bcd60e51b815260040161053e906114aa565b6001600160a01b03811661090257604051631ad0f74360e01b815260040160405180910390fd5b6001546001600160a01b03161561092c57604051633bcd329760e21b815260040160405180910390fd5b6040805160c0810182526001600160801b038082526020808301919091526000198284018190526001600160a01b03606084018190526001600160601b03608085015260a0909301819052600481815560058290556006829055600791909155600180546001600160a01b0319169386169384179055835163cb23bcb560e01b81529351929363cb23bcb59381830193929091829003018186803b1580156109d357600080fd5b505afa1580156109e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0b9190611473565b600080546001600160a01b0319166001600160a01b039290921691909117905550565b60075460009060001981141561063057600091505090565b8251600090610100811115610a7957604051637ed6198f60e11b815260048101829052610100602482015260440161053e565b8260005b82811015610adf576000878281518110610a9957610a9961154a565b60200260200101519050816001901b871660001415610ac657826000528060205260406000209250610ad6565b8060005282602052604060002092505b50600101610a7d565b5095945050505050565b610100835110610b1157825160405163ab6a068360e01b815260040161053e91815260200190565b8251610b1e90600261165a565b8210610b55578183516002610b33919061165a565b604051630b8a724b60e01b81526004810192909252602482015260440161053e565b6000610b628484846102ca565b600081815260036020526040902054909150610b94576040516310e61af960e31b81526004810182905260240161053e565b6000806000610ba286610e83565b925092509250610bb28282610ec0565b15610bd357604051639715b8d360e01b81526004810187905260240161053e565b600092835260026020526040909220600190911b909117905550505050565b6000886001600160a01b0316886001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648c604051610c3991815260200190565b60405180910390a46000610c4c84610ecf565b9050600060046040518060c00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600182015481526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160149054906101000a90046001600160601b03166001600160601b03166001600160601b0316815260200160038201548152505090506040518060c00160405280896001600160801b03168152602001876001600160801b031681526020018c60001b81526020018b6001600160a01b03168152602001886001600160601b03168152602001610d868490565b905280516020808301516001600160801b03908116600160801b02921691909117600455604080830151600555606083015160808401516001600160601b0316600160a01b026001600160a01b039091161760065560a0909201516007558151601f8601829004820281018201909252848252610e22918b918591908890889081908401838280828437600092019190915250610f6692505050565b805160208201516001600160801b03908116600160801b029116176004556040810151600555606081015160808201516001600160601b0316600160a01b026001600160a01b039091161760065560a0015160075550505050505050505050565b6000808080610e9360ff8661167c565b90506000610ea260ff87611690565b60008381526002602052604090205492979096509194509092505050565b80821c60011615155b92915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663ad48cb5e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2057600080fd5b505afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5891906116a4565b90506103028360128361102e565b600154604051639e5d4c4960e01b815260009182916001600160a01b0390911690639e5d4c4990610f9f908890889088906004016116f7565b600060405180830381600087803b158015610fb957600080fd5b505af1158015610fcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ff59190810190611740565b91509150816110275780511561100e5780518082602001fd5b604051631bb7daad60e11b815260040160405180910390fd5b5050505050565b60008160ff168360ff161415611045575082610302565b8160ff168360ff1610156110795761105d83836117ee565b61106890600a611811565b6110729085611820565b9050610302565b61108382846117ee565b61108e90600a611811565b611072908561167c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156110d6576110d6611098565b604052919050565b6000806000606084860312156110f357600080fd5b83356001600160401b038082111561110a57600080fd5b818601915086601f83011261111e57600080fd5b813560208282111561113257611132611098565b8160051b92506111438184016110ae565b828152928401810192818101908a85111561115d57600080fd5b948201945b8486101561117b57853582529482019490820190611162565b9a918901359950506040909701359695505050505050565b6001600160a01b03811681146111a857600080fd5b50565b803561063081611193565b60008083601f8401126111c857600080fd5b5081356001600160401b038111156111df57600080fd5b6020830191508360208285010111156111f757600080fd5b9250929050565b60008060008060008060008060008060006101208c8e03121561122057600080fd5b8b356001600160401b038082111561123757600080fd5b818e0191508e601f83011261124b57600080fd5b81358181111561125a57600080fd5b8f60208260051b850101111561126f57600080fd5b60208381019e50909c508e01359a5061128a60408f016111ab565b995061129860608f016111ab565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e01359150808211156112cb57600080fd5b506112d88e828f016111b6565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c03121561131157600080fd5b8935985060208a013561132381611193565b975060408a013561133381611193565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a01356001600160401b0381111561136a57600080fd5b6113768c828d016111b6565b915080935050809150509295985092959850929598565b60006020828403121561139f57600080fd5b5035919050565b60008060008060008060008060e0898b0312156113c257600080fd5b88356113cd81611193565b975060208901356113dd81611193565b965060408901359550606089013594506080890135935060a0890135925060c08901356001600160401b0381111561141457600080fd5b6114208b828c016111b6565b999c989b5096995094979396929594505050565b6000806040838503121561144757600080fd5b50508035926020909101359150565b60006020828403121561146857600080fd5b813561030281611193565b60006020828403121561148557600080fd5b815161030281611193565b6001600160a01b0392831681529116602082015260400190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b60006001600160601b0319808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156115b157816000190482111561159757611597611560565b808516156115a457918102915b93841c939080029061157b565b509250929050565b6000826115c857506001610ec9565b816115d557506000610ec9565b81600181146115eb57600281146115f557611611565b6001915050610ec9565b60ff84111561160657611606611560565b50506001821b610ec9565b5060208310610133831016604e8410600b8410161715611634575081810a610ec9565b61163e8383611576565b806000190482111561165257611652611560565b029392505050565b600061030283836115b9565b634e487b7160e01b600052601260045260246000fd5b60008261168b5761168b611666565b500490565b60008261169f5761169f611666565b500690565b6000602082840312156116b657600080fd5b815160ff8116811461030257600080fd5b60005b838110156116e25781810151838201526020016116ca565b838111156116f1576000848401525b50505050565b60018060a01b0384168152826020820152606060408201526000825180606084015261172a8160808501602087016116c7565b601f01601f191691909101608001949350505050565b6000806040838503121561175357600080fd5b8251801515811461176357600080fd5b60208401519092506001600160401b038082111561178057600080fd5b818501915085601f83011261179457600080fd5b8151818111156117a6576117a6611098565b6117b9601f8201601f19166020016110ae565b91508082528660208285010111156117d057600080fd5b6117e18160208401602086016116c7565b5080925050509250929050565b600060ff821660ff84168082101561180857611808611560565b90039392505050565b600061030260ff8416836115b9565b600081600019048311821515161561183a5761183a611560565b50029056fea264697066735822122055ea09d5909db9ccf61c8ce3529de47fbc3ceb13cd5b65e0be61ae7505b0d4f664736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
