kfc-v3-periphery
Version:
🎚 Peripheral smart contracts for interacting with KFC V3
571 lines • 62 kB
JSON
{
"_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": "int256",
"name": "amount0Delta",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1Delta",
"type": "int256"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "kfcV3SwapCallback",
"outputs": [],
"stateMutability": "nonpayable",
"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": "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": "0x60c06040526000196000553480156200001757600080fd5b506040516200303f3803806200303f8339810160408190526200003a9162000076565b6001600160601b0319606092831b8116608052911b1660a052620000ad565b80516001600160a01b03811681146200007157600080fd5b919050565b6000806040838503121562000089578182fd5b620000948362000059565b9150620000a46020840162000059565b90509250929050565b60805160601c60a05160601c612f36620001096000398061012f52806106ca52806107f4528061088e52806108ce52806109f8528061156052806115c052806116415250806103805280610f0d528061248d5250612f366000f3fe6080604052600436106101125760003560e01c8063ac9650d8116100a5578063db3e219811610074578063e0e189a011610059578063e0e189a014610302578063f28c049814610315578063f3995c6714610328576101bd565b8063db3e2198146102dc578063df2ab5bb146102ef576101bd565b8063ac9650d814610281578063c04b8d59146102a1578063c2e3140a146102b4578063c45a0155146102c7576101bd565b806349404b7c116100e157806349404b7c146102265780634aa4a4fc146102395780639b2c0a371461025b578063a4a78f0c1461026e576101bd565b8063101e8605146101c257806312210e8a146101e2578063414bf389146101ea5780634659a49414610213576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b3480156101ce57600080fd5b506101bb6101dd36600461286e565b61033b565b6101bb61048e565b6101fd6101f83660046129fe565b6104a0565b60405161020a9190612e01565b60405180910390f35b6101bb61022136600461277c565b610612565b6101bb610234366004612b05565b6106c6565b34801561024557600080fd5b5061024e61088c565b60405161020a9190612c3d565b6101bb610269366004612b34565b6108b0565b6101bb61027c36600461277c565b610ac8565b61029461028f3660046127dc565b610b9d565b60405161020a9190612cba565b6101fd6102af366004612953565b610cf7565b6101bb6102c236600461277c565b610e56565b3480156102d357600080fd5b5061024e610f0b565b6101fd6102ea3660046129fe565b610f2f565b6101bb6102fd3660046126dd565b6110bf565b6101bb61031036600461271e565b6111dc565b6101fd610323366004612a1a565b611342565b6101bb61033636600461277c565b611476565b600084138061034a5750600083135b61035357600080fd5b600061036182840184612a52565b90506000806000610375846000015161150e565b9250925092506103a77f000000000000000000000000000000000000000000000000000000000000000084848461153f565b5060008060008a136103e8578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089610419565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b91509150811561043857610433858760200151338461155e565b610482565b85516104439061173c565b1561046857855161045390611748565b86526104628133600089611783565b50610482565b80600081905550839450610482858760200151338461155e565b50505050505050505050565b471561049e5761049e3347611942565b565b60008160800135806104b0611a90565b111561051d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6105c360a084013561053560808601606087016126ba565b610546610100870160e088016126ba565b604080518082019091528061055e60208a018a6126ba565b61056e60608b0160408c01612ae2565b61057e60408c0160208d016126ba565b60405160200161059093929190612bc7565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611a94565b91508260c0013582101561060c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612d82565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b1580156106b257600080fd5b505af1158015610482573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561074f57600080fd5b505afa158015610763573d6000803e3d6000fd5b505050506040513d602081101561077957600080fd5b50519050828110156107ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610887577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561086557600080fd5b505af1158015610879573d6000803e3d6000fd5b505050506108878282611942565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156108c1575060648211155b6108ca57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b50519050848110156109f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610ac1577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610a6957600080fd5b505af1158015610a7d573d6000803e3d6000fd5b505050506000612710610a998584611c1d90919063ffffffff16565b81610aa057fe5b0490508015610ab357610ab38382611942565b610abf85828403611942565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610b5d57600080fd5b505afa158015610b71573d6000803e3d6000fd5b505050506040513d6020811015610b8757600080fd5b50511015610abf57610abf868686868686610612565b60608167ffffffffffffffff81118015610bb657600080fd5b50604051908082528060200260200182016040528015610bea57816020015b6060815260200190600190039081610bd55790505b50905060005b82811015610cf05760008030868685818110610c0857fe5b9050602002810190610c1a9190612e0a565b604051610c28929190612c2d565b600060405180830381855af49150503d8060008114610c63576040519150601f19603f3d011682016040523d82523d6000602084013e610c68565b606091505b509150915081610cce57604481511015610c8157600080fd5b60048101905080806020019051810190610c9b91906128e9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106039190612d38565b80848481518110610cdb57fe5b60209081029190910101525050600101610bf0565b5092915050565b6000816040015180610d07611a90565b1115610d7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610d85856000015161173c565b9050610dde856060015182610d9e578660200151610da0565b305b60006040518060400160405280610dba8b60000151611c41565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611a94565b60608601528015610dfe578451309250610df790611748565b8552610e0b565b8460600151935050610e11565b50610d76565b8360800151831015610e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612d82565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610ecb57600080fd5b505afa158015610edf573d6000803e3d6000fd5b505050506040513d6020811015610ef557600080fd5b50511015610abf57610abf868686868686611476565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816080013580610f3f611a90565b1115610fac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61105560a0840135610fc460808601606087016126ba565b610fd5610100870160e088016126ba565b6040518060400160405280886020016020810190610ff391906126ba565b61100360608b0160408c01612ae2565b61101060208c018c6126ba565b60405160200161102293929190612bc7565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611783565b91508260c00135821115611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612d4b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561112857600080fd5b505afa15801561113c573d6000803e3d6000fd5b505050506040513d602081101561115257600080fd5b50519050828110156111c557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156111d6576111d6848383611c50565b50505050565b6000821180156111ed575060648211155b6111f657600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561125f57600080fd5b505afa158015611273573d6000803e3d6000fd5b505050506040513d602081101561128957600080fd5b50519050848110156112fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610abf5760006127106113118386611c1d565b8161131857fe5b049050801561132c5761132c878483611c50565b6113398786838503611c50565b50505050505050565b6000816040013580611352611a90565b11156113bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61143260608401356113d760408601602087016126ba565b60408051808201909152600090806113ef8980612e0a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611783565b5060005491508260800135821115611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612d4b565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b1580156106b257600080fd5b6000808061151c8482611e25565b9250611529846014611f25565b9050611536846017611e25565b91509193909250565b600061155585611550868686612015565b612092565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156115b95750804710155b15611702577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561162657600080fd5b505af115801561163a573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b505050506040513d60208110156116fa57600080fd5b506111d69050565b73ffffffffffffffffffffffffffffffffffffffff83163014156117305761172b848383611c50565b6111d6565b6111d6848484846120c2565b8051604211155b919050565b805160609061177d9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161229f565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff84166117a4573093505b60008060006117b6856000015161150e565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806117e7858786612486565b73ffffffffffffffffffffffffffffffffffffffff1663469641498b8561180d8f6124c4565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615611832578d611858565b876118515773fffd8963efd1fc6a506488495d951d5263988d25611858565b6401000276a45b8d6040516020016118699190612db9565b60405160208183030381529060405260006040518763ffffffff1660e01b815260040161189b96959493929190612c5e565b6040805180830381600087803b1580156118b457600080fd5b505af11580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec919061284b565b91509150600083611901578183600003611907565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611933578b811461193357600080fd5b50505050505050949350505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106119b957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161197c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611a1b576040519150601f19603f3d011682016040523d82523d6000602084013e611a20565b606091505b505090508061088757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b4290565b600073ffffffffffffffffffffffffffffffffffffffff8416611ab5573093505b6000806000611ac7856000015161150e565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80831690841610600080611af8868686612486565b73ffffffffffffffffffffffffffffffffffffffff1663469641498b85611b1e8f6124c4565b73ffffffffffffffffffffffffffffffffffffffff8e1615611b40578d611b66565b87611b5f5773fffd8963efd1fc6a506488495d951d5263988d25611b66565b6401000276a45b8d604051602001611b779190612db9565b60405160208183030381529060405260006040518763ffffffff1660e01b8152600401611ba996959493929190612c5e565b6040805180830381600087803b158015611bc257600080fd5b505af1158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa919061284b565b9150915082611c095781611c0b565b805b6000039b9a5050505050505050505050565b6000821580611c3857505081810281838281611c3557fe5b04145b61177d57600080fd5b606061177d826000602b61229f565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611d2557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ce8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611d87576040519150601f19603f3d011682016040523d82523d6000602084013e611d8c565b606091505b5091509150818015611dba575080511580611dba5750808060200190516020811015611db757600080fd5b50515b610ac157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600081826014011015611e9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015611f0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015611f9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561200c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b61201d61262c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115612055579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b600061209e83836124f6565b90503373ffffffffffffffffffffffffffffffffffffffff82161461177d57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061219f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612162565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612201576040519150601f19603f3d011682016040523d82523d6000602084013e612206565b606091505b5091509150818015612234575080511580612234575080806020019051602081101561223157600080fd5b50515b610abf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60608182601f01101561231357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b82828401101561238457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b818301845110156123f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015612415576040519150600082526020820160405261247d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561244e578051835260209283019201612436565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60006124bc7f00000000000000000000000000000000000000000000000000000000000000006124b7868686612015565b6124f6565b949350505050565b60007f800000000000000000000000000000000000000000000000000000000000000082106124f257600080fd5b5090565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061253857600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561174381612f04565b600082601f830112612667578081fd5b813561267a61267582612e98565b612e74565b81815284602083860101111561268e578283fd5b816020850160208301379081016020019190915292915050565b6000610100828403121561060c578081fd5b6000602082840312156126cb578081fd5b81356126d681612f04565b9392505050565b6000806000606084860312156126f1578182fd5b83356126fc81612f04565b925060208401359150604084013561271381612f04565b809150509250925092565b600080600080600060a08688031215612735578081fd5b853561274081612f04565b945060208601359350604086013561275781612f04565b925060608601359150608086013561276e81612f04565b809150509295509295909350565b60008060008060008060c08789031215612794578081fd5b863561279f81612f04565b95506020870135945060408701359350606087013560ff811681146127c2578182fd5b9598949750929560808101359460a0909101359350915050565b600080602083850312156127ee578182fd5b823567ffffffffffffffff80821115612805578384fd5b818501915085601f830112612818578384fd5b813581811115612826578485fd5b8660208083028501011115612839578485fd5b60209290920196919550909350505050565b6000806040838503121561285d578182fd5b505080516020909101519092909150565b60008060008060608587031215612883578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128a8578384fd5b818701915087601f8301126128bb578384fd5b8135818111156128c9578485fd5b8860208285010111156128da578485fd5b95989497505060200194505050565b6000602082840312156128fa578081fd5b815167ffffffffffffffff811115612910578182fd5b8201601f81018413612920578182fd5b805161292e61267582612e98565b818152856020838501011115612942578384fd5b611555826020830160208601612ed8565b600060208284031215612964578081fd5b813567ffffffffffffffff8082111561297b578283fd5b9083019060a0828603121561298e578283fd5b60405160a0810181811083821117156129a357fe5b6040528235828111156129b4578485fd5b6129c087828601612657565b8252506129cf6020840161264c565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a10578081fd5b6126d683836126a8565b600060208284031215612a2b578081fd5b813567ffffffffffffffff811115612a41578182fd5b820160a081850312156126d6578182fd5b600060208284031215612a63578081fd5b813567ffffffffffffffff80821115612a7a578283fd5b9083019060408286031215612a8d578283fd5b604051604081018181108382111715612aa257fe5b604052823582811115612ab3578485fd5b612abf87828601612657565b82525060208301359250612ad283612f04565b6020810192909252509392505050565b600060208284031215612af3578081fd5b813562ffffff811681146126d6578182fd5b60008060408385031215612b17578182fd5b823591506020830135612b2981612f04565b809150509250929050565b60008060008060808587031215612b49578182fd5b843593506020850135612b5b81612f04565b9250604085013591506060850135612b7281612f04565b939692955090935050565b60008151808452612b95816020860160208601612ed8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528715156020840152866040840152808616606084015260c06080840152612ca460c0840186612b7d565b915080841660a084015250979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d2b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d19858351612b7d565b94509285019290850190600101612cdf565b5092979650505050505050565b6000602082526126d66020830184612b7d565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160406020840152612dd56060840182612b7d565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e3e578283fd5b83018035915067ffffffffffffffff821115612e58578283fd5b602001915036819003821315612e6d57600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612e9057fe5b604052919050565b600067ffffffffffffffff821115612eac57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612ef3578181015183820152602001612edb565b838111156111d65750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f2657600080fd5b5056fea164736f6c6343000706000a",
"deployedBytecode": "0x6080604052600436106101125760003560e01c8063ac9650d8116100a5578063db3e219811610074578063e0e189a011610059578063e0e189a014610302578063f28c049814610315578063f3995c6714610328576101bd565b8063db3e2198146102dc578063df2ab5bb146102ef576101bd565b8063ac9650d814610281578063c04b8d59146102a1578063c2e3140a146102b4578063c45a0155146102c7576101bd565b806349404b7c116100e157806349404b7c146102265780634aa4a4fc146102395780639b2c0a371461025b578063a4a78f0c1461026e576101bd565b8063101e8605146101c257806312210e8a146101e2578063414bf389146101ea5780634659a49414610213576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b3480156101ce57600080fd5b506101bb6101dd36600461286e565b61033b565b6101bb61048e565b6101fd6101f83660046129fe565b6104a0565b60405161020a9190612e01565b60405180910390f35b6101bb61022136600461277c565b610612565b6101bb610234366004612b05565b6106c6565b34801561024557600080fd5b5061024e61088c565b60405161020a9190612c3d565b6101bb610269366004612b34565b6108b0565b6101bb61027c36600461277c565b610ac8565b61029461028f3660046127dc565b610b9d565b60405161020a9190612cba565b6101fd6102af366004612953565b610cf7565b6101bb6102c236600461277c565b610e56565b3480156102d357600080fd5b5061024e610f0b565b6101fd6102ea3660046129fe565b610f2f565b6101bb6102fd3660046126dd565b6110bf565b6101bb61031036600461271e565b6111dc565b6101fd610323366004612a1a565b611342565b6101bb61033636600461277c565b611476565b600084138061034a5750600083135b61035357600080fd5b600061036182840184612a52565b90506000806000610375846000015161150e565b9250925092506103a77f000000000000000000000000000000000000000000000000000000000000000084848461153f565b5060008060008a136103e8578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161089610419565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b91509150811561043857610433858760200151338461155e565b610482565b85516104439061173c565b1561046857855161045390611748565b86526104628133600089611783565b50610482565b80600081905550839450610482858760200151338461155e565b50505050505050505050565b471561049e5761049e3347611942565b565b60008160800135806104b0611a90565b111561051d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6105c360a084013561053560808601606087016126ba565b610546610100870160e088016126ba565b604080518082019091528061055e60208a018a6126ba565b61056e60608b0160408c01612ae2565b61057e60408c0160208d016126ba565b60405160200161059093929190612bc7565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611a94565b91508260c0013582101561060c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612d82565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b1580156106b257600080fd5b505af1158015610482573d6000803e3d6000fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561074f57600080fd5b505afa158015610763573d6000803e3d6000fd5b505050506040513d602081101561077957600080fd5b50519050828110156107ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610887577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561086557600080fd5b505af1158015610879573d6000803e3d6000fd5b505050506108878282611942565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000821180156108c1575060648211155b6108ca57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b50519050848110156109f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610ac1577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610a6957600080fd5b505af1158015610a7d573d6000803e3d6000fd5b505050506000612710610a998584611c1d90919063ffffffff16565b81610aa057fe5b0490508015610ab357610ab38382611942565b610abf85828403611942565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610b5d57600080fd5b505afa158015610b71573d6000803e3d6000fd5b505050506040513d6020811015610b8757600080fd5b50511015610abf57610abf868686868686610612565b60608167ffffffffffffffff81118015610bb657600080fd5b50604051908082528060200260200182016040528015610bea57816020015b6060815260200190600190039081610bd55790505b50905060005b82811015610cf05760008030868685818110610c0857fe5b9050602002810190610c1a9190612e0a565b604051610c28929190612c2d565b600060405180830381855af49150503d8060008114610c63576040519150601f19603f3d011682016040523d82523d6000602084013e610c68565b606091505b509150915081610cce57604481511015610c8157600080fd5b60048101905080806020019051810190610c9b91906128e9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106039190612d38565b80848481518110610cdb57fe5b60209081029190910101525050600101610bf0565b5092915050565b6000816040015180610d07611a90565b1115610d7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610d85856000015161173c565b9050610dde856060015182610d9e578660200151610da0565b305b60006040518060400160405280610dba8b60000151611c41565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611a94565b60608601528015610dfe578451309250610df790611748565b8552610e0b565b8460600151935050610e11565b50610d76565b8360800151831015610e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612d82565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610ecb57600080fd5b505afa158015610edf573d6000803e3d6000fd5b505050506040513d6020811015610ef557600080fd5b50511015610abf57610abf868686868686611476565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816080013580610f3f611a90565b1115610fac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61105560a0840135610fc460808601606087016126ba565b610fd5610100870160e088016126ba565b6040518060400160405280886020016020810190610ff391906126ba565b61100360608b0160408c01612ae2565b61101060208c018c6126ba565b60405160200161102293929190612bc7565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611783565b91508260c00135821115611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612d4b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561112857600080fd5b505afa15801561113c573d6000803e3d6000fd5b505050506040513d602081101561115257600080fd5b50519050828110156111c557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156111d6576111d6848383611c50565b50505050565b6000821180156111ed575060648211155b6111f657600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561125f57600080fd5b505afa158015611273573d6000803e3d6000fd5b505050506040513d602081101561128957600080fd5b50519050848110156112fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610abf5760006127106113118386611c1d565b8161131857fe5b049050801561132c5761132c878483611c50565b6113398786838503611c50565b50505050505050565b6000816040013580611352611a90565b11156113bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61143260608401356113d760408601602087016126ba565b60408051808201909152600090806113ef8980612e0a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611783565b5060005491508260800135821115611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612d4b565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b1580156106b257600080fd5b6000808061151c8482611e25565b9250611529846014611f25565b9050611536846017611e25565b91509193909250565b600061155585611550868686612015565b612092565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156115b95750804710155b15611702577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561162657600080fd5b505af115801561163a573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b505050506040513d60208110156116fa57600080fd5b506111d69050565b73ffffffffffffffffffffffffffffffffffffffff83163014156117305761172b848383611c50565b6111d6565b6111d6848484846120c2565b8051604211155b919050565b805160609061177d9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90161229f565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff84166117a4573093505b60008060006117b6856000015161150e565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806117e7858786612486565b73ffffffffffffffff