More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Request... | 18977927 | 229 days ago | IN | 0 ETH | 0.00556091 | ||||
Collect From All... | 18636804 | 277 days ago | IN | 0 ETH | 0.00497237 | ||||
Transfer Ownersh... | 18391984 | 311 days ago | IN | 0 ETH | 0.00060954 | ||||
Collect From All... | 18391955 | 311 days ago | IN | 0 ETH | 0.00337281 | ||||
Request To Withd... | 17692614 | 409 days ago | IN | 0 ETH | 0.00372909 | ||||
Collect From All... | 17647619 | 415 days ago | IN | 0 ETH | 0.00262008 | ||||
Collect From All... | 17576578 | 425 days ago | IN | 0 ETH | 0.00299501 | ||||
Collect From All... | 17540244 | 431 days ago | IN | 0 ETH | 0.00183786 | ||||
Collect From All... | 17534157 | 431 days ago | IN | 0 ETH | 0.00211998 | ||||
Collect From All... | 17526527 | 432 days ago | IN | 0 ETH | 0.001947 | ||||
Collect From All... | 17518977 | 434 days ago | IN | 0 ETH | 0.00296217 | ||||
Transfer Ownersh... | 17466443 | 441 days ago | IN | 0 ETH | 0.00045252 | ||||
0x60a06040 | 17466436 | 441 days ago | IN | 0 ETH | 0.01958323 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UniswapV3Locker
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-12 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } library Structs { struct CollectParams { uint256 tokenId; address recipient; uint128 amount0Max; uint128 amount1Max; } struct IncreaseLiquidityParams { uint256 tokenId; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; uint256 deadline; } } interface IUniswapV3Router { function factory() external view returns (address); } interface IUniswapV3Factory { function createPool( address tokenA, address tokenB, uint24 fee ) external returns (address pool); } interface IUniswapPositions is IERC721Enumerable { function collect(Structs.CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); function increaseLiquidity(Structs.IncreaseLiquidityParams calldata params) external payable returns ( uint128 liquidity, uint256 amount0, uint256 amount1 ); function positions(uint256 tokenId) external view returns ( uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1 ); } contract UniswapV3Locker is Ownable { IUniswapPositions public immutable positionsContract; event RequestedLPWithdraw(uint256 tokenId); event WithdrewLP(uint256 tokenId); event CanceledLpWithdrawRequest(); uint256 public lpWithdrawRequestTimestamp; uint256 public lpWithdrawRequestDuration = 180 days; bool public lpWithdrawRequestPending; uint256 public lpTokenIdToWithdraw; receive() payable external{} event HarvestedFees(uint256 amount0, uint256 amount1); constructor() { positionsContract = IUniswapPositions(0xC36442b4a4522E871399CD717aBDD847Ab11FE88); } function getOpenPositions() public view returns (uint256[] memory){ uint256[] memory tokenIds = new uint256[](positionsContract.balanceOf(address(this))); for(uint256 i = 0; i < tokenIds.length; i++){ tokenIds[i] = positionsContract.tokenOfOwnerByIndex(address(this), i); } return tokenIds; } function collectFromAllPositions() external onlyOwner{ uint256[] memory openPositions = getOpenPositions(); uint256 amount0; uint256 amount1; for(uint256 i = 0; i < openPositions.length; i++){ (amount0, amount1) = positionsContract.collect(Structs.CollectParams({ tokenId: openPositions[i], recipient: msg.sender, amount0Max: type(uint128).max, amount1Max: type(uint128).max })); emit HarvestedFees(amount0,amount1); } } function collectFromSinglePosition(uint256 _tokenId) external onlyOwner{ uint256 amount0; uint256 amount1; (amount0, amount1) = positionsContract.collect(Structs.CollectParams({ tokenId: _tokenId, recipient: msg.sender, amount0Max: type(uint128).max, amount1Max: type(uint128).max })); emit HarvestedFees(amount0,amount1); } function sendEth() external onlyOwner { bool success; (success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "withdraw unsuccessful"); } function transferForeignToken(address _token, address _to) external onlyOwner { require(_token != address(0), "_token address cannot be 0"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance); } function getPositionInfo(uint256 _tokenId) public view returns ( address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint128 tokensOwed0, uint128 tokensOwed1){ (, , token0, token1, fee, tickLower, tickUpper, liquidity, , , tokensOwed0, tokensOwed1) = positionsContract.positions(_tokenId); } function requestToWithdrawLP(uint256 _tokenId) external onlyOwner { require(!lpWithdrawRequestPending, "Cannot request again until first request is over."); lpWithdrawRequestTimestamp = block.timestamp; lpWithdrawRequestPending = true; lpTokenIdToWithdraw = _tokenId; emit RequestedLPWithdraw(lpTokenIdToWithdraw); } function nextAvailableLpWithdrawDate() public view returns (uint256){ if(lpWithdrawRequestPending){ return lpWithdrawRequestTimestamp + lpWithdrawRequestDuration; } else { return 0; // 0 means no open requests } } function withdrawRequestedLP(address _to) external onlyOwner { require(block.timestamp >= nextAvailableLpWithdrawDate() && nextAvailableLpWithdrawDate() > 0, "Must request and wait."); IERC721(positionsContract).transferFrom(address(this), _to, lpTokenIdToWithdraw); emit WithdrewLP(lpTokenIdToWithdraw); } function cancelLPWithdrawRequest() external onlyOwner { lpWithdrawRequestPending = false; lpWithdrawRequestTimestamp = 0; lpTokenIdToWithdraw = 0; emit CanceledLpWithdrawRequest(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"HarvestedFees","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":"tokenId","type":"uint256"}],"name":"RequestedLPWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"WithdrewLP","type":"event"},{"inputs":[],"name":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectFromAllPositions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"collectFromSinglePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOpenPositions","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getPositionInfo","outputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"uint128","name":"tokensOwed0","type":"uint128"},{"internalType":"uint128","name":"tokensOwed1","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpTokenIdToWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextAvailableLpWithdrawDate","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":"positionsContract","outputs":[{"internalType":"contract IUniswapPositions","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"requestToWithdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405262ed4e0060025534801561001757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35073c36442b4a4522e871399cd717abdd847ab11fe886080526080516115546100b6600039600081816101ad015281816104e2015281816105bf015281816106960152818161074c01528181610a7d0152610ca601526115546000f3fe60806040526004361061010d5760003560e01c80638da5cb5b11610095578063c9da1f8c11610064578063c9da1f8c14610324578063ee44b44e1461033a578063f2dd042b14610350578063f2fde38b14610365578063fd361d0e1461038557600080fd5b80638da5cb5b146102b1578063a8f8a633146102cf578063befd2fac146102ef578063c7c61e2c1461030f57600080fd5b80634f6f19b0116100dc5780634f6f19b01461019b578063519f5099146101e7578063712c298514610267578063715018a61461027c5780638366e79a1461029157600080fd5b8063058054c91461011957806306e99fef146101425780630cf1d232146101595780630fbac3331461017957600080fd5b3661011457005b600080fd5b34801561012557600080fd5b5061012f60015481565b6040519081526020015b60405180910390f35b34801561014e57600080fd5b506101576103af565b005b34801561016557600080fd5b50610157610174366004611164565b610477565b34801561018557600080fd5b5061018e61059c565b604051610139919061117d565b3480156101a757600080fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610139565b3480156101f357600080fd5b50610207610202366004611164565b61073e565b604080516001600160a01b03998a16815298909716602089015262ffffff90951695870195909552600292830b6060870152910b60808501526001600160801b0390811660a085015291821660c08401521660e082015261010001610139565b34801561027357600080fd5b5061012f610823565b34801561028857600080fd5b5061015761084c565b34801561029d57600080fd5b506101576102ac3660046111d6565b6108c0565b3480156102bd57600080fd5b506000546001600160a01b03166101cf565b3480156102db57600080fd5b506101576102ea36600461120f565b6109bd565b3480156102fb57600080fd5b5061015761030a366004611164565b610b17565b34801561031b57600080fd5b50610157610bf6565b34801561033057600080fd5b5061012f60045481565b34801561034657600080fd5b5061012f60025481565b34801561035c57600080fd5b50610157610c5f565b34801561037157600080fd5b5061015761038036600461120f565b610ddd565b34801561039157600080fd5b5060035461039f9060ff1681565b6040519015158152602001610139565b6000546001600160a01b031633146103e25760405162461bcd60e51b81526004016103d990611233565b60405180910390fd5b604051600090339047908381818185875af1925050503d8060008114610424576040519150601f19603f3d011682016040523d82523d6000602084013e610429565b606091505b505080915050806104745760405162461bcd60e51b81526020600482015260156024820152741dda5d1a191c985dc81d5b9cdd58d8d95cdcd99d5b605a1b60448201526064016103d9565b50565b6000546001600160a01b031633146104a15760405162461bcd60e51b81526004016103d990611233565b604080516080810182528281523360208201526001600160801b038183018190526060820152905163fc6f786560e01b815260009182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f7865916105169190600401611268565b60408051808303816000875af1158015610534573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055891906112ab565b60408051838152602081018390529294509092507fef4bbc540dccb586b2feb24442d2744b2163eeda96084969a325397cc39030fe910160405180910390a1505050565b6040516370a0823160e01b81523060048201526060906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062a91906112cf565b67ffffffffffffffff811115610642576106426112e8565b60405190808252806020026020018201604052801561066b578160200160208202803683370190505b50905060005b815181101561073857604051632f745c5960e01b8152306004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632f745c5990604401602060405180830381865afa1580156106e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070991906112cf565b82828151811061071b5761071b6112fe565b6020908102919091010152806107308161132a565b915050610671565b50919050565b6000806000806000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab888a6040518263ffffffff1660e01b815260040161079891815260200190565b61018060405180830381865afa1580156107b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107da919061138f565b909192939495969798999a50909192939495969798995090919250909150809850819950829a50839b50849c50859d50869e50879f505050505050505050919395975091939597565b60035460009060ff1615610846576002546001546108419190611470565b905090565b50600090565b6000546001600160a01b031633146108765760405162461bcd60e51b81526004016103d990611233565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146108ea5760405162461bcd60e51b81526004016103d990611233565b6001600160a01b0382166109405760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016103d9565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab91906112cf565b90506109b8838383610ec7565b505050565b6000546001600160a01b031633146109e75760405162461bcd60e51b81526004016103d990611233565b6109ef610823565b4210158015610a0557506000610a03610823565b115b610a4a5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b60448201526064016103d9565b600480546040516323b872dd60e01b815230928101929092526001600160a01b03838116602484015260448301919091527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b158015610ac157600080fd5b505af1158015610ad5573d6000803e3d6000fd5b505050507fe69f5b0321de029de1ed8c2f46e8abd49195bcefb47395eb1c73e881cc8a5afe600454604051610b0c91815260200190565b60405180910390a150565b6000546001600160a01b03163314610b415760405162461bcd60e51b81526004016103d990611233565b60035460ff1615610bae5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b60648201526084016103d9565b4260019081556003805460ff1916909117905560048190556040518181527f77d155c45b6b6d71e74b6b0f4febf87f076bdbfa4130b22682ea9bdb4364c16c90602001610b0c565b6000546001600160a01b03163314610c205760405162461bcd60e51b81526004016103d990611233565b6003805460ff191690556000600181905560048190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6000546001600160a01b03163314610c895760405162461bcd60e51b81526004016103d990611233565b6000610c9361059c565b905060008060005b8351811015610dd7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc6f78656040518060800160405280878581518110610cf057610cf06112fe565b60200260200101518152602001336001600160a01b031681526020016001600160801b03801681526020016001600160801b0380168152506040518263ffffffff1660e01b8152600401610d449190611268565b60408051808303816000875af1158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8691906112ab565b60408051838152602081018390529295509093507fef4bbc540dccb586b2feb24442d2744b2163eeda96084969a325397cc39030fe910160405180910390a180610dcf8161132a565b915050610c9b565b50505050565b6000546001600160a01b03163314610e075760405162461bcd60e51b81526004016103d990611233565b6001600160a01b038116610e6c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b892869291600091610f57918516908490610fd4565b8051909150156109b85780806020019051810190610f759190611489565b6109b85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103d9565b6060610fe38484600085610feb565b949350505050565b60608247101561104c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103d9565b600080866001600160a01b0316858760405161106891906114cf565b60006040518083038185875af1925050503d80600081146110a5576040519150601f19603f3d011682016040523d82523d6000602084013e6110aa565b606091505b50915091506110bb878383876110c6565b979650505050505050565b6060831561113557825160000361112e576001600160a01b0385163b61112e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103d9565b5081610fe3565b610fe3838381511561114a5781518083602001fd5b8060405162461bcd60e51b81526004016103d991906114eb565b60006020828403121561117657600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156111b557835183529284019291840191600101611199565b50909695505050505050565b6001600160a01b038116811461047457600080fd5b600080604083850312156111e957600080fd5b82356111f4816111c1565b91506020830135611204816111c1565b809150509250929050565b60006020828403121561122157600080fd5b813561122c816111c1565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b600080604083850312156112be57600080fd5b505080516020909101519092909150565b6000602082840312156112e157600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161133c5761133c611314565b5060010190565b805161134e816111c1565b919050565b805162ffffff8116811461134e57600080fd5b8051600281900b811461134e57600080fd5b80516001600160801b038116811461134e57600080fd5b6000806000806000806000806000806000806101808d8f0312156113b257600080fd5b8c516bffffffffffffffffffffffff811681146113ce57600080fd5b9b506113dc60208e01611343565b9a506113ea60408e01611343565b99506113f860608e01611343565b985061140660808e01611353565b975061141460a08e01611366565b965061142260c08e01611366565b955061143060e08e01611378565b94506101008d015193506101208d0151925061144f6101408e01611378565b915061145e6101608e01611378565b90509295989b509295989b509295989b565b8082018082111561148357611483611314565b92915050565b60006020828403121561149b57600080fd5b8151801515811461122c57600080fd5b60005b838110156114c65781810151838201526020016114ae565b50506000910152565b600082516114e18184602087016114ab565b9190910192915050565b602081526000825180602084015261150a8160408501602087016114ab565b601f01601f1916919091016040019291505056fea26469706673582212203ebf9c55728b67d9d1c93844fe39306f538df6ae3d441ab4d6b0dce5fd94195664736f6c63430008130033
Deployed Bytecode
0x60806040526004361061010d5760003560e01c80638da5cb5b11610095578063c9da1f8c11610064578063c9da1f8c14610324578063ee44b44e1461033a578063f2dd042b14610350578063f2fde38b14610365578063fd361d0e1461038557600080fd5b80638da5cb5b146102b1578063a8f8a633146102cf578063befd2fac146102ef578063c7c61e2c1461030f57600080fd5b80634f6f19b0116100dc5780634f6f19b01461019b578063519f5099146101e7578063712c298514610267578063715018a61461027c5780638366e79a1461029157600080fd5b8063058054c91461011957806306e99fef146101425780630cf1d232146101595780630fbac3331461017957600080fd5b3661011457005b600080fd5b34801561012557600080fd5b5061012f60015481565b6040519081526020015b60405180910390f35b34801561014e57600080fd5b506101576103af565b005b34801561016557600080fd5b50610157610174366004611164565b610477565b34801561018557600080fd5b5061018e61059c565b604051610139919061117d565b3480156101a757600080fd5b506101cf7f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8881565b6040516001600160a01b039091168152602001610139565b3480156101f357600080fd5b50610207610202366004611164565b61073e565b604080516001600160a01b03998a16815298909716602089015262ffffff90951695870195909552600292830b6060870152910b60808501526001600160801b0390811660a085015291821660c08401521660e082015261010001610139565b34801561027357600080fd5b5061012f610823565b34801561028857600080fd5b5061015761084c565b34801561029d57600080fd5b506101576102ac3660046111d6565b6108c0565b3480156102bd57600080fd5b506000546001600160a01b03166101cf565b3480156102db57600080fd5b506101576102ea36600461120f565b6109bd565b3480156102fb57600080fd5b5061015761030a366004611164565b610b17565b34801561031b57600080fd5b50610157610bf6565b34801561033057600080fd5b5061012f60045481565b34801561034657600080fd5b5061012f60025481565b34801561035c57600080fd5b50610157610c5f565b34801561037157600080fd5b5061015761038036600461120f565b610ddd565b34801561039157600080fd5b5060035461039f9060ff1681565b6040519015158152602001610139565b6000546001600160a01b031633146103e25760405162461bcd60e51b81526004016103d990611233565b60405180910390fd5b604051600090339047908381818185875af1925050503d8060008114610424576040519150601f19603f3d011682016040523d82523d6000602084013e610429565b606091505b505080915050806104745760405162461bcd60e51b81526020600482015260156024820152741dda5d1a191c985dc81d5b9cdd58d8d95cdcd99d5b605a1b60448201526064016103d9565b50565b6000546001600160a01b031633146104a15760405162461bcd60e51b81526004016103d990611233565b604080516080810182528281523360208201526001600160801b038183018190526060820152905163fc6f786560e01b815260009182916001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88169163fc6f7865916105169190600401611268565b60408051808303816000875af1158015610534573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055891906112ab565b60408051838152602081018390529294509092507fef4bbc540dccb586b2feb24442d2744b2163eeda96084969a325397cc39030fe910160405180910390a1505050565b6040516370a0823160e01b81523060048201526060906000906001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8816906370a0823190602401602060405180830381865afa158015610606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062a91906112cf565b67ffffffffffffffff811115610642576106426112e8565b60405190808252806020026020018201604052801561066b578160200160208202803683370190505b50905060005b815181101561073857604051632f745c5960e01b8152306004820152602481018290527f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b031690632f745c5990604401602060405180830381865afa1580156106e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070991906112cf565b82828151811061071b5761071b6112fe565b6020908102919091010152806107308161132a565b915050610671565b50919050565b6000806000806000806000807f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b03166399fbab888a6040518263ffffffff1660e01b815260040161079891815260200190565b61018060405180830381865afa1580156107b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107da919061138f565b909192939495969798999a50909192939495969798995090919250909150809850819950829a50839b50849c50859d50869e50879f505050505050505050919395975091939597565b60035460009060ff1615610846576002546001546108419190611470565b905090565b50600090565b6000546001600160a01b031633146108765760405162461bcd60e51b81526004016103d990611233565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146108ea5760405162461bcd60e51b81526004016103d990611233565b6001600160a01b0382166109405760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016103d9565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab91906112cf565b90506109b8838383610ec7565b505050565b6000546001600160a01b031633146109e75760405162461bcd60e51b81526004016103d990611233565b6109ef610823565b4210158015610a0557506000610a03610823565b115b610a4a5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b60448201526064016103d9565b600480546040516323b872dd60e01b815230928101929092526001600160a01b03838116602484015260448301919091527f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8816906323b872dd90606401600060405180830381600087803b158015610ac157600080fd5b505af1158015610ad5573d6000803e3d6000fd5b505050507fe69f5b0321de029de1ed8c2f46e8abd49195bcefb47395eb1c73e881cc8a5afe600454604051610b0c91815260200190565b60405180910390a150565b6000546001600160a01b03163314610b415760405162461bcd60e51b81526004016103d990611233565b60035460ff1615610bae5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b60648201526084016103d9565b4260019081556003805460ff1916909117905560048190556040518181527f77d155c45b6b6d71e74b6b0f4febf87f076bdbfa4130b22682ea9bdb4364c16c90602001610b0c565b6000546001600160a01b03163314610c205760405162461bcd60e51b81526004016103d990611233565b6003805460ff191690556000600181905560048190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6000546001600160a01b03163314610c895760405162461bcd60e51b81526004016103d990611233565b6000610c9361059c565b905060008060005b8351811015610dd7577f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b031663fc6f78656040518060800160405280878581518110610cf057610cf06112fe565b60200260200101518152602001336001600160a01b031681526020016001600160801b03801681526020016001600160801b0380168152506040518263ffffffff1660e01b8152600401610d449190611268565b60408051808303816000875af1158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8691906112ab565b60408051838152602081018390529295509093507fef4bbc540dccb586b2feb24442d2744b2163eeda96084969a325397cc39030fe910160405180910390a180610dcf8161132a565b915050610c9b565b50505050565b6000546001600160a01b03163314610e075760405162461bcd60e51b81526004016103d990611233565b6001600160a01b038116610e6c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b892869291600091610f57918516908490610fd4565b8051909150156109b85780806020019051810190610f759190611489565b6109b85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103d9565b6060610fe38484600085610feb565b949350505050565b60608247101561104c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103d9565b600080866001600160a01b0316858760405161106891906114cf565b60006040518083038185875af1925050503d80600081146110a5576040519150601f19603f3d011682016040523d82523d6000602084013e6110aa565b606091505b50915091506110bb878383876110c6565b979650505050505050565b6060831561113557825160000361112e576001600160a01b0385163b61112e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103d9565b5081610fe3565b610fe3838381511561114a5781518083602001fd5b8060405162461bcd60e51b81526004016103d991906114eb565b60006020828403121561117657600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156111b557835183529284019291840191600101611199565b50909695505050505050565b6001600160a01b038116811461047457600080fd5b600080604083850312156111e957600080fd5b82356111f4816111c1565b91506020830135611204816111c1565b809150509250929050565b60006020828403121561122157600080fd5b813561122c816111c1565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b600080604083850312156112be57600080fd5b505080516020909101519092909150565b6000602082840312156112e157600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161133c5761133c611314565b5060010190565b805161134e816111c1565b919050565b805162ffffff8116811461134e57600080fd5b8051600281900b811461134e57600080fd5b80516001600160801b038116811461134e57600080fd5b6000806000806000806000806000806000806101808d8f0312156113b257600080fd5b8c516bffffffffffffffffffffffff811681146113ce57600080fd5b9b506113dc60208e01611343565b9a506113ea60408e01611343565b99506113f860608e01611343565b985061140660808e01611353565b975061141460a08e01611366565b965061142260c08e01611366565b955061143060e08e01611378565b94506101008d015193506101208d0151925061144f6101408e01611378565b915061145e6101608e01611378565b90509295989b509295989b509295989b565b8082018082111561148357611483611314565b92915050565b60006020828403121561149b57600080fd5b8151801515811461122c57600080fd5b60005b838110156114c65781810151838201526020016114ae565b50506000910152565b600082516114e18184602087016114ab565b9190910192915050565b602081526000825180602084015261150a8160408501602087016114ab565b601f01601f1916919091016040019291505056fea26469706673582212203ebf9c55728b67d9d1c93844fe39306f538df6ae3d441ab4d6b0dce5fd94195664736f6c63430008130033
Deployed Bytecode Sourcemap
16884:4446:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17129:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;17129:41:0;;;;;;;;18915:195;;;;;;;;;;;;;:::i;:::-;;18481:426;;;;;;;;;;-1:-1:-1;18481:426:0;;;;;:::i;:::-;;:::i;17541:346::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16929:52::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1207:32:1;;;1189:51;;1177:2;1162:18;16929:52:0;1018:228:1;19430:657:0;;;;;;;;;;-1:-1:-1;19430:657:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1640:15:1;;;1622:34;;1692:15;;;;1687:2;1672:18;;1665:43;1756:8;1744:21;;;1724:18;;;1717:49;;;;1813:1;1802:21;;;1797:2;1782:18;;1775:49;1861:21;;1855:3;1840:19;;1833:50;-1:-1:-1;;;;;1973:15:1;;;1602:3;1952:19;;1945:44;2026:15;;;2020:3;2005:19;;1998:44;2079:15;2073:3;2058:19;;2051:44;1571:3;1556:19;19430:657:0;1251:850:1;20469:281:0;;;;;;;;;;;;;:::i;2229:150::-;;;;;;;;;;;;;:::i;19118:304::-;;;;;;;;;;-1:-1:-1;19118:304:0;;;;;:::i;:::-;;:::i;2015:79::-;;;;;;;;;;-1:-1:-1;2053:7:0;2080:6;-1:-1:-1;;;;;2080:6:0;2015:79;;20758:338;;;;;;;;;;-1:-1:-1;20758:338:0;;;;;:::i;:::-;;:::i;20095:366::-;;;;;;;;;;-1:-1:-1;20095:366:0;;;;;:::i;:::-;;:::i;21104:223::-;;;;;;;;;;;;;:::i;17278:34::-;;;;;;;;;;;;;;;;17177:51;;;;;;;;;;;;;;;;17895:577;;;;;;;;;;;;;:::i;2387:244::-;;;;;;;;;;-1:-1:-1;2387:244:0;;;;;:::i;:::-;;:::i;17235:36::-;;;;;;;;;;-1:-1:-1;17235:36:0;;;;;;;;;;;3260:14:1;;3253:22;3235:41;;3223:2;3208:18;17235:36:0;3095:187:1;18915:195:0;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;;;;;;;;;19001:49:::1;::::0;18964:12:::1;::::0;19001:10:::1;::::0;19024:21:::1;::::0;18964:12;19001:49;18964:12;19001:49;19024:21;19001:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18987:63;;;;;19069:7;19061:41;;;::::0;-1:-1:-1;;;19061:41:0;;4060:2:1;19061:41:0::1;::::0;::::1;4042:21:1::0;4099:2;4079:18;;;4072:30;-1:-1:-1;;;4118:18:1;;;4111:51;4179:18;;19061:41:0::1;3858:345:1::0;19061:41:0::1;18953:157;18915:195::o:0;18481:426::-;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;18662:190:::1;::::0;;::::1;::::0;::::1;::::0;;;;;18742:10:::1;18662:190;::::0;::::1;::::0;-1:-1:-1;;;;;18662:190:0;;;;;;;;;;18636:217;;-1:-1:-1;;;18636:217:0;;18563:15:::1;::::0;;;-1:-1:-1;;;;;18636:17:0::1;:25;::::0;::::1;::::0;:217:::1;::::0;18662:190;18636:217:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18869:30;::::0;;5209:25:1;;;5265:2;5250:18;;5243:34;;;18615:238:0;;-1:-1:-1;18615:238:0;;-1:-1:-1;18869:30:0::1;::::0;5182:18:1;18869:30:0::1;;;;;;;18552:355;;18481:426:::0;:::o;17541:346::-;17660:42;;-1:-1:-1;;;17660:42:0;;17696:4;17660:42;;;1189:51:1;17590:16:0;;17618:25;;-1:-1:-1;;;;;17660:17:0;:27;;;;1162:18:1;;17660:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17646:57;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17646:57:0;;17618:85;;17718:9;17714:140;17737:8;:15;17733:1;:19;17714:140;;;17787:55;;-1:-1:-1;;;17787:55:0;;17833:4;17787:55;;;5783:51:1;5850:18;;;5843:34;;;17787:17:0;-1:-1:-1;;;;;17787:37:0;;;;5756:18:1;;17787:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17773:8;17782:1;17773:11;;;;;;;;:::i;:::-;;;;;;;;;;:69;17754:3;;;;:::i;:::-;;;;17714:140;;;-1:-1:-1;17871:8:0;17541:346;-1:-1:-1;17541:346:0:o;19430:657::-;19508:14;19537;19566:10;19591:15;19621;19651:17;19683:19;19717;20034:17;-1:-1:-1;;;;;20034:27:0;;20062:8;20034:37;;;;;;;;;;;;;160:25:1;;148:2;133:18;;14:177;20034:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19756:315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19430:657;;;;;;;;;:::o;20469:281::-;20551:24;;20529:7;;20551:24;;20548:195;;;20627:25;;20598:26;;:54;;;;:::i;:::-;20591:61;;20469:281;:::o;20548:195::-;-1:-1:-1;20701:1:0;;20469:281::o;2229:150::-;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;2338:1:::1;2322:6:::0;;2301:40:::1;::::0;-1:-1:-1;;;;;2322:6:0;;::::1;::::0;2301:40:::1;::::0;2338:1;;2301:40:::1;2369:1;2352:19:::0;;-1:-1:-1;;;;;;2352:19:0::1;::::0;;2229:150::o;19118:304::-;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19215:20:0;::::1;19207:59;;;::::0;-1:-1:-1;;;19207:59:0;;8494:2:1;19207:59:0::1;::::0;::::1;8476:21:1::0;8533:2;8513:18;;;8506:30;8572:28;8552:18;;;8545:56;8618:18;;19207:59:0::1;8292:350:1::0;19207:59:0::1;19304:39;::::0;-1:-1:-1;;;19304:39:0;;19337:4:::1;19304:39;::::0;::::1;1189:51:1::0;19277:24:0::1;::::0;-1:-1:-1;;;;;19304:24:0;::::1;::::0;::::1;::::0;1162:18:1;;19304:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19277:66;;19354:60;19384:6;19392:3;19397:16;19354:22;:60::i;:::-;19196:226;19118:304:::0;;:::o;20758:338::-;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;20857:29:::1;:27;:29::i;:::-;20838:15;:48;;:85;;;;;20922:1;20890:29;:27;:29::i;:::-;:33;20838:85;20830:120;;;::::0;-1:-1:-1;;;20830:120:0;;8849:2:1;20830:120:0::1;::::0;::::1;8831:21:1::0;8888:2;8868:18;;;8861:30;-1:-1:-1;;;8907:18:1;;;8900:52;8969:18;;20830:120:0::1;8647:346:1::0;20830:120:0::1;21021:19;::::0;;20961:80:::1;::::0;-1:-1:-1;;;20961:80:0;;21009:4:::1;20961:80:::0;;::::1;9238:34:1::0;;;;-1:-1:-1;;;;;9308:15:1;;;9288:18;;;9281:43;9340:18;;;9333:34;;;;20969:17:0::1;20961:39;::::0;::::1;::::0;9173:18:1;;20961:80:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21057:31;21068:19;;21057:31;;;;160:25:1::0;;148:2;133:18;;14:177;21057:31:0::1;;;;;;;;20758:338:::0;:::o;20095:366::-;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;20181:24:::1;::::0;::::1;;20180:25;20172:87;;;::::0;-1:-1:-1;;;20172:87:0;;9580:2:1;20172:87:0::1;::::0;::::1;9562:21:1::0;9619:2;9599:18;;;9592:30;9658:34;9638:18;;;9631:62;-1:-1:-1;;;9709:18:1;;;9702:47;9766:19;;20172:87:0::1;9378:413:1::0;20172:87:0::1;20299:15;20270:26;:44:::0;;;20325:24:::1;:31:::0;;-1:-1:-1;;20325:31:0::1;::::0;;::::1;::::0;;20367:19:::1;:30:::0;;;20413:40:::1;::::0;160:25:1;;;20413:40:0::1;::::0;148:2:1;133:18;20413:40:0::1;14:177:1::0;21104:223:0;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;21169:24:::1;:32:::0;;-1:-1:-1;;21169:32:0::1;::::0;;21196:5:::1;21169:32:::0;21212:30;;;21253:19:::1;:23:::0;;;21292:27:::1;::::0;::::1;::::0;21196:5;21292:27:::1;21104:223::o:0;17895:577::-;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;17959:30:::1;17992:18;:16;:18::i;:::-;17959:51;;18021:15;18047::::0;18077:9:::1;18073:392;18096:13;:20;18092:1;:24;18073:392;;;18158:17;-1:-1:-1::0;;;;;18158:25:0::1;;18184:218;;;;;;;;18234:13;18248:1;18234:16;;;;;;;;:::i;:::-;;;;;;;18184:218;;;;18280:10;-1:-1:-1::0;;;;;18184:218:0::1;;;;;-1:-1:-1::0;;;;;18184:218:0;::::1;;;;;-1:-1:-1::0;;;;;18184:218:0;::::1;;;::::0;18158:245:::1;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18423:30;::::0;;5209:25:1;;;5265:2;5250:18;;5243:34;;;18137:266:0;;-1:-1:-1;18137:266:0;;-1:-1:-1;18423:30:0::1;::::0;5182:18:1;18423:30:0::1;;;;;;;18118:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18073:392;;;;17948:524;;;17895:577::o:0;2387:244::-;2142:6;;-1:-1:-1;;;;;2142:6:0;306:10;2142:22;2134:67;;;;-1:-1:-1;;;2134:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2476:22:0;::::1;2468:73;;;::::0;-1:-1:-1;;;2468:73:0;;9998:2:1;2468:73:0::1;::::0;::::1;9980:21:1::0;10037:2;10017:18;;;10010:30;10076:34;10056:18;;;10049:62;-1:-1:-1;;;10127:18:1;;;10120:36;10173:19;;2468:73:0::1;9796:402:1::0;2468:73:0::1;2578:6;::::0;;2557:38:::1;::::0;-1:-1:-1;;;;;2557:38:0;;::::1;::::0;2578:6;::::1;::::0;2557:38:::1;::::0;::::1;2606:6;:17:::0;;-1:-1:-1;;;;;;2606:17:0::1;-1:-1:-1::0;;;;;2606:17:0;;;::::1;::::0;;;::::1;::::0;;2387:244::o;14748:211::-;14892:58;;;-1:-1:-1;;;;;5801:32:1;;;14892:58:0;;;5783:51:1;5850:18;;;;5843:34;;;14892:58:0;;;;;;;;;;5756:18:1;;;;14892:58:0;;;;;;;;-1:-1:-1;;;;;14892:58:0;-1:-1:-1;;;14892:58:0;;;15074:69;;;;;;;;;;;;;;;;14865:86;;14885:5;;14892:58;-1:-1:-1;;15074:69:0;;:27;;;14892:58;;15074:27;:69::i;:::-;15158:17;;15048:95;;-1:-1:-1;15158:21:0;15154:139;;15215:10;15204:30;;;;;;;;;;;;:::i;:::-;15196:85;;;;-1:-1:-1;;;15196:85:0;;10687:2:1;15196:85:0;;;10669:21:1;10726:2;10706:18;;;10699:30;10765:34;10745:18;;;10738:62;-1:-1:-1;;;10816:18:1;;;10809:40;10866:19;;15196:85:0;10485:406:1;9251:229:0;9388:12;9420:52;9442:6;9450:4;9456:1;9459:12;9420:21;:52::i;:::-;9413:59;9251:229;-1:-1:-1;;;;9251:229:0:o;10371:455::-;10541:12;10599:5;10574:21;:30;;10566:81;;;;-1:-1:-1;;;10566:81:0;;11098:2:1;10566:81:0;;;11080:21:1;11137:2;11117:18;;;11110:30;11176:34;11156:18;;;11149:62;-1:-1:-1;;;11227:18:1;;;11220:36;11273:19;;10566:81:0;10896:402:1;10566:81:0;10659:12;10673:23;10700:6;-1:-1:-1;;;;;10700:11:0;10719:5;10726:4;10700:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10658:73;;;;10749:69;10776:6;10784:7;10793:10;10805:12;10749:26;:69::i;:::-;10742:76;10371:455;-1:-1:-1;;;;;;;10371:455:0:o;12944:644::-;13129:12;13158:7;13154:427;;;13186:10;:17;13207:1;13186:22;13182:290;;-1:-1:-1;;;;;8692:19:0;;;13396:60;;;;-1:-1:-1;;;13396:60:0;;12052:2:1;13396:60:0;;;12034:21:1;12091:2;12071:18;;;12064:30;12130:31;12110:18;;;12103:59;12179:18;;13396:60:0;11850:353:1;13396:60:0;-1:-1:-1;13493:10:0;13486:17;;13154:427;13536:33;13544:10;13556:12;14291:17;;:21;14287:388;;14523:10;14517:17;14580:15;14567:10;14563:2;14559:19;14552:44;14287:388;14650:12;14643:20;;-1:-1:-1;;;14643:20:0;;;;;;;;:::i;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:632::-;552:2;604:21;;;674:13;;577:18;;;696:22;;;523:4;;552:2;775:15;;;;749:2;734:18;;;523:4;818:169;832:6;829:1;826:13;818:169;;;893:13;;881:26;;962:15;;;;927:12;;;;854:1;847:9;818:169;;;-1:-1:-1;1004:3:1;;381:632;-1:-1:-1;;;;;;381:632:1:o;2106:131::-;-1:-1:-1;;;;;2181:31:1;;2171:42;;2161:70;;2227:1;2224;2217:12;2242:388;2310:6;2318;2371:2;2359:9;2350:7;2346:23;2342:32;2339:52;;;2387:1;2384;2377:12;2339:52;2426:9;2413:23;2445:31;2470:5;2445:31;:::i;:::-;2495:5;-1:-1:-1;2552:2:1;2537:18;;2524:32;2565:33;2524:32;2565:33;:::i;:::-;2617:7;2607:17;;;2242:388;;;;;:::o;2843:247::-;2902:6;2955:2;2943:9;2934:7;2930:23;2926:32;2923:52;;;2971:1;2968;2961:12;2923:52;3010:9;2997:23;3029:31;3054:5;3029:31;:::i;:::-;3079:5;2843:247;-1:-1:-1;;;2843:247:1:o;3287:356::-;3489:2;3471:21;;;3508:18;;;3501:30;3567:34;3562:2;3547:18;;3540:62;3634:2;3619:18;;3287:356::o;4208:572::-;4433:13;;4415:32;;4507:4;4495:17;;;4489:24;-1:-1:-1;;;;;4485:50:1;4463:20;;;4456:80;4583:4;4571:17;;;4565:24;-1:-1:-1;;;;;4680:21:1;;;4658:20;;;4651:51;;;;4762:4;4750:17;;;4744:24;4740:33;4718:20;;;4711:63;;;;4402:3;4387:19;;4208:572::o;4785:245::-;4864:6;4872;4925:2;4913:9;4904:7;4900:23;4896:32;4893:52;;;4941:1;4938;4931:12;4893:52;-1:-1:-1;;4964:16:1;;5020:2;5005:18;;;4999:25;4964:16;;4999:25;;-1:-1:-1;4785:245:1:o;5288:184::-;5358:6;5411:2;5399:9;5390:7;5386:23;5382:32;5379:52;;;5427:1;5424;5417:12;5379:52;-1:-1:-1;5450:16:1;;5288:184;-1:-1:-1;5288:184:1:o;5477:127::-;5538:10;5533:3;5529:20;5526:1;5519:31;5569:4;5566:1;5559:15;5593:4;5590:1;5583:15;5888:127;5949:10;5944:3;5940:20;5937:1;5930:31;5980:4;5977:1;5970:15;6004:4;6001:1;5994:15;6020:127;6081:10;6076:3;6072:20;6069:1;6062:31;6112:4;6109:1;6102:15;6136:4;6133:1;6126:15;6152:135;6191:3;6212:17;;;6209:43;;6232:18;;:::i;:::-;-1:-1:-1;6279:1:1;6268:13;;6152:135::o;6292:138::-;6371:13;;6393:31;6371:13;6393:31;:::i;:::-;6292:138;;;:::o;6435:165::-;6513:13;;6566:8;6555:20;;6545:31;;6535:59;;6590:1;6587;6580:12;6605:164;6682:13;;6735:1;6724:20;;;6714:31;;6704:59;;6759:1;6756;6749:12;6774:192;6853:13;;-1:-1:-1;;;;;6895:46:1;;6885:57;;6875:85;;6956:1;6953;6946:12;6971:1186;7134:6;7142;7150;7158;7166;7174;7182;7190;7198;7206;7214:7;7223;7277:3;7265:9;7256:7;7252:23;7248:33;7245:53;;;7294:1;7291;7284:12;7245:53;7326:9;7320:16;7376:26;7369:5;7365:38;7358:5;7355:49;7345:77;;7418:1;7415;7408:12;7345:77;7441:5;-1:-1:-1;7465:49:1;7510:2;7495:18;;7465:49;:::i;:::-;7455:59;;7533:49;7578:2;7567:9;7563:18;7533:49;:::i;:::-;7523:59;;7601:49;7646:2;7635:9;7631:18;7601:49;:::i;:::-;7591:59;;7669:49;7713:3;7702:9;7698:19;7669:49;:::i;:::-;7659:59;;7737:48;7780:3;7769:9;7765:19;7737:48;:::i;:::-;7727:58;;7804:48;7847:3;7836:9;7832:19;7804:48;:::i;:::-;7794:58;;7871:50;7916:3;7905:9;7901:19;7871:50;:::i;:::-;7861:60;;7961:3;7950:9;7946:19;7940:26;7930:36;;8006:3;7995:9;7991:19;7985:26;7975:36;;8031:50;8076:3;8065:9;8061:19;8031:50;:::i;:::-;8020:61;;8101:50;8146:3;8135:9;8131:19;8101:50;:::i;:::-;8090:61;;6971:1186;;;;;;;;;;;;;;:::o;8162:125::-;8227:9;;;8248:10;;;8245:36;;;8261:18;;:::i;:::-;8162:125;;;;:::o;10203:277::-;10270:6;10323:2;10311:9;10302:7;10298:23;10294:32;10291:52;;;10339:1;10336;10329:12;10291:52;10371:9;10365:16;10424:5;10417:13;10410:21;10403:5;10400:32;10390:60;;10446:1;10443;10436:12;11303:250;11388:1;11398:113;11412:6;11409:1;11406:13;11398:113;;;11488:11;;;11482:18;11469:11;;;11462:39;11434:2;11427:10;11398:113;;;-1:-1:-1;;11545:1:1;11527:16;;11520:27;11303:250::o;11558:287::-;11687:3;11725:6;11719:13;11741:66;11800:6;11795:3;11788:4;11780:6;11776:17;11741:66;:::i;:::-;11823:16;;;;;11558:287;-1:-1:-1;;11558:287:1:o;12208:396::-;12357:2;12346:9;12339:21;12320:4;12389:6;12383:13;12432:6;12427:2;12416:9;12412:18;12405:34;12448:79;12520:6;12515:2;12504:9;12500:18;12495:2;12487:6;12483:15;12448:79;:::i;:::-;12588:2;12567:15;-1:-1:-1;;12563:29:1;12548:45;;;;12595:2;12544:54;;12208:396;-1:-1:-1;;12208:396:1:o
Swarm Source
ipfs://3ebf9c55728b67d9d1c93844fe39306f538df6ae3d441ab4d6b0dce5fd941956
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.