@ensuro/price-risk-module
Version:
Price Risk Module for the Ensuro Protocol
621 lines (620 loc) • 43.4 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "SwapRouterMock",
"sourceName": "contracts/mocks/SwapRouterMock.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
},
{
"internalType": "contract IERC20Metadata",
"name": "tokenIn_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IPriceOracle",
"name": "oracle",
"type": "address"
}
],
"name": "NewOracle",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "slippage",
"type": "uint256"
}
],
"name": "SlippageUpdated",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "GUARDIAN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "SWAP_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"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": "",
"type": "tuple"
}
],
"name": "exactInput",
"outputs": [
{
"internalType": "uint256",
"name": "",
"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": "",
"type": "tuple"
}
],
"name": "exactOutput",
"outputs": [
{
"internalType": "uint256",
"name": "",
"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": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "oracle",
"outputs": [
{
"internalType": "contract IPriceOracle",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "contract IPriceOracle",
"name": "oracle_",
"type": "address"
}
],
"name": "setOracle",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "slippage_",
"type": "uint256"
}
],
"name": "setSlippage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "slippage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tokenIn",
"outputs": [
{
"internalType": "contract IERC20Metadata",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "uniswapV3SwapCallback",
"outputs": [],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60c06040523480156200001157600080fd5b5060405162001f2f38038062001f2f8339810160408190526200003491620002a8565b6001600160a01b038216620000905760405162461bcd60e51b815260206004820152601c60248201527f41646d696e2063616e6e6f74206265207a65726f20616464726573730000000060448201526064015b60405180910390fd5b6001600160a01b038116620000e85760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e496e2063616e6e6f74206265207a65726f20616464726573730000604482015260640162000087565b620000f5600083620001cc565b6001600160a01b03811660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000140573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001669190620002e7565b6200017390601262000329565b6200018090600a62000442565b60a052670de0b6b3a764000060028190556040519081527ff5a802650e0a86db227cc342f06327d2ca0ff5cf2b12e0084fc5d8a7db2c54fd9060200160405180910390a1505062000453565b620001d88282620001dc565b5050565b620001e8828262000264565b620001d8576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002203390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b6001600160a01b0381168114620002a557600080fd5b50565b60008060408385031215620002bc57600080fd5b8251620002c9816200028f565b6020840151909250620002dc816200028f565b809150509250929050565b600060208284031215620002fa57600080fd5b815160ff811681146200030c57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000289576200028962000313565b600181815b80851115620003865781600019048211156200036a576200036a62000313565b808516156200037857918102915b93841c93908002906200034a565b509250929050565b6000826200039f5750600162000289565b81620003ae5750600062000289565b8160018114620003c75760028114620003d257620003f2565b600191505062000289565b60ff841115620003e657620003e662000313565b50506001821b62000289565b5060208310610133831016604e8410600b841016171562000417575081810a62000289565b62000423838362000345565b80600019048211156200043a576200043a62000313565b029392505050565b60006200030c60ff8416836200038e565b60805160a051611a936200049c6000396000818161078a0152610dc7015260008181610252015281816104ec0152818161081401528181610a5f0152610e470152611a936000f3fe60806040526004361061011f5760003560e01c8063a217fddf116100a0578063eb37d34911610064578063eb37d34914610339578063f0fa55a914610372578063f28c0498146102bf578063f3fef3a314610392578063fa461e33146103b257600080fd5b8063a217fddf146102aa578063c04b8d59146102bf578063d4b7f403146102d2578063d547741f14610306578063db3e21981461032657600080fd5b80633e032a3b116100e75780633e032a3b146101fb578063414bf389146102105780635c38eb3a146102235780636daf390b1461024357806391d148541461028a57600080fd5b806301ffc9a714610124578063248a9ca31461015957806324ea54f4146101975780632f2ff15d146101b957806336568abe146101db575b600080fd5b34801561013057600080fd5b5061014461013f366004611677565b6103d2565b60405190151581526020015b60405180910390f35b34801561016557600080fd5b506101896101743660046116a1565b60009081526020819052604090206001015490565b604051908152602001610150565b3480156101a357600080fd5b50610189600080516020611a3e83398151915281565b3480156101c557600080fd5b506101d96101d43660046116cf565b610409565b005b3480156101e757600080fd5b506101d96101f63660046116cf565b610433565b34801561020757600080fd5b50600254610189565b61018961021e366004611712565b6104b6565b34801561022f57600080fd5b506101d961023e36600461172f565b610882565b34801561024f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610150565b34801561029657600080fd5b506101446102a53660046116cf565b61099e565b3480156102b657600080fd5b50610189600081565b6101896102cd36600461176f565b6109c7565b3480156102de57600080fd5b506101897f499b8dbdbe4f7b12284c4a222a9951ce4488b43af4d09f42655d67f73b612fe181565b34801561031257600080fd5b506101d96103213660046116cf565b610a04565b610189610334366004611712565b610a29565b34801561034557600080fd5b506102726103543660046117a4565b6001600160a01b039081166000908152600160205260409020541690565b34801561037e57600080fd5b506101d961038d3660046116a1565b610ea6565b34801561039e57600080fd5b506101d96103ad3660046117c1565b610efa565b3480156103be57600080fd5b506101d96103cd3660046117ed565b610fc4565b60006001600160e01b03198216637965db0b60e01b148061040357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461042481610ffe565b61042e838361100b565b505050565b6001600160a01b03811633146104a85760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104b2828261108f565b5050565b60007f499b8dbdbe4f7b12284c4a222a9951ce4488b43af4d09f42655d67f73b612fe16104e281610ffe565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661051960208501856117a4565b6001600160a01b0316146105675760405162461bcd60e51b8152602060048201526015602482015274151bdad95b925b881b9bdd081cdd5c1c1bdc9d1959605a1b604482015260640161049f565b600060018161057c60408701602088016117a4565b6001600160a01b03908116825260208201929092526040016000205416036105df5760405162461bcd60e51b8152602060048201526016602482015275151bdad95b93dd5d081b9bdd081cdd5c1c1bdc9d195960521b604482015260640161049f565b60006105f160808501606086016117a4565b6001600160a01b0316036106475760405162461bcd60e51b815260206004820181905260248201527f526563697069656e742063616e6e6f74206265207a65726f2061646472657373604482015260640161049f565b42836080013510156106925760405162461bcd60e51b8152602060048201526014602482015273111958591b1a5b99481a5b881d1a19481c185cdd60621b604482015260640161049f565b60008360a00135116106e65760405162461bcd60e51b815260206004820152601760248201527f616d6f756e74496e2063616e6e6f74206265207a65726f000000000000000000604482015260640161049f565b6002546107b99061078590600160006107056040890160208a016117a4565b6001600160a01b03908116825260208083019390935260409182016000205482516375c8e9bf60e11b8152925191169263eb91d37e92600480820193918290030181865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f919061186d565b906110f4565b6107b37f000000000000000000000000000000000000000000000000000000000000000060a087013561189c565b9061112c565b91508260c0013582101561080f5760405162461bcd60e51b815260206004820152601c60248201527f616d6f756e744f75744d696e696d756d206e6f74207265616368656400000000604482015260640161049f565b6108487f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333060a0870135611163565b61087c61085b60808501606086016117a4565b8361086c60408701602088016117a4565b6001600160a01b031691906111d4565b50919050565b600080516020611a3e83398151915261089a81610ffe565b6001600160a01b0383166108f05760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e2063616e6e6f74206265207a65726f206164647265737300000000604482015260640161049f565b6001600160a01b0382166109465760405162461bcd60e51b815260206004820152601d60248201527f4f7261636c652063616e6e6f74206265207a65726f2061646472657373000000604482015260640161049f565b6001600160a01b0383811660008181526001602052604080822080546001600160a01b0319169487169485179055517f08763b8c90c5db415d7b7f0e18ec87eda82e24e52e2ea8135d44e17db46d85bb9190a3505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b5c1b195b595b9d1959608a1b604482015260009060640161049f565b600082815260208190526040902060010154610a1f81610ffe565b61042e838361108f565b60007f499b8dbdbe4f7b12284c4a222a9951ce4488b43af4d09f42655d67f73b612fe1610a5581610ffe565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610a8c60208501856117a4565b6001600160a01b031614610ada5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b925b881b9bdd081cdd5c1c1bdc9d1959605a1b604482015260640161049f565b6000600181610aef60408701602088016117a4565b6001600160a01b0390811682526020820192909252604001600020541603610b525760405162461bcd60e51b8152602060048201526016602482015275151bdad95b93dd5d081b9bdd081cdd5c1c1bdc9d195960521b604482015260640161049f565b6000610b6460808501606086016117a4565b6001600160a01b031603610bba5760405162461bcd60e51b815260206004820181905260248201527f526563697069656e742063616e6e6f74206265207a65726f2061646472657373604482015260640161049f565b4283608001351015610c055760405162461bcd60e51b8152602060048201526014602482015273111958591b1a5b99481a5b881d1a19481c185cdd60621b604482015260640161049f565b60008360a0013511610c595760405162461bcd60e51b815260206004820152601860248201527f416d6f756e744f75742063616e6e6f74206265207a65726f0000000000000000604482015260640161049f565b60a0830135610c6e60408501602086016117a4565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd8919061186d565b1015610d1b5760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015260640161049f565b600254600090610dc09061077f600184610d3b60408a0160208b016117a4565b6001600160a01b03908116825260208083019390935260409182016000205482516375c8e9bf60e11b8152925191169263eb91d37e92600480820193918290030181865afa158015610d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db5919061186d565b60a0880135906110f4565b9050610dec7f0000000000000000000000000000000000000000000000000000000000000000826118bb565b92508360c00135831115610e425760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74496e4d6178696d756d2065786365656465640000000000000000604482015260640161049f565b610e777f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333086611163565b610e9f610e8a60808601606087016117a4565b60a086013561086c60408801602089016117a4565b5050919050565b600080516020611a3e833981519152610ebe81610ffe565b60028290556040518281527ff5a802650e0a86db227cc342f06327d2ca0ff5cf2b12e0084fc5d8a7db2c54fd9060200160405180910390a15050565b600080516020611a3e833981519152610f1281610ffe565b6001600160a01b038316610f685760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e2063616e6e6f74206265207a65726f206164647265737300000000604482015260640161049f565b60008211610fb05760405162461bcd60e51b8152602060048201526015602482015274416d6f756e742063616e6e6f74206265207a65726f60581b604482015260640161049f565b61042e6001600160a01b03841633846111d4565b60405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b5c1b195b595b9d1959608a1b604482015260640161049f565b6110088133611204565b50565b611015828261099e565b6104b2576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561104b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611099828261099e565b156104b2576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600081156706f05b59d3b20000198390048411151761111257600080fd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b60008115670de0b6b3a76400006002840419048411171561114c57600080fd5b50670de0b6b3a76400009190910260028204010490565b6040516001600160a01b03808516602483015283166044820152606481018290526111ce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261125d565b50505050565b6040516001600160a01b03831660248201526044810182905261042e90849063a9059cbb60e01b90606401611197565b61120e828261099e565b6104b25761121b81611332565b611226836020611344565b604051602001611237929190611901565b60408051601f198184030181529082905262461bcd60e51b825261049f91600401611976565b60006112b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114e79092919063ffffffff16565b90508051600014806112d35750808060200190518101906112d391906119a9565b61042e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161049f565b60606104036001600160a01b03831660145b6060600061135383600261189c565b61135e9060026119cb565b67ffffffffffffffff811115611376576113766119de565b6040519080825280601f01601f1916602001820160405280156113a0576020820181803683370190505b509050600360fc1b816000815181106113bb576113bb6119f4565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106113ea576113ea6119f4565b60200101906001600160f81b031916908160001a905350600061140e84600261189c565b6114199060016119cb565b90505b6001811115611491576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061144d5761144d6119f4565b1a60f81b828281518110611463576114636119f4565b60200101906001600160f81b031916908160001a90535060049490941c9361148a81611a0a565b905061141c565b5083156114e05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161049f565b9392505050565b60606114f684846000856114fe565b949350505050565b60608247101561155f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161049f565b600080866001600160a01b0316858760405161157b9190611a21565b60006040518083038185875af1925050503d80600081146115b8576040519150601f19603f3d011682016040523d82523d6000602084013e6115bd565b606091505b50915091506115ce878383876115d9565b979650505050505050565b60608315611648578251600003611641576001600160a01b0385163b6116415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161049f565b50816114f6565b6114f6838381511561165d5781518083602001fd5b8060405162461bcd60e51b815260040161049f9190611976565b60006020828403121561168957600080fd5b81356001600160e01b0319811681146114e057600080fd5b6000602082840312156116b357600080fd5b5035919050565b6001600160a01b038116811461100857600080fd5b600080604083850312156116e257600080fd5b8235915060208301356116f4816116ba565b809150509250929050565b6000610100828403121561087c57600080fd5b6000610100828403121561172557600080fd5b6114e083836116ff565b6000806040838503121561174257600080fd5b823561174d816116ba565b915060208301356116f4816116ba565b600060a0828403121561087c57600080fd5b60006020828403121561178157600080fd5b813567ffffffffffffffff81111561179857600080fd5b6114f68482850161175d565b6000602082840312156117b657600080fd5b81356114e0816116ba565b600080604083850312156117d457600080fd5b82356117df816116ba565b946020939093013593505050565b6000806000806060858703121561180357600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561182957600080fd5b818701915087601f83011261183d57600080fd5b81358181111561184c57600080fd5b88602082850101111561185e57600080fd5b95989497505060200194505050565b60006020828403121561187f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156118b6576118b6611886565b500290565b6000826118d857634e487b7160e01b600052601260045260246000fd5b500490565b60005b838110156118f85781810151838201526020016118e0565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516119398160178501602088016118dd565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161196a8160288401602088016118dd565b01602801949350505050565b60208152600082518060208401526119958160408501602087016118dd565b601f01601f19169190910160400192915050565b6000602082840312156119bb57600080fd5b815180151581146114e057600080fd5b8082018082111561040357610403611886565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081611a1957611a19611886565b506000190190565b60008251611a338184602087016118dd565b919091019291505056fe55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220b3b829efa60f1786ca018f558c7a7d657b144bdd3d006be4803e131b186fd23864736f6c63430008100033",
"deployedBytecode": "0x60806040526004361061011f5760003560e01c8063a217fddf116100a0578063eb37d34911610064578063eb37d34914610339578063f0fa55a914610372578063f28c0498146102bf578063f3fef3a314610392578063fa461e33146103b257600080fd5b8063a217fddf146102aa578063c04b8d59146102bf578063d4b7f403146102d2578063d547741f14610306578063db3e21981461032657600080fd5b80633e032a3b116100e75780633e032a3b146101fb578063414bf389146102105780635c38eb3a146102235780636daf390b1461024357806391d148541461028a57600080fd5b806301ffc9a714610124578063248a9ca31461015957806324ea54f4146101975780632f2ff15d146101b957806336568abe146101db575b600080fd5b34801561013057600080fd5b5061014461013f366004611677565b6103d2565b60405190151581526020015b60405180910390f35b34801561016557600080fd5b506101896101743660046116a1565b60009081526020819052604090206001015490565b604051908152602001610150565b3480156101a357600080fd5b50610189600080516020611a3e83398151915281565b3480156101c557600080fd5b506101d96101d43660046116cf565b610409565b005b3480156101e757600080fd5b506101d96101f63660046116cf565b610433565b34801561020757600080fd5b50600254610189565b61018961021e366004611712565b6104b6565b34801561022f57600080fd5b506101d961023e36600461172f565b610882565b34801561024f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610150565b34801561029657600080fd5b506101446102a53660046116cf565b61099e565b3480156102b657600080fd5b50610189600081565b6101896102cd36600461176f565b6109c7565b3480156102de57600080fd5b506101897f499b8dbdbe4f7b12284c4a222a9951ce4488b43af4d09f42655d67f73b612fe181565b34801561031257600080fd5b506101d96103213660046116cf565b610a04565b610189610334366004611712565b610a29565b34801561034557600080fd5b506102726103543660046117a4565b6001600160a01b039081166000908152600160205260409020541690565b34801561037e57600080fd5b506101d961038d3660046116a1565b610ea6565b34801561039e57600080fd5b506101d96103ad3660046117c1565b610efa565b3480156103be57600080fd5b506101d96103cd3660046117ed565b610fc4565b60006001600160e01b03198216637965db0b60e01b148061040357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461042481610ffe565b61042e838361100b565b505050565b6001600160a01b03811633146104a85760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104b2828261108f565b5050565b60007f499b8dbdbe4f7b12284c4a222a9951ce4488b43af4d09f42655d67f73b612fe16104e281610ffe565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661051960208501856117a4565b6001600160a01b0316146105675760405162461bcd60e51b8152602060048201526015602482015274151bdad95b925b881b9bdd081cdd5c1c1bdc9d1959605a1b604482015260640161049f565b600060018161057c60408701602088016117a4565b6001600160a01b03908116825260208201929092526040016000205416036105df5760405162461bcd60e51b8152602060048201526016602482015275151bdad95b93dd5d081b9bdd081cdd5c1c1bdc9d195960521b604482015260640161049f565b60006105f160808501606086016117a4565b6001600160a01b0316036106475760405162461bcd60e51b815260206004820181905260248201527f526563697069656e742063616e6e6f74206265207a65726f2061646472657373604482015260640161049f565b42836080013510156106925760405162461bcd60e51b8152602060048201526014602482015273111958591b1a5b99481a5b881d1a19481c185cdd60621b604482015260640161049f565b60008360a00135116106e65760405162461bcd60e51b815260206004820152601760248201527f616d6f756e74496e2063616e6e6f74206265207a65726f000000000000000000604482015260640161049f565b6002546107b99061078590600160006107056040890160208a016117a4565b6001600160a01b03908116825260208083019390935260409182016000205482516375c8e9bf60e11b8152925191169263eb91d37e92600480820193918290030181865afa15801561075b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077f919061186d565b906110f4565b6107b37f000000000000000000000000000000000000000000000000000000000000000060a087013561189c565b9061112c565b91508260c0013582101561080f5760405162461bcd60e51b815260206004820152601c60248201527f616d6f756e744f75744d696e696d756d206e6f74207265616368656400000000604482015260640161049f565b6108487f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333060a0870135611163565b61087c61085b60808501606086016117a4565b8361086c60408701602088016117a4565b6001600160a01b031691906111d4565b50919050565b600080516020611a3e83398151915261089a81610ffe565b6001600160a01b0383166108f05760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e2063616e6e6f74206265207a65726f206164647265737300000000604482015260640161049f565b6001600160a01b0382166109465760405162461bcd60e51b815260206004820152601d60248201527f4f7261636c652063616e6e6f74206265207a65726f2061646472657373000000604482015260640161049f565b6001600160a01b0383811660008181526001602052604080822080546001600160a01b0319169487169485179055517f08763b8c90c5db415d7b7f0e18ec87eda82e24e52e2ea8135d44e17db46d85bb9190a3505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b5c1b195b595b9d1959608a1b604482015260009060640161049f565b600082815260208190526040902060010154610a1f81610ffe565b61042e838361108f565b60007f499b8dbdbe4f7b12284c4a222a9951ce4488b43af4d09f42655d67f73b612fe1610a5581610ffe565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610a8c60208501856117a4565b6001600160a01b031614610ada5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b925b881b9bdd081cdd5c1c1bdc9d1959605a1b604482015260640161049f565b6000600181610aef60408701602088016117a4565b6001600160a01b0390811682526020820192909252604001600020541603610b525760405162461bcd60e51b8152602060048201526016602482015275151bdad95b93dd5d081b9bdd081cdd5c1c1bdc9d195960521b604482015260640161049f565b6000610b6460808501606086016117a4565b6001600160a01b031603610bba5760405162461bcd60e51b815260206004820181905260248201527f526563697069656e742063616e6e6f74206265207a65726f2061646472657373604482015260640161049f565b4283608001351015610c055760405162461bcd60e51b8152602060048201526014602482015273111958591b1a5b99481a5b881d1a19481c185cdd60621b604482015260640161049f565b60008360a0013511610c595760405162461bcd60e51b815260206004820152601860248201527f416d6f756e744f75742063616e6e6f74206265207a65726f0000000000000000604482015260640161049f565b60a0830135610c6e60408501602086016117a4565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd8919061186d565b1015610d1b5760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015260640161049f565b600254600090610dc09061077f600184610d3b60408a0160208b016117a4565b6001600160a01b03908116825260208083019390935260409182016000205482516375c8e9bf60e11b8152925191169263eb91d37e92600480820193918290030181865afa158015610d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db5919061186d565b60a0880135906110f4565b9050610dec7f0000000000000000000000000000000000000000000000000000000000000000826118bb565b92508360c00135831115610e425760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74496e4d6178696d756d2065786365656465640000000000000000604482015260640161049f565b610e777f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333086611163565b610e9f610e8a60808601606087016117a4565b60a086013561086c60408801602089016117a4565b5050919050565b600080516020611a3e833981519152610ebe81610ffe565b60028290556040518281527ff5a802650e0a86db227cc342f06327d2ca0ff5cf2b12e0084fc5d8a7db2c54fd9060200160405180910390a15050565b600080516020611a3e833981519152610f1281610ffe565b6001600160a01b038316610f685760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e2063616e6e6f74206265207a65726f206164647265737300000000604482015260640161049f565b60008211610fb05760405162461bcd60e51b8152602060048201526015602482015274416d6f756e742063616e6e6f74206265207a65726f60581b604482015260640161049f565b61042e6001600160a01b03841633846111d4565b60405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b5c1b195b595b9d1959608a1b604482015260640161049f565b6110088133611204565b50565b611015828261099e565b6104b2576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561104b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611099828261099e565b156104b2576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600081156706f05b59d3b20000198390048411151761111257600080fd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b60008115670de0b6b3a76400006002840419048411171561114c57600080fd5b50670de0b6b3a76400009190910260028204010490565b6040516001600160a01b03808516602483015283166044820152606481018290526111ce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261125d565b50505050565b6040516001600160a01b03831660248201526044810182905261042e90849063a9059cbb60e01b90606401611197565b61120e828261099e565b6104b25761121b81611332565b611226836020611344565b604051602001611237929190611901565b60408051601f198184030181529082905262461bcd60e51b825261049f91600401611976565b60006112b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114e79092919063ffffffff16565b90508051600014806112d35750808060200190518101906112d391906119a9565b61042e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161049f565b60606104036001600160a01b03831660145b6060600061135383600261189c565b61135e9060026119cb565b67ffffffffffffffff811115611376576113766119de565b6040519080825280601f01601f1916602001820160405280156113a0576020820181803683370190505b509050600360fc1b816000815181106113bb576113bb6119f4565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106113ea576113ea6119f4565b60200101906001600160f81b031916908160001a905350600061140e84600261189c565b6114199060016119cb565b90505b6001811115611491576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061144d5761144d6119f4565b1a60f81b828281518110611463576114636119f4565b60200101906001600160f81b031916908160001a90535060049490941c9361148a81611a0a565b905061141c565b5083156114e05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161049f565b9392505050565b60606114f684846000856114fe565b949350505050565b60608247101561155f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161049f565b600080866001600160a01b0316858760405161157b9190611a21565b60006040518083038185875af1925050503d80600081146115b8576040519150601f19603f3d011682016040523d82523d6000602084013e6115bd565b606091505b50915091506115ce878383876115d9565b979650505050505050565b60608315611648578251600003611641576001600160a01b0385163b6116415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161049f565b50816114f6565b6114f6838381511561165d5781518083602001fd5b8060405162461bcd60e51b815260040161049f9190611976565b60006020828403121561168957600080fd5b81356001600160e01b0319811681146114e057600080fd5b6000602082840312156116b357600080fd5b5035919050565b6001600160a01b038116811461100857600080fd5b600080604083850312156116e257600080fd5b8235915060208301356116f4816116ba565b809150509250929050565b6000610100828403121561087c57600080fd5b6000610100828403121561172557600080fd5b6114e083836116ff565b6000806040838503121561174257600080fd5b823561174d816116ba565b915060208301356116f4816116ba565b600060a0828403121561087c57600080fd5b60006020828403121561178157600080fd5b813567ffffffffffffffff81111561179857600080fd5b6114f68482850161175d565b6000602082840312156117b657600080fd5b81356114e0816116ba565b600080604083850312156117d457600080fd5b82356117df816116ba565b946020939093013593505050565b6000806000806060858703121561180357600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561182957600080fd5b818701915087601f83011261183d57600080fd5b81358181111561184c57600080fd5b88602082850101111561185e57600080fd5b95989497505060200194505050565b60006020828403121561187f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156118b6576118b6611886565b500290565b6000826118d857634e487b7160e01b600052601260045260246000fd5b500490565b60005b838110156118f85781810151838201526020016118e0565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516119398160178501602088016118dd565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161196a8160288401602088016118dd565b01602801949350505050565b60208152600082518060208401526119958160408501602087016118dd565b601f01601f19169190910160400192915050565b6000602082840312156119bb57600080fd5b815180151581146114e057600080fd5b8082018082111561040357610403611886565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081611a1957611a19611886565b506000190190565b60008251611a338184602087016118dd565b919091019291505056fe55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220b3b829efa60f1786ca018f558c7a7d657b144bdd3d006be4803e131b186fd23864736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}