ETH Price: $2,861.44 (-10.65%)
Gas: 14 Gwei

Contract

0xCa433f463321aEB9a42d1a0E684f8f680c94782C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Create Token Loc...171717822023-05-02 8:03:11429 days ago1683014591IN
0xCa433f46...80c94782C
0 ETH0.0952552753.11763973
Create Token Loc...154938112022-09-08 1:54:17666 days ago1662602057IN
0xCa433f46...80c94782C
0 ETH0.0188792910.53096696
Create Token Loc...153256922022-08-12 7:27:00692 days ago1660289220IN
0xCa433f46...80c94782C
0 ETH0.015430418.6071613
Create Token Loc...153106742022-08-09 22:30:49695 days ago1660084249IN
0xCa433f46...80c94782C
0 ETH0.028475615.88383874
Create Token Loc...153012992022-08-08 11:28:26696 days ago1659958106IN
0xCa433f46...80c94782C
0 ETH0.009820795.53084411
Create Token Loc...152909962022-08-06 20:47:56698 days ago1659818876IN
0xCa433f46...80c94782C
0 ETH0.010345855.77097195
Create Token Loc...152782202022-08-04 21:17:36700 days ago1659647856IN
0xCa433f46...80c94782C
0 ETH0.014802398.33636739
Create Token Loc...152729342022-08-04 1:21:27701 days ago1659576087IN
0xCa433f46...80c94782C
0 ETH0.012856647.24056607
Create Token Loc...152505672022-07-31 13:44:55704 days ago1659275095IN
0xCa433f46...80c94782C
0 ETH0.0199958611.15379485
Create Token Loc...151793532022-07-20 11:59:10715 days ago1658318350IN
0xCa433f46...80c94782C
0 ETH0.0371400920.91644267
Create Token Loc...151792222022-07-20 11:31:19715 days ago1658316679IN
0xCa433f46...80c94782C
0 ETH0.0229252912.91099416
Create Token Loc...151265752022-07-12 7:38:52723 days ago1657611532IN
0xCa433f46...80c94782C
0 ETH0.032537318.149473
Create Token Loc...150921362022-07-07 0:09:21729 days ago1657152561IN
0xCa433f46...80c94782C
0 ETH0.1063185659.87616042
Create Token Loc...150726312022-07-03 23:44:04732 days ago1656891844IN
0xCa433f46...80c94782C
0 ETH0.0188681710.52476305
Create Token Loc...149685022022-06-15 16:37:07750 days ago1655311027IN
0xCa433f46...80c94782C
0 ETH0.1258366670.86830596
Create Token Loc...149489722022-06-12 7:34:44753 days ago1655019284IN
0xCa433f46...80c94782C
0 ETH0.0459094925.60855127
Create Token Loc...149167432022-06-06 19:48:11759 days ago1654544891IN
0xCa433f46...80c94782C
0 ETH0.1207837167.37376625
Create Token Loc...148883122022-06-02 2:08:01764 days ago1654135681IN
0xCa433f46...80c94782C
0 ETH0.0722005240.27381789
Create Token Loc...148880662022-06-02 1:05:21764 days ago1654131921IN
0xCa433f46...80c94782C
0 ETH0.1043390558.76134641
Create Token Loc...148873492022-06-01 22:16:02764 days ago1654121762IN
0xCa433f46...80c94782C
0 ETH0.1148438264.06046411
Create Token Loc...148834962022-06-01 7:10:21764 days ago1654067421IN
0xCa433f46...80c94782C
0 ETH0.0591058233.28703742
Create Token Loc...147189382022-05-05 19:04:27791 days ago1651777467IN
0xCa433f46...80c94782C
0 ETH0.150686984.05392032
Create Token Loc...147140902022-05-05 0:30:24792 days ago1651710624IN
0xCa433f46...80c94782C
0 ETH0.0612687234.1760072
Create Token Loc...147118882022-05-04 16:03:52792 days ago1651680232IN
0xCa433f46...80c94782C
0 ETH0.1460831382.27064927
Create Token Loc...147105032022-05-04 10:51:14792 days ago1651661474IN
0xCa433f46...80c94782C
0 ETH0.082265946.33057328
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
171717822023-05-02 8:03:11429 days ago1683014591
0xCa433f46...80c94782C
 Contract Creation0 ETH
154938112022-09-08 1:54:17666 days ago1662602057
0xCa433f46...80c94782C
 Contract Creation0 ETH
