More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 40 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exchange | 15118036 | 914 days ago | IN | 0 ETH | 0.00734407 | ||||
Exchange | 14980472 | 937 days ago | IN | 0 ETH | 0.02473264 | ||||
Exchange | 14975168 | 938 days ago | IN | 0 ETH | 0.01528225 | ||||
Exchange | 14966071 | 939 days ago | IN | 0 ETH | 0.01059139 | ||||
Exchange | 14956838 | 941 days ago | IN | 0 ETH | 0.06841505 | ||||
Exchange | 14892125 | 952 days ago | IN | 0 ETH | 0.03031199 | ||||
Exchange | 14784691 | 969 days ago | IN | 0 ETH | 0.0136358 | ||||
Exchange | 14781976 | 970 days ago | IN | 0 ETH | 0.01273743 | ||||
Exchange | 14772276 | 971 days ago | IN | 0 ETH | 0.01609585 | ||||
Exchange | 14772009 | 971 days ago | IN | 0 ETH | 0.01510974 | ||||
Exchange | 14768704 | 972 days ago | IN | 0 ETH | 0.01321444 | ||||
Exchange | 14767939 | 972 days ago | IN | 0 ETH | 0.0398752 | ||||
Exchange | 14767432 | 972 days ago | IN | 0 ETH | 0.02999135 | ||||
Exchange | 14766897 | 972 days ago | IN | 0 ETH | 0.02012401 | ||||
Exchange | 14765997 | 972 days ago | IN | 0 ETH | 0.02984379 | ||||
Exchange | 14765908 | 972 days ago | IN | 0 ETH | 0.02760457 | ||||
Exchange | 14765190 | 973 days ago | IN | 0 ETH | 0.04266084 | ||||
Exchange | 14764423 | 973 days ago | IN | 0 ETH | 0.08774214 | ||||
Exchange | 14763251 | 973 days ago | IN | 0 ETH | 0.04405689 | ||||
Exchange | 14751380 | 975 days ago | IN | 0 ETH | 0.01846707 | ||||
Exchange | 14750690 | 975 days ago | IN | 0 ETH | 0.02565524 | ||||
Exchange | 14748043 | 975 days ago | IN | 0 ETH | 0.0555944 | ||||
Exchange | 14746930 | 975 days ago | IN | 0 ETH | 0.08822563 | ||||
Exchange | 14744841 | 976 days ago | IN | 0 ETH | 0.03095968 | ||||
Exchange | 14718066 | 980 days ago | IN | 0 ETH | 0.02542361 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GroGvtBridgeSwapper
Compiler Version
v0.8.3+commit.8d00100c
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; import "./ZkSyncBridgeSwapper.sol"; import "./interfaces/IGroController.sol"; import "./interfaces/IGroToken.sol"; import "./interfaces/IGroDepositHandler.sol"; import "./interfaces/IGroWithdrawHandler.sol"; import "./interfaces/IGroBuoy.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /** * @notice Exchanges a stablecoin for Gro Vault LP tokens. * Example indexes: * 0: DAI * 1: GVT */ contract GroGvtBridgeSwapper is ZkSyncBridgeSwapper { address public immutable depositHandler; address public immutable withdrawHandler; address public immutable stablecoin; uint256 public immutable stablecoinIndex; address public immutable gvt; address public immutable buoy; address public immutable groReferral; constructor( address _zkSync, address _l2Account, address _groController, uint256 _stablecoinIndex, address _groReferral ) ZkSyncBridgeSwapper(_zkSync, _l2Account) { require(_groController != address(0), "null _groController"); IGroController controller = IGroController(_groController); require(_stablecoinIndex < 3, "invalid _stablecoinIndex"); stablecoin = controller.stablecoins()[_stablecoinIndex]; stablecoinIndex = _stablecoinIndex; depositHandler = controller.depositHandler(); withdrawHandler = controller.withdrawHandler(); gvt = controller.gvt(); buoy = controller.buoy(); groReferral = _groReferral; } function exchange(uint256 _indexIn, uint256 _indexOut, uint256 _amountIn) external override returns (uint256 amountOut) { require(_indexIn + _indexOut == 1, "invalid indexes"); if (_indexIn == 0) { transferFromZkSync(stablecoin); amountOut = swapStablecoinForGvt(_amountIn); transferToZkSync(gvt, amountOut); emit Swapped(stablecoin, _amountIn, gvt, amountOut); } else { transferFromZkSync(gvt); amountOut = swapGvtForStablecoin(_amountIn); transferToZkSync(stablecoin, amountOut); emit Swapped(gvt, _amountIn, stablecoin, amountOut); } } function swapStablecoinForGvt(uint256 _amountIn) public returns (uint256) { uint256[3] memory inAmounts; inAmounts[stablecoinIndex] = _amountIn; uint256 balanceBefore = IGroToken(gvt).balanceOf(address(this)); IERC20(stablecoin).approve(depositHandler, _amountIn); uint256 minLpAmount = getMinAmountOut(IGroBuoy(buoy).stableToLp(inAmounts, true)); IGroDepositHandler(depositHandler).depositGvt(inAmounts, minLpAmount, groReferral); uint256 balanceAfter = IGroToken(gvt).balanceOf(address(this)); return balanceAfter - balanceBefore; } function swapGvtForStablecoin(uint256 _amountIn) public returns (uint256) { uint256 balanceBefore = IERC20(stablecoin).balanceOf(address(this)); uint256 usdAmount = IGroToken(gvt).getShareAssets(_amountIn); uint256 lpAmount = IGroBuoy(buoy).usdToLp(usdAmount); uint256 stableAmount = IGroBuoy(buoy).singleStableFromUsd(usdAmount, int128(uint128(stablecoinIndex))); uint256 minAmount = getMinAmountOut(stableAmount); IGroWithdrawHandler(withdrawHandler).withdrawByStablecoin(false, stablecoinIndex, lpAmount, minAmount); uint256 balanceAfter = IERC20(stablecoin).balanceOf(address(this)); return balanceAfter - balanceBefore; } function tokens(uint256 _index) external view returns (address) { if (_index == 0) { return stablecoin; } else if (_index == 1) { return gvt; } revert("invalid _index"); } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; import "./interfaces/IZkSync.sol"; import "./interfaces/IBridgeSwapper.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; abstract contract ZkSyncBridgeSwapper is IBridgeSwapper { // The owner of the contract address public owner; // The max slippage accepted for swapping. Defaults to 1% with 6 decimals. uint256 public slippagePercent = 1e6; // The ZkSync bridge contract address public immutable zkSync; // The L2 market maker account address public immutable l2Account; address constant internal ETH_TOKEN = address(0); event OwnerChanged(address _owner, address _newOwner); event SlippageChanged(uint256 _slippagePercent); modifier onlyOwner { require(msg.sender == owner, "unauthorised"); _; } constructor(address _zkSync, address _l2Account) { zkSync = _zkSync; l2Account = _l2Account; owner = msg.sender; } function changeOwner(address _newOwner) external onlyOwner { require(_newOwner != address(0), "invalid input"); owner = _newOwner; emit OwnerChanged(owner, _newOwner); } function changeSlippage(uint256 _slippagePercent) external onlyOwner { require(_slippagePercent != slippagePercent && _slippagePercent <= 100e6, "invalid slippage"); slippagePercent = _slippagePercent; emit SlippageChanged(slippagePercent); } /** * @dev Check if there is a pending balance to withdraw in zkSync and withdraw it if applicable. * @param _token The token to withdraw. */ function transferFromZkSync(address _token) internal { uint128 pendingBalance = IZkSync(zkSync).getPendingBalance(address(this), _token); if (pendingBalance > 0) { IZkSync(zkSync).withdrawPendingBalance(payable(address(this)), _token, pendingBalance); } } /** * @dev Deposit the ETH or ERC20 token to zkSync. * @param _outputToken The token that was given. * @param _amountOut The amount of given token. */ function transferToZkSync(address _outputToken, uint256 _amountOut) internal { if (_outputToken == ETH_TOKEN) { // deposit Eth to L2 bridge IZkSync(zkSync).depositETH{value: _amountOut}(l2Account); } else { // approve the zkSync bridge to take the output token IERC20(_outputToken).approve(zkSync, _amountOut); // deposit the output token to the L2 bridge IZkSync(zkSync).depositERC20(IERC20(_outputToken), toUint104(_amountOut), l2Account); } } /** * @dev Safety method to recover ETH or ERC20 tokens that are sent to the contract by error. * @param _token The token to recover. */ function recoverToken(address _recipient, address _token) external onlyOwner returns (uint256 balance) { bool success; if (_token == ETH_TOKEN) { balance = address(this).balance; (success, ) = _recipient.call{value: balance}(""); } else { balance = IERC20(_token).balanceOf(address(this)); success = IERC20(_token).transfer(_recipient, balance); } require(success, "failed to recover"); } /** * @dev fallback method to make sure we can receive ETH */ receive() external payable { } /** * @dev Returns the minimum accepted out amount. */ function getMinAmountOut(uint256 _amountIn) internal view returns (uint256) { return _amountIn * (100e6 - slippagePercent) / 100e6; } /** * @dev Returns the downcasted uint104 from uint256, reverting on * overflow (when the input is greater than largest uint104). */ function toUint104(uint256 value) internal pure returns (uint104) { require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits"); return uint104(value); } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IGroController { function DAI() external view returns (address); function USDC() external view returns (address); function USDT() external view returns (address); function stablecoins() external view returns (address[3] memory); function buoy() external view returns (address); function depositHandler() external view returns (address); function withdrawHandler() external view returns (address); function gvt() external view returns (address); function pwrd() external view returns (address); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IGroToken is IERC20 { function pricePerShare() external view returns (uint256); function getShareAssets(uint256) external view returns (uint256); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IGroDepositHandler { function depositGvt( uint256[3] calldata inAmounts, uint256 minAmount, address referral ) external; function depositPwrd( uint256[3] calldata inAmounts, uint256 minAmount, address referral ) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IGroWithdrawHandler { function withdrawalFee(bool pwrd) external view returns (uint256); function withdrawByLPToken( bool pwrd, uint256 lpAmount, uint256[3] calldata minAmounts ) external; function withdrawByStablecoin( bool pwrd, uint256 index, uint256 lpAmount, uint256 minAmount ) external; function withdrawAllSingle( bool pwrd, uint256 index, uint256 minAmount ) external; function withdrawAllBalanced(bool pwrd, uint256[3] calldata minAmounts) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IGroBuoy { function safetyCheck() external view returns (bool); function updateRatios() external returns (bool); function updateRatiosWithTolerance(uint256 tolerance) external returns (bool); function lpToUsd(uint256 inAmount) external view returns (uint256); function usdToLp(uint256 inAmount) external view returns (uint256); function stableToUsd(uint256[3] calldata inAmount, bool deposit) external view returns (uint256); function stableToLp(uint256[3] calldata inAmount, bool deposit) external view returns (uint256); function singleStableFromLp(uint256 inAmount, int128 i) external view returns (uint256); function getVirtualPrice() external view returns (uint256); function singleStableFromUsd(uint256 inAmount, int128 i) external view returns (uint256); function singleStableToUsd(uint256 inAmount, uint256 i) external view returns (uint256); }
// SPDX-License-Identifier: MIT 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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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: Unlicense pragma solidity ^0.8.3; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IZkSync { function getPendingBalance(address _address, address _token) external view returns (uint128); function withdrawPendingBalance(address payable _owner, address _token, uint128 _amount) external; function depositETH(address _zkSyncAddress) external payable; function depositERC20(IERC20 _token, uint104 _amount, address _zkSyncAddress) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IBridgeSwapper { event Swapped(address _inputToken, uint256 _amountIn, address _outputToken, uint256 _amountOut); /** * @notice Perform an exchange between two tokens * @dev Index values can usually be found via the constructor arguments (if not hardcoded) * @param _indexIn Index value for the token to send * @param _indexOut Index valie of the token to receive * @param _amountIn Amount of `_indexIn` being exchanged * @return Actual amount of `_indexOut` received */ function exchange(uint256 _indexIn, uint256 _indexOut, uint256 _amountIn) external returns (uint256); }
{ "optimizer": { "enabled": true, "runs": 1000 }, "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":"_zkSync","type":"address"},{"internalType":"address","name":"_l2Account","type":"address"},{"internalType":"address","name":"_groController","type":"address"},{"internalType":"uint256","name":"_stablecoinIndex","type":"uint256"},{"internalType":"address","name":"_groReferral","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_slippagePercent","type":"uint256"}],"name":"SlippageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_inputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"_outputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountOut","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"buoy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slippagePercent","type":"uint256"}],"name":"changeSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_indexIn","type":"uint256"},{"internalType":"uint256","name":"_indexOut","type":"uint256"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"exchange","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"groReferral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gvt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Account","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"recoverToken","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slippagePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stablecoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stablecoinIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"swapGvtForStablecoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"swapStablecoinForGvt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zkSync","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101a0604052620f42406001553480156200001957600080fd5b5060405162002154380380620021548339810160408190526200003c916200046b565b6001600160601b0319606086811b821660805285901b1660a052600080546001600160a01b031916331790556001600160a01b038316620000c45760405162461bcd60e51b815260206004820152601360248201527f6e756c6c205f67726f436f6e74726f6c6c65720000000000000000000000000060448201526064015b60405180910390fd5b8260038310620001175760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964205f737461626c65636f696e496e64657800000000000000006044820152606401620000bb565b806001600160a01b031663a8fb4c506040518163ffffffff1660e01b815260040160606040518083038186803b1580156200015157600080fd5b505afa15801562000166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018c9190620004d1565b8360038110620001ac57634e487b7160e01b600052603260045260246000fd5b60200201516001600160a01b0316610100816001600160a01b031660601b81525050826101208181525050806001600160a01b0316639c8b2cfb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021157600080fd5b505afa15801562000226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024c919062000447565b6001600160a01b031660c0816001600160a01b031660601b81525050806001600160a01b031663083473ef6040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a257600080fd5b505afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000447565b6001600160a01b031660e0816001600160a01b031660601b81525050806001600160a01b0316639e574a1e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033357600080fd5b505afa15801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000447565b6001600160a01b0316610140816001600160a01b031660601b81525050806001600160a01b031663b1cbf3ad6040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c557600080fd5b505afa158015620003da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000400919062000447565b6001600160601b0319606091821b81166101605292901b90911661018052506200057a9350505050565b80516001600160a01b03811681146200044257600080fd5b919050565b60006020828403121562000459578081fd5b62000464826200042a565b9392505050565b600080600080600060a0868803121562000483578081fd5b6200048e866200042a565b94506200049e602087016200042a565b9350620004ae604087016200042a565b925060608601519150620004c5608087016200042a565b90509295509295909350565b600060608284031215620004e3578081fd5b82601f830112620004f2578081fd5b604051606081016001600160401b038111828210171562000517576200051762000564565b6040528083606081018610156200052c578384fd5b835b6003811015620005595762000543826200042a565b835260209283019291909101906001016200052e565b509195945050505050565b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c610120516101405160601c6101605160601c6101805160601c611a6a620006ea6000396000818161019c0152610e2501526000818161037a01528181610690015281816107700152610d1f0152600081816103240152818161048a015281816105d901528181610bce01528181610e9601528181610fc8015281816110280152818161108901526110e801526000818161024801528181610739015281816108260152610b7401526000818161040e0152818161045a01528181610522015281816108d801528181610c9901528181610f9401528181610ff3015281816110bd015261111d01526000818161014b015261085d0152600081816102f001528181610c670152610df40152600081816101d00152818161159f015261175a01526000818161027c01528181611413015281816114ff015281816115c70152818161164101526116cf0152611a6a6000f3fe60806040526004361061012d5760003560e01c80639c8b2cfb116100a5578063bec872b011610074578063d42abed311610059578063d42abed3146103dc578063e9cbd822146103fc578063feaea5861461043057610134565b8063bec872b01461039c578063cfa87fe1146103bc57610134565b80639c8b2cfb146102de5780639e574a1e14610312578063a6f9dae114610346578063b1cbf3ad1461036857610134565b80635825a150116100fc5780637c19f005116100e15780637c19f0051461026a5780638da5cb5b1461029e57806394af2357146102be57610134565b80635825a15014610212578063628fe8cc1461023657610134565b8063083473ef146101395780632e11eb9b1461018a57806335aa6df8146101be5780634f64b2be146101f257610134565b3661013457005b600080fd5b34801561014557600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019657600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ca57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101fe57600080fd5b5061016d61020d3660046118e4565b610450565b34801561021e57600080fd5b5061022860015481565b604051908152602001610181565b34801561024257600080fd5b506102287f000000000000000000000000000000000000000000000000000000000000000081565b34801561027657600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102aa57600080fd5b5060005461016d906001600160a01b031681565b3480156102ca57600080fd5b506102286102d93660046118e4565b610500565b3480156102ea57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031e57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035257600080fd5b50610366610361366004611848565b610973565b005b34801561037457600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a857600080fd5b506103666103b73660046118e4565b610a86565b3480156103c857600080fd5b506102286103d73660046118e4565b610b66565b3480156103e857600080fd5b506102286103f7366004611914565b610f2f565b34801561040857600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043c57600080fd5b5061022861044b366004611862565b61117c565b60008161047e57507f00000000000000000000000000000000000000000000000000000000000000006104fb565b81600114156104ae57507f00000000000000000000000000000000000000000000000000000000000000006104fb565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964205f696e64657800000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561056457600080fd5b505afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c91906118fc565b6040517f11d1dcd2000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906311d1dcd29060240160206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906118fc565b6040517fe8ad4885000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e8ad48859060240160206040518083038186803b1580156106d257600080fd5b505afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906118fc565b6040517f10a2862a000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000000000000000000000000000000000000000000000600f0b60248201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310a2862a9060440160206040518083038186803b1580156107b257600080fd5b505afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906118fc565b905060006107f78261139f565b6040517f9793869b000000000000000000000000000000000000000000000000000000008152600060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260448101859052606481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639793869b90608401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b91906118fc565b90506109678682611a07565b98975050505050505050565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420696e7075740000000000000000000000000000000000000060448201526064016104f2565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b6000546001600160a01b03163314610acf5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001548114158015610ae557506305f5e1008111155b610b315760405162461bcd60e51b815260206004820152601060248201527f696e76616c696420736c6970706167650000000000000000000000000000000060448201526064016104f2565b60018190556040518181527febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090602001610a7b565b6000610b70611813565b82817f000000000000000000000000000000000000000000000000000000000000000060038110610bb157634e487b7160e01b600052603260045260246000fd5b60200201526040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118fc565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b390604401602060405180830381600087803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190611894565b506000610dc17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166366c2bdcf8560016040518363ffffffff1660e01b8152600401610d6c929190611968565b60206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906118fc565b61139f565b6040517f1ccbdcf20000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631ccbdcf290610e4d90869085907f000000000000000000000000000000000000000000000000000000000000000090600401611985565b600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1991906118fc565b9050610f258382611a07565b9695505050505050565b6000610f3b83856119b0565b600114610f8a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420696e6465786573000000000000000000000000000000000060448201526064016104f2565b8361108457610fb87f00000000000000000000000000000000000000000000000000000000000000006113d2565b610fc182610b66565b9050610fed7f000000000000000000000000000000000000000000000000000000000000000082611561565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018590527f000000000000000000000000000000000000000000000000000000000000000016818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a1611175565b6110ad7f00000000000000000000000000000000000000000000000000000000000000006113d2565b6110b682610500565b90506110e27f000000000000000000000000000000000000000000000000000000000000000082611561565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018590527f000000000000000000000000000000000000000000000000000000000000000016818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a15b9392505050565b600080546001600160a01b031633146111c65760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b60006001600160a01b038316611232576040514792506001600160a01b038516908390600081818185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50508091505061134b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906118fc565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529193509084169063a9059cbb90604401602060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190611894565b90505b806113985760405162461bcd60e51b815260206004820152601160248201527f6661696c656420746f207265636f76657200000000000000000000000000000060448201526064016104f2565b5092915050565b60006305f5e1006001546305f5e1006113b89190611a07565b6113c290846119e8565b6113cc91906119c8565b92915050565b6040517f5aca41f60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635aca41f69060440160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906118b4565b90506fffffffffffffffffffffffffffffffff81161561155d576040517fd514da500000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526fffffffffffffffffffffffffffffffff831660448301527f0000000000000000000000000000000000000000000000000000000000000000169063d514da50906064015b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b505050505b5050565b6001600160a01b03821661162a576040517f2d2da8060000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690632d2da8069083906024016000604051808303818588803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b505050505061155d565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905283169063095ea7b390604401602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190611894565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e17376b5836117068461178a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201526cffffffffffffffffffffffffff90911660248201527f000000000000000000000000000000000000000000000000000000000000000091909116604482015260640161152a565b60006cffffffffffffffffffffffffff82111561180f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f303420626974730000000000000000000000000000000000000000000000000060648201526084016104f2565b5090565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b03811681146104fb57600080fd5b600060208284031215611859578081fd5b61117582611831565b60008060408385031215611874578081fd5b61187d83611831565b915061188b60208401611831565b90509250929050565b6000602082840312156118a5578081fd5b81518015158114611175578182fd5b6000602082840312156118c5578081fd5b81516fffffffffffffffffffffffffffffffff81168114611175578182fd5b6000602082840312156118f5578081fd5b5035919050565b60006020828403121561190d578081fd5b5051919050565b600080600060608486031215611928578081fd5b505081359360208301359350604090920135919050565b8060005b6003811015611962578151845260209384019390910190600101611943565b50505050565b60808101611976828561193f565b82151560608301529392505050565b60a08101611993828661193f565b8360608301526001600160a01b0383166080830152949350505050565b600082198211156119c3576119c3611a1e565b500190565b6000826119e357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a0257611a02611a1e565b500290565b600082821015611a1957611a19611a1e565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b8bae2c718f2dd8d3c81210ebb9416ecf757581aff4bca05fdde97f420ed1d3564736f6c63430008030033000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31
Deployed Bytecode
0x60806040526004361061012d5760003560e01c80639c8b2cfb116100a5578063bec872b011610074578063d42abed311610059578063d42abed3146103dc578063e9cbd822146103fc578063feaea5861461043057610134565b8063bec872b01461039c578063cfa87fe1146103bc57610134565b80639c8b2cfb146102de5780639e574a1e14610312578063a6f9dae114610346578063b1cbf3ad1461036857610134565b80635825a150116100fc5780637c19f005116100e15780637c19f0051461026a5780638da5cb5b1461029e57806394af2357146102be57610134565b80635825a15014610212578063628fe8cc1461023657610134565b8063083473ef146101395780632e11eb9b1461018a57806335aa6df8146101be5780634f64b2be146101f257610134565b3661013457005b600080fd5b34801561014557600080fd5b5061016d7f000000000000000000000000641befa4db601578a64f0fc1f4e89e9869268fe781565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019657600080fd5b5061016d7f0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a3181565b3480156101ca57600080fd5b5061016d7f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d381565b3480156101fe57600080fd5b5061016d61020d3660046118e4565b610450565b34801561021e57600080fd5b5061022860015481565b604051908152602001610181565b34801561024257600080fd5b506102287f000000000000000000000000000000000000000000000000000000000000000081565b34801561027657600080fd5b5061016d7f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef81565b3480156102aa57600080fd5b5060005461016d906001600160a01b031681565b3480156102ca57600080fd5b506102286102d93660046118e4565b610500565b3480156102ea57600080fd5b5061016d7f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f4081565b34801561031e57600080fd5b5061016d7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c81565b34801561035257600080fd5b50610366610361366004611848565b610973565b005b34801561037457600080fd5b5061016d7f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe81565b3480156103a857600080fd5b506103666103b73660046118e4565b610a86565b3480156103c857600080fd5b506102286103d73660046118e4565b610b66565b3480156103e857600080fd5b506102286103f7366004611914565b610f2f565b34801561040857600080fd5b5061016d7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b34801561043c57600080fd5b5061022861044b366004611862565b61117c565b60008161047e57507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6104fb565b81600114156104ae57507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6104fb565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964205f696e64657800000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16906370a082319060240160206040518083038186803b15801561056457600080fd5b505afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c91906118fc565b6040517f11d1dcd2000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b037f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16906311d1dcd29060240160206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906118fc565b6040517fe8ad4885000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe169063e8ad48859060240160206040518083038186803b1580156106d257600080fd5b505afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906118fc565b6040517f10a2862a000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000000000000000000000000000000000000000000000600f0b60248201529091506000906001600160a01b037f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe16906310a2862a9060440160206040518083038186803b1580156107b257600080fd5b505afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906118fc565b905060006107f78261139f565b6040517f9793869b000000000000000000000000000000000000000000000000000000008152600060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260448101859052606481018290529091507f000000000000000000000000641befa4db601578a64f0fc1f4e89e9869268fe76001600160a01b031690639793869b90608401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b031691506370a082319060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b91906118fc565b90506109678682611a07565b98975050505050505050565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420696e7075740000000000000000000000000000000000000060448201526064016104f2565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b6000546001600160a01b03163314610acf5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001548114158015610ae557506305f5e1008111155b610b315760405162461bcd60e51b815260206004820152601060248201527f696e76616c696420736c6970706167650000000000000000000000000000000060448201526064016104f2565b60018190556040518181527febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090602001610a7b565b6000610b70611813565b82817f000000000000000000000000000000000000000000000000000000000000000060038110610bb157634e487b7160e01b600052603260045260246000fd5b60200201526040516370a0823160e01b81523060048201526000907f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b0316906370a082319060240160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118fc565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f4081166004830152602482018790529192507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f9091169063095ea7b390604401602060405180830381600087803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190611894565b506000610dc17f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe6001600160a01b03166366c2bdcf8560016040518363ffffffff1660e01b8152600401610d6c929190611968565b60206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906118fc565b61139f565b6040517f1ccbdcf20000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f401690631ccbdcf290610e4d90869085907f0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a3190600401611985565b600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b031691506370a082319060240160206040518083038186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1991906118fc565b9050610f258382611a07565b9695505050505050565b6000610f3b83856119b0565b600114610f8a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420696e6465786573000000000000000000000000000000000060448201526064016104f2565b8361108457610fb87f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6113d2565b610fc182610b66565b9050610fed7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c82611561565b604080517f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b039081168252602082018590527f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a1611175565b6110ad7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6113d2565b6110b682610500565b90506110e27f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f82611561565b604080517f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b039081168252602082018590527f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a15b9392505050565b600080546001600160a01b031633146111c65760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b60006001600160a01b038316611232576040514792506001600160a01b038516908390600081818185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50508091505061134b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906118fc565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529193509084169063a9059cbb90604401602060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190611894565b90505b806113985760405162461bcd60e51b815260206004820152601160248201527f6661696c656420746f207265636f76657200000000000000000000000000000060448201526064016104f2565b5092915050565b60006305f5e1006001546305f5e1006113b89190611a07565b6113c290846119e8565b6113cc91906119c8565b92915050565b6040517f5aca41f60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382811660248301526000917f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef90911690635aca41f69060440160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906118b4565b90506fffffffffffffffffffffffffffffffff81161561155d576040517fd514da500000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526fffffffffffffffffffffffffffffffff831660448301527f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef169063d514da50906064015b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b505050505b5050565b6001600160a01b03821661162a576040517f2d2da8060000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3811660048301527f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef1690632d2da8069083906024016000604051808303818588803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b505050505061155d565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef811660048301526024820183905283169063095ea7b390604401602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190611894565b507f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef6001600160a01b031663e17376b5836117068461178a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201526cffffffffffffffffffffffffff90911660248201527f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d391909116604482015260640161152a565b60006cffffffffffffffffffffffffff82111561180f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f303420626974730000000000000000000000000000000000000000000000000060648201526084016104f2565b5090565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b03811681146104fb57600080fd5b600060208284031215611859578081fd5b61117582611831565b60008060408385031215611874578081fd5b61187d83611831565b915061188b60208401611831565b90509250929050565b6000602082840312156118a5578081fd5b81518015158114611175578182fd5b6000602082840312156118c5578081fd5b81516fffffffffffffffffffffffffffffffff81168114611175578182fd5b6000602082840312156118f5578081fd5b5035919050565b60006020828403121561190d578081fd5b5051919050565b600080600060608486031215611928578081fd5b505081359360208301359350604090920135919050565b8060005b6003811015611962578151845260209384019390910190600101611943565b50505050565b60808101611976828561193f565b82151560608301529392505050565b60a08101611993828661193f565b8360608301526001600160a01b0383166080830152949350505050565b600082198211156119c3576119c3611a1e565b500190565b6000826119e357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a0257611a02611a1e565b500290565b600082821015611a1957611a19611a1e565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b8bae2c718f2dd8d3c81210ebb9416ecf757581aff4bca05fdde97f420ed1d3564736f6c63430008030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31
-----Decoded View---------------
Arg [0] : _zkSync (address): 0xaBEA9132b05A70803a4E85094fD0e1800777fBEF
Arg [1] : _l2Account (address): 0xe4C0297BA4722D702a19cf0aB95b24658e8ad7D3
Arg [2] : _groController (address): 0xCC5c60A319D33810b9EaB9764717EeF84deFB8F4
Arg [3] : _stablecoinIndex (uint256): 0
Arg [4] : _groReferral (address): 0x2F6579F6031E85b8862848b90118Bb12c0ea5a31
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef
Arg [1] : 000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3
Arg [2] : 000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f4
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31
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.