UNPKG

@justin-gee/uniswap-tokamak-hardhat-v3-deploy

Version:
571 lines 63.3 kB
{ "_format": "hh-sol-artifact-1", "contractName": "SwapRouter", "sourceName": "contracts/SwapRouter.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_WETH9", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "WETH9", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "path", "type": "bytes" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" } ], "internalType": "struct ISwapRouter.ExactInputParams", "name": "params", "type": "tuple" } ], "name": "exactInput", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" } ], "internalType": "struct ISwapRouter.ExactInputSingleParams", "name": "params", "type": "tuple" } ], "name": "exactInputSingle", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "path", "type": "bytes" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "amountInMaximum", "type": "uint256" } ], "internalType": "struct ISwapRouter.ExactOutputParams", "name": "params", "type": "tuple" } ], "name": "exactOutput", "outputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "amountInMaximum", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" } ], "internalType": "struct ISwapRouter.ExactOutputSingleParams", "name": "params", "type": "tuple" } ], "name": "exactOutputSingle", "outputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "refundETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowed", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowedIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "sweepToken", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "feeBips", "type": "uint256" }, { "internalType": "address", "name": "feeRecipient", "type": "address" } ], "name": "sweepTokenWithFee", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "uniswapV3SwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unwrapWETH9", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "feeBips", "type": "uint256" }, { "internalType": "address", "name": "feeRecipient", "type": "address" } ], "name": "unwrapWETH9WithFee", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x60c06040526000196000553480156200001757600080fd5b506040516200318a3803806200318a8339810160408190526200003a916200006f565b6001600160a01b039182166080521660a052620000a7565b80516001600160a01b03811681146200006a57600080fd5b919050565b600080604083850312156200008357600080fd5b6200008e8362000052565b91506200009e6020840162000052565b90509250929050565b60805160a051613077620001136000396000818161012f0152818161022801528181610670015281816107910152818161085c0152818161097d01528181611ce201528181611d420152611e0a0152600081816102ed015281816115450152611ec101526130776000f3fe6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063f28c049811610059578063f28c049814610348578063f3995c671461035b578063fa461e331461036e57600080fd5b8063df2ab5bb14610322578063e0e189a01461033557600080fd5b8063c04b8d59146102b5578063c2e3140a146102c8578063c45a0155146102db578063db3e21981461030f57600080fd5b80634aa4a4fc116100e15780634aa4a4fc146102165780639b2c0a371461026f578063a4a78f0c14610282578063ac9650d81461029557600080fd5b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f057806349404b7c1461020357600080fd5b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74205745544839000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b6101bb61038e565b6101dd6101d83660046125c7565b6103a0565b6040519081526020015b60405180910390f35b6101bb6101fe366004612610565b610584565b6101bb610211366004612672565b61063f565b34801561022257600080fd5b5061024a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e7565b6101bb61027d3660046126a2565b610811565b6101bb610290366004612610565b610a37565b6102a86102a33660046126ec565b610b01565b6040516101e791906127d7565b6101dd6102c336600461299a565b610c73565b6101bb6102d6366004612610565b610dfc565b3480156102e757600080fd5b5061024a7f000000000000000000000000000000000000000000000000000000000000000081565b6101dd61031d3660046125c7565b610ea6565b6101bb610330366004612a3e565b6110b1565b6101bb610343366004612a80565b6111c5565b6101dd610356366004612adf565b61132b565b6101bb610369366004612610565b611483565b34801561037a57600080fd5b506101bb610389366004612b1a565b611500565b471561039e5761039e3347611647565b565b6000608082013580421115610411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101b2565b61050e60a08401356104296080860160608701612b9a565b61043a610100870160e08801612b9a565b604080518082019091528061045260208a018a612b9a565b61046260608b0160408c01612bb7565b61047260408c0160208d01612b9a565b604051606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602083015260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166034820152921b166037820152604b0160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff1681525061172b565b91508260c0013582101561057e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101b2565b50919050565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e4810182905273ffffffffffffffffffffffffffffffffffffffff871690638fcbaf0c90610104015b600060405180830381600087803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b50505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f09190612bdc565b90508281101561075c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e74205745544839000000000000000000000000000060448201526064016101b2565b801561080c576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156107ea57600080fd5b505af11580156107fe573d6000803e3d6000fd5b5050505061080c8282611647565b505050565b600082118015610822575060648211155b61082b57600080fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190612bdc565b905084811015610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e74205745544839000000000000000000000000000060448201526064016101b2565b8015610a30576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156109d657600080fd5b505af11580156109ea573d6000803e3d6000fd5b50505050600061271084836109ff9190612c24565b610a099190612c61565b90508015610a1b57610a1b8382611647565b610a2e85610a298385612c9c565b611647565b505b5050505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190612bdc565b1015610a2e57610a2e868686868686610584565b60608167ffffffffffffffff811115610b1c57610b1c612857565b604051908082528060200260200182016040528015610b4f57816020015b6060815260200190600190039081610b3a5790505b50905060005b82811015610c6c5760008030868685818110610b7357610b73612cb3565b9050602002810190610b859190612ce2565b604051610b93929190612d4e565b600060405180830381855af49150503d8060008114610bce576040519150601f19603f3d011682016040523d82523d6000602084013e610bd3565b606091505b509150915081610c3957604481511015610bec57600080fd5b60048101905080806020019051810190610c069190612d5e565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101b29190612dcc565b80848481518110610c4c57610c4c612cb3565b602002602001018190525050508080610c6490612ddf565b915050610b55565b5092915050565b6000816040015180610c824290565b1115610cea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101b2565b335b6000610cfb85600001516118bb565b9050610d54856060015182610d14578660200151610d16565b305b60006040518060400160405280610d308b600001516118f5565b81526020018773ffffffffffffffffffffffffffffffffffffffff1681525061172b565b60608601528015610d74578451309250610d6d90611921565b8552610d81565b8460600151935050610d87565b50610cec565b8360800151831015610df5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101b2565b5050919050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152859073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e929190612bdc565b1015610a2e57610a2e868686868686611483565b6000608082013580421115610f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101b2565b61101760a0840135610f2f6080860160608701612b9a565b610f40610100870160e08801612b9a565b6040518060400160405280886020016020810190610f5e9190612b9a565b610f6e60608b0160408c01612bb7565b610f7b60208c018c612b9a565b604051606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602083015260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166034820152921b166037820152604b0160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff1681525061194a565b91508260c00135821115611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f546f6f206d75636820726571756573746564000000000000000000000000000060448201526064016101b2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa15801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190612bdc565b9050828110156111ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e000000000000000000000000000060448201526064016101b2565b80156111bf576111bf848383611b1c565b50505050565b6000821180156111d6575060648211155b6111df57600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112709190612bdc565b9050848110156112dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e000000000000000000000000000060448201526064016101b2565b8015610a2e5760006127106112f18584612c24565b6112fb9190612c61565b9050801561130e5761130e878483611b1c565b611322878661131d8486612c9c565b611b1c565b50505050505050565b600060408201358042111561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101b2565b61140f60608401356113b46040860160208701612b9a565b60408051808201909152600090806113cc8980612ce2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360209091015261194a565b5060005491508260800135821115611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f546f6f206d75636820726571756573746564000000000000000000000000000060448201526064016101b2565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff87169063d505accf9060e401610605565b600084138061150f5750600083135b61151857600080fd5b600061152682840184612e17565b9050600080600061153a8460000151611c85565b92509250925061156c7f0000000000000000000000000000000000000000000000000000000000000000848484611cc1565b5060008060008a136115ad578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896115de565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156115fd576115f88587602001513384611ce0565b610633565b8551611608906118bb565b1561162d57855161161890611921565b8652611627813360008961194a565b50610633565b806000819055508394506106338587602001513384611ce0565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff841690839060405161167e9190612eb1565b60006040518083038185875af1925050503d80600081146116bb576040519150601f19603f3d011682016040523d82523d6000602084013e6116c0565b606091505b505090508061080c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f535445000000000000000000000000000000000000000000000000000000000060448201526064016101b2565b600073ffffffffffffffffffffffffffffffffffffffff841661174c573093505b600080600061175e8560000151611c85565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8083169084161060008061178f868686611eba565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856117b58f611ef8565b73ffffffffffffffffffffffffffffffffffffffff8e16156117d7578d611810565b87611800576117fb600173fffd8963efd1fc6a506488495d951d5263988d26612ecd565b611810565b6118106401000276a36001612f02565b8d6040516020016118219190612f3a565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611850959493929190612f82565b60408051808303816000875af115801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190612fd4565b91509150826118a157816118a3565b805b6118ac90612ff8565b9b9a5050505050505050505050565b60006118c960036014613030565b60146118d6600382613030565b6118e09190613030565b6118ea9190613030565b825110159050919050565b606061191b60006014611909600382613030565b6119139190613030565b849190611f2a565b92915050565b606061191b61193260036014613030565b61193e60036014613030565b84516119139190612c9c565b600073ffffffffffffffffffffffffffffffffffffffff841661196b573093505b600080600061197d8560000151611c85565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806119ae858786611eba565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856119d48f611ef8565b6119dd90612ff8565b73ffffffffffffffffffffffffffffffffffffffff8e16156119ff578d611a38565b87611a2857611a23600173fffd8963efd1fc6a506488495d951d5263988d26612ecd565b611a38565b611a386401000276a36001612f02565b8d604051602001611a499190612f3a565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611a78959493929190612f82565b60408051808303816000875af1158015611a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba9190612fd4565b91509150600083611ad45781611acf84612ff8565b611ade565b82611ade83612ff8565b909850905073ffffffffffffffffffffffffffffffffffffffff8a16600003611b0d578b8114611b0d57600080fd5b50505050505050949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691611bb39190612eb1565b6000604051808303816000865af19150503d8060008114611bf0576040519150601f19603f3d011682016040523d82523d6000602084013e611bf5565b606091505b5091509150818015611c1f575080511580611c1f575080806020019051810190611c1f9190613048565b610a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f535400000000000000000000000000000000000000000000000000000000000060448201526064016101b2565b60008080611c9384826120a4565b9250611ca0846014612134565b9050611cb8611cb160036014613030565b85906120a4565b91509193909250565b6000611cd785611cd2868686612228565b6122ba565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611d3b5750804710155b15611e81577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611da857600080fd5b505af1158015611dbc573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015611e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7b9190613048565b506111bf565b3073ffffffffffffffffffffffffffffffffffffffff841603611eae57611ea9848383611b1c565b6111bf565b6111bf848484846122ea565b6000611ef07f0000000000000000000000000000000000000000000000000000000000000000611eeb868686612228565b61245b565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210611f2657600080fd5b5090565b606081611f3881601f613030565b1015611fa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101b2565b611faa8284613030565b84511015612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016101b2565b606082158015612033576040519150600082526020820160405261209b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561206c578051835260209283019201612054565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60006120b1826014613030565b8351101561211b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016101b2565b5001602001516c01000000000000000000000000900490565b600081612142816003613030565b10156121aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f7700000000000000000000000000000060448201526064016101b2565b6121b5826003613030565b8351101561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e647300000000000000000000000060448201526064016101b2565b50016003015190565b60408051606081018252600080825260208201819052918101919091528273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16111561227d579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b60006122c6838361245b565b90503373ffffffffffffffffffffffffffffffffffffffff82161461191b57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916123899190612eb1565b6000604051808303816000865af19150503d80600081146123c6576040519150601f19603f3d011682016040523d82523d6000602084013e6123cb565b606091505b50915091508180156123f55750805115806123f55750808060200190518101906123f59190613048565b610a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f535446000000000000000000000000000000000000000000000000000000000060448201526064016101b2565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061249d57600080fd5b8151602080840151604080860151815173ffffffffffffffffffffffffffffffffffffffff95861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201207fff0000000000000000000000000000000000000000000000000000000000000060a08401529085901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201527fa598dd2fba360510c5a8f02f44423a4468e902df5857dbce3ca162a43a3a31ff60d582015260f501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b6000610100828403121561057e57600080fd5b600061010082840312156125da57600080fd5b6125e483836125b4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461260d57600080fd5b50565b60008060008060008060c0878903121561262957600080fd5b8635612634816125eb565b95506020870135945060408701359350606087013560ff8116811461265857600080fd5b9598949750929560808101359460a0909101359350915050565b6000806040838503121561268557600080fd5b823591506020830135612697816125eb565b809150509250929050565b600080600080608085870312156126b857600080fd5b8435935060208501356126ca816125eb565b92506040850135915060608501356126e1816125eb565b939692955090935050565b600080602083850312156126ff57600080fd5b823567ffffffffffffffff8082111561271757600080fd5b818501915085601f83011261272b57600080fd5b81358181111561273a57600080fd5b8660208260051b850101111561274f57600080fd5b60209290920196919550909350505050565b60005b8381101561277c578181015183820152602001612764565b838111156111bf5750506000910152565b600081518084526127a5816020860160208601612761565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561284a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261283885835161278d565b945092850192908501906001016127fe565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156128a9576128a9612857565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156128f6576128f6612857565b604052919050565b600067ffffffffffffffff82111561291857612918612857565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261295557600080fd5b8135612968612963826128fe565b6128af565b81815284602083860101111561297d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156129ac57600080fd5b813567ffffffffffffffff808211156129c457600080fd5b9083019060a082860312156129d857600080fd5b6129e0612886565b8235828111156129ef57600080fd5b6129fb87828601612944565b82525060208301359150612a0e826125eb565b81602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b600080600060608486031215612a5357600080fd5b8335612a5e816125eb565b9250602084013591506040840135612a75816125eb565b809150509250925092565b600080600080600060a08688031215612a9857600080fd5b8535612aa3816125eb565b9450602086013593506040860135612aba816125eb565b9250606086013591506080860135612ad1816125eb565b809150509295509295909350565b600060208284031215612af157600080fd5b813567ffffffffffffffff811115612b0857600080fd5b820160a081850312156125e457600080fd5b60008060008060608587031215612b3057600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115612b5657600080fd5b818701915087601f830112612b6a57600080fd5b813581811115612b7957600080fd5b886020828501011115612b8b57600080fd5b95989497505060200194505050565b600060208284031215612bac57600080fd5b81356125e4816125eb565b600060208284031215612bc957600080fd5b813562ffffff811681146125e457600080fd5b600060208284031215612bee57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5c57612c5c612bf5565b500290565b600082612c97577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015612cae57612cae612bf5565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612d1757600080fd5b83018035915067ffffffffffffffff821115612d3257600080fd5b602001915036819003821315612d4757600080fd5b9250929050565b8183823760009101908152919050565b600060208284031215612d7057600080fd5b815167ffffffffffffffff811115612d8757600080fd5b8201601f81018413612d9857600080fd5b8051612da6612963826128fe565b818152856020838501011115612dbb57600080fd5b611cd7826020830160208601612761565b6020815260006125e4602083018461278d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e1057612e10612bf5565b5060010190565b600060208284031215612e2957600080fd5b813567ffffffffffffffff80821115612e4157600080fd5b9083019060408286031215612e5557600080fd5b604051604081018181108382111715612e7057612e70612857565b604052823582811115612e8257600080fd5b612e8e87828601612944565b82525060208301359250612ea1836125eb565b6020810192909252509392505050565b60008251612ec3818460208701612761565b9190910192915050565b600073ffffffffffffffffffffffffffffffffffffffff83811690831681811015612efa57612efa612bf5565b039392505050565b600073ffffffffffffffffffffffffffffffffffffffff808316818516808303821115612f3157612f31612bf5565b01949350505050565b602081526000825160406020840152612f56606084018261278d565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612fc960a083018461278d565b979650505050505050565b60008060408385031215612fe757600080fd5b505080516020909101519092909150565b60007f8000000000000000000000000000000000000000000000000000000000000000820361302957613029612bf5565b5060000390565b6000821982111561304357613043612bf5565b500190565b60006020828403121561305a57600080fd5b815180151581146125e457600080fdfea164736f6c634300080f000a", "deployedBytecode": "0x6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063f28c049811610059578063f28c049814610348578063f3995c671461035b578063fa461e331461036e57600080fd5b8063df2ab5bb14610322578063e0e189a01461033557600080fd5b8063c04b8d59146102b5578063c2e3140a146102c8578063c45a0155146102db578063db3e21981461030f57600080fd5b80634aa4a4fc116100e15780634aa4a4fc146102165780639b2c0a371461026f578063a4a78f0c14610282578063ac9650d81461029557600080fd5b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f057806349404b7c1461020357600080fd5b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f74205745544839000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b6101bb61038e565b6101dd6101d83660046125c7565b6103a0565b6040519081526020015b60405180910390f35b6101bb6101fe366004612610565b610584565b6101bb610211366004612672565b61063f565b34801561022257600080fd5b5061024a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e7565b6101bb61027d3660046126a2565b610811565b6101bb610290366004612610565b610a37565b6102a86102a33660046126ec565b610b01565b6040516101e791906127d7565b6101dd6102c336600461299a565b610c73565b6101bb6102d6366004612610565b610dfc565b3480156102e757600080fd5b5061024a7f000000000000000000000000000000000000000000000000000000000000000081565b6101dd61031d3660046125c7565b610ea6565b6101bb610330366004612a3e565b6110b1565b6101bb610343366004612a80565b6111c5565b6101dd610356366004612adf565b61132b565b6101bb610369366004612610565b611483565b34801561037a57600080fd5b506101bb610389366004612b1a565b611500565b471561039e5761039e3347611647565b565b6000608082013580421115610411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101b2565b61050e60a08401356104296080860160608701612b9a565b61043a610100870160e08801612b9a565b604080518082019091528061045260208a018a612b9a565b61046260608b0160408c01612bb7565b61047260408c0160208d01612b9a565b604051606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602083015260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166034820152921b166037820152604b0160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff1681525061172b565b91508260c0013582101561057e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101b2565b50919050565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e4810182905273ffffffffffffffffffffffffffffffffffffffff871690638fcbaf0c90610104015b600060405180830381600087803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b50505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f09190612bdc565b90508281101561075c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e74205745544839000000000000000000000000000060448201526064016101b2565b801561080c576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156107ea57600080fd5b505af11580156107fe573d6000803e3d6000fd5b5050505061080c8282611647565b505050565b600082118015610822575060648211155b61082b57600080fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190612bdc565b905084811015610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e74205745544839000000000000000000000000000060448201526064016101b2565b8015610a30576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156109d657600080fd5b505af11580156109ea573d6000803e3d6000fd5b50505050600061271084836109ff9190612c24565b610a099190612c61565b90508015610a1b57610a1b8382611647565b610a2e85610a298385612c9c565b611647565b505b5050505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190612bdc565b1015610a2e57610a2e868686868686610584565b60608167ffffffffffffffff811115610b1c57610b1c612857565b604051908082528060200260200182016040528015610b4f57816020015b6060815260200190600190039081610b3a5790505b50905060005b82811015610c6c5760008030868685818110610b7357610b73612cb3565b9050602002810190610b859190612ce2565b604051610b93929190612d4e565b600060405180830381855af49150503d8060008114610bce576040519150601f19603f3d011682016040523d82523d6000602084013e610bd3565b606091505b509150915081610c3957604481511015610bec57600080fd5b60048101905080806020019051810190610c069190612d5e565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101b29190612dcc565b80848481518110610c4c57610c4c612cb3565b602002602001018190525050508080610c6490612ddf565b915050610b55565b5092915050565b6000816040015180610c824290565b1115610cea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101b2565b335b6000610cfb85600001516118bb565b9050610d54856060015182610d14578660200151610d16565b305b60006040518060400160405280610d308b600001516118f5565b81526020018773ffffffffffffffffffffffffffffffffffffffff1681525061172b565b60608601528015610d74578451309250610d6d90611921565b8552610d81565b8460600151935050610d87565b50610cec565b8360800151831015610df5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101b2565b5050919050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152859073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e929190612bdc565b1015610a2e57610a2e868686868686611483565b6000608082013580421115610f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101b2565b61101760a0840135610f2f6080860160608701612b9a565b610f40610100870160e08801612b9a565b6040518060400160405280886020016020810190610f5e9190612b9a565b610f6e60608b0160408c01612bb7565b610f7b60208c018c612b9a565b604051606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602083015260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166034820152921b166037820152604b0160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff1681525061194a565b91508260c00135821115611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f546f6f206d75636820726571756573746564000000000000000000000000000060448201526064016101b2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa15801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190612bdc565b9050828110156111ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e000000000000000000000000000060448201526064016101b2565b80156111bf576111bf848383611b1c565b50505050565b6000821180156111d6575060648211155b6111df57600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112709190612bdc565b9050848110156112dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e000000000000000000000000000060448201526064016101b2565b8015610a2e5760006127106112f18584612c24565b6112fb9190612c61565b9050801561130e5761130e878483611b1c565b611322878661131d8486612c9c565b611b1c565b50505050505050565b600060408201358042111561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101b2565b61140f60608401356113b46040860160208701612b9a565b60408051808201909152600090806113cc8980612ce2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360209091015261194a565b5060005491508260800135821115611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f546f6f206d75636820726571756573746564000000000000000000000000000060448201526064016101b2565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff87169063d505accf9060e401610605565b600084138061150f5750600083135b61151857600080fd5b600061152682840184612e17565b9050600080600061153a8460000151611c85565b92509250925061156c7f0000000000000000000000000000000000000000000000000000000000000000848484611cc1565b5060008060008a136115ad578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896115de565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156115fd576115f88587602001513384611ce0565b610633565b8551611608906118bb565b1561162d57855161161890611921565b8652611627813360008961194a565b50610633565b806000819055508394506106338587602001513384611ce0565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff841690839060405161167e9190612eb1565b60006040518083038185875af1925050503d80600081146116bb576040519150601f19603f