153256922022-08-12 7:27:00692 days ago1660289220
0xCa433f46...80c94782C
 Contract Creation0 ETH
153106742022-08-09 22:30:49695 days ago1660084249
0xCa433f46...80c94782C
 Contract Creation0 ETH
153012992022-08-08 11:28:26696 days ago1659958106
0xCa433f46...80c94782C
 Contract Creation0 ETH
152909962022-08-06 20:47:56698 days ago1659818876
0xCa433f46...80c94782C
 Contract Creation0 ETH
152782202022-08-04 21:17:36700 days ago1659647856
0xCa433f46...80c94782C
 Contract Creation0 ETH
152729342022-08-04 1:21:27701 days ago1659576087
0xCa433f46...80c94782C
 Contract Creation0 ETH
152505672022-07-31 13:44:55704 days ago1659275095
0xCa433f46...80c94782C
 Contract Creation0 ETH
151793532022-07-20 11:59:10715 days ago1658318350
0xCa433f46...80c94782C
 Contract Creation0 ETH
151792222022-07-20 11:31:19715 days ago1658316679
0xCa433f46...80c94782C
 Contract Creation0 ETH
151265752022-07-12 7:38:52723 days ago1657611532
0xCa433f46...80c94782C
 Contract Creation0 ETH
150921362022-07-07 0:09:21729 days ago1657152561
0xCa433f46...80c94782C
 Contract Creation0 ETH
150726312022-07-03 23:44:04732 days ago1656891844
0xCa433f46...80c94782C
 Contract Creation0 ETH
149685022022-06-15 16:37:07750 days ago1655311027
0xCa433f46...80c94782C
 Contract Creation0 ETH
149489722022-06-12 7:34:44753 days ago1655019284
0xCa433f46...80c94782C
 Contract Creation0 ETH
149167432022-06-06 19:48:11759 days ago1654544891
0xCa433f46...80c94782C
 Contract Creation0 ETH
148883122022-06-02 2:08:01764 days ago1654135681
0xCa433f46...80c94782C
 Contract Creation0 ETH
148880662022-06-02 1:05:21764 days ago1654131921
0xCa433f46...80c94782C
 Contract Creation0 ETH
148873492022-06-01 22:16:02764 days ago1654121762
0xCa433f46...80c94782C
 Contract Creation0 ETH
148834962022-06-01 7:10:21764 days ago1654067421
0xCa433f46...80c94782C
 Contract Creation0 ETH
147189382022-05-05 19:04:27791 days ago1651777467
0xCa433f46...80c94782C
 Contract Creation0 ETH
147140902022-05-05 0:30:24792 days ago1651710624
0xCa433f46...80c94782C
 Contract Creation0 ETH
147118882022-05-04 16:03:52792 days ago1651680232
0xCa433f46...80c94782C
 Contract Creation0 ETH
147105032022-05-04 10:51:14792 days ago1651661474
0xCa433f46...80c94782C
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwapTokenLockerFactory

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2021-02-19
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;


