Overview
ETH Balance
0.12 ETH
Eth Value
$411.82 (@ $3,431.87/ETH)More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unlock Tokens | 18393491 | 269 days ago | IN | 0 ETH | 0.00212009 | ||||
Unlock Tokens | 18345955 | 275 days ago | IN | 0 ETH | 0.0003214 | ||||
Lock Tokens | 18339033 | 276 days ago | IN | 0.02 ETH | 0.00099011 | ||||
Lock Tokens | 18264669 | 287 days ago | IN | 0.02 ETH | 0.00357231 | ||||
Unlock Tokens | 18255628 | 288 days ago | IN | 0 ETH | 0.00024415 | ||||
Lock Tokens | 18086637 | 312 days ago | IN | 0.02 ETH | 0.00518755 | ||||
Lock Tokens | 17678805 | 369 days ago | IN | 0.02 ETH | 0.00984887 | ||||
Lock Tokens | 17678673 | 369 days ago | IN | 0.02 ETH | 0.01019459 | ||||
Lock Tokens | 17460395 | 399 days ago | IN | 0.02 ETH | 0.00121403 | ||||
Take Service Fee | 17460394 | 399 days ago | IN | 0 ETH | 0.00061292 | ||||
Extend Lock | 17460388 | 399 days ago | IN | 0 ETH | 0.00053721 | ||||
Lock Tokens | 17460374 | 399 days ago | IN | 0.02 ETH | 0.00426008 | ||||
0x60806040 | 17460329 | 399 days ago | IN | Create: Locker | 0 ETH | 0.0289602 |
Latest 7 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18339033 | 276 days ago | Contract Creation | 0 ETH | |||
18264669 | 287 days ago | Contract Creation | 0 ETH | |||
18086637 | 312 days ago | Contract Creation | 0 ETH | |||
17678805 | 369 days ago | Contract Creation | 0 ETH | |||
17678673 | 369 days ago | Contract Creation | 0 ETH | |||
17460394 | 399 days ago | 0.02 ETH | ||||
17460374 | 399 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
Locker
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-12 */ //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.10; /// @title A Token Locker contract. /// @author Doe John. /// @notice You can use this contract to lock X amount of tokens for Y amount of time. /// @dev Simple and optimized functions for minimum gas spend. /// @dev Doesn't emit events on purpose to save gas! contract Locker { /// @notice Lock contains tokenholder address and unlock timestamp /// @param holder The token holder sub-contract address /// @param endTime The unlock timestamp struct Lock { address holder; //Block.timestamp to reach uint64: Sun Jul 21 2554 23:34:33 GMT+0000 //Can scale down to uint64 to fit 1 slot uint64 endTime; } /// @notice User Address To tokenAddress To Lock mapping(address => mapping(address => Lock)) public lockers; /// @notice User Address To List of Tokens Locked mapping(address => address[]) public addressToTokensLocked; /// @dev Owner used for serviceFee withdraw address owner = msg.sender; /// @dev Custom Errors error InsufficientServiceFeePayment(); error ZeroTransferAmount(); error TryingToUnlockBeforeUnlockTime(); error WantToUnlockMoreThanLocked(); error TransferFromCallFailed(); error MustHaveALocker(); /// @notice Lock 'amount' of token for 'duration' time. /// @param token The token address to be locked. /// @param amount The amount of 'token' to be locked. /// @param duration The lock duration in seconds. function lockTokens( address token, uint128 amount, uint64 duration ) external payable { //Service fee must be 0.02 ETH if (msg.value != 2e16) revert InsufficientServiceFeePayment(); //Does the user have a token holder for this token address already ? if (lockers[msg.sender][token].endTime != 0) { //User has already a tokenHolder //If duration is not 0. This function serves also as duration extend if (duration != 0) lockers[msg.sender][token].endTime += duration; //Transfer tokens to the tokenHolder safeTransferFrom( token, msg.sender, lockers[msg.sender][token].holder, amount ); } else { //User doesn't have a tokenHolder //Create new tokenHolder address holder = address(new tokenHolder(token)); //Update State | Register duration and tokenHolder for this token address lockers[msg.sender][token].endTime = uint64(block.timestamp) + duration; lockers[msg.sender][token].holder = holder; addressToTokensLocked[msg.sender].push(token); //Transfer tokens to the tokenHolder safeTransferFrom(token, msg.sender, holder, amount); } } /// @notice Unlock 'amount' of 'token' from an already existing locker. /// @dev Unlock works with token.balanceOf(holder) for always accurate balances. /// @param token The token address to be locked. /// @param amount The amount of 'token' to be locked.s function unlockTokens(address token, uint256 amount) external { //Get the tokenHolder address for 'token' address lockHolder = lockers[msg.sender][token].holder; //Expiry check if (uint64(block.timestamp) <= lockers[msg.sender][token].endTime) revert TryingToUnlockBeforeUnlockTime(); //Amount check if (amount > IERC20(token).balanceOf(lockHolder)) revert WantToUnlockMoreThanLocked(); //Transfer tokens out from tokenHolder to msg.sender safeTransferFrom(token, lockHolder, msg.sender, amount); } /// @notice SafeTransferFrom function copied from Openzeppelin /// @dev Reverts on failed call OR return empty return data OR return data = "false" /// @param token The token address to be transferred. /// @param from The transfer sender address. (Tokens will be taken from this) /// @param to The transfer recipient address. (Tokens will be give to this) /// @param amount The amount of 'token' to be transferred. function safeTransferFrom( address token, address from, address to, uint256 amount ) internal { //If transfer amount is 0 if (amount == 0) revert ZeroTransferAmount(); //Execute the transferFrom call (bool suc, bytes memory returndata) = address(token).call( abi.encodeCall(IERC20.transferFrom, (from, to, amount)) ); //If call failed if (!suc) revert TransferFromCallFailed(); //If return data is empty OR return data is bool and it is false require( returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } /// @notice Extend duration of already existing locker for 'token' with 'plusDuration' seconds. /// @dev Must have a locker to interact with this function. /// @param token The token address for which locker duration will be extended. /// @param plusDuration The duration in seconds which is added to locker unlock timestamp. function extendLock(address token, uint64 plusDuration) external { //Check if user has a locker for this 'token' if (lockers[msg.sender][token].endTime == 0) revert MustHaveALocker(); //Update state lockers[msg.sender][token].endTime += plusDuration; } /// @notice Transfers the collected service fees to contract creator /// @dev Most likely will remain EOA function takeServiceFee() external { owner.call{value: address(this).balance}(""); } //Utils function getLocker(address who, address token) external view returns ( address holderContract, uint128 endTime, uint256 lockedAmt ) { return ( lockers[who][token].holder, lockers[who][token].endTime, IERC20(token).balanceOf(lockers[who][token].holder) ); } function getAllTokensLockedByUser(address user) external view returns (address[] memory tokensLocked) { tokensLocked = addressToTokensLocked[user]; } function getAllLockersForAddress(address user) external view returns ( string[] memory tokenNames, address[] memory tokensForAdr, address[] memory holderContract, uint128[] memory endTime, uint256[] memory lockedAmt ) { tokensForAdr = this.getAllTokensLockedByUser(user); uint128 size = uint128(tokensForAdr.length); holderContract = new address[](size); endTime = new uint128[](size); lockedAmt = new uint256[](size); tokenNames = new string[](size); for (uint128 i; i < size; ) { (holderContract[i], endTime[i], lockedAmt[i]) = this.getLocker( user, tokensForAdr[i] ); tokenNames[i] = IERC20(tokensForAdr[i]).name(); unchecked { ++i; } } } function durationUtil(uint256 val, uint256 flag) external pure returns (uint256 dur) { if (flag == 1) { dur = val * 1; } if (flag == 2) { dur = val * 1 minutes; } if (flag == 3) { dur = val * 1 hours; } if (flag == 4) { dur = val * 1 days; } if (flag == 5) { dur = val * 30 days; } if (flag == 6) { dur = val * 12 * 30 days; } } function getSecondsTillUnlock(address token, address who) external view returns (uint256 left) { return lockers[who][token].endTime >= uint128(block.timestamp) ? lockers[who][token].endTime - uint128(block.timestamp) : 0; } } /// @title Token Holder sub-contract. /// @notice Created by Token Locker for each new token address locked per user. /// @notice A token holder is connected to token address. If user already has a token holder for token address, a new one won't be created. /// @dev Approves deployer (Token Locker) with type(uint256).max value. This ensures that Token Locker can transfer tokens out upon 'unlockTokens'. contract tokenHolder { /// @notice Doesn't support non-standard approval tokens such as USDT and thats fine /// @dev Token Locker operates with token.balanceOf(tokenHolder) for always accurate balances /// @dev Suppports all kinds of tokens - positive/negative rebases, reflection tokens and such /// @param _t The token address for which this contract is created for constructor(address _t) payable { IERC20(_t).approve(msg.sender, type(uint256).max); } } //////////Interface interface IERC20 { function balanceOf(address account) external view returns (uint256); function name() external view returns (string memory name_); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"InsufficientServiceFeePayment","type":"error"},{"inputs":[],"name":"MustHaveALocker","type":"error"},{"inputs":[],"name":"TransferFromCallFailed","type":"error"},{"inputs":[],"name":"TryingToUnlockBeforeUnlockTime","type":"error"},{"inputs":[],"name":"WantToUnlockMoreThanLocked","type":"error"},{"inputs":[],"name":"ZeroTransferAmount","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressToTokensLocked","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"},{"internalType":"uint256","name":"flag","type":"uint256"}],"name":"durationUtil","outputs":[{"internalType":"uint256","name":"dur","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint64","name":"plusDuration","type":"uint64"}],"name":"extendLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAllLockersForAddress","outputs":[{"internalType":"string[]","name":"tokenNames","type":"string[]"},{"internalType":"address[]","name":"tokensForAdr","type":"address[]"},{"internalType":"address[]","name":"holderContract","type":"address[]"},{"internalType":"uint128[]","name":"endTime","type":"uint128[]"},{"internalType":"uint256[]","name":"lockedAmt","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAllTokensLockedByUser","outputs":[{"internalType":"address[]","name":"tokensLocked","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"getLocker","outputs":[{"internalType":"address","name":"holderContract","type":"address"},{"internalType":"uint128","name":"endTime","type":"uint128"},{"internalType":"uint256","name":"lockedAmt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"who","type":"address"}],"name":"getSecondsTillUnlock","outputs":[{"internalType":"uint256","name":"left","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"lockTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"lockers","outputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint64","name":"endTime","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeServiceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unlockTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600280546001600160a01b03191633179055348015610021575f80fd5b50611c078061002f5f395ff3fe608060405260043610620000c7575f3560e01c80639d564d9a116200007a578063e07c9bd81162000052578063e07c9bd814620002e6578063f9a34e26146200030a578063fdb607c6146200033d575f80fd5b80639d564d9a14620001e4578063a8ca20511462000208578063c7a339b914620002af575f80fd5b80636dbaa1f511620000ae5780636dbaa1f5146200018157806384d29130146200019a578063858635b514620001b1575f80fd5b80634b97568b14620000cb5780635a209e9d1462000119575b5f80fd5b348015620000d7575f80fd5b50620000ef620000e9366004620013ef565b62000361565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801562000125575f80fd5b506200013d620001373660046200141c565b620003a3565b6040805173ffffffffffffffffffffffffffffffffffffffff90941684526fffffffffffffffffffffffffffffffff90921660208401529082015260600162000110565b620001986200019236600462001493565b62000492565b005b348015620001a6575f80fd5b506200019862000767565b348015620001bd575f80fd5b50620001d5620001cf3660046200141c565b620007bf565b60405190815260200162000110565b348015620001f0575f80fd5b506200019862000202366004620013ef565b620008af565b34801562000214575f80fd5b5062000279620002263660046200141c565b5f60208181529281526040808220909352908152205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520162000110565b348015620002bb575f80fd5b50620002d3620002cd366004620014de565b62000a1b565b60405162000110959493929190620015e3565b348015620002f2575f80fd5b50620001d562000304366004620016f6565b62000f3b565b34801562000316575f80fd5b506200032e62000328366004620014de565b62000fea565b60405162000110919062001717565b34801562000349575f80fd5b50620001986200035b3660046200172b565b62001079565b6001602052815f5260405f2081815481106200037b575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff8281165f9081526020818152604080832085851680855292528083205490517f70a0823100000000000000000000000000000000000000000000000000000000815293811660048501819052929384938493909274010000000000000000000000000000000000000000900467ffffffffffffffff16916370a0823190602401602060405180830381865afa15801562000454573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200047a919062001763565b91945067ffffffffffffffff16925090509250925092565b3466470de4df82000014620004d3576040517fe7c9912500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205474010000000000000000000000000000000000000000900467ffffffffffffffff16156200061c5767ffffffffffffffff811615620005c557335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080548291906014906200059e90849074010000000000000000000000000000000000000000900467ffffffffffffffff16620017a8565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b335f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8089168552925290912054620006179286929091166fffffffffffffffffffffffffffffffff861662001190565b505050565b5f836040516200062c90620013bc565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801562000663573d5f803e3d5ffd5b509050620006728242620017a8565b335f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a811680865291845282852080549189167fffffffffffffffffffffffff000000000000000000000000000000000000000067ffffffffffffffff99909916740100000000000000000000000000000000000000000289167fffffffff000000000000000000000000000000000000000000000000000000009093169290921791909117905584845260018084529184208054928301815584529190922090910180549093161790915562000761908590836fffffffffffffffffffffffffffffffff871662001190565b50505050565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169047905f81818185875af1925050503d805f811462000617576040519150601f19603f3d011682016040523d82523d5f602084013e505050565b73ffffffffffffffffffffffffffffffffffffffff8181165f90815260208181526040808320938616835292905290812054426fffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090910467ffffffffffffffff16101562000835575f62000894565b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260208181526040808320938716835292905220546200089490429074010000000000000000000000000000000000000000900467ffffffffffffffff16620017d3565b6fffffffffffffffffffffffffffffffff1690505b92915050565b335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86811685529252909120549081169074010000000000000000000000000000000000000000900467ffffffffffffffff908116429091161162000942576040517fb332ac5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301528416906370a0823190602401602060405180830381865afa158015620009ad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620009d3919062001763565b82111562000a0d576040517fcc6d99b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620006178382338562001190565b6040517ff9a34e2600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526060908190819081908190309063f9a34e26906024015f60405180830381865afa15801562000a8e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000ad591908101906200187e565b80519094506fffffffffffffffffffffffffffffffff811667ffffffffffffffff81111562000b085762000b08620017ff565b60405190808252806020026020018201604052801562000b32578160200160208202803683370190505b509350806fffffffffffffffffffffffffffffffff1667ffffffffffffffff81111562000b635762000b63620017ff565b60405190808252806020026020018201604052801562000b8d578160200160208202803683370190505b509250806fffffffffffffffffffffffffffffffff1667ffffffffffffffff81111562000bbe5762000bbe620017ff565b60405190808252806020026020018201604052801562000be8578160200160208202803683370190505b509150806fffffffffffffffffffffffffffffffff1667ffffffffffffffff81111562000c195762000c19620017ff565b60405190808252806020026020018201604052801562000c4e57816020015b606081526020019060019003908162000c385790505b5095505f5b816fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff16101562000f30573073ffffffffffffffffffffffffffffffffffffffff16635a209e9d8988846fffffffffffffffffffffffffffffffff168151811062000cc45762000cc46200192c565b60200260200101516040518363ffffffff1660e01b815260040162000d0c92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b606060405180830381865afa15801562000d28573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000d4e919062001959565b87846fffffffffffffffffffffffffffffffff168151811062000d755762000d756200192c565b6020026020010187856fffffffffffffffffffffffffffffffff168151811062000da35762000da36200192c565b6020026020010187866fffffffffffffffffffffffffffffffff168151811062000dd15762000dd16200192c565b6020026020010183815250836fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152508373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505085816fffffffffffffffffffffffffffffffff168151811062000e5e5762000e5e6200192c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801562000eae573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000ef591908101906200199e565b87826fffffffffffffffffffffffffffffffff168151811062000f1c5762000f1c6200192c565b602090810291909101015260010162000c53565b505091939590929450565b5f8160010362000f555762000f5283600162001a56565b90505b8160020362000f6e5762000f6b83603c62001a56565b90505b8160030362000f885762000f8583610e1062001a56565b90505b8160040362000fa35762000fa0836201518062001a56565b90505b8160050362000fbe5762000fbb8362278d0062001a56565b90505b81600603620008a95762000fd483600c62001a56565b62000fe39062278d0062001a56565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160209081526040918290208054835181840281018401909452808452606093928301828280156200106d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001041575b50505050509050919050565b335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205474010000000000000000000000000000000000000000900467ffffffffffffffff16900362001102576040517f12d77cd500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080548291906014906200116690849074010000000000000000000000000000000000000000900467ffffffffffffffff16620017a8565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b805f03620011ca576040517f29c5442900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390525f918291871690608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790525162001286919062001a70565b5f604051808303815f865af19150503d805f8114620012c1576040519150601f19603f3d011682016040523d82523d5f602084013e620012c6565b606091505b50915091508162001303576040517f89325b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805115806200132357508080602001905181019062001323919062001a8d565b620013b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840160405180910390fd5b505050505050565b6101238062001aaf83390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620013ec575f80fd5b50565b5f806040838503121562001401575f80fd5b82356200140e81620013ca565b946020939093013593505050565b5f80604083850312156200142e575f80fd5b82356200143b81620013ca565b915060208301356200144d81620013ca565b809150509250929050565b6fffffffffffffffffffffffffffffffff81168114620013ec575f80fd5b803567ffffffffffffffff811681146200148e575f80fd5b919050565b5f805f60608486031215620014a6575f80fd5b8335620014b381620013ca565b92506020840135620014c58162001458565b9150620014d56040850162001476565b90509250925092565b5f60208284031215620014ef575f80fd5b813562000fe381620013ca565b5f5b8381101562001518578181015183820152602001620014fe565b50505f910152565b5f8151808452602080850194508084015f5b838110156200156657815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162001532565b509495945050505050565b5f8151808452602080850194508084015f5b83811015620015665781516fffffffffffffffffffffffffffffffff168752958201959082019060010162001583565b5f8151808452602080850194508084015f5b838110156200156657815187529582019590820190600101620015c5565b5f60a0820160a0835280885180835260c08501915060c08160051b86010192506020808b015f5b8381101562001690577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40888703018552815180518088526200165281868a01878501620014fc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016969096018301955093820193908201906001016200160a565b505085840381870152505050620016a8818862001520565b90508281036040840152620016be818762001520565b90508281036060840152620016d4818662001571565b90508281036080840152620016ea8185620015b3565b98975050505050505050565b5f806040838503121562001708575f80fd5b50508035926020909101359150565b602081525f62000fe3602083018462001520565b5f80604083850312156200173d575f80fd5b82356200174a81620013ca565b91506200175a6020840162001476565b90509250929050565b5f6020828403121562001774575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff818116838216019080821115620017cc57620017cc6200177b565b5092915050565b6fffffffffffffffffffffffffffffffff828116828216039080821115620017cc57620017cc6200177b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620018765762001876620017ff565b604052919050565b5f602080838503121562001890575f80fd5b825167ffffffffffffffff80821115620018a8575f80fd5b818501915085601f830112620018bc575f80fd5b815181811115620018d157620018d1620017ff565b8060051b9150620018e48483016200182c565b8181529183018401918481019088841115620018fe575f80fd5b938501935b83851015620016ea57845192506200191b83620013ca565b828252938501939085019062001903565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f805f606084860312156200196c575f80fd5b83516200197981620013ca565b60208501519093506200198c8162001458565b80925050604084015190509250925092565b5f60208284031215620019af575f80fd5b815167ffffffffffffffff80821115620019c7575f80fd5b818401915084601f830112620019db575f80fd5b815181811115620019f057620019f0620017ff565b62001a2360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016200182c565b915080825285602082850101111562001a3a575f80fd5b62001a4d816020840160208601620014fc565b50949350505050565b8082028115828204841417620008a957620008a96200177b565b5f825162001a83818460208701620014fc565b9190910192915050565b5f6020828403121562001a9e575f80fd5b8151801515811462000fe3575f80fdfe60806040526040516101233803806101238339810160408190526020916091565b60405163095ea7b360e01b81523360048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af11580156069573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190608b919060bc565b505060d9565b5f6020828403121560a0575f80fd5b81516001600160a01b038116811460b5575f80fd5b9392505050565b5f6020828403121560cb575f80fd5b8151801515811460b5575f80fd5b603e806100e55f395ff3fe60806040525f80fdfea2646970667358221220d45747d7e68272a7aabb640d9341b2c8b463d6c195da89c4847c5755c75c34c564736f6c63430008140033a2646970667358221220046ed5f936c7f2d08450d9f4ce8be94f4a97e1cb5d393dc13608f09d9de3e5b364736f6c63430008140033
Deployed Bytecode
0x608060405260043610620000c7575f3560e01c80639d564d9a116200007a578063e07c9bd81162000052578063e07c9bd814620002e6578063f9a34e26146200030a578063fdb607c6146200033d575f80fd5b80639d564d9a14620001e4578063a8ca20511462000208578063c7a339b914620002af575f80fd5b80636dbaa1f511620000ae5780636dbaa1f5146200018157806384d29130146200019a578063858635b514620001b1575f80fd5b80634b97568b14620000cb5780635a209e9d1462000119575b5f80fd5b348015620000d7575f80fd5b50620000ef620000e9366004620013ef565b62000361565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801562000125575f80fd5b506200013d620001373660046200141c565b620003a3565b6040805173ffffffffffffffffffffffffffffffffffffffff90941684526fffffffffffffffffffffffffffffffff90921660208401529082015260600162000110565b620001986200019236600462001493565b62000492565b005b348015620001a6575f80fd5b506200019862000767565b348015620001bd575f80fd5b50620001d5620001cf3660046200141c565b620007bf565b60405190815260200162000110565b348015620001f0575f80fd5b506200019862000202366004620013ef565b620008af565b34801562000214575f80fd5b5062000279620002263660046200141c565b5f60208181529281526040808220909352908152205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520162000110565b348015620002bb575f80fd5b50620002d3620002cd366004620014de565b62000a1b565b60405162000110959493929190620015e3565b348015620002f2575f80fd5b50620001d562000304366004620016f6565b62000f3b565b34801562000316575f80fd5b506200032e62000328366004620014de565b62000fea565b60405162000110919062001717565b34801562000349575f80fd5b50620001986200035b3660046200172b565b62001079565b6001602052815f5260405f2081815481106200037b575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff8281165f9081526020818152604080832085851680855292528083205490517f70a0823100000000000000000000000000000000000000000000000000000000815293811660048501819052929384938493909274010000000000000000000000000000000000000000900467ffffffffffffffff16916370a0823190602401602060405180830381865afa15801562000454573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200047a919062001763565b91945067ffffffffffffffff16925090509250925092565b3466470de4df82000014620004d3576040517fe7c9912500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205474010000000000000000000000000000000000000000900467ffffffffffffffff16156200061c5767ffffffffffffffff811615620005c557335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080548291906014906200059e90849074010000000000000000000000000000000000000000900467ffffffffffffffff16620017a8565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b335f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8089168552925290912054620006179286929091166fffffffffffffffffffffffffffffffff861662001190565b505050565b5f836040516200062c90620013bc565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801562000663573d5f803e3d5ffd5b509050620006728242620017a8565b335f8181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a811680865291845282852080549189167fffffffffffffffffffffffff000000000000000000000000000000000000000067ffffffffffffffff99909916740100000000000000000000000000000000000000000289167fffffffff000000000000000000000000000000000000000000000000000000009093169290921791909117905584845260018084529184208054928301815584529190922090910180549093161790915562000761908590836fffffffffffffffffffffffffffffffff871662001190565b50505050565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169047905f81818185875af1925050503d805f811462000617576040519150601f19603f3d011682016040523d82523d5f602084013e505050565b73ffffffffffffffffffffffffffffffffffffffff8181165f90815260208181526040808320938616835292905290812054426fffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090910467ffffffffffffffff16101562000835575f62000894565b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260208181526040808320938716835292905220546200089490429074010000000000000000000000000000000000000000900467ffffffffffffffff16620017d3565b6fffffffffffffffffffffffffffffffff1690505b92915050565b335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86811685529252909120549081169074010000000000000000000000000000000000000000900467ffffffffffffffff908116429091161162000942576040517fb332ac5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301528416906370a0823190602401602060405180830381865afa158015620009ad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620009d3919062001763565b82111562000a0d576040517fcc6d99b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620006178382338562001190565b6040517ff9a34e2600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526060908190819081908190309063f9a34e26906024015f60405180830381865afa15801562000a8e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000ad591908101906200187e565b80519094506fffffffffffffffffffffffffffffffff811667ffffffffffffffff81111562000b085762000b08620017ff565b60405190808252806020026020018201604052801562000b32578160200160208202803683370190505b509350806fffffffffffffffffffffffffffffffff1667ffffffffffffffff81111562000b635762000b63620017ff565b60405190808252806020026020018201604052801562000b8d578160200160208202803683370190505b509250806fffffffffffffffffffffffffffffffff1667ffffffffffffffff81111562000bbe5762000bbe620017ff565b60405190808252806020026020018201604052801562000be8578160200160208202803683370190505b509150806fffffffffffffffffffffffffffffffff1667ffffffffffffffff81111562000c195762000c19620017ff565b60405190808252806020026020018201604052801562000c4e57816020015b606081526020019060019003908162000c385790505b5095505f5b816fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff16101562000f30573073ffffffffffffffffffffffffffffffffffffffff16635a209e9d8988846fffffffffffffffffffffffffffffffff168151811062000cc45762000cc46200192c565b60200260200101516040518363ffffffff1660e01b815260040162000d0c92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b606060405180830381865afa15801562000d28573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000d4e919062001959565b87846fffffffffffffffffffffffffffffffff168151811062000d755762000d756200192c565b6020026020010187856fffffffffffffffffffffffffffffffff168151811062000da35762000da36200192c565b6020026020010187866fffffffffffffffffffffffffffffffff168151811062000dd15762000dd16200192c565b6020026020010183815250836fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152508373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505085816fffffffffffffffffffffffffffffffff168151811062000e5e5762000e5e6200192c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801562000eae573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000ef591908101906200199e565b87826fffffffffffffffffffffffffffffffff168151811062000f1c5762000f1c6200192c565b602090810291909101015260010162000c53565b505091939590929450565b5f8160010362000f555762000f5283600162001a56565b90505b8160020362000f6e5762000f6b83603c62001a56565b90505b8160030362000f885762000f8583610e1062001a56565b90505b8160040362000fa35762000fa0836201518062001a56565b90505b8160050362000fbe5762000fbb8362278d0062001a56565b90505b81600603620008a95762000fd483600c62001a56565b62000fe39062278d0062001a56565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160209081526040918290208054835181840281018401909452808452606093928301828280156200106d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831162001041575b50505050509050919050565b335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205474010000000000000000000000000000000000000000900467ffffffffffffffff16900362001102576040517f12d77cd500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f9081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080548291906014906200116690849074010000000000000000000000000000000000000000900467ffffffffffffffff16620017a8565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b805f03620011ca576040517f29c5442900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390525f918291871690608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790525162001286919062001a70565b5f604051808303815f865af19150503d805f8114620012c1576040519150601f19603f3d011682016040523d82523d5f602084013e620012c6565b606091505b50915091508162001303576040517f89325b2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805115806200132357508080602001905181019062001323919062001a8d565b620013b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840160405180910390fd5b505050505050565b6101238062001aaf83390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620013ec575f80fd5b50565b5f806040838503121562001401575f80fd5b82356200140e81620013ca565b946020939093013593505050565b5f80604083850312156200142e575f80fd5b82356200143b81620013ca565b915060208301356200144d81620013ca565b809150509250929050565b6fffffffffffffffffffffffffffffffff81168114620013ec575f80fd5b803567ffffffffffffffff811681146200148e575f80fd5b919050565b5f805f60608486031215620014a6575f80fd5b8335620014b381620013ca565b92506020840135620014c58162001458565b9150620014d56040850162001476565b90509250925092565b5f60208284031215620014ef575f80fd5b813562000fe381620013ca565b5f5b8381101562001518578181015183820152602001620014fe565b50505f910152565b5f8151808452602080850194508084015f5b838110156200156657815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010162001532565b509495945050505050565b5f8151808452602080850194508084015f5b83811015620015665781516fffffffffffffffffffffffffffffffff168752958201959082019060010162001583565b5f8151808452602080850194508084015f5b838110156200156657815187529582019590820190600101620015c5565b5f60a0820160a0835280885180835260c08501915060c08160051b86010192506020808b015f5b8381101562001690577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40888703018552815180518088526200165281868a01878501620014fc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016969096018301955093820193908201906001016200160a565b505085840381870152505050620016a8818862001520565b90508281036040840152620016be818762001520565b90508281036060840152620016d4818662001571565b90508281036080840152620016ea8185620015b3565b98975050505050505050565b5f806040838503121562001708575f80fd5b50508035926020909101359150565b602081525f62000fe3602083018462001520565b5f80604083850312156200173d575f80fd5b82356200174a81620013ca565b91506200175a6020840162001476565b90509250929050565b5f6020828403121562001774575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff818116838216019080821115620017cc57620017cc6200177b565b5092915050565b6fffffffffffffffffffffffffffffffff828116828216039080821115620017cc57620017cc6200177b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620018765762001876620017ff565b604052919050565b5f602080838503121562001890575f80fd5b825167ffffffffffffffff80821115620018a8575f80fd5b818501915085601f830112620018bc575f80fd5b815181811115620018d157620018d1620017ff565b8060051b9150620018e48483016200182c565b8181529183018401918481019088841115620018fe575f80fd5b938501935b83851015620016ea57845192506200191b83620013ca565b828252938501939085019062001903565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f805f606084860312156200196c575f80fd5b83516200197981620013ca565b60208501519093506200198c8162001458565b80925050604084015190509250925092565b5f60208284031215620019af575f80fd5b815167ffffffffffffffff80821115620019c7575f80fd5b818401915084601f830112620019db575f80fd5b815181811115620019f057620019f0620017ff565b62001a2360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016200182c565b915080825285602082850101111562001a3a575f80fd5b62001a4d816020840160208601620014fc565b50949350505050565b8082028115828204841417620008a957620008a96200177b565b5f825162001a83818460208701620014fc565b9190910192915050565b5f6020828403121562001a9e575f80fd5b8151801515811462000fe3575f80fdfe60806040526040516101233803806101238339810160408190526020916091565b60405163095ea7b360e01b81523360048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af11580156069573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190608b919060bc565b505060d9565b5f6020828403121560a0575f80fd5b81516001600160a01b038116811460b5575f80fd5b9392505050565b5f6020828403121560cb575f80fd5b8151801515811460b5575f80fd5b603e806100e55f395ff3fe60806040525f80fdfea2646970667358221220d45747d7e68272a7aabb640d9341b2c8b463d6c195da89c4847c5755c75c34c564736f6c63430008140033a2646970667358221220046ed5f936c7f2d08450d9f4ce8be94f4a97e1cb5d393dc13608f09d9de3e5b364736f6c63430008140033
Deployed Bytecode Sourcemap
333:8070:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;915:58;;;;;;;;;;-1:-1:-1;915:58:0;;;;;:::i;:::-;;:::i;:::-;;;669:42:1;657:55;;;639:74;;627:2;612:18;915:58:0;;;;;;;;5968:398;;;;;;;;;;-1:-1:-1;5968:398:0;;;;;:::i;:::-;;:::i;:::-;;;;1349:42:1;1337:55;;;1319:74;;1441:34;1429:47;;;1424:2;1409:18;;1402:75;1493:18;;;1486:34;1307:2;1292:18;5968:398:0;1117:409:1;1555:1432:0;;;;;;:::i;:::-;;:::i;:::-;;5843:98;;;;;;;;;;;;;:::i;8084:316::-;;;;;;;;;;-1:-1:-1;8084:316:0;;;;;:::i;:::-;;:::i;:::-;;;2469:25:1;;;2457:2;2442:18;8084:316:0;2323:177:1;3272:605:0;;;;;;;;;;-1:-1:-1;3272:605:0;;;;;:::i;:::-;;:::i;794:59::-;;;;;;;;;;-1:-1:-1;794:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2707:42:1;2695:55;;;2677:74;;2799:18;2787:31;;;2782:2;2767:18;;2760:59;2650:18;794:59:0;2505:320:1;6577:940:0;;;;;;;;;;-1:-1:-1;6577:940:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;7525:551::-;;;;;;;;;;-1:-1:-1;7525:551:0;;;;;:::i;:::-;;:::i;6374:195::-;;;;;;;;;;-1:-1:-1;6374:195:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5424:295::-;;;;;;;;;;-1:-1:-1;5424:295:0;;;;;:::i;:::-;;:::i;915:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;915:58:0;;-1:-1:-1;915:58:0:o;5968:398::-;6213:12;;;;6079:22;6213:12;;;;;;;;;;;:19;;;;;;;;;;;:26;6296:51;;;;;6213:26;;;6296:51;;;639:74:1;;;6079:22:0;;;;;;6213:26;;6254:27;;;;;;6296:23;;612:18:1;;6296:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6191:167;;-1:-1:-1;6191:167:0;;;-1:-1:-1;6191:167:0;-1:-1:-1;5968:398:0;;;;;:::o;1555:1432::-;1729:9;1742:4;1729:17;1725:61;;1755:31;;;;;;;;;;;;;;1725:61;1889:10;1881:7;:19;;;;;;;;;;;;:26;;;;;;;;;:34;;;;;;:39;1877:1103;;2069:13;;;;2065:65;;2092:10;2084:7;:19;;;;;;;;;;;;:26;;;;;;;;;:46;;2122:8;;2084:26;:34;;:46;;2122:8;;2084:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2065:65;2256:10;2285:7;:19;;;;;;;;;;;;:26;;;;;;;;;;:33;2197:161;;2232:5;;2256:10;;2285:33;2197:161;;;:16;:161::i;:::-;1555:1432;;;:::o;1877:1103::-;2476:14;2517:5;2501:22;;;;;:::i;:::-;669:42:1;657:55;;;639:74;;627:2;612:18;2501:22:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2476:48:0;-1:-1:-1;2682:51:0;2725:8;2689:15;2682:51;:::i;:::-;2636:10;2628:7;:19;;;;;;;;;;;;:26;;;;;;;;;;;;:105;;2748:42;;;;2628:105;;;;;;;2748:42;;;;;;;;;;;;;;;;2805:33;;;-1:-1:-1;2805:33:0;;;;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;2917:51;;2648:5;;2784:6;2917:51;;;:16;:51::i;:::-;2376:604;1555:1432;;;:::o;5843:98::-;5889:5;;:44;;:5;;;;;5907:21;;5889:44;;;;5907:21;5889:5;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1555:1432;;;:::o;8084:316::-;8242:12;;;;8192;8242;;;;;;;;;;;:19;;;;;;;;;;;:27;8281:15;8242:55;;:27;;;;;;:55;;:150;;8391:1;8242:150;;;8317:12;;;;:7;:12;;;;;;;;;;;:19;;;;;;;;;:27;:54;;8355:15;;8317:27;;;;;:54;:::i;:::-;8222:170;;;;8084:316;;;;;:::o;3272:605::-;3425:10;3396:18;3417:19;;;;;;;;;;;;:26;;;;;;;;;;:33;;;;;3518:34;;;;;;;3498:15;3491:61;;;;3487:119;;3574:32;;;;;;;;;;;;;;3487:119;3654:35;;;;;:23;657:55:1;;;3654:35:0;;;639:74:1;3654:23:0;;;;;612:18:1;;3654:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3645:6;:44;3641:98;;;3711:28;;;;;;;;;;;;;;3641:98;3814:55;3831:5;3838:10;3850;3862:6;3814:16;:55::i;6577:940::-;6927:35;;;;;:29;657:55:1;;6927:35:0;;;639:74:1;6688:26:0;;;;;;;;;;6927:4;;:29;;612:18:1;;6927:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6996:19;;6912:50;;-1:-1:-1;7044:19:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7044:19:0;;7027:36;;7098:4;7084:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7084:19:0;;7074:29;;7140:4;7126:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7126:19:0;;7114:31;;7182:4;7169:18;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7156:31;;7203:9;7198:312;7218:4;7214:8;;:1;:8;;;7198:312;;;7289:4;:14;;;7322:4;7345:12;7358:1;7345:15;;;;;;;;;;:::i;:::-;;;;;;;7289:86;;;;;;;;;;;;;;;10416:42:1;10485:15;;;10467:34;;10537:15;;10532:2;10517:18;;10510:43;10394:2;10379:18;;10232:327;7289:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7242:14;7257:1;7242:17;;;;;;;;;;:::i;:::-;;;;;;7261:7;7269:1;7261:10;;;;;;;;;;:::i;:::-;;;;;;7273:9;7283:1;7273:12;;;;;;;;;;:::i;:::-;;;;;;7241:134;;;;;;;;;;;;;;;;;;;;;;;7413:12;7426:1;7413:15;;;;;;;;;;:::i;:::-;;;;;;;7406:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7390:10;7401:1;7390:13;;;;;;;;;;:::i;:::-;;;;;;;;;;:46;7480:3;;7198:312;;;;6901:616;6577:940;;;;;;;:::o;7525:551::-;7624:11;7657:4;7665:1;7657:9;7653:55;;7689:7;:3;7695:1;7689:7;:::i;:::-;7683:13;;7653:55;7722:4;7730:1;7722:9;7718:63;;7754:15;:3;7760:9;7754:15;:::i;:::-;7748:21;;7718:63;7795:4;7803:1;7795:9;7791:61;;7827:13;:3;7833:7;7827:13;:::i;:::-;7821:19;;7791:61;7866:4;7874:1;7866:9;7862:60;;7898:12;:3;7904:6;7898:12;:::i;:::-;7892:18;;7862:60;7936:4;7944:1;7936:9;7932:61;;7968:13;:3;7974:7;7968:13;:::i;:::-;7962:19;;7932:61;8007:4;8015:1;8007:9;8003:66;;8039:8;:3;8045:2;8039:8;:::i;:::-;:18;;8050:7;8039:18;:::i;:::-;8033:24;7525:551;-1:-1:-1;;;7525:551:0:o;6374:195::-;6534:27;;;;;;;:21;:27;;;;;;;;;6519:42;;;;;;;;;;;;;;;;;6472:29;;6519:42;;;6534:27;6519:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6374:195;;;:::o;5424:295::-;5567:10;5559:7;:19;;;;;;;;;;;;:26;;;;;;;;;:34;;;;;;:39;;5555:69;;5607:17;;;;;;;;;;;;;;5555:69;5669:10;5661:7;:19;;;;;;;;;;;;:26;;;;;;;;;:50;;5699:12;;5661:26;:34;;:50;;5699:12;;5661:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5424:295;;:::o;4330:740::-;4515:6;4525:1;4515:11;4511:44;;4535:20;;;;;;;;;;;;;;4511:44;4681:55;;4647:19;12252:15:1;;;4681:55:0;;;12234:34:1;12304:15;;;12284:18;;;12277:43;12336:18;;;12329:34;;;4610:8:0;;;;4647:19;;;12146:18:1;;4681:55:0;;;;;;;;;;;;;;;;;;;;;;;;4647:100;;;4681:55;4647:100;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4609:138;;;;4791:3;4786:41;;4803:24;;;;;;;;;;;;;;4786:41;4936:17;;:22;;:56;;;4973:10;4962:30;;;;;;;;;;;;:::i;:::-;4914:148;;;;;;;13150:2:1;4914:148:0;;;13132:21:1;13189:2;13169:18;;;13162:30;13228:34;13208:18;;;13201:62;13299:12;13279:18;;;13272:40;13329:19;;4914:148:0;;;;;;;;4465:605;;4330:740;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:154:1:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:315::-;241:6;249;302:2;290:9;281:7;277:23;273:32;270:52;;;318:1;315;308:12;270:52;357:9;344:23;376:31;401:5;376:31;:::i;:::-;426:5;478:2;463:18;;;;450:32;;-1:-1:-1;;;173:315:1:o;724:388::-;792:6;800;853:2;841:9;832:7;828:23;824:32;821:52;;;869:1;866;859:12;821:52;908:9;895:23;927:31;952:5;927:31;:::i;:::-;977:5;-1:-1:-1;1034:2:1;1019:18;;1006:32;1047:33;1006:32;1047:33;:::i;:::-;1099:7;1089:17;;;724:388;;;;;:::o;1531:146::-;1617:34;1610:5;1606:46;1599:5;1596:57;1586:85;;1667:1;1664;1657:12;1682:171;1749:20;;1809:18;1798:30;;1788:41;;1778:69;;1843:1;1840;1833:12;1778:69;1682:171;;;:::o;1858:460::-;1934:6;1942;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;:::-;2127:5;-1:-1:-1;2184:2:1;2169:18;;2156:32;2197:33;2156:32;2197:33;:::i;:::-;2249:7;-1:-1:-1;2275:37:1;2308:2;2293:18;;2275:37;:::i;:::-;2265:47;;1858:460;;;;;:::o;2830:247::-;2889:6;2942:2;2930:9;2921:7;2917:23;2913:32;2910:52;;;2958:1;2955;2948:12;2910:52;2997:9;2984:23;3016:31;3041:5;3016:31;:::i;3082:250::-;3167:1;3177:113;3191:6;3188:1;3185:13;3177:113;;;3267:11;;;3261:18;3248:11;;;3241:39;3213:2;3206:10;3177:113;;;-1:-1:-1;;3324:1:1;3306:16;;3299:27;3082:250::o;3337:484::-;3390:3;3428:5;3422:12;3455:6;3450:3;3443:19;3481:4;3510:2;3505:3;3501:12;3494:19;;3547:2;3540:5;3536:14;3568:1;3578:218;3592:6;3589:1;3586:13;3578:218;;;3657:13;;3672:42;3653:62;3641:75;;3736:12;;;;3771:15;;;;3614:1;3607:9;3578:218;;;-1:-1:-1;3812:3:1;;3337:484;-1:-1:-1;;;;;3337:484:1:o;3826:476::-;3879:3;3917:5;3911:12;3944:6;3939:3;3932:19;3970:4;3999:2;3994:3;3990:12;3983:19;;4036:2;4029:5;4025:14;4057:1;4067:210;4081:6;4078:1;4075:13;4067:210;;;4146:13;;4161:34;4142:54;4130:67;;4217:12;;;;4252:15;;;;4103:1;4096:9;4067:210;;4307:435;4360:3;4398:5;4392:12;4425:6;4420:3;4413:19;4451:4;4480:2;4475:3;4471:12;4464:19;;4517:2;4510:5;4506:14;4538:1;4548:169;4562:6;4559:1;4556:13;4548:169;;;4623:13;;4611:26;;4657:12;;;;4692:15;;;;4584:1;4577:9;4548:169;;4747:1926;5221:4;5269:3;5258:9;5254:19;5300:3;5289:9;5282:22;5324:6;5359;5353:13;5390:6;5382;5375:22;5428:3;5417:9;5413:19;5406:26;;5491:3;5481:6;5478:1;5474:14;5463:9;5459:30;5455:40;5441:54;;5514:4;5553:2;5545:6;5541:15;5574:1;5584:584;5598:6;5595:1;5592:13;5584:584;;;5687:66;5675:9;5667:6;5663:22;5659:95;5654:3;5647:108;5784:6;5778:13;5826:2;5820:9;5857:8;5849:6;5842:24;5879:74;5944:8;5939:2;5931:6;5927:15;5922:2;5918;5914:11;5879:74;:::i;:::-;6010:2;5996:17;6015:66;5992:90;5980:103;;;;5976:112;;;-1:-1:-1;6146:12:1;;;;6111:15;;;;5620:1;5613:9;5584:584;;;5588:3;;6216:9;6208:6;6204:22;6199:2;6188:9;6184:18;6177:50;;;;6250:44;6287:6;6279;6250:44;:::i;:::-;6236:58;;6342:9;6334:6;6330:22;6325:2;6314:9;6310:18;6303:50;6376:44;6413:6;6405;6376:44;:::i;:::-;6362:58;;6468:9;6460:6;6456:22;6451:2;6440:9;6436:18;6429:50;6502:44;6539:6;6531;6502:44;:::i;:::-;6488:58;;6595:9;6587:6;6583:22;6577:3;6566:9;6562:19;6555:51;6623:44;6660:6;6652;6623:44;:::i;:::-;6615:52;4747:1926;-1:-1:-1;;;;;;;;4747:1926:1:o;6678:248::-;6746:6;6754;6807:2;6795:9;6786:7;6782:23;6778:32;6775:52;;;6823:1;6820;6813:12;6775:52;-1:-1:-1;;6846:23:1;;;6916:2;6901:18;;;6888:32;;-1:-1:-1;6678:248:1:o;6931:261::-;7110:2;7099:9;7092:21;7073:4;7130:56;7182:2;7171:9;7167:18;7159:6;7130:56;:::i;7197:319::-;7264:6;7272;7325:2;7313:9;7304:7;7300:23;7296:32;7293:52;;;7341:1;7338;7331:12;7293:52;7380:9;7367:23;7399:31;7424:5;7399:31;:::i;:::-;7449:5;-1:-1:-1;7473:37:1;7506:2;7491:18;;7473:37;:::i;:::-;7463:47;;7197:319;;;;;:::o;7521:184::-;7591:6;7644:2;7632:9;7623:7;7619:23;7615:32;7612:52;;;7660:1;7657;7650:12;7612:52;-1:-1:-1;7683:16:1;;7521:184;-1:-1:-1;7521:184:1:o;7710:::-;7762:77;7759:1;7752:88;7859:4;7856:1;7849:15;7883:4;7880:1;7873:15;7899:180;7966:18;8004:10;;;8016;;;8000:27;;8039:11;;;8036:37;;;8053:18;;:::i;:::-;8036:37;7899:180;;;;:::o;8294:200::-;8363:34;8430:10;;;8418;;;8414:27;;8453:12;;;8450:38;;;8468:18;;:::i;8499:184::-;8551:77;8548:1;8541:88;8648:4;8645:1;8638:15;8672:4;8669:1;8662:15;8688:334;8759:2;8753:9;8815:2;8805:13;;8820:66;8801:86;8789:99;;8918:18;8903:34;;8939:22;;;8900:62;8897:88;;;8965:18;;:::i;:::-;9001:2;8994:22;8688:334;;-1:-1:-1;8688:334:1:o;9027:1011::-;9122:6;9153:2;9196;9184:9;9175:7;9171:23;9167:32;9164:52;;;9212:1;9209;9202:12;9164:52;9245:9;9239:16;9274:18;9315:2;9307:6;9304:14;9301:34;;;9331:1;9328;9321:12;9301:34;9369:6;9358:9;9354:22;9344:32;;9414:7;9407:4;9403:2;9399:13;9395:27;9385:55;;9436:1;9433;9426:12;9385:55;9465:2;9459:9;9487:2;9483;9480:10;9477:36;;;9493:18;;:::i;:::-;9539:2;9536:1;9532:10;9522:20;;9562:28;9586:2;9582;9578:11;9562:28;:::i;:::-;9624:15;;;9694:11;;;9690:20;;;9655:12;;;;9722:19;;;9719:39;;;9754:1;9751;9744:12;9719:39;9778:11;;;;9798:210;9814:6;9809:3;9806:15;9798:210;;;9887:3;9881:10;9868:23;;9904:31;9929:5;9904:31;:::i;:::-;9948:18;;;9831:12;;;;9986;;;;9798:210;;10043:184;10095:77;10092:1;10085:88;10192:4;10189:1;10182:15;10216:4;10213:1;10206:15;10564:446;10652:6;10660;10668;10721:2;10709:9;10700:7;10696:23;10692:32;10689:52;;;10737:1;10734;10727:12;10689:52;10769:9;10763:16;10788:31;10813:5;10788:31;:::i;:::-;10888:2;10873:18;;10867:25;10838:5;;-1:-1:-1;10901:33:1;10867:25;10901:33;:::i;:::-;10953:7;10943:17;;;11000:2;10989:9;10985:18;10979:25;10969:35;;10564:446;;;;;:::o;11015:778::-;11095:6;11148:2;11136:9;11127:7;11123:23;11119:32;11116:52;;;11164:1;11161;11154:12;11116:52;11197:9;11191:16;11226:18;11267:2;11259:6;11256:14;11253:34;;;11283:1;11280;11273:12;11253:34;11321:6;11310:9;11306:22;11296:32;;11366:7;11359:4;11355:2;11351:13;11347:27;11337:55;;11388:1;11385;11378:12;11337:55;11417:2;11411:9;11439:2;11435;11432:10;11429:36;;;11445:18;;:::i;:::-;11487:112;11595:2;11526:66;11519:4;11515:2;11511:13;11507:86;11503:95;11487:112;:::i;:::-;11474:125;;11622:2;11615:5;11608:17;11662:7;11657:2;11652;11648;11644:11;11640:20;11637:33;11634:53;;;11683:1;11680;11673:12;11634:53;11696:67;11760:2;11755;11748:5;11744:14;11739:2;11735;11731:11;11696:67;:::i;:::-;-1:-1:-1;11782:5:1;11015:778;-1:-1:-1;;;;11015:778:1:o;11798:168::-;11871:9;;;11902;;11919:15;;;11913:22;;11899:37;11889:71;;11940:18;;:::i;12374:287::-;12503:3;12541:6;12535:13;12557:66;12616:6;12611:3;12604:4;12596:6;12592:17;12557:66;:::i;:::-;12639:16;;;;;12374:287;-1:-1:-1;;12374:287:1:o;12666:277::-;12733:6;12786:2;12774:9;12765:7;12761:23;12757:32;12754:52;;;12802:1;12799;12792:12;12754:52;12834:9;12828:16;12887:5;12880:13;12873:21;12866:5;12863:32;12853:60;;12909:1;12906;12899:12
Swarm Source
ipfs://046ed5f936c7f2d08450d9f4ce8be94f4a97e1cb5d393dc13608f09d9de3e5b3
Loading...
Loading
Loading...
Loading
OVERVIEW
ChainLock is a revolutionary token-locking service. Deploying a separate contract for every lock it ensures comprehensive ERC20 compatibility, including reflection and rebase tokens, while substantially reducing risk.Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,431.87 | 0.12 | $411.82 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.