Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 15841060 | 834 days ago | IN | 0 ETH | 0.00090527 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DssVestTopUp
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; import "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol"; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "./interfaces/IUpkeepRefunder.sol"; interface DssVestLike { function vest(uint256 _id) external; function unpaid(uint256 _id) external view returns (uint256 amt); } interface DaiJoinLike { function join(address usr, uint256 wad) external; } interface KeeperRegistryLike { function getUpkeep(uint256 id) external view returns ( address target, uint32 executeGas, bytes memory checkData, uint96 balance, address lastKeeper, address admin, uint64 maxValidBlocknumber ); function addFunds(uint256 id, uint96 amount) external; } /** * @title DssVestTopUp * @notice Replenishes upkeep balance on demand * @dev Withdraws vested tokens or uses transferred tokens from Maker protocol and * funds an upkeep after swapping the payment tokens for LINK */ contract DssVestTopUp is IUpkeepRefunder, Ownable { DaiJoinLike public immutable daiJoin; ISwapRouter public immutable swapRouter; address public immutable vow; address public immutable paymentToken; address public immutable linkToken; address public immutable paymentUsdPriceFeed; address public immutable linkUsdPriceFeed; DssVestLike public dssVest; KeeperRegistryLike public keeperRegistry; uint24 public uniswapPoolFee = 3000; uint24 public uniswapSlippageTolerancePercent = 2; uint256 public vestId; uint256 public upkeepId; uint256 public minWithdrawAmt; uint256 public maxDepositAmt; uint256 public threshold; event VestIdSet(uint256 newVestId); event UpkeepIdSet(uint256 newUpkeepId); event MinWithdrawAmtSet(uint256 newMinWithdrawAmt); event MaxDepositAmtSet(uint256 newMaxDepositAmt); event ThresholdSet(uint256 newThreshold); event UniswapPoolFeeSet(uint24 poolFee); event UniswapSlippageToleranceSet(uint24 slippageTolerancePercent); event DssVestSet(address dssVest); event KeeperRegistrySet(address keeperRegistry); event VestedTokensWithdrawn(uint256 amount); event ExcessPaymentReturned(uint256 amount); event SwappedPaymentTokenForLink(uint256 amountIn, uint256 amountOut); event UpkeepRefunded(uint256 amount); event FundsRecovered(address token, uint256 amount); constructor( address _dssVest, address _daiJoin, address _vow, address _paymentToken, address _keeperRegistry, address _swapRouter, address _linkToken, address _paymentUsdPriceFeed, address _linkUsdPriceFeed, uint256 _minWithdrawAmt, uint256 _maxDepositAmt, uint256 _threshold ) { require(_daiJoin != address(0), "invalid daiJoin address"); require(_vow != address(0), "invalid vow address"); require(_paymentToken != address(0), "invalid paymentToken address"); require(_swapRouter != address(0), "invalid swapRouter address"); require(_linkToken != address(0), "invalid linkToken address"); require(_paymentUsdPriceFeed != address(0), "invalid paymentUsdPriceFeed address"); require(_linkUsdPriceFeed != address(0), "invalid linkUsdPriceFeed address"); daiJoin = DaiJoinLike(_daiJoin); vow = _vow; paymentToken = _paymentToken; swapRouter = ISwapRouter(_swapRouter); linkToken = _linkToken; paymentUsdPriceFeed = _paymentUsdPriceFeed; linkUsdPriceFeed = _linkUsdPriceFeed; setDssVest(_dssVest); setKeeperRegistry(_keeperRegistry); setMinWithdrawAmt(_minWithdrawAmt); setMaxDepositAmt(_maxDepositAmt); setThreshold(_threshold); } modifier initialized() { require(vestId > 0, "vestId not set"); require(upkeepId > 0, "upkeepId not set"); _; } // ACTIONS /** * @notice Top up upkeep balance with LINK * @dev Called by the DssCronKeeper contract when check returns true */ function refundUpkeep() public initialized { require(shouldRefundUpkeep(), "refund not needed"); uint256 amt; uint256 preBalance = getPaymentBalance(); if (preBalance >= minWithdrawAmt) { // Emergency topup amt = preBalance; } else { // Withdraw vested tokens dssVest.vest(vestId); amt = getPaymentBalance(); emit VestedTokensWithdrawn(amt); if (amt > maxDepositAmt) { // Return excess amount to surplus buffer uint256 excessAmt = amt - maxDepositAmt; TransferHelper.safeApprove(paymentToken, address(daiJoin), excessAmt); daiJoin.join(vow, excessAmt); amt = maxDepositAmt; emit ExcessPaymentReturned(excessAmt); } } uint256 amtOut = _swapPaymentToLink(amt); _fundUpkeep(amtOut); } /** * @notice Check whether top up is needed * @dev Called by the keeper * @return Result indicating if topping up the upkeep balance is needed and * if there's enough unpaid vested tokens or tokens in the contract balance */ function shouldRefundUpkeep() public view initialized returns (bool) { (, , , uint96 balance, , , ) = keeperRegistry.getUpkeep(upkeepId); if ( threshold < balance || (dssVest.unpaid(vestId) < minWithdrawAmt && getPaymentBalance() < minWithdrawAmt) ) { return false; } return true; } // HELPERS function _swapPaymentToLink(uint256 _amount) internal returns (uint256 amountOut) { TransferHelper.safeApprove(paymentToken, address(swapRouter), _amount); ISwapRouter.ExactInputSingleParams memory params = ISwapRouter .ExactInputSingleParams({ tokenIn: paymentToken, tokenOut: linkToken, fee: uniswapPoolFee, recipient: address(this), deadline: block.timestamp, amountIn: _amount, amountOutMinimum: _getPaymentLinkSwapOutMin(_amount), sqrtPriceLimitX96: 0 }); amountOut = swapRouter.exactInputSingle(params); emit SwappedPaymentTokenForLink(_amount, amountOut); } function _fundUpkeep(uint256 _amount) internal { TransferHelper.safeApprove(linkToken, address(keeperRegistry), _amount); keeperRegistry.addFunds(upkeepId, uint96(_amount)); emit UpkeepRefunded(_amount); } function _getPaymentLinkSwapOutMin(uint256 _amountIn) internal view returns (uint256) { uint256 linkDecimals = IERC20Metadata(linkToken).decimals(); uint256 paymentLinkPrice = uint256(_getDerivedPrice(paymentUsdPriceFeed, linkUsdPriceFeed, uint8(linkDecimals))); uint256 paymentDecimals = IERC20Metadata(paymentToken).decimals(); uint256 paymentAmt = uint256(_scalePrice(int256(_amountIn), uint8(paymentDecimals), uint8(linkDecimals))); uint256 linkAmt = (paymentAmt * paymentLinkPrice) / 10 ** linkDecimals; uint256 slippageTolerance = (linkAmt * uniswapSlippageTolerancePercent) / 100; return linkAmt - slippageTolerance; } function _getDerivedPrice(address _base, address _quote, uint8 _decimals) internal view returns (int256) { require(_decimals > uint8(0) && _decimals <= uint8(18), "invalid decimals"); int256 decimals = int256(10 ** uint256(_decimals)); ( , int256 basePrice, , , ) = AggregatorV3Interface(_base).latestRoundData(); uint8 baseDecimals = AggregatorV3Interface(_base).decimals(); basePrice = _scalePrice(basePrice, baseDecimals, _decimals); ( , int256 quotePrice, , , ) = AggregatorV3Interface(_quote).latestRoundData(); uint8 quoteDecimals = AggregatorV3Interface(_quote).decimals(); quotePrice = _scalePrice(quotePrice, quoteDecimals, _decimals); return basePrice * decimals / quotePrice; } function _scalePrice(int256 _price, uint8 _priceDecimals, uint8 _decimals) internal pure returns (int256) { if (_priceDecimals < _decimals) { return _price * int256(10 ** uint256(_decimals - _priceDecimals)); } else if (_priceDecimals > _decimals) { return _price / int256(10 ** uint256(_priceDecimals - _decimals)); } return _price; } /** * @dev Rescues random funds stuck * @param _token address of the token to rescue */ function recoverFunds(IERC20 _token) external onlyOwner { uint256 tokenBalance = _token.balanceOf(address(this)); _token.transfer(msg.sender, tokenBalance); emit FundsRecovered(address(_token), tokenBalance); } // GETTERS /** * @notice Retrieve the payment token balance of this contract * @return balance */ function getPaymentBalance() public view returns (uint256) { return IERC20(paymentToken).balanceOf(address(this)); } // SETTERS function setVestId(uint256 _vestId) external onlyOwner { require(_vestId > 0, "invalid vestId"); vestId = _vestId; emit VestIdSet(_vestId); } function setUpkeepId(uint256 _upkeepId) external onlyOwner { require(_upkeepId > 0, "invalid upkeepId"); upkeepId = _upkeepId; emit UpkeepIdSet(_upkeepId); } function setMinWithdrawAmt(uint256 _minWithdrawAmt) public onlyOwner { require(_minWithdrawAmt > 0, "invalid minWithdrawAmt"); minWithdrawAmt = _minWithdrawAmt; emit MinWithdrawAmtSet(_minWithdrawAmt); } function setMaxDepositAmt(uint256 _maxDepositAmt) public onlyOwner { require(_maxDepositAmt > 0, "invalid maxDepositAmt"); maxDepositAmt = _maxDepositAmt; emit MaxDepositAmtSet(_maxDepositAmt); } function setThreshold(uint256 _threshold) public onlyOwner { require(_threshold > 0, "invalid threshold"); threshold = _threshold; emit ThresholdSet(_threshold); } function setDssVest(address _dssVest) public onlyOwner { require(_dssVest != address(0), "invalid dssVest address"); dssVest = DssVestLike(_dssVest); emit DssVestSet(_dssVest); } function setKeeperRegistry(address _keeperRegistry) public onlyOwner { require(_keeperRegistry != address(0), "invalid keeperRegistry address"); keeperRegistry = KeeperRegistryLike(_keeperRegistry); emit KeeperRegistrySet(_keeperRegistry); } function setUniswapPoolFee(uint24 _uniswapPoolFee) external onlyOwner { uniswapPoolFee = _uniswapPoolFee; emit UniswapPoolFeeSet(_uniswapPoolFee); } function setSlippageTolerancePercent( uint24 _uniswapSlippageTolerancePercent ) external onlyOwner { uniswapSlippageTolerancePercent = _uniswapSlippageTolerancePercent; emit UniswapSlippageToleranceSet(_uniswapSlippageTolerancePercent); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.6.0; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; library TransferHelper { /// @notice Transfers tokens from the targeted address to the given destination /// @notice Errors with 'STF' if transfer fails /// @param token The contract address of the token to be transferred /// @param from The originating address from which the tokens will be transferred /// @param to The destination address of the transfer /// @param value The amount to be transferred function safeTransferFrom( address token, address from, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF'); } /// @notice Transfers tokens from msg.sender to a recipient /// @dev Errors with ST if transfer fails /// @param token The contract address of the token which will be transferred /// @param to The recipient of the transfer /// @param value The value of the transfer function safeTransfer( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST'); } /// @notice Approves the stipulated contract to spend the given allowance in the given token /// @dev Errors with 'SA' if transfer fails /// @param token The contract address of the token to be approved /// @param to The target of the approval /// @param value The amount of the given token the target will be allowed to spend function safeApprove( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA'); } /// @notice Transfers ETH to the recipient address /// @dev Fails with `STE` /// @param to The destination of the transfer /// @param value The value to be transferred function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'STE'); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.7.5; pragma abicoder v2; import '@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol'; /// @title Router token swapping functionality /// @notice Functions for swapping tokens via Uniswap V3 interface ISwapRouter is IUniswapV3SwapCallback { struct ExactInputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; uint160 sqrtPriceLimitX96; } /// @notice Swaps `amountIn` of one token for as much as possible of another token /// @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata /// @return amountOut The amount of the received token function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut); struct ExactInputParams { bytes path; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; } /// @notice Swaps `amountIn` of one token for as much as possible of another along the specified path /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata /// @return amountOut The amount of the received token function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut); struct ExactOutputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; uint160 sqrtPriceLimitX96; } /// @notice Swaps as little as possible of one token for `amountOut` of another token /// @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata /// @return amountIn The amount of the input token function exactOutputSingle(ExactOutputSingleParams calldata params) external payable returns (uint256 amountIn); struct ExactOutputParams { bytes path; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; } /// @notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata /// @return amountIn The amount of the input token function exactOutput(ExactOutputParams calldata params) external payable returns (uint256 amountIn); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; interface IUpkeepRefunder { function refundUpkeep() external; function shouldRefundUpkeep() external view returns (bool); function setUpkeepId(uint256 _upkeepId) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.5.0; /// @title Callback for IUniswapV3PoolActions#swap /// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface interface IUniswapV3SwapCallback { /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap. /// @dev In the implementation you must pay the pool tokens owed for the swap. /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped. /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call function uniswapV3SwapCallback( int256 amount0Delta, int256 amount1Delta, bytes calldata data ) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_dssVest","type":"address"},{"internalType":"address","name":"_daiJoin","type":"address"},{"internalType":"address","name":"_vow","type":"address"},{"internalType":"address","name":"_paymentToken","type":"address"},{"internalType":"address","name":"_keeperRegistry","type":"address"},{"internalType":"address","name":"_swapRouter","type":"address"},{"internalType":"address","name":"_linkToken","type":"address"},{"internalType":"address","name":"_paymentUsdPriceFeed","type":"address"},{"internalType":"address","name":"_linkUsdPriceFeed","type":"address"},{"internalType":"uint256","name":"_minWithdrawAmt","type":"uint256"},{"internalType":"uint256","name":"_maxDepositAmt","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dssVest","type":"address"}],"name":"DssVestSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ExcessPaymentReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"keeperRegistry","type":"address"}],"name":"KeeperRegistrySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxDepositAmt","type":"uint256"}],"name":"MaxDepositAmtSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinWithdrawAmt","type":"uint256"}],"name":"MinWithdrawAmtSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"SwappedPaymentTokenForLink","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"ThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"poolFee","type":"uint24"}],"name":"UniswapPoolFeeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"slippageTolerancePercent","type":"uint24"}],"name":"UniswapSlippageToleranceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newUpkeepId","type":"uint256"}],"name":"UpkeepIdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpkeepRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newVestId","type":"uint256"}],"name":"VestIdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"VestedTokensWithdrawn","type":"event"},{"inputs":[],"name":"daiJoin","outputs":[{"internalType":"contract DaiJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dssVest","outputs":[{"internalType":"contract DssVestLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPaymentBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keeperRegistry","outputs":[{"internalType":"contract KeeperRegistryLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkUsdPriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDepositAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minWithdrawAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentUsdPriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refundUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dssVest","type":"address"}],"name":"setDssVest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeperRegistry","type":"address"}],"name":"setKeeperRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDepositAmt","type":"uint256"}],"name":"setMaxDepositAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minWithdrawAmt","type":"uint256"}],"name":"setMinWithdrawAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_uniswapSlippageTolerancePercent","type":"uint24"}],"name":"setSlippageTolerancePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_uniswapPoolFee","type":"uint24"}],"name":"setUniswapPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_upkeepId","type":"uint256"}],"name":"setUpkeepId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vestId","type":"uint256"}],"name":"setVestId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldRefundUpkeep","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPoolFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapSlippageTolerancePercent","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upkeepId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101606040526002805465ffffffffffff60a01b19166240017760a31b1790553480156200002c57600080fd5b5060405162002b0538038062002b058339810160408190526200004f9162000813565b6200005a336200034f565b6001600160a01b038b16620000b65760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964206461694a6f696e206164647265737300000000000000000060448201526064015b60405180910390fd5b6001600160a01b038a166200010e5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420766f772061646472657373000000000000000000000000006044820152606401620000ad565b6001600160a01b038916620001665760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964207061796d656e74546f6b656e2061646472657373000000006044820152606401620000ad565b6001600160a01b038716620001be5760405162461bcd60e51b815260206004820152601a60248201527f696e76616c69642073776170526f7574657220616464726573730000000000006044820152606401620000ad565b6001600160a01b038616620002165760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206c696e6b546f6b656e2061646472657373000000000000006044820152606401620000ad565b6001600160a01b0385166200027a5760405162461bcd60e51b815260206004820152602360248201527f696e76616c6964207061796d656e74557364507269636546656564206164647260448201526265737360e81b6064820152608401620000ad565b6001600160a01b038416620002d25760405162461bcd60e51b815260206004820181905260248201527f696e76616c6964206c696e6b55736450726963654665656420616464726573736044820152606401620000ad565b6001600160a01b03808c166080528a811660c05289811660e05287811660a0528681166101005285811661012052841661014052620003118c6200039f565b6200031c8862000497565b620003278362000589565b62000332826200065c565b6200033d816200072f565b505050505050505050505050620008ed565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620003ea5760405162461bcd60e51b8152602060048201819052602482015260008051602062002ae58339815191526044820152606401620000ad565b6001600160a01b038116620004425760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964206473735665737420616464726573730000000000000000006044820152606401620000ad565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f722b4cf918485a945ed355fa15b729b2fc9419cb8cd54f142d55c729a017faa5906020015b60405180910390a150565b6000546001600160a01b03163314620004e25760405162461bcd60e51b8152602060048201819052602482015260008051602062002ae58339815191526044820152606401620000ad565b6001600160a01b0381166200053a5760405162461bcd60e51b815260206004820152601e60248201527f696e76616c6964206b65657065725265676973747279206164647265737300006044820152606401620000ad565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f04519dde11e63dda51e8bde40ba1ab059376a417da0b259790458d51185169fd906020016200048c565b6000546001600160a01b03163314620005d45760405162461bcd60e51b8152602060048201819052602482015260008051602062002ae58339815191526044820152606401620000ad565b60008111620006265760405162461bcd60e51b815260206004820152601660248201527f696e76616c6964206d696e5769746864726177416d74000000000000000000006044820152606401620000ad565b60058190556040518181527f7b13fac9540cb2445dbe043e3d1ec2bff43a3dc3bb2f17360e5b8ccf0b268c8b906020016200048c565b6000546001600160a01b03163314620006a75760405162461bcd60e51b8152602060048201819052602482015260008051602062002ae58339815191526044820152606401620000ad565b60008111620006f95760405162461bcd60e51b815260206004820152601560248201527f696e76616c6964206d61784465706f736974416d7400000000000000000000006044820152606401620000ad565b60068190556040518181527fc8c4dead1d4bce9df0be51af7c65ad8418b67c2de63ab33954b8f0d5ee7e50be906020016200048c565b6000546001600160a01b031633146200077a5760405162461bcd60e51b8152602060048201819052602482015260008051602062002ae58339815191526044820152606401620000ad565b60008111620007c05760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081d1a1c995cda1bdb19607a1b6044820152606401620000ad565b60078190556040518181527f6e8a187d7944998085dbd1f16b84c51c903bb727536cdba86962439aded2cfd7906020016200048c565b80516001600160a01b03811681146200080e57600080fd5b919050565b6000806000806000806000806000806000806101808d8f0312156200083757600080fd5b620008428d620007f6565b9b506200085260208e01620007f6565b9a506200086260408e01620007f6565b99506200087260608e01620007f6565b98506200088260808e01620007f6565b97506200089260a08e01620007f6565b9650620008a260c08e01620007f6565b9550620008b260e08e01620007f6565b9450620008c36101008e01620007f6565b93506101208d015192506101408d015191506101608d015190509295989b509295989b509295989b565b60805160a05160c05160e051610100516101205161014051612134620009b16000396000818161035001526117690152600081816102b20152611748015260008181610302015281816113e50152818161158a01526116ad015260008181610246015281816106950152818161089901528181611365015281816113c0015261179401526000818161032901526106f20152600081816104320152818161138601526114c201526000818161040b015281816106b6015261072101526121346000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637bd399db1161010f578063c4dd1dd6116100a2578063d5a99ea411610071578063d5a99ea414610496578063e72f6e301461049f578063f2fde38b146104b2578063f8fe1834146104c557600080fd5b8063c4dd1dd614610454578063c93ab5dc14610467578063d2aa789f1461047a578063d46217a61461048357600080fd5b8063a06bac7c116100de578063a06bac7c146103e0578063a128c4d2146103f3578063c11645bc14610406578063c31c9c071461042d57600080fd5b80637bd399db1461039657806383e22774146103a95780638da5cb5b146103bc578063960bfe04146103cd57600080fd5b806343d427b811610187578063636d57b211610156578063636d57b21461034b578063715018a614610372578063775f55851461037a5780637b1fe5d91461038357600080fd5b806343d427b8146102dd57806354c5a442146102e557806357970e93146102fd578063626cb3c51461032457600080fd5b80633651c24b116101c35780633651c24b146102805780633a56573b146102965780633e51b327146102ad57806342cde4e8146102d457600080fd5b8063139da41c146101f55780631bcc3540146101ff57806324cd7060146102125780633013ce2914610241575b600080fd5b6101fd6104d8565b005b6101fd61020d366004611b90565b6107d8565b60025461022890600160b81b900462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b6102687f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610238565b60025461022890600160a01b900462ffffff1681565b61029f60035481565b604051908152602001610238565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b61029f60075481565b61029f610881565b6102ed610920565b6040519015158152602001610238565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b6101fd610af9565b61029f60055481565b6101fd610391366004611b90565b610b2f565b600154610268906001600160a01b031681565b600254610268906001600160a01b031681565b6000546001600160a01b0316610268565b6101fd6103db366004611b90565b610bd6565b6101fd6103ee366004611ba9565b610c79565b6101fd610401366004611be3565b610cf5565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b6101fd610462366004611b90565b610dc3565b6101fd610475366004611ba9565b610e63565b61029f60045481565b6101fd610491366004611b90565b610edf565b61029f60065481565b6101fd6104ad366004611be3565b610f87565b6101fd6104c0366004611be3565b6110f5565b6101fd6104d3366004611be3565b611190565b6000600354116105205760405162461bcd60e51b815260206004820152600e60248201526d1d995cdd1259081b9bdd081cd95d60921b60448201526064015b60405180910390fd5b6000600454116105655760405162461bcd60e51b815260206004820152601060248201526f1d5c1ad9595c1259081b9bdd081cd95d60821b6044820152606401610517565b61056d610920565b6105ad5760405162461bcd60e51b81526020600482015260116024820152701c99599d5b99081b9bdd081b9959591959607a1b6044820152606401610517565b6000806105b8610881565b905060055481106105cb578091506107bd565b60015460035460405162d4ec1760e71b81526001600160a01b0390921691636a760b80916105ff9160040190815260200190565b600060405180830381600087803b15801561061957600080fd5b505af115801561062d573d6000803e3d6000fd5b50505050610639610881565b91507ff48d95c08d1df7ca3570aca27c4e150e5ba177b31ff383151cb1274478520dbb8260405161066c91815260200190565b60405180910390a16006548211156107bd5760006006548361068e9190611c16565b90506106db7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008361125e565b604051633b4da69f60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690633b4da69f90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b5050505060065492507fde4e6bac0952ea1d4790fc89934844bcf2ba85f2d10b71724e90f7bdd80460b8816040516107b391815260200190565b60405180910390a1505b60006107c88361135e565b90506107d381611581565b505050565b6000546001600160a01b031633146108025760405162461bcd60e51b815260040161051790611c2d565b600081116108455760405162461bcd60e51b815260206004820152601060248201526f1a5b9d985b1a59081d5c1ad9595c125960821b6044820152606401610517565b60048190556040518181527f7065c7d81e2755980701c7965cad970b8a7de77e69ce52d06ceaed3d26a98383906020015b60405180910390a150565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156108e357600080fd5b505afa1580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091b9190611c62565b905090565b600080600354116109645760405162461bcd60e51b815260206004820152600e60248201526d1d995cdd1259081b9bdd081cd95d60921b6044820152606401610517565b6000600454116109a95760405162461bcd60e51b815260206004820152601060248201526f1d5c1ad9595c1259081b9bdd081cd95d60821b6044820152606401610517565b600254600480546040516363e1d0cd60e11b8152918201526000916001600160a01b03169063c7c3a19a9060240160006040518083038186803b1580156109ef57600080fd5b505afa158015610a03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a2b9190810190611d00565b5050509350505050806001600160601b03166007541080610ae457506005546001546003546040516353e8863d60e01b81526001600160a01b03909216916353e8863d91610a7f9160040190815260200190565b60206040518083038186803b158015610a9757600080fd5b505afa158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190611c62565b108015610ae45750600554610ae2610881565b105b15610af157600091505090565b600191505090565b6000546001600160a01b03163314610b235760405162461bcd60e51b815260040161051790611c2d565b610b2d6000611658565b565b6000546001600160a01b03163314610b595760405162461bcd60e51b815260040161051790611c2d565b60008111610ba15760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081b585e11195c1bdcda5d105b5d605a1b6044820152606401610517565b60068190556040518181527fc8c4dead1d4bce9df0be51af7c65ad8418b67c2de63ab33954b8f0d5ee7e50be90602001610876565b6000546001600160a01b03163314610c005760405162461bcd60e51b815260040161051790611c2d565b60008111610c445760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081d1a1c995cda1bdb19607a1b6044820152606401610517565b60078190556040518181527f6e8a187d7944998085dbd1f16b84c51c903bb727536cdba86962439aded2cfd790602001610876565b6000546001600160a01b03163314610ca35760405162461bcd60e51b815260040161051790611c2d565b6002805462ffffff60b81b1916600160b81b62ffffff8416908102919091179091556040519081527f01aeeb6929d56153bd667f7c541b4d7f63b742f452b11333b2753314cff4a35290602001610876565b6000546001600160a01b03163314610d1f5760405162461bcd60e51b815260040161051790611c2d565b6001600160a01b038116610d755760405162461bcd60e51b815260206004820152601e60248201527f696e76616c6964206b65657065725265676973747279206164647265737300006044820152606401610517565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f04519dde11e63dda51e8bde40ba1ab059376a417da0b259790458d51185169fd90602001610876565b6000546001600160a01b03163314610ded5760405162461bcd60e51b815260040161051790611c2d565b60008111610e2e5760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081d995cdd125960921b6044820152606401610517565b60038190556040518181527fb409dcb321f0cdb8f541f652c5f1cc4d4f7d82a67ad78e0249e8621140e3f76690602001610876565b6000546001600160a01b03163314610e8d5760405162461bcd60e51b815260040161051790611c2d565b6002805462ffffff60a01b1916600160a01b62ffffff8416908102919091179091556040519081527f83191e1cbea275617d7dc2dd1b43425c049a33a4cd37dda489f6d3ac887ef89590602001610876565b6000546001600160a01b03163314610f095760405162461bcd60e51b815260040161051790611c2d565b60008111610f525760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081b5a5b95da5d1a191c985dd05b5d60521b6044820152606401610517565b60058190556040518181527f7b13fac9540cb2445dbe043e3d1ec2bff43a3dc3bb2f17360e5b8ccf0b268c8b90602001610876565b6000546001600160a01b03163314610fb15760405162461bcd60e51b815260040161051790611c2d565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610ff357600080fd5b505afa158015611007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b9190611c62565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190611e22565b50604080516001600160a01b0384168152602081018390527f59bfc682b673f8cbf945f1e454df9334834abf7dfe7f92237ca29ecb9b436600910160405180910390a15050565b6000546001600160a01b0316331461111f5760405162461bcd60e51b815260040161051790611c2d565b6001600160a01b0381166111845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610517565b61118d81611658565b50565b6000546001600160a01b031633146111ba5760405162461bcd60e51b815260040161051790611c2d565b6001600160a01b0381166112105760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964206473735665737420616464726573730000000000000000006044820152606401610517565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f722b4cf918485a945ed355fa15b729b2fc9419cb8cd54f142d55c729a017faa590602001610876565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916112ba9190611e44565b6000604051808303816000865af19150503d80600081146112f7576040519150601f19603f3d011682016040523d82523d6000602084013e6112fc565b606091505b50915091508180156113265750805115806113265750808060200190518101906113269190611e22565b6113575760405162461bcd60e51b8152602060048201526002602482015261534160f01b6044820152606401610517565b5050505050565b60006113ab7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008461125e565b60408051610100810182526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682527f000000000000000000000000000000000000000000000000000000000000000016602082015260025462ffffff600160a01b909104169181019190915230606082015242608082015260a0810183905260009060c08101611444856116a8565b815260006020918201526040805163414bf38960e01b815283516001600160a01b03908116600483015292840151831660248201529083015162ffffff1660448201526060830151821660648201526080830151608482015260a083015160a482015260c083015160c482015260e0830151821660e48201529192507f0000000000000000000000000000000000000000000000000000000000000000169063414bf3899061010401602060405180830381600087803b15801561150757600080fd5b505af115801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190611c62565b60408051858152602081018390529193507f40a725f3dd6481375fc982c424861eb4977c23f9079391da9c6a45ddcd72c0e0910160405180910390a150919050565b6002546115b9907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168361125e565b6002546004805460405163948108f760e01b8152918201526001600160601b03831660248201526001600160a01b039091169063948108f790604401600060405180830381600087803b15801561160f57600080fd5b505af1158015611623573d6000803e3d6000fd5b505050507f65728e8b0492464959587933b48b3fbaf3cd2132de609fb6ac02dc57dc298d5d8160405161087691815260200190565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561170457600080fd5b505afa158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c9190611e60565b60ff169050600061178e7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008461189c565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117eb57600080fd5b505afa1580156117ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118239190611e60565b60ff1690506000611835868386611b1f565b9050600061184485600a611f69565b61184e8584611f75565b6118589190611faa565b60025490915060009060649061187a90600160b81b900462ffffff1684611f75565b6118849190611faa565b90506118908183611c16565b98975050505050505050565b600060ff8216158015906118b45750601260ff831611155b6118f35760405162461bcd60e51b815260206004820152601060248201526f696e76616c696420646563696d616c7360801b6044820152606401610517565b600061190360ff8416600a611f69565b90506000856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561194057600080fd5b505afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190611fd8565b5050509150506000866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156119b957600080fd5b505afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190611e60565b90506119fe828287611b1f565b91506000866001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015611a3b57600080fd5b505afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190611fd8565b5050509150506000876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab457600080fd5b505afa158015611ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aec9190611e60565b9050611af9828289611b1f565b915081611b068686612028565b611b1091906120ad565b955050505050505b9392505050565b60008160ff168360ff161015611b5857611b3983836120db565b611b479060ff16600a611f69565b611b519085612028565b9050611b18565b8160ff168360ff161115611b8857611b7082846120db565b611b7e9060ff16600a611f69565b611b5190856120ad565b509192915050565b600060208284031215611ba257600080fd5b5035919050565b600060208284031215611bbb57600080fd5b813562ffffff81168114611b1857600080fd5b6001600160a01b038116811461118d57600080fd5b600060208284031215611bf557600080fd5b8135611b1881611bce565b634e487b7160e01b600052601160045260246000fd5b600082821015611c2857611c28611c00565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611c7457600080fd5b5051919050565b8051611c8681611bce565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015611cbc578181015183820152602001611ca4565b83811115611ccb576000848401525b50505050565b80516001600160601b0381168114611c8657600080fd5b805167ffffffffffffffff81168114611c8657600080fd5b600080600080600080600060e0888a031215611d1b57600080fd5b8751611d2681611bce565b602089015190975063ffffffff81168114611d4057600080fd5b604089015190965067ffffffffffffffff80821115611d5e57600080fd5b818a0191508a601f830112611d7257600080fd5b815181811115611d8457611d84611c8b565b604051601f8201601f19908116603f01168101908382118183101715611dac57611dac611c8b565b816040528281528d6020848701011115611dc557600080fd5b611dd6836020830160208801611ca1565b8099505050505050611dea60608901611cd1565b9350611df860808901611c7b565b9250611e0660a08901611c7b565b9150611e1460c08901611ce8565b905092959891949750929550565b600060208284031215611e3457600080fd5b81518015158114611b1857600080fd5b60008251611e56818460208701611ca1565b9190910192915050565b600060208284031215611e7257600080fd5b815160ff81168114611b1857600080fd5b600181815b80851115611ebe578160001904821115611ea457611ea4611c00565b80851615611eb157918102915b93841c9390800290611e88565b509250929050565b600082611ed557506001611f63565b81611ee257506000611f63565b8160018114611ef85760028114611f0257611f1e565b6001915050611f63565b60ff841115611f1357611f13611c00565b50506001821b611f63565b5060208310610133831016604e8410600b8410161715611f41575081810a611f63565b611f4b8383611e83565b8060001904821115611f5f57611f5f611c00565b0290505b92915050565b6000611b188383611ec6565b6000816000190483118215151615611f8f57611f8f611c00565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611fb957611fb9611f94565b500490565b805169ffffffffffffffffffff81168114611c8657600080fd5b600080600080600060a08688031215611ff057600080fd5b611ff986611fbe565b945060208601519350604086015192506060860151915061201c60808701611fbe565b90509295509295909350565b60006001600160ff1b038184138284138082168684048611161561204e5761204e611c00565b600160ff1b600087128281168783058912161561206d5761206d611c00565b6000871292508782058712848416161561208957612089611c00565b8785058712818416161561209f5761209f611c00565b505050929093029392505050565b6000826120bc576120bc611f94565b600160ff1b8214600019841416156120d6576120d6611c00565b500590565b600060ff821660ff8416808210156120f5576120f5611c00565b9003939250505056fea2646970667358221220d4fc20e6988fcd4634463a694e2cb1845c36fb8dd61fee861812c7262a534d9964736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000a4c22f0e25c6630b2017979acf1f865e94695c4b0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000a950524441892a31ebddf91d3ceefa04bf4544660000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000002777053d6764996e594c3e88af1d58d5363a2e6000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000aed0c38402a5d19df6e4c03f4e2dced6e29c1ee90000000000000000000000002c1d072e956affc0d435cb7ac38ef18d24d9127c0000000000000000000000000000000000000000000000d8d726b7177a8000000000000000000000000000000000000000000000000000d8d726b7177a80000000000000000000000000000000000000000000000000007caee97613e6700000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637bd399db1161010f578063c4dd1dd6116100a2578063d5a99ea411610071578063d5a99ea414610496578063e72f6e301461049f578063f2fde38b146104b2578063f8fe1834146104c557600080fd5b8063c4dd1dd614610454578063c93ab5dc14610467578063d2aa789f1461047a578063d46217a61461048357600080fd5b8063a06bac7c116100de578063a06bac7c146103e0578063a128c4d2146103f3578063c11645bc14610406578063c31c9c071461042d57600080fd5b80637bd399db1461039657806383e22774146103a95780638da5cb5b146103bc578063960bfe04146103cd57600080fd5b806343d427b811610187578063636d57b211610156578063636d57b21461034b578063715018a614610372578063775f55851461037a5780637b1fe5d91461038357600080fd5b806343d427b8146102dd57806354c5a442146102e557806357970e93146102fd578063626cb3c51461032457600080fd5b80633651c24b116101c35780633651c24b146102805780633a56573b146102965780633e51b327146102ad57806342cde4e8146102d457600080fd5b8063139da41c146101f55780631bcc3540146101ff57806324cd7060146102125780633013ce2914610241575b600080fd5b6101fd6104d8565b005b6101fd61020d366004611b90565b6107d8565b60025461022890600160b81b900462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b6102687f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b6040516001600160a01b039091168152602001610238565b60025461022890600160a01b900462ffffff1681565b61029f60035481565b604051908152602001610238565b6102687f000000000000000000000000aed0c38402a5d19df6e4c03f4e2dced6e29c1ee981565b61029f60075481565b61029f610881565b6102ed610920565b6040519015158152602001610238565b6102687f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca81565b6102687f000000000000000000000000a950524441892a31ebddf91d3ceefa04bf45446681565b6102687f0000000000000000000000002c1d072e956affc0d435cb7ac38ef18d24d9127c81565b6101fd610af9565b61029f60055481565b6101fd610391366004611b90565b610b2f565b600154610268906001600160a01b031681565b600254610268906001600160a01b031681565b6000546001600160a01b0316610268565b6101fd6103db366004611b90565b610bd6565b6101fd6103ee366004611ba9565b610c79565b6101fd610401366004611be3565b610cf5565b6102687f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2881565b6102687f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b6101fd610462366004611b90565b610dc3565b6101fd610475366004611ba9565b610e63565b61029f60045481565b6101fd610491366004611b90565b610edf565b61029f60065481565b6101fd6104ad366004611be3565b610f87565b6101fd6104c0366004611be3565b6110f5565b6101fd6104d3366004611be3565b611190565b6000600354116105205760405162461bcd60e51b815260206004820152600e60248201526d1d995cdd1259081b9bdd081cd95d60921b60448201526064015b60405180910390fd5b6000600454116105655760405162461bcd60e51b815260206004820152601060248201526f1d5c1ad9595c1259081b9bdd081cd95d60821b6044820152606401610517565b61056d610920565b6105ad5760405162461bcd60e51b81526020600482015260116024820152701c99599d5b99081b9bdd081b9959591959607a1b6044820152606401610517565b6000806105b8610881565b905060055481106105cb578091506107bd565b60015460035460405162d4ec1760e71b81526001600160a01b0390921691636a760b80916105ff9160040190815260200190565b600060405180830381600087803b15801561061957600080fd5b505af115801561062d573d6000803e3d6000fd5b50505050610639610881565b91507ff48d95c08d1df7ca3570aca27c4e150e5ba177b31ff383151cb1274478520dbb8260405161066c91815260200190565b60405180910390a16006548211156107bd5760006006548361068e9190611c16565b90506106db7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f7f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a288361125e565b604051633b4da69f60e01b81526001600160a01b037f000000000000000000000000a950524441892a31ebddf91d3ceefa04bf45446681166004830152602482018390527f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a281690633b4da69f90604401600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b5050505060065492507fde4e6bac0952ea1d4790fc89934844bcf2ba85f2d10b71724e90f7bdd80460b8816040516107b391815260200190565b60405180910390a1505b60006107c88361135e565b90506107d381611581565b505050565b6000546001600160a01b031633146108025760405162461bcd60e51b815260040161051790611c2d565b600081116108455760405162461bcd60e51b815260206004820152601060248201526f1a5b9d985b1a59081d5c1ad9595c125960821b6044820152606401610517565b60048190556040518181527f7065c7d81e2755980701c7965cad970b8a7de77e69ce52d06ceaed3d26a98383906020015b60405180910390a150565b6040516370a0823160e01b81523060048201526000907f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b0316906370a082319060240160206040518083038186803b1580156108e357600080fd5b505afa1580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091b9190611c62565b905090565b600080600354116109645760405162461bcd60e51b815260206004820152600e60248201526d1d995cdd1259081b9bdd081cd95d60921b6044820152606401610517565b6000600454116109a95760405162461bcd60e51b815260206004820152601060248201526f1d5c1ad9595c1259081b9bdd081cd95d60821b6044820152606401610517565b600254600480546040516363e1d0cd60e11b8152918201526000916001600160a01b03169063c7c3a19a9060240160006040518083038186803b1580156109ef57600080fd5b505afa158015610a03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a2b9190810190611d00565b5050509350505050806001600160601b03166007541080610ae457506005546001546003546040516353e8863d60e01b81526001600160a01b03909216916353e8863d91610a7f9160040190815260200190565b60206040518083038186803b158015610a9757600080fd5b505afa158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190611c62565b108015610ae45750600554610ae2610881565b105b15610af157600091505090565b600191505090565b6000546001600160a01b03163314610b235760405162461bcd60e51b815260040161051790611c2d565b610b2d6000611658565b565b6000546001600160a01b03163314610b595760405162461bcd60e51b815260040161051790611c2d565b60008111610ba15760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081b585e11195c1bdcda5d105b5d605a1b6044820152606401610517565b60068190556040518181527fc8c4dead1d4bce9df0be51af7c65ad8418b67c2de63ab33954b8f0d5ee7e50be90602001610876565b6000546001600160a01b03163314610c005760405162461bcd60e51b815260040161051790611c2d565b60008111610c445760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081d1a1c995cda1bdb19607a1b6044820152606401610517565b60078190556040518181527f6e8a187d7944998085dbd1f16b84c51c903bb727536cdba86962439aded2cfd790602001610876565b6000546001600160a01b03163314610ca35760405162461bcd60e51b815260040161051790611c2d565b6002805462ffffff60b81b1916600160b81b62ffffff8416908102919091179091556040519081527f01aeeb6929d56153bd667f7c541b4d7f63b742f452b11333b2753314cff4a35290602001610876565b6000546001600160a01b03163314610d1f5760405162461bcd60e51b815260040161051790611c2d565b6001600160a01b038116610d755760405162461bcd60e51b815260206004820152601e60248201527f696e76616c6964206b65657065725265676973747279206164647265737300006044820152606401610517565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f04519dde11e63dda51e8bde40ba1ab059376a417da0b259790458d51185169fd90602001610876565b6000546001600160a01b03163314610ded5760405162461bcd60e51b815260040161051790611c2d565b60008111610e2e5760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081d995cdd125960921b6044820152606401610517565b60038190556040518181527fb409dcb321f0cdb8f541f652c5f1cc4d4f7d82a67ad78e0249e8621140e3f76690602001610876565b6000546001600160a01b03163314610e8d5760405162461bcd60e51b815260040161051790611c2d565b6002805462ffffff60a01b1916600160a01b62ffffff8416908102919091179091556040519081527f83191e1cbea275617d7dc2dd1b43425c049a33a4cd37dda489f6d3ac887ef89590602001610876565b6000546001600160a01b03163314610f095760405162461bcd60e51b815260040161051790611c2d565b60008111610f525760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081b5a5b95da5d1a191c985dd05b5d60521b6044820152606401610517565b60058190556040518181527f7b13fac9540cb2445dbe043e3d1ec2bff43a3dc3bb2f17360e5b8ccf0b268c8b90602001610876565b6000546001600160a01b03163314610fb15760405162461bcd60e51b815260040161051790611c2d565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610ff357600080fd5b505afa158015611007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b9190611c62565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190611e22565b50604080516001600160a01b0384168152602081018390527f59bfc682b673f8cbf945f1e454df9334834abf7dfe7f92237ca29ecb9b436600910160405180910390a15050565b6000546001600160a01b0316331461111f5760405162461bcd60e51b815260040161051790611c2d565b6001600160a01b0381166111845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610517565b61118d81611658565b50565b6000546001600160a01b031633146111ba5760405162461bcd60e51b815260040161051790611c2d565b6001600160a01b0381166112105760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964206473735665737420616464726573730000000000000000006044820152606401610517565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f722b4cf918485a945ed355fa15b729b2fc9419cb8cd54f142d55c729a017faa590602001610876565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916112ba9190611e44565b6000604051808303816000865af19150503d80600081146112f7576040519150601f19603f3d011682016040523d82523d6000602084013e6112fc565b606091505b50915091508180156113265750805115806113265750808060200190518101906113269190611e22565b6113575760405162461bcd60e51b8152602060048201526002602482015261534160f01b6044820152606401610517565b5050505050565b60006113ab7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f7f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615648461125e565b60408051610100810182526001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f811682527f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca16602082015260025462ffffff600160a01b909104169181019190915230606082015242608082015260a0810183905260009060c08101611444856116a8565b815260006020918201526040805163414bf38960e01b815283516001600160a01b03908116600483015292840151831660248201529083015162ffffff1660448201526060830151821660648201526080830151608482015260a083015160a482015260c083015160c482015260e0830151821660e48201529192507f000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564169063414bf3899061010401602060405180830381600087803b15801561150757600080fd5b505af115801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190611c62565b60408051858152602081018390529193507f40a725f3dd6481375fc982c424861eb4977c23f9079391da9c6a45ddcd72c0e0910160405180910390a150919050565b6002546115b9907f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca906001600160a01b03168361125e565b6002546004805460405163948108f760e01b8152918201526001600160601b03831660248201526001600160a01b039091169063948108f790604401600060405180830381600087803b15801561160f57600080fd5b505af1158015611623573d6000803e3d6000fd5b505050507f65728e8b0492464959587933b48b3fbaf3cd2132de609fb6ac02dc57dc298d5d8160405161087691815260200190565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000807f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561170457600080fd5b505afa158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c9190611e60565b60ff169050600061178e7f000000000000000000000000aed0c38402a5d19df6e4c03f4e2dced6e29c1ee97f0000000000000000000000002c1d072e956affc0d435cb7ac38ef18d24d9127c8461189c565b905060007f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117eb57600080fd5b505afa1580156117ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118239190611e60565b60ff1690506000611835868386611b1f565b9050600061184485600a611f69565b61184e8584611f75565b6118589190611faa565b60025490915060009060649061187a90600160b81b900462ffffff1684611f75565b6118849190611faa565b90506118908183611c16565b98975050505050505050565b600060ff8216158015906118b45750601260ff831611155b6118f35760405162461bcd60e51b815260206004820152601060248201526f696e76616c696420646563696d616c7360801b6044820152606401610517565b600061190360ff8416600a611f69565b90506000856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561194057600080fd5b505afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190611fd8565b5050509150506000866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156119b957600080fd5b505afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190611e60565b90506119fe828287611b1f565b91506000866001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015611a3b57600080fd5b505afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190611fd8565b5050509150506000876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab457600080fd5b505afa158015611ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aec9190611e60565b9050611af9828289611b1f565b915081611b068686612028565b611b1091906120ad565b955050505050505b9392505050565b60008160ff168360ff161015611b5857611b3983836120db565b611b479060ff16600a611f69565b611b519085612028565b9050611b18565b8160ff168360ff161115611b8857611b7082846120db565b611b7e9060ff16600a611f69565b611b5190856120ad565b509192915050565b600060208284031215611ba257600080fd5b5035919050565b600060208284031215611bbb57600080fd5b813562ffffff81168114611b1857600080fd5b6001600160a01b038116811461118d57600080fd5b600060208284031215611bf557600080fd5b8135611b1881611bce565b634e487b7160e01b600052601160045260246000fd5b600082821015611c2857611c28611c00565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611c7457600080fd5b5051919050565b8051611c8681611bce565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015611cbc578181015183820152602001611ca4565b83811115611ccb576000848401525b50505050565b80516001600160601b0381168114611c8657600080fd5b805167ffffffffffffffff81168114611c8657600080fd5b600080600080600080600060e0888a031215611d1b57600080fd5b8751611d2681611bce565b602089015190975063ffffffff81168114611d4057600080fd5b604089015190965067ffffffffffffffff80821115611d5e57600080fd5b818a0191508a601f830112611d7257600080fd5b815181811115611d8457611d84611c8b565b604051601f8201601f19908116603f01168101908382118183101715611dac57611dac611c8b565b816040528281528d6020848701011115611dc557600080fd5b611dd6836020830160208801611ca1565b8099505050505050611dea60608901611cd1565b9350611df860808901611c7b565b9250611e0660a08901611c7b565b9150611e1460c08901611ce8565b905092959891949750929550565b600060208284031215611e3457600080fd5b81518015158114611b1857600080fd5b60008251611e56818460208701611ca1565b9190910192915050565b600060208284031215611e7257600080fd5b815160ff81168114611b1857600080fd5b600181815b80851115611ebe578160001904821115611ea457611ea4611c00565b80851615611eb157918102915b93841c9390800290611e88565b509250929050565b600082611ed557506001611f63565b81611ee257506000611f63565b8160018114611ef85760028114611f0257611f1e565b6001915050611f63565b60ff841115611f1357611f13611c00565b50506001821b611f63565b5060208310610133831016604e8410600b8410161715611f41575081810a611f63565b611f4b8383611e83565b8060001904821115611f5f57611f5f611c00565b0290505b92915050565b6000611b188383611ec6565b6000816000190483118215151615611f8f57611f8f611c00565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611fb957611fb9611f94565b500490565b805169ffffffffffffffffffff81168114611c8657600080fd5b600080600080600060a08688031215611ff057600080fd5b611ff986611fbe565b945060208601519350604086015192506060860151915061201c60808701611fbe565b90509295509295909350565b60006001600160ff1b038184138284138082168684048611161561204e5761204e611c00565b600160ff1b600087128281168783058912161561206d5761206d611c00565b6000871292508782058712848416161561208957612089611c00565b8785058712818416161561209f5761209f611c00565b505050929093029392505050565b6000826120bc576120bc611f94565b600160ff1b8214600019841416156120d6576120d6611c00565b500590565b600060ff821660ff8416808210156120f5576120f5611c00565b9003939250505056fea2646970667358221220d4fc20e6988fcd4634463a694e2cb1845c36fb8dd61fee861812c7262a534d9964736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a4c22f0e25c6630b2017979acf1f865e94695c4b0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000a950524441892a31ebddf91d3ceefa04bf4544660000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000002777053d6764996e594c3e88af1d58d5363a2e6000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000aed0c38402a5d19df6e4c03f4e2dced6e29c1ee90000000000000000000000002c1d072e956affc0d435cb7ac38ef18d24d9127c0000000000000000000000000000000000000000000000d8d726b7177a8000000000000000000000000000000000000000000000000000d8d726b7177a80000000000000000000000000000000000000000000000000007caee97613e6700000
-----Decoded View---------------
Arg [0] : _dssVest (address): 0xa4c22f0e25C6630B2017979AcF1f865e94695C4b
Arg [1] : _daiJoin (address): 0x9759A6Ac90977b93B58547b4A71c78317f391A28
Arg [2] : _vow (address): 0xA950524441892A31ebddF91d3cEEFa04Bf454466
Arg [3] : _paymentToken (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [4] : _keeperRegistry (address): 0x02777053d6764996e594c3E88AF1D58D5363a2e6
Arg [5] : _swapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [6] : _linkToken (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [7] : _paymentUsdPriceFeed (address): 0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9
Arg [8] : _linkUsdPriceFeed (address): 0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c
Arg [9] : _minWithdrawAmt (uint256): 4000000000000000000000
Arg [10] : _maxDepositAmt (uint256): 4000000000000000000000
Arg [11] : _threshold (uint256): 2300000000000000000000
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 000000000000000000000000a4c22f0e25c6630b2017979acf1f865e94695c4b
Arg [1] : 0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28
Arg [2] : 000000000000000000000000a950524441892a31ebddf91d3ceefa04bf454466
Arg [3] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [4] : 00000000000000000000000002777053d6764996e594c3e88af1d58d5363a2e6
Arg [5] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [6] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [7] : 000000000000000000000000aed0c38402a5d19df6e4c03f4e2dced6e29c1ee9
Arg [8] : 0000000000000000000000002c1d072e956affc0d435cb7ac38ef18d24d9127c
Arg [9] : 0000000000000000000000000000000000000000000000d8d726b7177a800000
Arg [10] : 0000000000000000000000000000000000000000000000d8d726b7177a800000
Arg [11] : 00000000000000000000000000000000000000000000007caee97613e6700000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.