contract SwapAdmin {
    address public admin;
    address public candidate;

    constructor(address _admin) public {
        require(_admin != address(0), "admin address cannot be 0");
        admin = _admin;
        emit AdminChanged(address(0), _admin);
    }

    function setCandidate(address _candidate) external onlyAdmin {
        address old = candidate;
        candidate = _candidate;
        emit candidateChanged( old, candidate);
    }

    function becomeAdmin( ) external {
        require( msg.sender == candidate, "Only candidate can become admin");
        address old = admin;
        admin = candidate;
        emit AdminChanged( old, admin ); 
    }

    modifier onlyAdmin {
        require( (msg.sender == admin), "Only the contract admin can perform this action");
        _;
    }

    event candidateChanged(address oldCandidate, address newCandidate );
    event AdminChanged(address oldAdmin, address newAdmin);
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract SwapTokenLocker is SwapAdmin {
    using SafeMath for uint;
    struct LockInfo {
        uint128 amount;
        uint128 claimedAmount;
        uint64 lockTimestamp; 
        uint64 lastUpdated;
        uint32 lockHours;
    }
    address immutable token;
    mapping (address => LockInfo) public lockData;
    constructor(address _admin, address _token) public SwapAdmin(_admin) {
        token = _token;
    }
    function getToken() external view returns(address) {
        return token;
    }
    function emergencyWithdraw(address _tokenAddress) external onlyAdmin {
        require(_tokenAddress != address(0), "Token address is invalid");
        IERC20(_tokenAddress).transfer(msg.sender, IERC20(_tokenAddress).balanceOf(address(this)));
    }
	function getLockData(address _user) external view returns(uint128, uint128, uint64, uint64, uint32) {
        require(_user != address(0), "User address is invalid");
        LockInfo storage _lockInfo = lockData[_user];
		return (
		    _lockInfo.amount, 
		    _lockInfo.claimedAmount, 
		    _lockInfo.lockTimestamp, 
		    _lockInfo.lastUpdated, 
		    _lockInfo.lockHours);
	}
    function sendLockTokenMany(
        address[] calldata _users, 
        uint128[] calldata _amounts, 
        uint32[] calldata _lockHours,
        uint256 _sendAmount
    ) external onlyAdmin {
        require(_users.length == _amounts.length, "array length not eq");
        require(_users.length == _lockHours.length, "array length not eq");
        require(_sendAmount > 0 , "Amount is invalid");
        IERC20(token).transferFrom(msg.sender, address(this), _sendAmount);
        for (uint256 j = 0; j < _users.length; j++) {
            sendLockToken(_users[j], _amounts[j], uint64(block.timestamp), _lockHours[j]);
        }
    }
    function sendLockToken(
        address _user, 
        uint128 _amount, 
        uint64 _lockTimestamp, 
        uint32 _lockHours
    ) internal {
        require(_amount > 0, "amount can not zero");
        require(_lockHours > 0, "lock hours need more than zero");
        require(_lockTimestamp > 0, "lock timestamp need more than zero");
        require(lockData[_user].amount == 0, "this address has already locked");
        LockInfo memory lockinfo = LockInfo({
            amount: _amount,
            lockTimestamp: _lockTimestamp,
            lockHours: _lockHours,
            lastUpdated: uint64(block.timestamp),
            claimedAmount: 0
        });
        lockData[_user] = lockinfo;
    }
    function claimToken(uint128 _amount) external returns (uint256) {
        require(_amount > 0, "Invalid parameter amount");
        address _user = msg.sender;
        LockInfo storage _lockInfo = lockData[_user];
        require(_lockInfo.lockTimestamp <= block.timestamp, "Vesting time is not started");
        require(_lockInfo.amount > 0, "No lock token to claim");
        uint256 passhours = block.timestamp.sub(_lockInfo.lockTimestamp).div(1 hours);
        require(passhours > 0, "need wait for one hour at least");
        require((block.timestamp - _lockInfo.lastUpdated) > 1 hours, "You have to wait at least an hour to claim");
        uint256 available = 0;
        if (passhours >= _lockInfo.lockHours) {
            available = _lockInfo.amount;
        } else {
            available = uint256(_lockInfo.amount).div(_lockInfo.lockHours).mul(passhours);
        }
        available = available.sub(_lockInfo.claimedAmount);
        require(available > 0, "not available claim");
        uint256 claim = _amount;
        if (_amount > available) { // claim as much as possible
            claim = available;
        }
        _lockInfo.claimedAmount = uint128(uint256(_lockInfo.claimedAmount).add(claim));
        IERC20(token).transfer(_user, claim);
        _lockInfo.lastUpdated = uint64(block.timestamp);
        return claim;
    }
}

contract SwapTokenLockerFactory {
    event SwapTokenLockerCreated(address admin, address locker);
    mapping(address => address[]) private deployedContracts;
    address[] private allLockers;

    function getLastDeployed(address owner) external view returns(address locker) {
        uint256 length = deployedContracts[owner].length;
        return deployedContracts[owner][length - 1];
    }

    function getAllContracts() external view returns (address[] memory) {
        return allLockers;
    }

    function getDeployed(address owner) external view returns(address[] memory) {
        return deployedContracts[owner];
    }

    function createTokenLocker(address token) external returns (address locker) {
        SwapTokenLocker lockerContract = new SwapTokenLocker(msg.sender, token);
        locker = address(lockerContract);
        deployedContracts[msg.sender].push(locker);
        allLockers.push(locker);
        emit SwapTokenLockerCreated(msg.sender, locker);
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"address","name":"locker","type":"address"}],"name":"SwapTokenLockerCreated","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"createTokenLocker","outputs":[{"internalType":"address","name":"locker","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllContracts","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getDeployed","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getLastDeployed","outputs":[{"internalType":"address","name":"locker","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b5061286a806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806318d3ce961461005157806343f03ab6146100b0578063a77b6e0314610149578063b45a5c3c146101b7575b600080fd5b610059610225565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561009c578082015181840152602081019050610081565b505050509050019250505060405180910390f35b6100f2600480360360208110156100c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102b3565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561013557808201518184015260208101905061011a565b505050509050019250505060405180910390f35b61018b6004803603602081101561015f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061037f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f9600480360360208110156101cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610445565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060018054806020026020016040519081016040528092919081815260200182805480156102a957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161025f575b5050505050905090565b60606000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561037357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610329575b50505050509050919050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182038154811061041257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b600080338360405161045690610628565b808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051809103906000f0801580156104af573d6000803e3d6000fd5b5090508091506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f758ba1a81be07b9701bb6c4ac4fc3979d34e18d3465ffd5cd4c2958d231899013383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150919050565b6121ff806106368339019056fe60a060405234801561001057600080fd5b506040516121ff3803806121ff8339818101604052604081101561003357600080fd5b81019080805190602001909291908051906020019092919050505081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f61646d696e20616464726573732063616e6e6f7420626520300000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f600082604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505060805160601c6120006101ff6000398061086552806109e752806111a052506120006000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80636e5110ae116100665780636e5110ae146102865780636ff1c9bc146102da578063c62223311461031e578063e8345bd1146103d0578063f851a440146104825761009e565b806307880b7f146100a35780631c9fa3cc146100e757806321df0da71461021457806325971dff146102485780636c8381f814610252575b600080fd5b6100e5600480360360208110156100b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b6565b005b610212600480360360808110156100fd57600080fd5b810190808035906020019064010000000081111561011a57600080fd5b82018360208201111561012c57600080fd5b8035906020019184602083028401116401000000008311171561014e57600080fd5b90919293919293908035906020019064010000000081111561016f57600080fd5b82018360208201111561018157600080fd5b803590602001918460208302840111640100000000831117156101a357600080fd5b9091929391929390803590602001906401000000008111156101c457600080fd5b8201836020820111156101d657600080fd5b803590602001918460208302840111640100000000831117156101f857600080fd5b909192939192939080359060200190929190505050610653565b005b61021c6109e3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610250610a0b565b005b61025a610be4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102c46004803603602081101561029c57600080fd5b8101908080356fffffffffffffffffffffffffffffffff169060200190929190505050610c0a565b6040518082815260200191505060405180910390f35b61031c600480360360208110156102f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112a3565b005b6103606004803603602081101561033457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061153b565b60405180866fffffffffffffffffffffffffffffffff168152602001856fffffffffffffffffffffffffffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018263ffffffff1681526020019550505050505060405180910390f35b610412600480360360208110156103e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c5565b60405180866fffffffffffffffffffffffffffffffff168152602001856fffffffffffffffffffffffffffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018263ffffffff1681526020019550505050505060405180910390f35b61048a61176b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f50602f913960400191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0faed18be9e8f4d4c05dfbcc80ea2c97a0be729614d766827778f60890c02cab81600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f50602f913960400191505060405180910390fd5b848490508787905014610772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6172726179206c656e677468206e6f742065710000000000000000000000000081525060200191505060405180910390fd5b8282905087879050146107ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6172726179206c656e677468206e6f742065710000000000000000000000000081525060200191505060405180910390fd5b60008111610863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f416d6f756e7420697320696e76616c696400000000000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561091257600080fd5b505af1158015610926573d6000803e3d6000fd5b505050506040513d602081101561093c57600080fd5b81019080805190602001909291905050505060005b878790508110156109d9576109cc88888381811061096b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1687878481811061099457fe5b905060200201356fffffffffffffffffffffffffffffffff16428787868181106109ba57fe5b9050602002013563ffffffff1661178f565b8080600101915050610951565b5050505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c792063616e6469646174652063616e206265636f6d652061646d696e0081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f8160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080826fffffffffffffffffffffffffffffffff1611610c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420706172616d6574657220616d6f756e74000000000000000081525060200191505060405180910390fd5b60003390506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050428160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161115610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f56657374696e672074696d65206973206e6f742073746172746564000000000081525060200191505060405180910390fd5b60008160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1611610e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f206c6f636b20746f6b656e20746f20636c61696d0000000000000000000081525060200191505060405180910390fd5b6000610e66610e10610e588460010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1642611b9990919063ffffffff16565b611be390919063ffffffff16565b905060008111610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6e656564207761697420666f72206f6e6520686f7572206174206c656173740081525060200191505060405180910390fd5b610e108260010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16420311610f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611fa1602a913960400191505060405180910390fd5b60008260010160109054906101000a900463ffffffff1663ffffffff168210610fb9578260000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905061102d565b61102a8261101c8560010160109054906101000a900463ffffffff1663ffffffff168660000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16611be390919063ffffffff16565b611c2d90919063ffffffff16565b90505b6110728360000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682611b9990919063ffffffff16565b9050600081116110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6e6f7420617661696c61626c6520636c61696d0000000000000000000000000081525060200191505060405180910390fd5b6000866fffffffffffffffffffffffffffffffff16905081876fffffffffffffffffffffffffffffffff16111561111f578190505b611164818560000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16611cb390919063ffffffff16565b8460000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561122f57600080fd5b505af1158015611243573d6000803e3d6000fd5b505050506040513d602081101561125957600080fd5b810190808051906020019092919050505050428460010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508095505050505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f50602f913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206164647265737320697320696e76616c6964000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561146e57600080fd5b505afa158015611482573d6000803e3d6000fd5b505050506040513d602081101561149857600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114fc57600080fd5b505af1158015611510573d6000803e3d6000fd5b505050506040513d602081101561152657600080fd5b81019080805190602001909291905050505050565b60008060008060008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f55736572206164647265737320697320696e76616c696400000000000000000081525060200191505060405180910390fd5b6000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff168160000160109054906101000a90046fffffffffffffffffffffffffffffffff168260010160009054906101000a900467ffffffffffffffff168360010160089054906101000a900467ffffffffffffffff168460010160109054906101000a900463ffffffff16955095509550955095505091939590929450565b60026020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16908060010160009054906101000a900467ffffffffffffffff16908060010160089054906101000a900467ffffffffffffffff16908060010160109054906101000a900463ffffffff16905085565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000836fffffffffffffffffffffffffffffffff1611611817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616d6f756e742063616e206e6f74207a65726f0000000000000000000000000081525060200191505060405180910390fd5b60008163ffffffff1611611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6c6f636b20686f757273206e656564206d6f7265207468616e207a65726f000081525060200191505060405180910390fd5b60008267ffffffffffffffff16116118f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f7f6022913960400191505060405180910390fd5b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146119dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f7468697320616464726573732068617320616c7265616479206c6f636b65640081525060200191505060405180910390fd5b6119e4611ec1565b6040518060a00160405280856fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff1681526020018467ffffffffffffffff1681526020014267ffffffffffffffff1681526020018363ffffffff16815250905080600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050565b6000611bdb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d3b565b905092915050565b6000611c2583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611dfb565b905092915050565b600080831415611c405760009050611cad565b6000828402905082848281611c5157fe5b0414611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611f2f6021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015611d31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290611de8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dad578082015181840152602081019050611d92565b50505050905090810190601f168015611dda5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611ea7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e6c578082015181840152602081019050611e51565b50505050905090810190601f168015611e995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611eb357fe5b049050809150509392505050565b6040518060a0016040528060006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c792074686520636f6e74726163742061646d696e2063616e20706572666f726d207468697320616374696f6e6c6f636b2074696d657374616d70206e656564206d6f7265207468616e207a65726f596f75206861766520746f2077616974206174206c6561737420616e20686f757220746f20636c61696da26469706673582212201321d4c8206b5bba1da689ee43c73f08bd09236ac84c888faed73da0233d63bb64736f6c634300060c0033a2646970667358221220ae770558b4580299a158c8831b2238e7262327088aa124fb84864e47918bdae964736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806318d3ce961461005157806343f03ab6146100b0578063a77b6e0314610149578063b45a5c3c146101b7575b600080fd5b610059610225565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561009c578082015181840152602081019050610081565b505050509050019250505060405180910390f35b6100f2600480360360208110156100c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102b3565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561013557808201518184015260208101905061011a565b505050509050019250505060405180910390f35b61018b6004803603602081101561015f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061037f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f9600480360360208110156101cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610445565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060018054806020026020016040519081016040528092919081815260200182805480156102a957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161025f575b5050505050905090565b60606000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561037357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610329575b50505050509050919050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182038154811061041257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b600080338360405161045690610628565b808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051809103906000f0801580156104af573d6000803e3d6000fd5b5090508091506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f758ba1a81be07b9701bb6c4ac4fc3979d34e18d3465ffd5cd4c2958d231899013383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150919050565b6121ff806106368339019056fe60a060405234801561001057600080fd5b506040516121ff3803806121ff8339818101604052604081101561003357600080fd5b81019080805190602001909291908051906020019092919050505081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f61646d696e20616464726573732063616e6e6f7420626520300000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f600082604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505060805160601c6120006101ff6000398061086552806109e752806111a052506120006000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80636e5110ae116100665780636e5110ae146102865780636ff1c9bc146102da578063c62223311461031e578063e8345bd1146103d0578063f851a440146104825761009e565b806307880b7f146100a35780631c9fa3cc146100e757806321df0da71461021457806325971dff146102485780636c8381f814610252575b600080fd5b6100e5600480360360208110156100b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b6565b005b610212600480360360808110156100fd57600080fd5b810190808035906020019064010000000081111561011a57600080fd5b82018360208201111561012c57600080fd5b8035906020019184602083028401116401000000008311171561014e57600080fd5b90919293919293908035906020019064010000000081111561016f57600080fd5b82018360208201111561018157600080fd5b803590602001918460208302840111640100000000831117156101a357600080fd5b9091929391929390803590602001906401000000008111156101c457600080fd5b8201836020820111156101d657600080fd5b803590602001918460208302840111640100000000831117156101f857600080fd5b909192939192939080359060200190929190505050610653565b005b61021c6109e3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610250610a0b565b005b61025a610be4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102c46004803603602081101561029c57600080fd5b8101908080356fffffffffffffffffffffffffffffffff169060200190929190505050610c0a565b6040518082815260200191505060405180910390f35b61031c600480360360208110156102f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112a3565b005b6103606004803603602081101561033457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061153b565b60405180866fffffffffffffffffffffffffffffffff168152602001856fffffffffffffffffffffffffffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018263ffffffff1681526020019550505050505060405180910390f35b610412600480360360208110156103e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c5565b60405180866fffffffffffffffffffffffffffffffff168152602001856fffffffffffffffffffffffffffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018263ffffffff1681526020019550505050505060405180910390f35b61048a61176b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f50602f913960400191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0faed18be9e8f4d4c05dfbcc80ea2c97a0be729614d766827778f60890c02cab81600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f50602f913960400191505060405180910390fd5b848490508787905014610772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6172726179206c656e677468206e6f742065710000000000000000000000000081525060200191505060405180910390fd5b8282905087879050146107ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6172726179206c656e677468206e6f742065710000000000000000000000000081525060200191505060405180910390fd5b60008111610863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f416d6f756e7420697320696e76616c696400000000000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561091257600080fd5b505af1158015610926573d6000803e3d6000fd5b505050506040513d602081101561093c57600080fd5b81019080805190602001909291905050505060005b878790508110156109d9576109cc88888381811061096b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1687878481811061099457fe5b905060200201356fffffffffffffffffffffffffffffffff16428787868181106109ba57fe5b9050602002013563ffffffff1661178f565b8080600101915050610951565b5050505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c792063616e6469646174652063616e206265636f6d652061646d696e0081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f8160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080826fffffffffffffffffffffffffffffffff1611610c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420706172616d6574657220616d6f756e74000000000000000081525060200191505060405180910390fd5b60003390506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050428160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161115610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f56657374696e672074696d65206973206e6f742073746172746564000000000081525060200191505060405180910390fd5b60008160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1611610e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f206c6f636b20746f6b656e20746f20636c61696d0000000000000000000081525060200191505060405180910390fd5b6000610e66610e10610e588460010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1642611b9990919063ffffffff16565b611be390919063ffffffff16565b905060008111610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6e656564207761697420666f72206f6e6520686f7572206174206c656173740081525060200191505060405180910390fd5b610e108260010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16420311610f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611fa1602a913960400191505060405180910390fd5b60008260010160109054906101000a900463ffffffff1663ffffffff168210610fb9578260000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905061102d565b61102a8261101c8560010160109054906101000a900463ffffffff1663ffffffff168660000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16611be390919063ffffffff16565b611c2d90919063ffffffff16565b90505b6110728360000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682611b9990919063ffffffff16565b9050600081116110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6e6f7420617661696c61626c6520636c61696d0000000000000000000000000081525060200191505060405180910390fd5b6000866fffffffffffffffffffffffffffffffff16905081876fffffffffffffffffffffffffffffffff16111561111f578190505b611164818560000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16611cb390919063ffffffff16565b8460000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561122f57600080fd5b505af1158015611243573d6000803e3d6000fd5b505050506040513d602081101561125957600080fd5b810190808051906020019092919050505050428460010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508095505050505050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f50602f913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206164647265737320697320696e76616c6964000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561146e57600080fd5b505afa158015611482573d6000803e3d6000fd5b505050506040513d602081101561149857600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114fc57600080fd5b505af1158015611510573d6000803e3d6000fd5b505050506040513d602081101561152657600080fd5b81019080805190602001909291905050505050565b60008060008060008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f55736572206164647265737320697320696e76616c696400000000000000000081525060200191505060405180910390fd5b6000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff168160000160109054906101000a90046fffffffffffffffffffffffffffffffff168260010160009054906101000a900467ffffffffffffffff168360010160089054906101000a900467ffffffffffffffff168460010160109054906101000a900463ffffffff16955095509550955095505091939590929450565b60026020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16908060010160009054906101000a900467ffffffffffffffff16908060010160089054906101000a900467ffffffffffffffff16908060010160109054906101000a900463ffffffff16905085565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000836fffffffffffffffffffffffffffffffff1611611817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616d6f756e742063616e206e6f74207a65726f0000000000000000000000000081525060200191505060405180910390fd5b60008163ffffffff1611611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6c6f636b20686f757273206e656564206d6f7265207468616e207a65726f000081525060200191505060405180910390fd5b60008267ffffffffffffffff16116118f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f7f6022913960400191505060405180910390fd5b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146119dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f7468697320616464726573732068617320616c7265616479206c6f636b65640081525060200191505060405180910390fd5b6119e4611ec1565b6040518060a00160405280856fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff1681526020018467ffffffffffffffff1681526020014267ffffffffffffffff1681526020018363ffffffff16815250905080600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050565b6000611bdb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d3b565b905092915050565b6000611c2583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611dfb565b905092915050565b600080831415611c405760009050611cad565b6000828402905082848281611c5157fe5b0414611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611f2f6021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015611d31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290611de8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dad578082015181840152602081019050611d92565b50505050905090810190601f168015611dda5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611ea7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e6c578082015181840152602081019050611e51565b50505050905090810190601f168015611e995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611eb357fe5b049050809150509392505050565b6040518060a0016040528060006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c792074686520636f6e74726163742061646d696e2063616e20706572666f726d207468697320616374696f6e6c6f636b2074696d657374616d70206e656564206d6f7265207468616e207a65726f596f75206861766520746f2077616974206174206c6561737420616e20686f757220746f20636c61696da26469706673582212201321d4c8206b5bba1da689ee43c73f08bd09236ac84c888faed73da0233d63bb64736f6c634300060c0033a2646970667358221220ae770558b4580299a158c8831b2238e7262327088aa124fb84864e47918bdae964736f6c634300060c0033

Deployed Bytecode Sourcemap

12358:1014:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12769:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12881:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12562:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13015:354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12769:104;12819:16;12855:10;12848:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12769:104;:::o;12881:126::-;12939:16;12975:17;:24;12993:5;12975:24;;;;;;;;;;;;;;;12968:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12881:126;;;:::o;12562:199::-;12624:14;12651;12668:17;:24;12686:5;12668:24;;;;;;;;;;;;;;;:31;;;;12651:48;;12717:17;:24;12735:5;12717:24;;;;;;;;;;;;;;;12751:1;12742:6;:10;12717:36;;;;;;;;;;;;;;;;;;;;;;;;;12710:43;;;12562:199;;;:::o;13015:354::-;13075:14;13102:30;13155:10;13167:5;13135:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13102:71;;13201:14;13184:32;;13227:17;:29;13245:10;13227:29;;;;;;;;;;;;;;;13262:6;13227:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13280:10;13296:6;13280:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13319:42;13342:10;13354:6;13319:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;13015:354;;;;:::o;-1:-1:-1:-;;;;;;;;:::o

Swarm Source

ipfs://ae770558b4580299a158c8831b2238e7262327088aa124fb84864e47918bdae9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

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.