ETH Price: $2,718.21 (-2.08%)

Contract

0xedC145278Cc59e27562275654918880B830960A0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve111836472020-11-03 10:25:001556 days ago1604399100IN
0xedC14527...B830960A0
0 ETH0.0016022836.25000182
Add Whitelister111835552020-11-03 10:07:241556 days ago1604398044IN
0xedC14527...B830960A0
0 ETH0.0016214135
Add Whitelister111835142020-11-03 9:57:501556 days ago1604397470IN
0xedC14527...B830960A0
0 ETH0.0016209935
Add Timelocker111835132020-11-03 9:57:491556 days ago1604397469IN
0xedC14527...B830960A0
0 ETH0.0016180135

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RVW

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-05
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.7.0;


/**
* @title interface of ERC 20 token
* 
*/
interface IERC20 {
    
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @title IERC1404 - Simple Restricted Token Standard 
 * @dev https://github.com/ethereum/eips/issues/1404
 */
interface IERC1404 {
    
     // Implementation of all the restriction of transfer and returns error code
     function detectTransferRestriction (address from, address to, uint256 value) external view returns (uint8);

    // Returns error message off error code
    function messageForTransferRestriction (uint8 restrictionCode) external view returns (string memory);
}



/**
 * @title Implementation of the {IERC20} interface.
 *
 */
contract ERC20 is IERC20 {

    using SafeMath for uint256; 

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    string public name;
    string public symbol;
    uint8 public immutable decimals;
    uint256 public override totalSupply;
    

    constructor(string memory _name, string  memory _symbol, uint8 _decimals, uint256 _totalSupply){
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        _mint(msg.sender, _totalSupply);
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
        
     /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of token to be burned.
     */
    function burn(uint256 value) public {
        _burn(msg.sender, value);
    }

    /**
     * @dev Burns a specific amount of tokens from the target address and decrements allowance
     * @param from address The account whose tokens will be burned.
     * @param value uint256 The amount of token to be burned.
     */
    function burnFrom(address from, uint256 value) public {
        _burnFrom(from, value);
    }


    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        totalSupply = totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        totalSupply = totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    
    /**
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burnFrom(address account, uint256 value) internal {
        _burn(account, value);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(value));
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    
    address public owner;
    address private _newOwner;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), owner);
    }

    // Throws if called by any account other than the owner
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    // True if `msg.sender` is the owner of the contract.
    function isOwner() public view returns (bool) {
        return msg.sender == owner;
    }

    // Allows the current owner to relinquish control of the contract.
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }

    // Propose the new Owner of the smart contract 
    function proposeOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _newOwner = newOwner;
    }
    
    // Accept the ownership of the smart contract as a new Owner
    function acceptOwnership() public {
        require(msg.sender == _newOwner, "Ownable: caller is not the new owner");
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}



/**
 * @title TimelockerRole
 * @dev TimelockerRole can lock any users wallet for some time.
 */
contract TimelockerRole is Ownable {

    using Roles for Roles.Role;
  
    event TimelockerAdded(address indexed addedTimelocker, address indexed addedBy);
    event TimelockerRemoved(address indexed removedTimelocker, address indexed removedBy);

    Roles.Role private _timelockers;

    modifier onlyTimelocker() {
        require(isTimelocker(msg.sender), "TimelockerRole: caller does not have the Timelocker role");
        _;
    }

    function isTimelocker(address account) public view returns (bool) {
        return _timelockers.has(account);
    }

    function addTimelocker(address account) public onlyOwner {
        _addTimelocker(account);
    }

    function removeTimelocker(address account) public onlyOwner {
        _removeTimelocker(account);
    }

    function _addTimelocker(address account) internal {
        _timelockers.add(account);
        emit TimelockerAdded(account, msg.sender);
    }

    function _removeTimelocker(address account) internal {
        _timelockers.remove(account);
        emit TimelockerRemoved(account, msg.sender);
    }
}



/**
 * @title WhitelisterRole
 * @dev WhitelisterRole can whitelist any users wallet.
 */
contract WhitelisterRole is Ownable {

    using Roles for Roles.Role;
  
    event WhitelisterAdded(address indexed addedWhitelister, address indexed addedBy);
    event WhitelisterRemoved(address indexed removedWhitelister, address indexed removedBy);

    Roles.Role private _whitelisters;

    modifier onlyWhitelister() {
        require(isWhitelister(msg.sender), "WhitelisterRole: caller does not have the Whitelister role");
        _;
    }

    function isWhitelister(address account) public view returns (bool) {
        return _whitelisters.has(account);
    }

    function addWhitelister(address account) public onlyOwner {
        _addWhitelister(account);
    }

    function removeWhitelister(address account) public onlyOwner {
        _removeWhitelister(account);
    }

    function _addWhitelister(address account) internal {
        _whitelisters.add(account);
        emit WhitelisterAdded(account, msg.sender);
    }

    function _removeWhitelister(address account) internal {
        _whitelisters.remove(account);
        emit WhitelisterRemoved(account, msg.sender);
    }
}




/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 */
contract Pausable is Ownable {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);
    
    /**
     * @dev By Default it is false 
     */
    bool private _paused;

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }

     /**
     * @dev To pause the all transfer of the token
     */
    function pause() public onlyOwner {
        _pause();
    }

    /**
     * @dev To unpause the all trasfer of the token
     */
    function unpause() public onlyOwner {
        _unpause();
    }  

}

/**
 * @title Timelockable
 * @dev TimelockerRole can lock any users all fund in wallet address upto some releaseTime
 */ 

contract Timelockable is TimelockerRole{

    mapping (address => uint256) private timeLockups;

    event AccountLock(address indexed _address, uint256 _releaseTime);

    /**
    * @dev Lock the amount of this address till releaseTime
    */
    function lock( address _address, uint256 _releaseTime) public onlyTimelocker returns (bool) {
        require(_releaseTime > block.timestamp, "Timelockable: Release time should be greater than release time");
        require(_address != address(0), "Timelockable: Address should not be Zero address");
        timeLockups[_address] = _releaseTime;
        emit AccountLock(_address, _releaseTime);
        return true;
    }
    
    /**
     * @dev Get the timestamp when timelock is released
     */
    function checkLockup(address _address) public view returns(uint256) {
         return timeLockups[_address];
    }

    /**
    * @dev Check if wallet is locked or not
    */
    function isLocked(address _address) public view returns(bool) {
         return timeLockups[_address] > block.timestamp;
    }
}


/**
 * @title Whitelistable
 * @dev The Whitelistable contract has an can whitelist any address to transfer the security token
 */
contract Whitelistable is  WhitelisterRole{
    
    event SetWhitelist(address _address, bool status);

    // White list status
    mapping (address => bool) private whitelist;
    
    // Whitelist owner
    constructor(){
        whitelist[msg.sender] = true;
        emit SetWhitelist(msg.sender, true);
    }
    
    /**
    * @dev Set a white list address
    */
    function setWhitelist(address to, bool status)  public onlyWhitelister returns(bool){
        whitelist[to] = status;
        emit SetWhitelist(to, status);
        return true;
    }

    /**
    * @dev Get the status of the whitelist
    */
    function isWhitelisted(address _address) public view returns(bool){
        return whitelist[_address];
    }

    /**
    * @dev Determine if sender and receiver are whitelisted, return true if both accounts are whitelisted
    */
    function checkWhitelists(address from, address to) external view returns (bool) {
        return whitelist[from] && whitelist[to];
    }
}


/**
 * @title RVW 
 * @dev RVW is ERC20 standard with  Ownable, Pausable, Whitelistable, Timelockable and IERC1404
 */ 
contract RVW is ERC20, Ownable, Pausable, Whitelistable, Timelockable, IERC1404{

 
    uint8 public constant SUCCESS = 0;
    
    /**
     *   @dev external smart contract for transfer restriction
     */
    IERC1404 public restrictedTransfer;

    event UpdatedRestrictedTransfer(address indexed _restrictedTransfer);
    event Issue(address indexed to, uint256 value);
    
    /**
     * @dev Initializes the details of the token with all the above details
     * Also put the ERC1404 smart contract
     */
    constructor(IERC1404 _restrictedTransfer)  ERC20('RVW Movie Token', 'RVW', 18, 5000000 * (10 ** 18)) {
        restrictedTransfer = _restrictedTransfer;
    }
    
    
    /**
     * @dev modifier to check the transfer restriction
     */
    modifier notRestricted (address _from, address _to, uint256 _value) {
        uint8 code = restrictedTransfer.detectTransferRestriction(_from, _to, _value);
        require(code == SUCCESS, restrictedTransfer.messageForTransferRestriction(code));
        _;
    }
    
   /**
     * @dev Update ERC1404 smart contract
     */
    function updateRestrictedTransfer(address _restrictedTransfer) public onlyOwner{
        restrictedTransfer = IERC1404(_restrictedTransfer);
        emit UpdatedRestrictedTransfer(_restrictedTransfer);
    }
    
    /**
     * @dev Get the code of the transfer restriction
     */
    function detectTransferRestriction (address _from, address _to, uint256 _amount) public override view  returns (uint8) {
        require(restrictedTransfer != IERC1404(0), 'RestrictedTransfer: Contract is not set');
        return restrictedTransfer.detectTransferRestriction(_from, _to, _amount);
    }
        
     /**
     * @dev Get the message of the code form the trasnfer restriction contract
     */
    function messageForTransferRestriction (uint8 code) external override view  returns (string memory) {
        return restrictedTransfer.messageForTransferRestriction(code);
    }

    /**
     * @dev Standard trasnfer function is override here with restriction
     */
    function transfer (address to, uint256 value) public override notRestricted(msg.sender, to, value) returns (bool success) {
        success = super.transfer(to, value);
    }

    /**
     * @dev Standard trasnferFrom function is override here with restriction
     */
    function transferFrom (address from, address to, uint256 value) public override notRestricted(from, to, value) returns (bool success) {
        success = super.transferFrom(from, to, value);
    }
    
    
    /**
     *  @dev Taking out mistaken sent token to this Smart contract to owner 
     */
    function transferSCFunds(address token) public onlyOwner{
         require(token != address(0), 'Token: Contract Address should not be ZERO value');
         uint256 balance = IERC20(token).balanceOf(address(this));
         require( balance > 0, 'Token: Contract does not have token');
         IERC20(token).transfer(owner, balance);
    }
    
    
    /**
     *  @dev Whitelist, Issue and lock the RVW token to the address to from address from
     */
    function _issueIssueWhitelistAndTimelock(address from, address to, uint256 value, uint256 releaseTime) internal returns(bool){
        if(from == address(0) || to == address(0)) return false;
        if(releaseTime > block.timestamp){
            lock(to, releaseTime);
        }
        if(!isWhitelisted(to)){
           setWhitelist(to, true);
        }
        uint8 code = restrictedTransfer.detectTransferRestriction(from, to, value);
        if(code != SUCCESS) return false;
        transferFrom(from, to, value);
        emit Issue(to, value);
        return true;
    }
    
    /**
     *  @dev Bulk Whitelist and Issue tokens to address to from address from
     *  @param from, Wallet where tokens are present
     *  @param to, contains all the address of users wallet
     *  @param value, amount to token to be issued
     *  @param releaseTime, if greater than block.timestamp then lock it otherwise do not lock it
     */
    function bulkIssueWhitelistAndTimelock(address from, address[] calldata to, uint256[] calldata value, uint256[] calldata releaseTime) public onlyWhitelister onlyTimelocker returns (bool) {
        require(releaseTime.length == to.length, 'Bulk issue: Release Time and To Length is not same');
        require(to.length == value.length, 'Bulk issue: To and Value Length is not same');
        uint256 len = to.length;
        for(uint256 i=0; i< len;i++){
            _issueIssueWhitelistAndTimelock(from, to[i], value[i], releaseTime[i]);
        }
        return true;
    }

}


/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {

    struct Role {
        mapping (address => bool) manager;
    }

    /**
     * @dev Add the role to the account
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.manager[account] = true;
    }

    /**
     * @dev Remove the role of the account
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.manager[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.manager[account];
    }
}


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * 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).
     * - 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) {
        
        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) {
        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;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC1404","name":"_restrictedTransfer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_releaseTime","type":"uint256"}],"name":"AccountLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addedTimelocker","type":"address"},{"indexed":true,"internalType":"address","name":"addedBy","type":"address"}],"name":"TimelockerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"removedTimelocker","type":"address"},{"indexed":true,"internalType":"address","name":"removedBy","type":"address"}],"name":"TimelockerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_restrictedTransfer","type":"address"}],"name":"UpdatedRestrictedTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addedWhitelister","type":"address"},{"indexed":true,"internalType":"address","name":"addedBy","type":"address"}],"name":"WhitelisterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"removedWhitelister","type":"address"},{"indexed":true,"internalType":"address","name":"removedBy","type":"address"}],"name":"WhitelisterRemoved","type":"event"},{"inputs":[],"name":"SUCCESS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTimelocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"value","type":"uint256[]"},{"internalType":"uint256[]","name":"releaseTime","type":"uint256[]"}],"name":"bulkIssueWhitelistAndTimelock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkLockup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"checkWhitelists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"detectTransferRestriction","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTimelocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelister","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_releaseTime","type":"uint256"}],"name":"lock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"code","type":"uint8"}],"name":"messageForTransferRestriction","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"proposeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeTimelocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictedTransfer","outputs":[{"internalType":"contract IERC1404","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"transferSCFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_restrictedTransfer","type":"address"}],"name":"updateRestrictedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b5060405162004a6a38038062004a6a833981810160405260208110156200003757600080fd5b81019080805190602001909291905050506040518060400160405280600f81526020017f525657204d6f76696520546f6b656e00000000000000000000000000000000008152506040518060400160405280600381526020017f525657000000000000000000000000000000000000000000000000000000000081525060126a0422ca8b0a00a4250000008360029080519060200190620000da92919062000524565b508260039080519060200190620000f392919062000524565b508160ff1660808160ff1660f81b81525050620001173382620002d160201b60201c565b5050505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff6019ec0a78d156d249a1ec7579e2321f6ac7521d6e1d2eacf90ba4a184dcceb336001604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a180600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620005ca565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b62000391816004546200049b60201b62002f1f1790919060201c565b600481905550620003ef816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200049b60201b62002f1f1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110156200051a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200056757805160ff191683800117855562000598565b8280016001018555821562000598579182015b82811115620005975782518255916020019190600101906200057a565b5b509050620005a79190620005ab565b5090565b5b80821115620005c6576000816000905550600101620005ac565b5090565b60805160f81c614482620005e8600039806115b052506144826000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806379ba50971161013b57806399da091d116100b8578063ccc8e3d81161007c578063ccc8e3d814610da5578063d0a6d1a614610de9578063d4ce141514610e0a578063dd62ed3e14610e8f578063eaf9144a14610f0757610248565b806399da091d14610bd75780639a6e292f14610c51578063a357a6ea14610ca9578063a457c2d714610cdd578063a9059cbb14610d4157610248565b8063841aca44116100ff578063841aca4414610ab25780638456cb5914610af65780638da5cb5b14610b005780638f32d59b14610b3457806395d89b4114610b5457610248565b806379ba50971461091257806379cc67901461091c5780637d0c269f1461096a5780637f4ab1dd146109c457806382c3f79c14610a6e57610248565b80633af32abf116101c957806353d6fd591161018d57806353d6fd59146107e65780635c975abb1461084c57806370a082311461086c578063710bf322146108c4578063715018a61461090857610248565b80633af32abf146105a15780633f4ba83a146105fb57806342966c68146106055780634a4fbeec146106335780634f311bf51461068d57610248565b806323b872dd1161021057806323b872dd146103f0578063282d3fdf14610474578063313ce567146104d857806339509351146104f95780633a402f9e1461055d57610248565b8063031d40531461024d57806306fdde0314610291578063095ea7b3146103145780630c57133f1461037857806318160ddd146103d2575b600080fd5b61028f6004803603602081101561026357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f4b565b005b610299610fd1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d95780820151818401526020810190506102be565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103606004803603604081101561032a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061106f565b60405180821515815260200191505060405180910390f35b6103ba6004803603602081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611086565b60405180821515815260200191505060405180910390f35b6103da6110a3565b6040518082815260200191505060405180910390f35b61045c6004803603606081101561040657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110a9565b60405180821515815260200191505060405180910390f35b6104c06004803603604081101561048a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113d4565b60405180821515815260200191505060405180910390f35b6104e06115ae565b604051808260ff16815260200191505060405180910390f35b6105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115d2565b60405180821515815260200191505060405180910390f35b61059f6004803603602081101561057357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611677565b005b6105e3600480360360208110156105b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611949565b60405180821515815260200191505060405180910390f35b61060361199f565b005b6106316004803603602081101561061b57600080fd5b8101908080359060200190929190505050611a23565b005b6106756004803603602081101561064957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a30565b60405180821515815260200191505060405180910390f35b6107ce600480360360808110156106a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156106e057600080fd5b8201836020820111156106f257600080fd5b8035906020019184602083028401116401000000008311171561071457600080fd5b90919293919293908035906020019064010000000081111561073557600080fd5b82018360208201111561074757600080fd5b8035906020019184602083028401116401000000008311171561076957600080fd5b90919293919293908035906020019064010000000081111561078a57600080fd5b82018360208201111561079c57600080fd5b803590602001918460208302840111640100000000831117156107be57600080fd5b9091929391929390505050611a7b565b60405180821515815260200191505060405180910390f35b610834600480360360408110156107fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611c7f565b60405180821515815260200191505060405180910390f35b610854611d97565b60405180821515815260200191505060405180910390f35b6108ae6004803603602081101561088257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dae565b6040518082815260200191505060405180910390f35b610906600480360360208110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df6565b005b610910611f3a565b005b61091a612075565b005b6109686004803603604081101561093257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061221e565b005b6109ac6004803603602081101561098057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061222c565b60405180821515815260200191505060405180910390f35b6109f3600480360360208110156109da57600080fd5b81019080803560ff169060200190929190505050612249565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a33578082015181840152602081019050610a18565b50505050905090810190601f168015610a605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ab060048036036020811015610a8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c1565b005b610af460048036036020811015610ac857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612447565b005b610afe6124cd565b005b610b08612551565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b3c612577565b60405180821515815260200191505060405180910390f35b610b5c6125cf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b9c578082015181840152602081019050610b81565b50505050905090810190601f168015610bc95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c3960048036036040811015610bed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061266d565b60405180821515815260200191505060405180910390f35b610c9360048036036020811015610c6757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612719565b6040518082815260200191505060405180910390f35b610cb1612762565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d2960048036036040811015610cf357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612788565b60405180821515815260200191505060405180910390f35b610d8d60048036036040811015610d5757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612847565b60405180821515815260200191505060405180910390f35b610de760048036036020811015610dbb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b70565b005b610df1612c71565b604051808260ff16815260200191505060405180910390f35b610e7660048036036060811015610e2057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c76565b604051808260ff16815260200191505060405180910390f35b610ef160048036036040811015610ea557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e12565b6040518082815260200191505060405180910390f35b610f4960048036036020811015610f1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e99565b005b610f53612577565b610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610fce81612fa7565b50565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110675780601f1061103c57610100808354040283529160200191611067565b820191906000526020600020905b81548152906001019060200180831161104a57829003601f168201915b505050505081565b600061107c338484613018565b6001905092915050565b600061109c82600961320f90919063ffffffff16565b9050919050565b60045481565b60008383836000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4ce14158585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060206040518083038186803b15801561115f57600080fd5b505afa158015611173573d6000803e3d6000fd5b505050506040513d602081101561118957600080fd5b81019080805190602001909291905050509050600060ff168160ff1614600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f4ab1dd836040518263ffffffff1660e01b8152600401808260ff16815260200191505060006040518083038186803b15801561121c57600080fd5b505afa158015611230573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561125a57600080fd5b810190808051604051939291908464010000000082111561127a57600080fd5b8382019150602082018581111561129057600080fd5b82518660018202830111640100000000821117156112ad57600080fd5b8083526020830192505050908051906020019080838360005b838110156112e15780820151818401526020810190506112c6565b50505050905090810190601f16801561130e5780820380516001836020036101000a031916815260200191505b50604052505050906113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611380578082015181840152602081019050611365565b50505050905090810190601f1680156113ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506113c78888886132ed565b9450505050509392505050565b60006113df33611086565b611434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806141b46038913960400191505060405180910390fd5b42821161148c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614212603e913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061413c6030913960400191505060405180910390fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fa33d784ce0675e37959dfcca8bf3c9150e1f92810a9abe01509456a4caa84548836040518082815260200191505060405180910390a26001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061166d338461166885600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b613018565b6001905092915050565b61167f612577565b6116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806142e26030913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d602081101561180a57600080fd5b8101908080519060200190929190505050905060008111611876576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806143b66023913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561190957600080fd5b505af115801561191d573d6000803e3d6000fd5b505050506040513d602081101561193357600080fd5b8101908080519060200190929190505050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6119a7612577565b611a19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a216133b8565b565b611a2d33826134a4565b50565b600042600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b6000611a863361222c565b611adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614358603a913960400191505060405180910390fd5b611ae433611086565b611b39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806141b46038913960400191505060405180910390fd5b868690508383905014611b97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806140c56032913960400191505060405180910390fd5b848490508787905014611bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806143d9602b913960400191505060405180910390fd5b600087879050905060005b81811015611c6e57611c608a8a8a84818110611c1857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16898985818110611c4157fe5b90506020020135888886818110611c5457fe5b9050602002013561365c565b508080600101915050611c00565b506001915050979650505050505050565b6000611c8a3361222c565b611cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614358603a913960400191505060405180910390fd5b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff6019ec0a78d156d249a1ec7579e2321f6ac7521d6e1d2eacf90ba4a184dcceb8383604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a16001905092915050565b6000600660149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611dfe612577565b611e70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061416c6026913960400191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f42612577565b611fb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461211b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806144296024913960400191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612228828261386e565b5050565b600061224282600761320f90919063ffffffff16565b9050919050565b6060600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f4ab1dd836040518263ffffffff1660e01b8152600401808260ff16815260200191505060006040518083038186803b1580156122c157600080fd5b505afa1580156122d5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156122ff57600080fd5b810190808051604051939291908464010000000082111561231f57600080fd5b8382019150602082018581111561233557600080fd5b825186600182028301116401000000008211171561235257600080fd5b8083526020830192505050908051906020019080838360005b8381101561238657808201518184015260208101905061236b565b50505050905090810190601f1680156123b35780820380516001836020036101000a031916815260200191505b506040525050509050919050565b6123c9612577565b61243b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61244481613915565b50565b61244f612577565b6124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6124ca81613986565b50565b6124d5612577565b612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61254f6139f7565b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126655780601f1061263a57610100808354040283529160200191612665565b820191906000526020600020905b81548152906001019060200180831161264857829003601f168201915b505050505081565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127115750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061283d33846128388560405180606001604052806025815260200161440460259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae49092919063ffffffff16565b613018565b6001905092915050565b60003383836000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4ce14158585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060206040518083038186803b1580156128fd57600080fd5b505afa158015612911573d6000803e3d6000fd5b505050506040513d602081101561292757600080fd5b81019080805190602001909291905050509050600060ff168160ff1614600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f4ab1dd836040518263ffffffff1660e01b8152600401808260ff16815260200191505060006040518083038186803b1580156129ba57600080fd5b505afa1580156129ce573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156129f857600080fd5b8101908080516040519392919084640100000000821115612a1857600080fd5b83820191506020820185811115612a2e57600080fd5b8251866001820283011164010000000082111715612a4b57600080fd5b8083526020830192505050908051906020019080838360005b83811015612a7f578082015181840152602081019050612a64565b50505050905090810190601f168015612aac5780820380516001836020036101000a031916815260200191505b5060405250505090612b59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b1e578082015181840152602081019050612b03565b50505050905090810190601f168015612b4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612b648787613ba4565b94505050505092915050565b612b78612577565b612bea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f5705f2572fe5b338c3e2ba9c933427ec351e1ef3191fbcbffcac35a6f3bb9db160405160405180910390a250565b600081565b60008073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806142bb6027913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4ce14158585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060206040518083038186803b158015612dce57600080fd5b505afa158015612de2573d6000803e3d6000fd5b505050506040513d6020811015612df857600080fd5b810190808051906020019092919050505090509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612ea1612577565b612f13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612f1c81613bbb565b50565b600080828401905083811015612f9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b612fbb816009613c2c90919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f28f069fa8730ef5d44b24faedbcabf2b254c53f4e02a953476a4015e3067714160405160405180910390a350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561309e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143926024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613124576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141926022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142996022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006132fa848484613d07565b6133ad84336133a88560405180606001604052806028815260200161427160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae49092919063ffffffff16565b613018565b600190509392505050565b600660149054906101000a900460ff1661343a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561352a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806143126021913960400191505060405180910390fd5b6135958160405180606001604052806022815260200161411a602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae49092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135ec81600454613fbd90919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806136c45750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156136d25760009050613866565b428211156136e6576136e484836113d4565b505b6136ef84611949565b613700576136fe846001611c7f565b505b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4ce14158787876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060206040518083038186803b1580156137b157600080fd5b505afa1580156137c5573d6000803e3d6000fd5b505050506040513d60208110156137db57600080fd5b81019080805190602001909291905050509050600060ff168160ff1614613806576000915050613866565b6138118686866110a9565b508473ffffffffffffffffffffffffffffffffffffffff167fc65a3f767206d2fdcede0b094a4840e01c0dd0be1888b5ba800346eaa0123c16856040518082815260200191505060405180910390a260019150505b949350505050565b61387882826134a4565b613911823361390c84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613fbd90919063ffffffff16565b613018565b5050565b61392981600761400790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3ed21605dd544629fb45f2ccaedcc095ba1dbea540fb6eaf5493a7479856b0be60405160405180910390a350565b61399a81600961400790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1bac2ef39c5011bb7c20ecf6bc7cb986695b3f432a149d898c0ed368e55c780660405160405180910390a350565b600660149054906101000a900460ff1615613a7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000838311158290613b91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b56578082015181840152602081019050613b3b565b50505050905090810190601f168015613b835780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000613bb1338484613d07565b6001905092915050565b613bcf816007613c2c90919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5f36f4f5999f34947706fca376b955319b858573bf9d6bc59303c9a4cd80ced060405160405180910390a350565b613c36828261320f565b15613ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143336025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140f76023913960400191505060405180910390fd5b613e7e816040518060600160405280602681526020016141ec602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae49092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f11816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000613fff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ae4565b905092915050565b614011828261320f565b614066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806142506021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fe42756c6b2069737375653a2052656c656173652054696d6520616e6420546f204c656e677468206973206e6f742073616d6545524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636554696d656c6f636b61626c653a20416464726573732073686f756c64206e6f74206265205a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737354696d656c6f636b6572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652054696d656c6f636b657220726f6c6545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636554696d656c6f636b61626c653a2052656c656173652074696d652073686f756c642062652067726561746572207468616e2072656c656173652074696d65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373526573747269637465645472616e736665723a20436f6e7472616374206973206e6f7420736574546f6b656e3a20436f6e747261637420416464726573732073686f756c64206e6f74206265205a45524f2076616c756545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737357686974656c6973746572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c697374657220726f6c6545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373546f6b656e3a20436f6e747261637420646f6573206e6f74206861766520746f6b656e42756c6b2069737375653a20546f20616e642056616c7565204c656e677468206973206e6f742073616d6545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e6577206f776e6572a26469706673582212201f058d1071d569ddc1966478813dc143fb873a670520a2548f43f2424ae5f4ca64736f6c634300070000330000000000000000000000007e95320d823799a6e571efd66875cbdcbd7d8e43

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c806379ba50971161013b57806399da091d116100b8578063ccc8e3d81161007c578063ccc8e3d814610da5578063d0a6d1a614610de9578063d4ce141514610e0a578063dd62ed3e14610e8f578063eaf9144a14610f0757610248565b806399da091d14610bd75780639a6e292f14610c51578063a357a6ea14610ca9578063a457c2d714610cdd578063a9059cbb14610d4157610248565b8063841aca44116100ff578063841aca4414610ab25780638456cb5914610af65780638da5cb5b14610b005780638f32d59b14610b3457806395d89b4114610b5457610248565b806379ba50971461091257806379cc67901461091c5780637d0c269f1461096a5780637f4ab1dd146109c457806382c3f79c14610a6e57610248565b80633af32abf116101c957806353d6fd591161018d57806353d6fd59146107e65780635c975abb1461084c57806370a082311461086c578063710bf322146108c4578063715018a61461090857610248565b80633af32abf146105a15780633f4ba83a146105fb57806342966c68146106055780634a4fbeec146106335780634f311bf51461068d57610248565b806323b872dd1161021057806323b872dd146103f0578063282d3fdf14610474578063313ce567146104d857806339509351146104f95780633a402f9e1461055d57610248565b8063031d40531461024d57806306fdde0314610291578063095ea7b3146103145780630c57133f1461037857806318160ddd146103d2575b600080fd5b61028f6004803603602081101561026357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f4b565b005b610299610fd1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d95780820151818401526020810190506102be565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103606004803603604081101561032a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061106f565b60405180821515815260200191505060405180910390f35b6103ba6004803603602081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611086565b60405180821515815260200191505060405180910390f35b6103da6110a3565b6040518082815260200191505060405180910390f35b61045c6004803603606081101561040657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110a9565b60405180821515815260200191505060405180910390f35b6104c06004803603604081101561048a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113d4565b60405180821515815260200191505060405180910390f35b6104e06115ae565b604051808260ff16815260200191505060405180910390f35b6105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115d2565b60405180821515815260200191505060405180910390f35b61059f6004803603602081101561057357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611677565b005b6105e3600480360360208110156105b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611949565b60405180821515815260200191505060405180910390f35b61060361199f565b005b6106316004803603602081101561061b57600080fd5b8101908080359060200190929190505050611a23565b005b6106756004803603602081101561064957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a30565b60405180821515815260200191505060405180910390f35b6107ce600480360360808110156106a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156106e057600080fd5b8201836020820111156106f257600080fd5b8035906020019184602083028401116401000000008311171561071457600080fd5b90919293919293908035906020019064010000000081111561073557600080fd5b82018360208201111561074757600080fd5b8035906020019184602083028401116401000000008311171561076957600080fd5b90919293919293908035906020019064010000000081111561078a57600080fd5b82018360208201111561079c57600080fd5b803590602001918460208302840111640100000000831117156107be57600080fd5b9091929391929390505050611a7b565b60405180821515815260200191505060405180910390f35b610834600480360360408110156107fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611c7f565b60405180821515815260200191505060405180910390f35b610854611d97565b60405180821515815260200191505060405180910390f35b6108ae6004803603602081101561088257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dae565b6040518082815260200191505060405180910390f35b610906600480360360208110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df6565b005b610910611f3a565b005b61091a612075565b005b6109686004803603604081101561093257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061221e565b005b6109ac6004803603602081101561098057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061222c565b60405180821515815260200191505060405180910390f35b6109f3600480360360208110156109da57600080fd5b81019080803560ff169060200190929190505050612249565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a33578082015181840152602081019050610a18565b50505050905090810190601f168015610a605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ab060048036036020811015610a8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c1565b005b610af460048036036020811015610ac857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612447565b005b610afe6124cd565b005b610b08612551565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b3c612577565b60405180821515815260200191505060405180910390f35b610b5c6125cf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b9c578082015181840152602081019050610b81565b50505050905090810190601f168015610bc95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c3960048036036040811015610bed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061266d565b60405180821515815260200191505060405180910390f35b610c9360048036036020811015610c6757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612719565b6040518082815260200191505060405180910390f35b610cb1612762565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d2960048036036040811015610cf357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612788565b60405180821515815260200191505060405180910390f35b610d8d60048036036040811015610d5757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612847565b60405180821515815260200191505060405180910390f35b610de760048036036020811015610dbb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b70565b005b610df1612c71565b604051808260ff16815260200191505060405180910390f35b610e7660048036036060811015610e2057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c76565b604051808260ff16815260200191505060405180910390f35b610ef160048036036040811015610ea557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e12565b6040518082815260200191505060405180910390f35b610f4960048036036020811015610f1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e99565b005b610f53612577565b610fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610fce81612fa7565b50565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110675780601f1061103c57610100808354040283529160200191611067565b820191906000526020600020905b81548152906001019060200180831161104a57829003601f168201915b505050505081565b600061107c338484613018565b6001905092915050565b600061109c82600961320f90919063ffffffff16565b9050919050565b60045481565b60008383836000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4ce14158585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060206040518083038186803b15801561115f57600080fd5b505afa158015611173573d6000803e3d6000fd5b505050506040513d602081101561118957600080fd5b81019080805190602001909291905050509050600060ff168160ff1614600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f4ab1dd836040518263ffffffff1660e01b8152600401808260ff16815260200191505060006040518083038186803b15801561121c57600080fd5b505afa158015611230573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561125a57600080fd5b810190808051604051939291908464010000000082111561127a57600080fd5b8382019150602082018581111561129057600080fd5b82518660018202830111640100000000821117156112ad57600080fd5b8083526020830192505050908051906020019080838360005b838110156112e15780820151818401526020810190506112c6565b50505050905090810190601f16801561130e5780820380516001836020036101000a031916815260200191505b50604052505050906113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611380578082015181840152602081019050611365565b50505050905090810190601f1680156113ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506113c78888886132ed565b9450505050509392505050565b60006113df33611086565b611434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806141b46038913960400191505060405180910390fd5b42821161148c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614212603e913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061413c6030913960400191505060405180910390fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fa33d784ce0675e37959dfcca8bf3c9150e1f92810a9abe01509456a4caa84548836040518082815260200191505060405180910390a26001905092915050565b7f000000000000000000000000000000000000000000000000000000000000001281565b600061166d338461166885600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b613018565b6001905092915050565b61167f612577565b6116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806142e26030913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d602081101561180a57600080fd5b8101908080519060200190929190505050905060008111611876576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806143b66023913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561190957600080fd5b505af115801561191d573d6000803e3d6000fd5b505050506040513d602081101561193357600080fd5b8101908080519060200190929190505050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6119a7612577565b611a19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a216133b8565b565b611a2d33826134a4565b50565b600042600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b6000611a863361222c565b611adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614358603a913960400191505060405180910390fd5b611ae433611086565b611b39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806141b46038913960400191505060405180910390fd5b868690508383905014611b97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806140c56032913960400191505060405180910390fd5b848490508787905014611bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806143d9602b913960400191505060405180910390fd5b600087879050905060005b81811015611c6e57611c608a8a8a84818110611c1857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16898985818110611c4157fe5b90506020020135888886818110611c5457fe5b9050602002013561365c565b508080600101915050611c00565b506001915050979650505050505050565b6000611c8a3361222c565b611cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614358603a913960400191505060405180910390fd5b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff6019ec0a78d156d249a1ec7579e2321f6ac7521d6e1d2eacf90ba4a184dcceb8383604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a16001905092915050565b6000600660149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611dfe612577565b611e70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061416c6026913960400191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f42612577565b611fb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461211b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806144296024913960400191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612228828261386e565b5050565b600061224282600761320f90919063ffffffff16565b9050919050565b6060600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f4ab1dd836040518263ffffffff1660e01b8152600401808260ff16815260200191505060006040518083038186803b1580156122c157600080fd5b505afa1580156122d5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156122ff57600080fd5b810190808051604051939291908464010000000082111561231f57600080fd5b8382019150602082018581111561233557600080fd5b825186600182028301116401000000008211171561235257600080fd5b8083526020830192505050908051906020019080838360005b8381101561238657808201518184015260208101905061236b565b50505050905090810190601f1680156123b35780820380516001836020036101000a031916815260200191505b506040525050509050919050565b6123c9612577565b61243b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61244481613915565b50565b61244f612577565b6124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6124ca81613986565b50565b6124d5612577565b612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61254f6139f7565b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126655780601f1061263a57610100808354040283529160200191612665565b820191906000526020600020905b81548152906001019060200180831161264857829003601f168201915b505050505081565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127115750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061283d33846128388560405180606001604052806025815260200161440460259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae49092919063ffffffff16565b613018565b6001905092915050565b60003383836000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4ce14158585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060206040518083038186803b1580156128fd57600080fd5b505afa158015612911573d6000803e3d6000fd5b505050506040513d602081101561292757600080fd5b81019080805190602001909291905050509050600060ff168160ff1614600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f4ab1dd836040518263ffffffff1660e01b8152600401808260ff16815260200191505060006040518083038186803b1580156129ba57600080fd5b505afa1580156129ce573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156129f857600080fd5b8101908080516040519392919084640100000000821115612a1857600080fd5b83820191506020820185811115612a2e57600080fd5b8251866001820283011164010000000082111715612a4b57600080fd5b8083526020830192505050908051906020019080838360005b83811015612a7f578082015181840152602081019050612a64565b50505050905090810190601f168015612aac5780820380516001836020036101000a031916815260200191505b5060405250505090612b59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b1e578082015181840152602081019050612b03565b50505050905090810190601f168015612b4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612b648787613ba4565b94505050505092915050565b612b78612577565b612bea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f5705f2572fe5b338c3e2ba9c933427ec351e1ef3191fbcbffcac35a6f3bb9db160405160405180910390a250565b600081565b60008073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806142bb6027913960400191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4ce14158585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060206040518083038186803b158015612dce57600080fd5b505afa158015612de2573d6000803e3d6000fd5b505050506040513d6020811015612df857600080fd5b810190808051906020019092919050505090509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612ea1612577565b612f13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612f1c81613bbb565b50565b600080828401905083811015612f9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b612fbb816009613c2c90919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f28f069fa8730ef5d44b24faedbcabf2b254c53f4e02a953476a4015e3067714160405160405180910390a350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561309e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806143926024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613124576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141926022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142996022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006132fa848484613d07565b6133ad84336133a88560405180606001604052806028815260200161427160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae49092919063ffffffff16565b613018565b600190509392505050565b600660149054906101000a900460ff1661343a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561352a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806143126021913960400191505060405180910390fd5b6135958160405180606001604052806022815260200161411a602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae49092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135ec81600454613fbd90919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806136c45750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156136d25760009050613866565b428211156136e6576136e484836113d4565b505b6136ef84611949565b613700576136fe846001611c7f565b505b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4ce14158787876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060206040518083038186803b1580156137b157600080fd5b505afa1580156137c5573d6000803e3d6000fd5b505050506040513d60208110156137db57600080fd5b81019080805190602001909291905050509050600060ff168160ff1614613806576000915050613866565b6138118686866110a9565b508473ffffffffffffffffffffffffffffffffffffffff167fc65a3f767206d2fdcede0b094a4840e01c0dd0be1888b5ba800346eaa0123c16856040518082815260200191505060405180910390a260019150505b949350505050565b61387882826134a4565b613911823361390c84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613fbd90919063ffffffff16565b613018565b5050565b61392981600761400790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3ed21605dd544629fb45f2ccaedcc095ba1dbea540fb6eaf5493a7479856b0be60405160405180910390a350565b61399a81600961400790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1bac2ef39c5011bb7c20ecf6bc7cb986695b3f432a149d898c0ed368e55c780660405160405180910390a350565b600660149054906101000a900460ff1615613a7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000838311158290613b91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b56578082015181840152602081019050613b3b565b50505050905090810190601f168015613b835780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000613bb1338484613d07565b6001905092915050565b613bcf816007613c2c90919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5f36f4f5999f34947706fca376b955319b858573bf9d6bc59303c9a4cd80ced060405160405180910390a350565b613c36828261320f565b15613ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143336025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140f76023913960400191505060405180910390fd5b613e7e816040518060600160405280602681526020016141ec602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae49092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f11816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000613fff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ae4565b905092915050565b614011828261320f565b614066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806142506021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fe42756c6b2069737375653a2052656c656173652054696d6520616e6420546f204c656e677468206973206e6f742073616d6545524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636554696d656c6f636b61626c653a20416464726573732073686f756c64206e6f74206265205a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737354696d656c6f636b6572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652054696d656c6f636b657220726f6c6545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636554696d656c6f636b61626c653a2052656c656173652074696d652073686f756c642062652067726561746572207468616e2072656c656173652074696d65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373526573747269637465645472616e736665723a20436f6e7472616374206973206e6f7420736574546f6b656e3a20436f6e747261637420416464726573732073686f756c64206e6f74206265205a45524f2076616c756545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737357686974656c6973746572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c697374657220726f6c6545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373546f6b656e3a20436f6e747261637420646f6573206e6f74206861766520746f6b656e42756c6b2069737375653a20546f20616e642056616c7565204c656e677468206973206e6f742073616d6545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e6577206f776e6572a26469706673582212201f058d1071d569ddc1966478813dc143fb873a670520a2548f43f2424ae5f4ca64736f6c63430007000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007e95320d823799a6e571efd66875cbdcbd7d8e43

-----Decoded View---------------
Arg [0] : _restrictedTransfer (address): 0x7e95320D823799a6E571eFd66875CBdCbD7d8E43

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007e95320d823799a6e571efd66875cbdcbd7d8e43


Deployed Bytecode Sourcemap

17803:4739:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11434:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1563:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2858:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11309:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1653:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20204:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15667:430;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1615:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4233:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20516:346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17289:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15205:65;;;:::i;:::-;;5359:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16370:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21954:583;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17033:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13821:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1992:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10269:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10070:138;;;:::i;:::-;;10531:207;;;:::i;:::-;;5692:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12536:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19644:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12772:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11541:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15065:61;;;:::i;:::-;;9389:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9899:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1588:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17532:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16184:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18022:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4950:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19924:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18929:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17894:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19223:306;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2560:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12663:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11434:99;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11502:23:::1;11517:7;11502:14;:23::i;:::-;11434:99:::0;:::o;1563:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2858:167::-;2941:4;2958:37;2967:10;2979:7;2988:6;2958:8;:37::i;:::-;3013:4;3006:11;;2858:167;;;;:::o;11309:117::-;11369:4;11393:25;11410:7;11393:12;:16;;:25;;;;:::i;:::-;11386:32;;11309:117;;;:::o;1653:35::-;;;;:::o;20204:198::-;20324:12;20298:4;20304:2;20308:5;18669:10;18682:18;;;;;;;;;;;:44;;;18727:5;18734:3;18739:6;18682:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18669:77;;17926:1;18765:15;;:4;:15;;;18782:18;;;;;;;;;;;:48;;;18831:4;18782:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18757:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20359:35:::1;20378:4;20384:2;20388:5;20359:18;:35::i;:::-;20349:45;;20204:198:::0;;;;;;;;;:::o;15667:430::-;15753:4;11196:24;11209:10;11196:12;:24::i;:::-;11188:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15793:15:::1;15778:12;:30;15770:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15914:1;15894:22;;:8;:22;;;;15886:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16004:12;15980:11;:21;15992:8;15980:21;;;;;;;;;;;;;;;:36;;;;16044:8;16032:35;;;16054:12;16032:35;;;;;;;;;;;;;;;;;;16085:4;16078:11;;15667:430:::0;;;;:::o;1615:31::-;;;:::o;4233:214::-;4321:4;4338:79;4347:10;4359:7;4368:48;4405:10;4368:11;:23;4380:10;4368:23;;;;;;;;;;;;;;;:32;4392:7;4368:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;4338:8;:79::i;:::-;4435:4;4428:11;;4233:214;;;;:::o;20516:346::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20609:1:::1;20592:19;;:5;:19;;;;20584:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20676:15;20701:5;20694:23;;;20726:4;20694:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;20676:56;;20763:1;20753:7;:11;20744:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20823:5;20816:22;;;20839:5;;;;;;;;;;;20846:7;20816:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;9823:1;20516:346:::0;:::o;17289:111::-;17350:4;17373:9;:19;17383:8;17373:19;;;;;;;;;;;;;;;;;;;;;;;;;17366:26;;17289:111;;;:::o;15205:65::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15252:10:::1;:8;:10::i;:::-;15205:65::o:0;5359:79::-;5406:24;5412:10;5424:5;5406;:24::i;:::-;5359:79;:::o;16370:128::-;16426:4;16475:15;16451:11;:21;16463:8;16451:21;;;;;;;;;;;;;;;;:39;16444:46;;16370:128;;;:::o;21954:583::-;22135:4;12420:25;12434:10;12420:13;:25::i;:::-;12412:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11196:24:::1;11209:10;11196:12;:24::i;:::-;11188:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22182:2:::2;;:9;;22160:11;;:18;;:31;22152:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22278:5;;:12;;22265:2;;:9;;:25;22257:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22349:11;22363:2;;:9;;22349:23;;22387:9;22383:125;22403:3;22400:1;:6;22383:125;;;22426:70;22458:4;22464:2;;22467:1;22464:5;;;;;;;;;;;;;;;22471;;22477:1;22471:8;;;;;;;;;;;;;22481:11;;22493:1;22481:14;;;;;;;;;;;;;22426:31;:70::i;:::-;;22407:3;;;;;;;22383:125;;;;22525:4;22518:11;;;21954:583:::0;;;;;;;;;:::o;17033:187::-;17112:4;12420:25;12434:10;12420:13;:25::i;:::-;12412:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17144:6:::1;17128:9;:13;17138:2;17128:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;17166:24;17179:2;17183:6;17166:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;17208:4;17201:11;;17033:187:::0;;;;:::o;13821:78::-;13860:4;13884:7;;;;;;;;;;;13877:14;;13821:78;:::o;1992:119::-;2058:7;2085:9;:18;2095:7;2085:18;;;;;;;;;;;;;;;;2078:25;;1992:119;;;:::o;10269:184::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10369:1:::1;10349:22;;:8;:22;;;;10341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10437:8;10425:9;;:20;;;;;;;;;;;;;;;;;;10269:184:::0;:::o;10070:138::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10168:1:::1;10132:39;;10153:5;;;;;;;;;;;10132:39;;;;;;;;;;;;10198:1;10182:5;;:18;;;;;;;;;;;;;;;;;;10070:138::o:0;10531:207::-;10598:9;;;;;;;;;;;10584:23;;:10;:23;;;10576:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10692:9;;;;;;;;;;;10664:38;;10685:5;;;;;;;;;;;10664:38;;;;;;;;;;;;10721:9;;;;;;;;;;;10713:5;;:17;;;;;;;;;;;;;;;;;;10531:207::o;5692:95::-;5757:22;5767:4;5773:5;5757:9;:22::i;:::-;5692:95;;:::o;12536:119::-;12597:4;12621:26;12639:7;12621:13;:17;;:26;;;;:::i;:::-;12614:33;;12536:119;;;:::o;19644:180::-;19729:13;19762:18;;;;;;;;;;;:48;;;19811:4;19762:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19755:61;;19644:180;;;:::o;12772:107::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12844:27:::1;12863:7;12844:18;:27::i;:::-;12772:107:::0;:::o;11541:105::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11612:26:::1;11630:7;11612:17;:26::i;:::-;11541:105:::0;:::o;15065:61::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15110:8:::1;:6;:8::i;:::-;15065:61::o:0;9389:20::-;;;;;;;;;;;;;:::o;9899:91::-;9939:4;9977:5;;;;;;;;;;;9963:19;;:10;:19;;;9956:26;;9899:91;:::o;1588:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17532:138::-;17606:4;17630:9;:15;17640:4;17630:15;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;;17649:9;:13;17659:2;17649:13;;;;;;;;;;;;;;;;;;;;;;;;;17630:32;17623:39;;17532:138;;;;:::o;16184:116::-;16243:7;16271:11;:21;16283:8;16271:21;;;;;;;;;;;;;;;;16264:28;;16184:116;;;:::o;18022:34::-;;;;;;;;;;;;;:::o;4950:265::-;5043:4;5060:125;5069:10;5081:7;5090:94;5127:15;5090:94;;;;;;;;;;;;;;;;;:11;:23;5102:10;5090:23;;;;;;;;;;;;;;;:32;5114:7;5090:32;;;;;;;;;;;;;;;;:36;;:94;;;;;:::i;:::-;5060:8;:125::i;:::-;5203:4;5196:11;;4950:265;;;;:::o;19924:176::-;20032:12;20000:10;20012:2;20016:5;18669:10;18682:18;;;;;;;;;;;:44;;;18727:5;18734:3;18739:6;18682:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18669:77;;17926:1;18765:15;;:4;:15;;;18782:18;;;;;;;;;;;:48;;;18831:4;18782:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18757:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20067:25:::1;20082:2;20086:5;20067:14;:25::i;:::-;20057:35;;19924:176:::0;;;;;;;;:::o;18929:210::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19049:19:::1;19019:18;;:50;;;;;;;;;;;;;;;;;;19111:19;19085:46;;;;;;;;;;;;18929:210:::0;:::o;17894:33::-;17926:1;17894:33;:::o;19223:306::-;19335:5;19392:1;19361:33;;:18;;;;;;;;;;;:33;;;;19353:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19456:18;;;;;;;;;;;:44;;;19501:5;19508:3;19513:7;19456:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19449:72;;19223:306;;;;;:::o;2560:151::-;2649:7;2676:11;:18;2688:5;2676:18;;;;;;;;;;;;;;;:27;2695:7;2676:27;;;;;;;;;;;;;;;;2669:34;;2560:151;;;;:::o;12663:101::-;9766:9;:7;:9::i;:::-;9758:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12732:24:::1;12748:7;12732:15;:24::i;:::-;12663:101:::0;:::o;23642:181::-;23700:7;23720:9;23736:1;23732;:5;23720:17;;23761:1;23756;:6;;23748:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23814:1;23807:8;;;23642:181;;;;:::o;11654:146::-;11715:25;11732:7;11715:12;:16;;:25;;;;:::i;:::-;11781:10;11756:36;;11772:7;11756:36;;;;;;;;;;;;11654:146;:::o;8803:346::-;8922:1;8905:19;;:5;:19;;;;8897:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9003:1;8984:21;;:7;:21;;;;8976:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:6;9057:11;:18;9069:5;9057:18;;;;;;;;;;;;;;;:27;9076:7;9057:27;;;;;;;;;;;;;;;:36;;;;9125:7;9109:32;;9118:5;9109:32;;;9134:6;9109:32;;;;;;;;;;;;;;;;;;8803:346;;;:::o;23296:204::-;23368:4;23412:1;23393:21;;:7;:21;;;;23385:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23471:4;:12;;:21;23484:7;23471:21;;;;;;;;;;;;;;;;;;;;;;;;;23464:28;;23296:204;;;;:::o;3507:317::-;3613:4;3630:36;3640:6;3648:9;3659:6;3630:9;:36::i;:::-;3677:117;3686:6;3694:10;3706:87;3742:6;3706:87;;;;;;;;;;;;;;;;;:11;:19;3718:6;3706:19;;;;;;;;;;;;;;;:31;3726:10;3706:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;3677:8;:117::i;:::-;3812:4;3805:11;;3507:317;;;;;:::o;14868:118::-;14415:7;;;;;;;;;;;14407:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14937:5:::1;14927:7;;:15;;;;;;;;;;;;;;;;;;14958:20;14967:10;14958:20;;;;;;;;;;;;;;;;;;;;14868:118::o:0;7683:352::-;7786:1;7767:21;;:7;:21;;;;7759:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7858:68;7881:6;7858:68;;;;;;;;;;;;;;;;;:9;:18;7868:7;7858:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;7837:9;:18;7847:7;7837:18;;;;;;;;;;;;;;;:89;;;;7951:23;7967:6;7951:11;;:15;;:23;;;;:::i;:::-;7937:11;:37;;;;8016:1;7990:37;;7999:7;7990:37;;;8020:6;7990:37;;;;;;;;;;;;;;;;;;7683:352;;:::o;20988:592::-;21108:4;21143:1;21127:18;;:4;:18;;;:38;;;;21163:1;21149:16;;:2;:16;;;21127:38;21124:55;;;21174:5;21167:12;;;;21124:55;21207:15;21193:11;:29;21190:81;;;21238:21;21243:2;21247:11;21238:4;:21::i;:::-;;21190:81;21285:17;21299:2;21285:13;:17::i;:::-;21281:70;;21317:22;21330:2;21334:4;21317:12;:22::i;:::-;;21281:70;21361:10;21374:18;;;;;;;;;;;:44;;;21419:4;21425:2;21429:5;21374:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21361:74;;17926:1;21449:15;;:4;:15;;;21446:32;;21473:5;21466:12;;;;;21446:32;21489:29;21502:4;21508:2;21512:5;21489:12;:29::i;:::-;;21540:2;21534:16;;;21544:5;21534:16;;;;;;;;;;;;;;;;;;21568:4;21561:11;;;20988:592;;;;;;;:::o;8180:185::-;8251:21;8257:7;8266:5;8251;:21::i;:::-;8283:74;8292:7;8301:10;8313:43;8350:5;8313:11;:20;8325:7;8313:20;;;;;;;;;;;;;;;:32;8334:10;8313:32;;;;;;;;;;;;;;;;:36;;:43;;;;:::i;:::-;8283:8;:74::i;:::-;8180:185;;:::o;13044:157::-;13109:29;13130:7;13109:13;:20;;:29;;;;:::i;:::-;13182:10;13154:39;;13173:7;13154:39;;;;;;;;;;;;13044:157;:::o;11808:154::-;11872:28;11892:7;11872:12;:19;;:28;;;;:::i;:::-;11943:10;11916:38;;11934:7;11916:38;;;;;;;;;;;;11808:154;:::o;14611:116::-;14139:7;;;;;;;;;;;14138:8;14130:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14681:4:::1;14671:7;;:14;;;;;;;;;;;;;;;;;;14701:18;14708:10;14701:18;;;;;;;;;;;;;;;;;;;;14611:116::o:0;24451:192::-;24537:7;24570:1;24565;:6;;24573:12;24557:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24597:9;24613:1;24609;:5;24597:17;;24634:1;24627:8;;;24451:192;;;;;:::o;2324:173::-;2410:4;2427:40;2437:10;2449:9;2460:6;2427:9;:40::i;:::-;2485:4;2478:11;;2324:173;;;;:::o;12887:149::-;12949:26;12967:7;12949:13;:17;;:26;;;;:::i;:::-;13017:10;12991:37;;13008:7;12991:37;;;;;;;;;;;;12887:149;:::o;22789:179::-;22867:18;22871:4;22877:7;22867:3;:18::i;:::-;22866:19;22858:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22956:4;22932;:12;;:21;22945:7;22932:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22789:179;;:::o;6279:477::-;6403:1;6385:20;;:6;:20;;;;6377:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6487:1;6466:23;;:9;:23;;;;6458:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6560;6582:6;6560:71;;;;;;;;;;;;;;;;;:9;:17;6570:6;6560:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;6540:9;:17;6550:6;6540:17;;;;;;;;;;;;;;;:91;;;;6665:32;6690:6;6665:9;:20;6675:9;6665:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;6642:9;:20;6652:9;6642:20;;;;;;;;;;;;;;;:55;;;;6730:9;6713:35;;6722:6;6713:35;;;6741:6;6713:35;;;;;;;;;;;;;;;;;;6279:477;;;:::o;24012:136::-;24070:7;24097:43;24101:1;24104;24097:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;24090:50;;24012:136;;;;:::o;23038:184::-;23118:18;23122:4;23128:7;23118:3;:18::i;:::-;23110:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23209:5;23185:4;:12;;:21;23198:7;23185:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23038:184;;:::o

Swarm Source

ipfs://1f058d1071d569ddc1966478813dc143fb873a670520a2548f43f2424ae5f4ca

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  ]

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.