ETH Price: $3,431.87 (+5.69%)
Gas: 6 Gwei

Contract

0x1a2B79734DCC848e829ee9733e4636d504572a7b
 

Overview

ETH Balance

0.12 ETH

Eth Value

$411.82 (@ $3,431.87/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unlock Tokens183934912023-10-20 19:02:11269 days ago1697828531IN
ChainTools: Isolated Locker
0 ETH0.0021200934.3545838
Unlock Tokens183459552023-10-14 3:30:35275 days ago1697254235IN
ChainTools: Isolated Locker
0 ETH0.00032145.26500165
Lock Tokens183390332023-10-13 4:16:47276 days ago1697170607IN
ChainTools: Isolated Locker
0.02 ETH0.000990115.18835708
Lock Tokens182646692023-10-02 18:34:23287 days ago1696271663IN
ChainTools: Isolated Locker
0.02 ETH0.0035723120.27064146
Unlock Tokens182556282023-10-01 12:16:11288 days ago1696162571IN
ChainTools: Isolated Locker
0 ETH0.000244156.27068309
Lock Tokens180866372023-09-07 19:28:47312 days ago1694114927IN
ChainTools: Isolated Locker
0.02 ETH0.0051875525.02630089
Lock Tokens176788052023-07-12 16:56:59369 days ago1689181019IN
ChainTools: Isolated Locker
0.02 ETH0.0098488751.46751792
Lock Tokens176786732023-07-12 16:29:59369 days ago1689179399IN
ChainTools: Isolated Locker
0.02 ETH0.0101945951.456944
Lock Tokens174603952023-06-12 0:23:11399 days ago1686529391IN
ChainTools: Isolated Locker
0.02 ETH0.0012140318.17038423
Take Service Fee174603942023-06-12 0:22:59399 days ago1686529379IN
ChainTools: Isolated Locker
0 ETH0.0006129220.26524498
Extend Lock174603882023-06-12 0:21:47399 days ago1686529307IN
ChainTools: Isolated Locker
0 ETH0.0005372119.31671678
Lock Tokens174603742023-06-12 0:18:47399 days ago1686529127IN
ChainTools: Isolated Locker
0.02 ETH0.0042600819.71798156
0x60806040174603292023-06-12 0:09:47399 days ago1686528587IN
 Create: Locker
0 ETH0.028960217.92030083

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
183390332023-10-13 4:16:47276 days ago1697170607
ChainTools: Isolated Locker
 Contract Creation0 ETH
182646692023-10-02 18:34:23287 days ago1696271663
ChainTools: Isolated Locker
 Contract Creation0 ETH
180866372023-09-07 19:28:47312 days ago1694114927
ChainTools: Isolated Locker
 Contract Creation0 ETH
176788052023-07-12 16:56:59369 days ago1689181019
ChainTools: Isolated Locker
 Contract Creation0 ETH
176786732023-07-12 16:29:59369 days ago1689179399
ChainTools: Isolated Locker
 Contract Creation0 ETH
174603942023-06-12 0:22:59399 days ago1686529379
ChainTools: Isolated Locker
0.02 ETH
174603742023-06-12 0:18:47399 days ago1686529127
ChainTools: Isolated Locker
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Locker

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, None license
/**
 *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

Contract ABI

[{"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"}]

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

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.