ETH Price: $1,866.66 (+2.96%)

Contract

0xFfFAb974088Bd5bF3d7E6F522e93Dd7861264cDB
 

Overview

ETH Balance

0.0005 ETH

Eth Value

$0.93 (@ $1,866.66/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer204533642024-08-04 6:22:11240 days ago1722752531IN
0xFfFAb974...861264cDB
0 ETH0.000024141
Transfer127067182021-06-26 1:32:231375 days ago1624671143IN
0xFfFAb974...861264cDB
0 ETH0.000118264.90625
Transfer121588802021-04-02 7:57:001460 days ago1617350220IN
0xFfFAb974...861264cDB
0 ETH0.00371965162.85714285
Transfer121588692021-04-02 7:55:171460 days ago1617350117IN
0xFfFAb974...861264cDB
0 ETH0.00371965162.85714285
Transfer121405912021-03-30 12:26:531462 days ago1617107213IN
0xFfFAb974...861264cDB
0 ETH0.00335571147
Transfer121393022021-03-30 7:32:421463 days ago1617089562IN
0xFfFAb974...861264cDB
0 ETH0.00294636129.00000145
Transfer121391992021-03-30 7:09:561463 days ago1617088196IN
0xFfFAb974...861264cDB
0 ETH0.00267228117.00000156
Transfer119389272021-02-27 10:54:051494 days ago1614423245IN
0xFfFAb974...861264cDB
0 ETH0.0018728882
Transfer114877012020-12-20 3:14:581563 days ago1608434098IN
0xFfFAb974...861264cDB
0 ETH0.0005938426.00000145
Transfer114853972020-12-19 18:44:201563 days ago1608403460IN
0xFfFAb974...861264cDB
0 ETH0.0005253223.00000112
Transfer114850382020-12-19 17:24:431563 days ago1608398683IN
0xFfFAb974...861264cDB
0 ETH0.0010049644.00000145
Transfer114824402020-12-19 8:04:201564 days ago1608365060IN
0xFfFAb974...861264cDB
0 ETH0.0007426632.55000276
Transfer114823652020-12-19 7:46:261564 days ago1608363986IN
0xFfFAb974...861264cDB
0 ETH0.0007529233.00000145
Transfer114799402020-12-18 22:42:461564 days ago1608331366IN
0xFfFAb974...861264cDB
0 ETH0.0009369341.00000145
Transfer114771832020-12-18 12:24:461564 days ago1608294286IN
0xFfFAb974...861264cDB
0 ETH0.0007080431.00000112
Transfer114751532020-12-18 5:07:331565 days ago1608268053IN
0xFfFAb974...861264cDB
0 ETH0.0014153362
Transfer114751312020-12-18 5:00:361565 days ago1608267636IN
0xFfFAb974...861264cDB
0 ETH0.0014153362
Set Paused113495562020-11-28 21:38:561584 days ago1606599536IN
0xFfFAb974...861264cDB
0 ETH0.0005734513
Transfer112608862020-11-15 6:54:131598 days ago1605423253IN
0xFfFAb974...861264cDB
0 ETH0.0005770315.00000145
Transfer112353842020-11-11 9:02:431602 days ago1605085363IN
0xFfFAb974...861264cDB
0 ETH0.0011585714
Transfer111716222020-11-01 14:07:061611 days ago1604239626IN
0xFfFAb974...861264cDB
0 ETH0.001829727.00000123
Transfer111715732020-11-01 13:55:491611 days ago1604238949IN
0xFfFAb974...861264cDB
0 ETH0.00254126
Transfer111561602020-10-30 5:02:291614 days ago1604034149IN
0xFfFAb974...861264cDB
0 ETH0.0028176333.00000269
Transfer111488662020-10-29 2:11:561615 days ago1603937516IN
0xFfFAb974...861264cDB
0 ETH0.0011819439.6
Transfer111439582020-10-28 8:08:441616 days ago1603872524IN
0xFfFAb974...861264cDB
0 ETH0.0013139233
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Voken2

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-08-22
*/

pragma solidity ^0.5.11;

// Vision.Network 100G Token v2.0
//
// Upgraded in Aug 2019
//
// More info:
//   https://vision.network
//   https://voken.io
//
// Contact us:
//   [email protected]
//   [email protected]


/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow checks.
 */
library SafeMath256 {
    /**
     * @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).
     */
    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).
     */
    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.
     */
    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.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by 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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


/**
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

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


/**
 * @dev Interface of the ERC20 standard
 */
interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    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);
}


/**
 * @dev Interface of an allocation contract.
 */
interface IAllocation {
    function reservedOf(address account) external view returns (uint256);
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 */
contract Ownable {
    address internal _owner;
    address internal _newOwner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event OwnershipAccepted(address indexed previousOwner, address indexed newOwner);


    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the addresses of the current and new owner.
     */
    function owner() public view returns (address currentOwner, address newOwner) {
        currentOwner = _owner;
        newOwner = _newOwner;
    }

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

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     *
     * IMPORTANT: Need to run {acceptOwnership} by the new owner.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");

        emit OwnershipTransferred(_owner, newOwner);
        _newOwner = newOwner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     *
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Accept ownership of the contract.
     *
     * Can only be called by the new owner.
     */
    function acceptOwnership() public {
        require(msg.sender == _newOwner, "Ownable: caller is not the new owner address");
        require(msg.sender != address(0), "Ownable: caller is the zero address");

        emit OwnershipAccepted(_owner, msg.sender);
        _owner = msg.sender;
        _newOwner = address(0);
    }

    /**
     * @dev Rescue compatible ERC20 Token
     *
     * Can only be called by the current owner.
     */
    function rescueTokens(address tokenAddr, address recipient, uint256 amount) external onlyOwner {
        IERC20 _token = IERC20(tokenAddr);
        require(recipient != address(0), "Rescue: recipient is the zero address");
        uint256 balance = _token.balanceOf(address(this));

        require(balance >= amount, "Rescue: amount exceeds balance");
        _token.transfer(recipient, amount);
    }

    /**
     * @dev Withdraw Ether
     *
     * Can only be called by the current owner.
     */
    function withdrawEther(address payable recipient, uint256 amount) external onlyOwner {
        require(recipient != address(0), "Withdraw: recipient is the zero address");

        uint256 balance = address(this).balance;

        require(balance >= amount, "Withdraw: amount exceeds balance");
        recipient.transfer(amount);
    }
}


/**
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    bool private _paused;

    event Paused();
    event Unpaused();


    /**
     * @dev Constructor
     */
    constructor () internal {
        _paused = false;
    }

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

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Paused");
        _;
    }

    /**
     * @dev Sets paused state.
     *
     * Can only be called by the current owner.
     */
    function setPaused(bool value) external onlyOwner {
        _paused = value;

        if (_paused) {
            emit Paused();
        } else {
            emit Unpaused();
        }
    }
}


/**
 * @title Voken Main Contract v2.0
 */
contract Voken2 is Ownable, Pausable, IERC20 {
    using SafeMath256 for uint256;
    using Roles for Roles.Role;

    Roles.Role private _globals;
    Roles.Role private _proxies;
    Roles.Role private _minters;

    string private _name = "Vision.Network 100G Token v2.0";
    string private _symbol = "Voken2.0";
    uint8 private _decimals = 6;
    uint256 private _cap;
    uint256 private _totalSupply;

    bool private _whitelistingMode;
    bool private _safeMode;
    uint16 private _BURNING_PERMILL;
    uint256 private _whitelistCounter;
    uint256 private _WHITELIST_TRIGGER = 1001000000;     // 1001 VOKEN for sign-up trigger
    uint256 private _WHITELIST_REFUND = 1000000;         //    1 VOKEN for success signal
    uint256[15] private _WHITELIST_REWARDS = [
        300000000,  // 300 Voken for Level.1
        200000000,  // 200 Voken for Level.2
        100000000,  // 100 Voken for Level.3
        100000000,  // 100 Voken for Level.4
        100000000,  // 100 Voken for Level.5
        50000000,   //  50 Voken for Level.6
        40000000,   //  40 Voken for Level.7
        30000000,   //  30 Voken for Level.8
        20000000,   //  20 Voken for Level.9
        10000000,   //  10 Voken for Level.10
        10000000,   //  10 Voken for Level.11
        10000000,   //  10 Voken for Level.12
        10000000,   //  10 Voken for Level.13
        10000000,   //  10 Voken for Level.14
        10000000    //  10 Voken for Level.15
    ];

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => IAllocation[]) private _allocations;
    mapping (address => mapping (address => bool)) private _addressAllocations;

    mapping (address => address) private _referee;
    mapping (address => address[]) private _referrals;

    event Donate(address indexed account, uint256 amount);
    event Burn(address indexed account, uint256 amount);
    event ProxyAdded(address indexed account);
    event ProxyRemoved(address indexed account);
    event GlobalAdded(address indexed account);
    event GlobalRemoved(address indexed account);
    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);
    event Mint(address indexed account, uint256 amount);
    event MintWithAllocation(address indexed account, uint256 amount, IAllocation indexed allocationContract);
    event WhitelistSignUpEnabled();
    event WhitelistSignUpDisabled();
    event WhitelistSignUp(address indexed account, address indexed refereeAccount);
    event SafeModeOn();
    event SafeModeOff();
    event BurningModeOn();
    event BurningModeOff();


    /**
     * @dev Returns true if the `account` has the Global role
     */
    function isGlobal(address account) public view returns (bool) {
        return _globals.has(account);
    }

    /**
     * @dev Give an `account` access to the Global role.
     *
     * Can only be called by the current owner.
     */
    function addGlobal(address account) public onlyOwner {
        _globals.add(account);
        emit GlobalAdded(account);
    }

    /**
     * @dev Remove an `account` access from the Global role.
     *
     * Can only be called by the current owner.
     */
    function removeGlobal(address account) public onlyOwner {
        _globals.remove(account);
        emit GlobalRemoved(account);
    }

    /**
     * @dev Throws if called by account which is not a proxy.
     */
    modifier onlyProxy() {
        require(isProxy(msg.sender), "ProxyRole: caller does not have the Proxy role");
        _;
    }

    /**
     * @dev Returns true if the `account` has the Proxy role.
     */
    function isProxy(address account) public view returns (bool) {
        return _proxies.has(account);
    }

    /**
     * @dev Give an `account` access to the Proxy role.
     *
     * Can only be called by the current owner.
     */
    function addProxy(address account) public onlyOwner {
        _proxies.add(account);
        emit ProxyAdded(account);
    }

    /**
     * @dev Remove an `account` access from the Proxy role.
     *
     * Can only be called by the current owner.
     */
    function removeProxy(address account) public onlyOwner {
        _proxies.remove(account);
        emit ProxyRemoved(account);
    }

    /**
     * @dev Throws if called by account which is not a minter.
     */
    modifier onlyMinter() {
        require(isMinter(msg.sender), "MinterRole: caller does not have the Minter role");
        _;
    }

    /**
     * @dev Returns true if the `account` has the Minter role
     */
    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    /**
     * @dev Give an `account` access to the Minter role.
     *
     * Can only be called by the current owner.
     */
    function addMinter(address account) public onlyOwner {
        _minters.add(account);
        emit MinterAdded(account);
    }

    /**
     * @dev Remove an `account` access from the Minter role.
     *
     * Can only be called by the current owner.
     */
    function removeMinter(address account) public onlyOwner {
        _minters.remove(account);
        emit MinterRemoved(account);
    }


    /**
     * @dev Constructor
     */
    constructor () public {
        addGlobal(address(this));
        addProxy(msg.sender);
        addMinter(msg.sender);
        setWhitelistingMode(true);
        setSafeMode(true);
        setBurningMode(10);

        _cap = 35000000000000000;   // 35 billion cap, that is 35000000000.000000

        _whitelistCounter = 1;
        _referee[msg.sender] = msg.sender;
        emit WhitelistSignUp(msg.sender, msg.sender);
    }

    /**
     * @dev Donate
     */
    function () external payable {
        if (msg.value > 0) {
            emit Donate(msg.sender, msg.value);
        }
    }

    /**
     * @dev Returns the full name of VOKEN.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of VOKEN.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Returns the cap on VOKEN's total supply.
     */
    function cap() public view returns (uint256) {
        return _cap;
    }

    /**
     * @dev Returns the amount of VOKEN in existence.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Returns the amount of VOKEN owned by `account`.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev Returns the reserved amount of VOKEN by `account`.
     */
    function reservedOf(address account) public view returns (uint256 reserved) {
        uint256 __len = _allocations[account].length;
        if (__len > 0) {
            for (uint256 i = 0; i < __len; i++) {
                reserved = reserved.add(_allocations[account][i].reservedOf(account));
            }
        }
    }

    /**
     * @dev Returns the available amount of VOKEN by `account` and a certain `amount`.
     */
    function _getAvailableAmount(address account, uint256 amount) private view returns (uint256) {
        uint256 __available = balanceOf(account).sub(reservedOf(account));

        if (amount <= __available) {
            return amount;
        }

        else if (__available > 0) {
            return __available;
        }

        revert("VOKEN: available balance is zero");
    }

    /**
     * @dev Returns the allocation contracts' addresses on `account`.
     */
    function allocations(address account) public view returns (IAllocation[] memory contracts) {
        contracts = _allocations[account];
    }

    /**
     * @dev Moves `amount` VOKEN from the caller's account to `recipient`.
     *
     * Auto handle {WhitelistSignUp} when `amount` is a specific value.
     * Auto handle {Burn} when `recipient` is a `address(this)` or `address(0)`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) public whenNotPaused returns (bool) {
        // Whitelist sign-up
        if (amount == _WHITELIST_TRIGGER && _whitelistingMode && whitelisted(recipient) && !whitelisted(msg.sender)) {
            _move(msg.sender, address(this), _WHITELIST_TRIGGER);
            _whitelist(msg.sender, recipient);
            _distributeForWhitelist(msg.sender);
        }

        // Burn
        else if (recipient == address(this) || recipient == address(0)) {
            _burn(msg.sender, amount);
        }

        // Normal Transfer
        else {
            _transfer(msg.sender, recipient, _getAvailableAmount(msg.sender, amount));
        }

        return true;
    }

    /**
     * @dev Moves `amount` VOKEN from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Auto handle {Burn} when `recipient` is a `address(this)` or `address(0)`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     * Emits an {Approval} event indicating the updated allowance.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public whenNotPaused returns (bool) {
        // Burn
        if (recipient == address(this) || recipient == address(0)) {
            _burn(msg.sender, amount);
        }

        // Normal transfer
        else {
            uint256 __amount = _getAvailableAmount(sender, amount);

            _transfer(sender, recipient, __amount);
            _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(__amount, "VOKEN: transfer amount exceeds allowance"));
        }

        return true;
    }

    /**
     * @dev Destroys `amount` VOKEN from the caller.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     */
    function burn(uint256 amount) public whenNotPaused returns (bool) {
        _burn(msg.sender, amount);
        return true;
    }

    /**
     * @dev Destoys `amount` VOKEN from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     * Emits an {Approval} event indicating the updated allowance.
     */
    function burnFrom(address account, uint256 amount) public whenNotPaused returns (bool) {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "VOKEN: burn amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Creates `amount` VOKEN and assigns them to `account`.
     *
     * Can only be called by a minter.
     */
    function mint(address account, uint256 amount) public whenNotPaused onlyMinter returns (bool) {
        _mint(account, amount);
        return true;
    }

    /**
     * @dev Creates `amount` VOKEN and assigns them to `account`.
     *
     * With an `allocationContract`
     *
     * Can only be called by a minter.
     */
    function mintWithAllocation(address account, uint256 amount, IAllocation allocationContract) public whenNotPaused onlyMinter returns (bool) {
        _mintWithAllocation(account, amount, allocationContract);
        return true;
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) public whenNotPaused returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Returns the remaining number of VOKEN that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}.
     * This is zero by default.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * Emits an {Approval} event indicating the updated allowance.
     */
    function increaseAllowance(address spender, uint256 addedValue) public whenNotPaused 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.
     *
     * Emits an {Approval} event indicating the updated allowance.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public whenNotPaused returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "VOKEN: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves VOKEN `amount` from `sender` to `recipient`.
     *
     * May reject non-whitelist transaction.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address sender, address recipient, uint256 amount) private {
        require(recipient != address(0), "VOKEN: recipient is the zero address");

        if (_safeMode && !isGlobal(sender) && !isGlobal(recipient)) {
            require(whitelisted(sender), "VOKEN: sender is not whitelisted");
        }

        if (_BURNING_PERMILL > 0) {
            uint256 __burning = amount.mul(_BURNING_PERMILL).div(1000);
            uint256 __amount = amount.sub(__burning);

            _balances[sender] = _balances[sender].sub(__amount);
            _balances[recipient] = _balances[recipient].add(__amount);
            emit Transfer(sender, recipient, __amount);

            _burn(sender, __burning);
        }

        else {
            _balances[sender] = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }
    }

    /**
     * @dev Moves VOKEN `amount` from `sender` to `recipient`.
     *
     * May reject non-whitelist transaction.
     *
     * Emits a {Transfer} event.
     */
    function _move(address sender, address recipient, uint256 amount) private {
        require(recipient != address(0), "VOKEN: recipient is the zero address");

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /**
     * @dev Creates `amount` VOKEN and assigns them to `account`, increasing the total supply.
     *
     * Emits a {Mint} event.
     * Emits a {Transfer} event with `from` set to the zero address.
     */
    function _mint(address account, uint256 amount) private {
        require(_totalSupply.add(amount) <= _cap, "VOKEN: total supply cap exceeded");
        require(account != address(0), "VOKEN: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Mint(account, amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Creates `amount` VOKEN and assigns them to `account`, increasing the total supply.
     *
     * With an `allocationContract`
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     */
    function _mintWithAllocation(address account, uint256 amount, IAllocation allocationContract) private {
        require(_totalSupply.add(amount) <= _cap, "VOKEN: total supply cap exceeded");
        require(account != address(0), "VOKEN: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);

        if (!_addressAllocations[account][address(allocationContract)]) {
            _allocations[account].push(allocationContract);
            _addressAllocations[account][address(allocationContract)] = true;
        }

        emit MintWithAllocation(account, amount, allocationContract);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` VOKEN from `account`, reducing the total supply.
     *
     * Emits a {Burn} event.
     * Emits a {Transfer} event with `to` set to the zero address.
     */
    function _burn(address account, uint256 amount) private {
        uint256 __amount = _getAvailableAmount(account, amount);

        _balances[account] = _balances[account].sub(__amount, "VOKEN: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(__amount);
        _cap = _cap.sub(__amount);
        emit Burn(account, __amount);
        emit Transfer(account, address(0), __amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s VOKEN.
     *
     * Emits an {Approval} event.
     */
    function _approve(address owner, address spender, uint256 value) private {
        require(owner != address(0), "VOKEN: approve from the zero address");
        require(spender != address(0), "VOKEN: approve to the zero address");
        require(value <= _getAvailableAmount(spender, value), "VOKEN: approve exceeds available balance");

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

    /**
     * @dev Sets the full name of VOKEN.
     *
     * Can only be called by the current owner.
     */
    function rename(string calldata value) external onlyOwner {
        _name = value;
    }

    /**
     * @dev Sets the symbol of VOKEN.
     *
     * Can only be called by the current owner.
     */
    function setSymbol(string calldata value) external onlyOwner {
        _symbol = value;
    }

    /**
     * @dev Returns true if the `account` is whitelisted.
     */
    function whitelisted(address account) public view returns (bool) {
        return _referee[account] != address(0);
    }

    /**
     * @dev Returns the whitelist counter.
     */
    function whitelistCounter() public view returns (uint256) {
        return _whitelistCounter;
    }

    /**
     * @dev Returns true if the sign-up for whitelist is allowed.
     */
    function whitelistingMode() public view returns (bool) {
        return _whitelistingMode;
    }

    /**
     * @dev Returns the referee of an `account`.
     */
    function whitelistReferee(address account) public view returns (address) {
        return _referee[account];
    }

    /**
     * @dev Returns referrals of a `account`
     */
    function whitelistReferrals(address account) public view returns (address[] memory) {
        return _referrals[account];
    }

    /**
     * @dev Returns the referrals count of an `account`.
     */
    function whitelistReferralsCount(address account) public view returns (uint256) {
        return _referrals[account].length;
    }

    /**
     * @dev Push whitelist, batch.
     *
     * Can only be called by a proxy.
     */
    function pushWhitelist(address[] memory accounts, address[] memory refereeAccounts) public onlyProxy returns (bool) {
        require(accounts.length == refereeAccounts.length, "VOKEN Whitelist: batch length is not match");

        for (uint256 i = 0; i < accounts.length; i++) {
            if (accounts[i] != address(0) && !whitelisted(accounts[i]) && whitelisted(refereeAccounts[i])) {
                _whitelist(accounts[i], refereeAccounts[i]);
            }
        }

        return true;
    }

    /**
     * @dev Whitelist an `account` with a `refereeAccount`.
     *
     * Emits {WhitelistSignUp} event.
     */
    function _whitelist(address account, address refereeAccount) private {
        require(!whitelisted(account), "Whitelist: account is already whitelisted");
        require(whitelisted(refereeAccount), "Whitelist: refereeAccount is not whitelisted");

        _referee[account] = refereeAccount;
        _referrals[refereeAccount].push(account);
        _whitelistCounter = _whitelistCounter.add(1);

        emit WhitelistSignUp(account, refereeAccount);
    }

    /**
     * @dev Distribute.
     */
    function _distributeForWhitelist(address account) private {
        uint256 __distributedAmount;
        uint256 __burnAmount;

        address __account = account;
        for(uint i = 0; i < _WHITELIST_REWARDS.length; i++) {
            address __referee = _referee[__account];

            if (__referee != address(0) && __referee != __account && _referrals[__referee].length > i) {
                _move(address(this), __referee, _WHITELIST_REWARDS[i]);
                __distributedAmount = __distributedAmount.add(_WHITELIST_REWARDS[i]);
            }

            __account = __referee;
        }

        // Burn
        __burnAmount = _WHITELIST_TRIGGER.sub(_WHITELIST_REFUND).sub(__distributedAmount);
        if (__burnAmount > 0) {
            _burn(address(this), __burnAmount);
        }

        // Transfer VOKEN refund as a success signal.
        _move(address(this), account, _WHITELIST_REFUND);
    }

    /**
     * @dev Enable/disable sign-up for whitelist.
     *
     * Can only be called by the current owner.
     */
    function setWhitelistingMode(bool value) public onlyOwner {
        _whitelistingMode = value;

        if (_whitelistingMode) {
            emit WhitelistSignUpEnabled();
        } else {
            emit WhitelistSignUpDisabled();
        }
    }

    /**
     * @dev Returns true if a transaction from non-whitelisted address is not allowed.
     */
    function safeMode() public view returns (bool) {
        return _safeMode;
    }

    /**
     * @dev Disable/enable non-whitelist transaction.
     *
     * Can only be called by the current owner.
     */
    function setSafeMode(bool value) public onlyOwner {
        _safeMode = value;

        if (_safeMode) {
            emit SafeModeOn();
        } else {
            emit SafeModeOff();
        }
    }

    /**
     * Returns {bool}, {value} of burning mode.
     */
    function burningMode() public view returns (bool, uint16) {
        return (_BURNING_PERMILL > 0, _BURNING_PERMILL);
    }

    /**
     * @dev Sets the burning mode by `value`.
     */
    function setBurningMode(uint16 value) public onlyOwner {
        require(value <= 1000, "BurningMode: value is greater than 1000");

        if (value > 0) {
            _BURNING_PERMILL = value;
            emit BurningModeOn();
        }
        else {
            _BURNING_PERMILL = 0;
            emit BurningModeOff();
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelistingMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistingMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burningMode","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"refereeAccounts","type":"address[]"}],"name":"pushWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whitelistReferralsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSafeMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whitelistReferee","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"allocations","outputs":[{"internalType":"contract IAllocation[]","name":"contracts","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"rename","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"currentOwner","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addGlobal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isGlobal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"value","type":"uint16"}],"name":"setBurningMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"safeMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeGlobal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"value","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whitelistReferrals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"reservedOf","outputs":[{"internalType":"uint256","name":"reserved","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract IAllocation","name":"allocationContract","type":"address"}],"name":"mintWithAllocation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Donate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ProxyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ProxyRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"GlobalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"GlobalRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"contract IAllocation","name":"allocationContract","type":"address"}],"name":"MintWithAllocation","type":"event"},{"anonymous":false,"inputs":[],"name":"WhitelistSignUpEnabled","type":"event"},{"anonymous":false,"inputs":[],"name":"WhitelistSignUpDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"refereeAccount","type":"address"}],"name":"WhitelistSignUp","type":"event"},{"anonymous":false,"inputs":[],"name":"SafeModeOn","type":"event"},{"anonymous":false,"inputs":[],"name":"SafeModeOff","type":"event"},{"anonymous":false,"inputs":[],"name":"BurningModeOn","type":"event"},{"anonymous":false,"inputs":[],"name":"BurningModeOff","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":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":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipAccepted","type":"event"}]

60c0604052601e60808190527f566973696f6e2e4e6574776f726b203130304720546f6b656e2076322e30000060a09081526200004091600591906200092f565b506040805180820190915260088082527f566f6b656e322e30000000000000000000000000000000000000000000000000602090920191825262000087916006916200092f565b506007805460ff19166006179055633baa0c40600c55620f4240600d55604080516101e0810182526311e1a3008152630bebc20060208201526305f5e1009181018290526060810182905260808101919091526302faf08060a08201526302625a0060c08201526301c9c38060e08201526301312d006101008201526298968061012082018190526101408201819052610160820181905261018082018190526101a082018190526101c08201526200014590600e90600f620009b4565b503480156200015357600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001805460ff60a01b19169055620001be306001600160e01b036200028116565b620001d2336001600160e01b036200034216565b620001e6336001600160e01b036200040316565b620001fb60016001600160e01b03620004c416565b6200021060016001600160e01b03620005a816565b62000225600a6001600160e01b036200069616565b667c5850872380006008556001600b553360008181526021602052604080822080546001600160a01b031916841790555182917f14fc63225bc85ae786ffdbede4d2704b3f0805ee2bb7129abb2d10376803514091a362000a0d565b62000295336001600160e01b03620007f116565b620002f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b6200030b8160026200080560201b620026511790919060201c565b6040516001600160a01b038216907f3557494d1731a5740ae239774519b4c0ce38768fbef9ce574f84c9a8d08311f090600090a250565b62000356336001600160e01b03620007f116565b620003b157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b620003cc8160036200080560201b620026511790919060201c565b6040516001600160a01b038216907f919e434c309b1e05df9dba7a1e2827e10cf511d2eb5330b6fffadf34f0632d0690600090a250565b62000417336001600160e01b03620007f116565b6200047257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b6200048d8160046200080560201b620026511790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b620004d8336001600160e01b03620007f116565b6200053357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b600a805460ff1916821515179081905560ff16156200057b576040517f0208021534f45416f2c723a56f5c3824480afc61fb70b7b9286dfc90a55e412290600090a1620005a5565b6040517fae1e66777fb0c2bed5853128e030c8e4ce4c2c62c80606136b683277c482127e90600090a15b50565b620005bc336001600160e01b03620007f116565b6200061757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b600a805461ff0019166101008315158102919091179182905560ff910416156200066a576040517f920a1ae5efe772816c4b2c32ca4e42c4b93762de96b3022c3e46f535ddf4f6c490600090a1620005a5565b6040517fd13cddd313ffdd1ce190fceb76cf83bf01c4c0246c9f633550d24baf0133810d90600090a150565b620006aa336001600160e01b03620007f116565b6200070557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201526000805160206200433b833981519152604482015290519081900360640190fd5b6103e88161ffff16111562000766576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180620043146027913960400191505060405180910390fd5b61ffff811615620007b857600a805463ffff000019166201000061ffff8416021790556040517fe219d7fe9c009b39d654d5dae368d825b055057c4c0168db20e38c3fdcc9d05e90600090a1620005a5565b600a805463ffff0000191690556040517f7d00f058aaf72e16e87a740bb23222cd092f14044833e7916aa86c8055e29a3c90600090a150565b6000546001600160a01b0390811691161490565b6200081a82826001600160e01b03620008ac16565b156200088757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200090f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806200435b6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200097257805160ff1916838001178555620009a2565b82800160010185558215620009a2579182015b82811115620009a257825182559160200191906001019062000985565b50620009b0929150620009ed565b5090565b82600f8101928215620009a2579160200282015b82811115620009a2578251829063ffffffff16905591602001919060010190620009c8565b62000a0a91905b80821115620009b05760008155600101620009f4565b90565b6138f78062000a1d6000396000f3fe6080604052600436106102ae5760003560e01c80635c975abb11610175578063a9059cbb116100dc578063c316351211610095578063d936547e1161006f578063d936547e14610d91578063dd62ed3e14610dc4578063f19158ef14610dff578063f2fde38b14610e42576102ae565b8063c316351214610ce8578063c9322adb14610d1b578063cea9d26f14610d4e576102ae565b8063a9059cbb14610b86578063aa271e1a14610bbf578063abe3219c14610bf2578063adaebf0114610c07578063b84c824614610c3a578063be116c3b14610cb5576102ae565b806391a15bb31161012e57806391a15bb314610a7157806395d89b4114610aa4578063983b2d5614610ab95780639edeb53014610aec5780639ef306a614610b1f578063a457c2d714610b4d576102ae565b80635c975abb1461092557806366605ba41461093a57806370a08231146109b557806379ba5097146109e857806379cc6790146109fd5780638da5cb5b14610a36576102ae565b80632f54bf6e1161021957806340c10f19116101d257806340c10f191461078b57806342966c68146107c457806344b7e5f2146107ee5780634e0fcfa91461081a578063522f68151461086957806352a9039c146108a2576102ae565b80632f54bf6e146106795780633092afd5146106ac578063313ce567146106df578063316893041461070a578063355274ea1461073d5780633950935114610752576102ae565b806318160ddd1161026b57806318160ddd1461046457806323b11d8d1461048b57806323b872dd146104be57806326f27e6d14610501578063297103881461051657806329f34ac114610549576102ae565b806306fdde03146102ed578063095ea7b3146103775780630ddb3aae146103c457806312c23565146103f057806313126bae1461040557806316c38b3c14610438575b34156102eb5760408051348152905133917f0553260a2e46b0577270d8992db02d30856ca880144c72d6e9503760946aef13919081900360200190a25b005b3480156102f957600080fd5b50610302610e75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038357600080fd5b506103b06004803603604081101561039a57600080fd5b506001600160a01b038135169060200135610f0c565b604080519115158252519081900360200190f35b3480156103d057600080fd5b506102eb600480360360208110156103e757600080fd5b50351515610f6c565b3480156103fc57600080fd5b506103b0611027565b34801561041157600080fd5b5061041a611030565b60408051921515835261ffff90911660208301528051918290030190f35b34801561044457600080fd5b506102eb6004803603602081101561045b57600080fd5b50351515611043565b34801561047057600080fd5b5061047961110c565b60408051918252519081900360200190f35b34801561049757600080fd5b506102eb600480360360208110156104ae57600080fd5b50356001600160a01b0316611112565b3480156104ca57600080fd5b506103b0600480360360608110156104e157600080fd5b506001600160a01b038135811691602081013590911690604001356111a2565b34801561050d57600080fd5b5061047961129c565b34801561052257600080fd5b506103b06004803603602081101561053957600080fd5b50356001600160a01b03166112a2565b34801561055557600080fd5b506103b06004803603604081101561056c57600080fd5b810190602081018135600160201b81111561058657600080fd5b82018360208201111561059857600080fd5b803590602001918460208302840111600160201b831117156105b957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561060857600080fd5b82018360208201111561061a57600080fd5b803590602001918460208302840111600160201b8311171561063b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112b5945050505050565b34801561068557600080fd5b506103b06004803603602081101561069c57600080fd5b50356001600160a01b03166113e9565b3480156106b857600080fd5b506102eb600480360360208110156106cf57600080fd5b50356001600160a01b03166113fd565b3480156106eb57600080fd5b506106f461148d565b6040805160ff9092168252519081900360200190f35b34801561071657600080fd5b506104796004803603602081101561072d57600080fd5b50356001600160a01b0316611496565b34801561074957600080fd5b506104796114b1565b34801561075e57600080fd5b506103b06004803603604081101561077557600080fd5b506001600160a01b0381351690602001356114b7565b34801561079757600080fd5b506103b0600480360360408110156107ae57600080fd5b506001600160a01b03813516906020013561153d565b3480156107d057600080fd5b506103b0600480360360208110156107e757600080fd5b50356115d6565b3480156107fa57600080fd5b506102eb6004803603602081101561081157600080fd5b50351515611633565b34801561082657600080fd5b5061084d6004803603602081101561083d57600080fd5b50356001600160a01b03166116f8565b604080516001600160a01b039092168252519081900360200190f35b34801561087557600080fd5b506102eb6004803603604081101561088c57600080fd5b506001600160a01b038135169060200135611716565b3480156108ae57600080fd5b506108d5600480360360208110156108c557600080fd5b50356001600160a01b0316611836565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109115781810151838201526020016108f9565b505050509050019250505060405180910390f35b34801561093157600080fd5b506103b06118ac565b34801561094657600080fd5b506102eb6004803603602081101561095d57600080fd5b810190602081018135600160201b81111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111600160201b831117156109aa57600080fd5b5090925090506118bc565b3480156109c157600080fd5b50610479600480360360208110156109d857600080fd5b50356001600160a01b0316611915565b3480156109f457600080fd5b506102eb611930565b348015610a0957600080fd5b506103b060048036036040811015610a2057600080fd5b506001600160a01b038135169060200135611a0d565b348015610a4257600080fd5b50610a4b611ab5565b604080516001600160a01b03938416815291909216602082015281519081900390910190f35b348015610a7d57600080fd5b506102eb60048036036020811015610a9457600080fd5b50356001600160a01b0316611acc565b348015610ab057600080fd5b50610302611b5c565b348015610ac557600080fd5b506102eb60048036036020811015610adc57600080fd5b50356001600160a01b0316611bbd565b348015610af857600080fd5b506103b060048036036020811015610b0f57600080fd5b50356001600160a01b0316611c4d565b348015610b2b57600080fd5b506102eb60048036036020811015610b4257600080fd5b503561ffff16611c60565b348015610b5957600080fd5b506103b060048036036040811015610b7057600080fd5b506001600160a01b038135169060200135611d76565b348015610b9257600080fd5b506103b060048036036040811015610ba957600080fd5b506001600160a01b038135169060200135611e14565b348015610bcb57600080fd5b506103b060048036036020811015610be257600080fd5b50356001600160a01b0316611eff565b348015610bfe57600080fd5b506103b0611f12565b348015610c1357600080fd5b506102eb60048036036020811015610c2a57600080fd5b50356001600160a01b0316611f20565b348015610c4657600080fd5b506102eb60048036036020811015610c5d57600080fd5b810190602081018135600160201b811115610c7757600080fd5b820183602082011115610c8957600080fd5b803590602001918460018302840111600160201b83111715610caa57600080fd5b509092509050611fb0565b348015610cc157600080fd5b506102eb60048036036020811015610cd857600080fd5b50356001600160a01b0316612004565b348015610cf457600080fd5b506108d560048036036020811015610d0b57600080fd5b50356001600160a01b0316612094565b348015610d2757600080fd5b5061047960048036036020811015610d3e57600080fd5b50356001600160a01b0316612108565b348015610d5a57600080fd5b506102eb60048036036060811015610d7157600080fd5b506001600160a01b038135811691602081013590911690604001356121f9565b348015610d9d57600080fd5b506103b060048036036020811015610db457600080fd5b50356001600160a01b03166123e7565b348015610dd057600080fd5b5061047960048036036040811015610de757600080fd5b506001600160a01b0381358116916020013516612407565b348015610e0b57600080fd5b506103b060048036036060811015610e2257600080fd5b506001600160a01b03813581169160208101359160409091013516612432565b348015610e4e57600080fd5b506102eb60048036036020811015610e6557600080fd5b50356001600160a01b03166124cc565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f015780601f10610ed657610100808354040283529160200191610f01565b820191906000526020600020905b815481529060010190602001808311610ee457829003601f168201915b505050505090505b90565b600154600090600160a01b900460ff1615610f57576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b610f6233848461251d565b5060015b92915050565b610f75336113e9565b610fb4576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b600a805460ff1916821515179081905560ff1615610ffa576040517f0208021534f45416f2c723a56f5c3824480afc61fb70b7b9286dfc90a55e412290600090a1611024565b6040517fae1e66777fb0c2bed5853128e030c8e4ce4c2c62c80606136b683277c482127e90600090a15b50565b600a5460ff1690565b600a5462010000900461ffff1680151591565b61104c336113e9565b61108b576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff910416156110e0576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1611024565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a150565b60095490565b61111b336113e9565b61115a576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61116b60038263ffffffff61265116565b6040516001600160a01b038216907f919e434c309b1e05df9dba7a1e2827e10cf511d2eb5330b6fffadf34f0632d0690600090a250565b600154600090600160a01b900460ff16156111ed576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6001600160a01b03831630148061120b57506001600160a01b038316155b1561121f5761121a33836126d2565b611292565b600061122b85846127db565b905061123885858361286b565b611290853361128b8460405180606001604052806028815260200161389b602891396001600160a01b038b166000908152601e60209081526040808320338452909152902054919063ffffffff612af216565b61251d565b505b5060019392505050565b600b5490565b6000610f6660038363ffffffff612b8916565b60006112c0336112a2565b6112fb5760405162461bcd60e51b815260040180806020018281038252602e81526020018061374b602e913960400191505060405180910390fd5b815183511461133b5760405162461bcd60e51b815260040180806020018281038252602a815260200180613639602a913960400191505060405180910390fd5b60005b83518110156112925760006001600160a01b031684828151811061135e57fe5b60200260200101516001600160a01b031614158015611396575061139484828151811061138757fe5b60200260200101516123e7565b155b80156113ac57506113ac83828151811061138757fe5b156113e1576113e18482815181106113c057fe5b60200260200101518483815181106113d457fe5b6020026020010151612bf0565b60010161133e565b6000546001600160a01b0390811691161490565b611406336113e9565b611445576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61145660048263ffffffff612d2116565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60075460ff1690565b6001600160a01b031660009081526022602052604090205490565b60085490565b600154600090600160a01b900460ff1615611502576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b336000818152601e602090815260408083206001600160a01b0388168452909152902054610f629190859061128b908663ffffffff612d8816565b600154600090600160a01b900460ff1615611588576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61159133611eff565b6115cc5760405162461bcd60e51b81526004018080602001828103825260308152602001806136b26030913960400191505060405180910390fd5b610f628383612de9565b600154600090600160a01b900460ff1615611621576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61162b33836126d2565b506001919050565b61163c336113e9565b61167b576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b600a805461ff0019166101008315158102919091179182905560ff910416156116cc576040517f920a1ae5efe772816c4b2c32ca4e42c4b93762de96b3022c3e46f535ddf4f6c490600090a1611024565b6040517fd13cddd313ffdd1ce190fceb76cf83bf01c4c0246c9f633550d24baf0133810d90600090a150565b6001600160a01b039081166000908152602160205260409020541690565b61171f336113e9565b61175e576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6001600160a01b0382166117a35760405162461bcd60e51b81526004018080602001828103825260278152602001806137036027913960400191505060405180910390fd5b3031818110156117fa576040805162461bcd60e51b815260206004820181905260248201527f57697468647261773a20616d6f756e7420657863656564732062616c616e6365604482015290519081900360640190fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611830573d6000803e3d6000fd5b50505050565b6001600160a01b0381166000908152601f60209081526040918290208054835181840281018401909452808452606093928301828280156118a057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611882575b50505050509050919050565b600154600160a01b900460ff1690565b6118c5336113e9565b611904576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6119106005838361349c565b505050565b6001600160a01b03166000908152601d602052604090205490565b6001546001600160a01b031633146119795760405162461bcd60e51b815260040180806020018281038252602c81526020018061386f602c913960400191505060405180910390fd5b336119b55760405162461bcd60e51b815260040180806020018281038252602381526020018061368f6023913960400191505060405180910390fd5b6000805460405133926001600160a01b03909216917f357bdeb5828fa83945f38a88510ce5cd7d628dafb346d767efbc693149fdd97c91a3600080546001600160a01b03199081163317909155600180549091169055565b600154600090600160a01b900460ff1615611a58576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b611a6283836126d2565b610f62833361128b856040518060600160405280602481526020016135c9602491396001600160a01b0389166000908152601e60209081526040808320338452909152902054919063ffffffff612af216565b6000546001546001600160a01b0391821692911690565b611ad5336113e9565b611b14576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611b2560028263ffffffff61265116565b6040516001600160a01b038216907f3557494d1731a5740ae239774519b4c0ce38768fbef9ce574f84c9a8d08311f090600090a250565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f015780601f10610ed657610100808354040283529160200191610f01565b611bc6336113e9565b611c05576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611c1660048263ffffffff61265116565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6000610f6660028363ffffffff612b8916565b611c69336113e9565b611ca8576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6103e88161ffff161115611ced5760405162461bcd60e51b81526004018080602001828103825260278152602001806135a26027913960400191505060405180910390fd5b61ffff811615611d3d57600a805463ffff000019166201000061ffff8416021790556040517fe219d7fe9c009b39d654d5dae368d825b055057c4c0168db20e38c3fdcc9d05e90600090a1611024565b600a805463ffff0000191690556040517f7d00f058aaf72e16e87a740bb23222cd092f14044833e7916aa86c8055e29a3c90600090a150565b600154600090600160a01b900460ff1615611dc1576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b610f62338461128b8560405180606001604052806025815260200161355760259139336000908152601e602090815260408083206001600160a01b038d168452909152902054919063ffffffff612af216565b600154600090600160a01b900460ff1615611e5f576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b600c5482148015611e725750600a5460ff165b8015611e825750611e82836123e7565b8015611e945750611e92336123e7565b155b15611ebe57611ea63330600c54612f71565b611eb03384612bf0565b611eb933612fb6565b610f62565b6001600160a01b038316301480611edc57506001600160a01b038316155b15611eeb57611eb933836126d2565b610f623384611efa33866127db565b61286b565b6000610f6660048363ffffffff612b8916565b600a54610100900460ff1690565b611f29336113e9565b611f68576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611f7960028263ffffffff612d2116565b6040516001600160a01b038216907f50aa81349419539410d0bfbc090794c6df2344776ad4dee02103a1e810c1fd0290600090a250565b611fb9336113e9565b611ff8576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6119106006838361349c565b61200d336113e9565b61204c576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61205d60038263ffffffff612d2116565b6040516001600160a01b038216907fc19ec636c33767d631869f17e127e7bc2d0237fbd3720cac3cbd73c1360c72f590600090a250565b6001600160a01b0381166000908152602260209081526040918290208054835181840281018401909452808452606093928301828280156118a0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116118825750505050509050919050565b6001600160a01b0381166000908152601f602052604081205480156121f35760005b818110156121f1576001600160a01b0384166000908152601f6020526040902080546121e791908390811061215b57fe5b600091825260209182902001546040805163c9322adb60e01b81526001600160a01b0389811660048301529151919092169263c9322adb9260248082019391829003018186803b1580156121ae57600080fd5b505afa1580156121c2573d6000803e3d6000fd5b505050506040513d60208110156121d857600080fd5b5051849063ffffffff612d8816565b925060010161212a565b505b50919050565b612202336113e9565b612241576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b826001600160a01b0383166122875760405162461bcd60e51b815260040180806020018281038252602581526020018061384a6025913960400191505060405180910390fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156122d157600080fd5b505afa1580156122e5573d6000803e3d6000fd5b505050506040513d60208110156122fb57600080fd5b5051905082811015612354576040805162461bcd60e51b815260206004820152601e60248201527f5265736375653a20616d6f756e7420657863656564732062616c616e63650000604482015290519081900360640190fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123b457600080fd5b505af11580156123c8573d6000803e3d6000fd5b505050506040513d60208110156123de57600080fd5b50505050505050565b6001600160a01b0390811660009081526021602052604090205416151590565b6001600160a01b039182166000908152601e6020908152604080832093909416825291909152205490565b600154600090600160a01b900460ff161561247d576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61248633611eff565b6124c15760405162461bcd60e51b81526004018080602001828103825260308152602001806136b26030913960400191505060405180910390fd5b6112928484846130a9565b6124d5336113e9565b612514576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611024816132c2565b6001600160a01b0383166125625760405162461bcd60e51b81526004018080602001828103825260248152602001806137fd6024913960400191505060405180910390fd5b6001600160a01b0382166125a75760405162461bcd60e51b81526004018080602001828103825260228152602001806135356022913960400191505060405180910390fd5b6125b182826127db565b8111156125ef5760405162461bcd60e51b81526004018080602001828103825260288152602001806136116028913960400191505060405180910390fd5b6001600160a01b038084166000818152601e6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61265b8282612b89565b156126ad576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006126de83836127db565b9050612723816040518060600160405280602281526020016137bb602291396001600160a01b0386166000908152601d6020526040902054919063ffffffff612af216565b6001600160a01b0384166000908152601d602052604090205560095461274f908263ffffffff61336216565b600955600854612765908263ffffffff61336216565b6008556040805182815290516001600160a01b038516917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a26040805182815290516000916001600160a01b038616916000805160206137dd8339815191529181900360200190a3505050565b6000806127ff6127ea85612108565b6127f386611915565b9063ffffffff61336216565b90508083116128115782915050610f66565b801561281e579050610f66565b6040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20617661696c61626c652062616c616e6365206973207a65726f604482015290519081900360640190fd5b6001600160a01b0382166128b05760405162461bcd60e51b81526004018080602001828103825260248152602001806135ed6024913960400191505060405180910390fd5b600a54610100900460ff1680156128cd57506128cb83611c4d565b155b80156128df57506128dd82611c4d565b155b1561293e576128ed836123e7565b61293e576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a2073656e646572206973206e6f742077686974656c6973746564604482015290519081900360640190fd5b600a5462010000900461ffff1615612a4a57600a5460009061297f906103e89061297390859062010000900461ffff166133a4565b9063ffffffff6133fd16565b90506000612993838363ffffffff61336216565b6001600160a01b0386166000908152601d60205260409020549091506129bf908263ffffffff61336216565b6001600160a01b038087166000908152601d602052604080822093909355908616815220546129f4908263ffffffff612d8816565b6001600160a01b038086166000818152601d602090815260409182902094909455805185815290519193928916926000805160206137dd83398151915292918290030190a3612a4385836126d2565b5050611910565b6001600160a01b0383166000908152601d6020526040902054612a73908263ffffffff61336216565b6001600160a01b038085166000908152601d60205260408082209390935590841681522054612aa8908263ffffffff612d8816565b6001600160a01b038084166000818152601d602090815260409182902094909455805185815290519193928716926000805160206137dd83398151915292918290030190a3505050565b60008184841115612b815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b46578181015183820152602001612b2e565b50505050905090810190601f168015612b735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006001600160a01b038216612bd05760405162461bcd60e51b81526004018080602001828103825260228152602001806137996022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b612bf9826123e7565b15612c355760405162461bcd60e51b81526004018080602001828103825260298152602001806138216029913960400191505060405180910390fd5b612c3e816123e7565b612c795760405162461bcd60e51b815260040180806020018281038252602c815260200180613663602c913960400191505060405180910390fd5b6001600160a01b03808316600081815260216020908152604080832080549587166001600160a01b03199687168117909155835260228252822080546001818101835591845291909220018054909316909117909155600b54612ce19163ffffffff612d8816565b600b556040516001600160a01b0380831691908416907f14fc63225bc85ae786ffdbede4d2704b3f0805ee2bb7129abb2d10376803514090600090a35050565b612d2b8282612b89565b612d665760405162461bcd60e51b81526004018080602001828103825260218152602001806136e26021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600082820183811015612de2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600854600954612dff908363ffffffff612d8816565b1115612e52576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20746f74616c20737570706c7920636170206578636565646564604482015290519081900360640190fd5b6001600160a01b038216612ead576040805162461bcd60e51b815260206004820152601f60248201527f564f4b454e3a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600954612ec0908263ffffffff612d8816565b6009556001600160a01b0382166000908152601d6020526040902054612eec908263ffffffff612d8816565b6001600160a01b0383166000818152601d6020908152604091829020939093558051848152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805182815290516001600160a01b038416916000916000805160206137dd8339815191529181900360200190a35050565b6001600160a01b038216612a4a5760405162461bcd60e51b81526004018080602001828103825260248152602001806135ed6024913960400191505060405180910390fd5b60008082815b600f81101561306e576001600160a01b038083166000908152602160205260409020541680158015906130015750826001600160a01b0316816001600160a01b031614155b801561302457506001600160a01b03811660009081526022602052604090205482105b15613064576130423082600e85600f811061303b57fe5b0154612f71565b613061600e83600f811061305257fe5b0154869063ffffffff612d8816565b94505b9150600101612fbc565b5061308a836127f3600d54600c5461336290919063ffffffff16565b9150811561309c5761309c30836126d2565b6118303085600d54612f71565b6008546009546130bf908463ffffffff612d8816565b1115613112576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20746f74616c20737570706c7920636170206578636565646564604482015290519081900360640190fd5b6001600160a01b03831661316d576040805162461bcd60e51b815260206004820152601f60248201527f564f4b454e3a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600954613180908363ffffffff612d8816565b6009556001600160a01b0383166000908152601d60205260409020546131ac908363ffffffff612d8816565b6001600160a01b038085166000908152601d6020908152604080832094909455808052838220928516825291909152205460ff16613243576001600160a01b038381166000818152601f602090815260408083208054600180820183559185528385200180546001600160a01b031916968816968717905593835281805280832094835293905291909120805460ff191690911790555b806001600160a01b0316836001600160a01b03167fb854b64d06c0e6d93dc3f3697093e30cca6265297271ccd5f3ad69d6e82b40fb846040518082815260200191505060405180910390a36040805183815290516001600160a01b038516916000916000805160206137dd8339815191529181900360200190a3505050565b6001600160a01b0381166133075760405162461bcd60e51b815260040180806020018281038252602681526020018061357c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000612de283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612af2565b6000826133b357506000610f66565b828202828482816133c057fe5b0414612de25760405162461bcd60e51b815260040180806020018281038252602181526020018061372a6021913960400191505060405180910390fd5b6000612de283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836134895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b46578181015183820152602001612b2e565b5082848161349357fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134dd5782800160ff1982351617855561350a565b8280016001018555821561350a579182015b8281111561350a5782358255916020019190600101906134ef565b5061351692915061351a565b5090565b610f0991905b80821115613516576000815560010161352056fe564f4b454e3a20617070726f766520746f20746865207a65726f2061646472657373564f4b454e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734275726e696e674d6f64653a2076616c75652069732067726561746572207468616e2031303030564f4b454e3a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365564f4b454e3a20726563697069656e7420697320746865207a65726f2061646472657373564f4b454e3a20617070726f7665206578636565647320617661696c61626c652062616c616e6365564f4b454e2057686974656c6973743a206261746368206c656e677468206973206e6f74206d6174636857686974656c6973743a20726566657265654163636f756e74206973206e6f742077686974656c69737465644f776e61626c653a2063616c6c657220697320746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6557697468647261773a20726563697069656e7420697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750726f7879526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050726f787920726f6c654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373564f4b454e3a206275726e20616d6f756e7420657863656564732062616c616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef564f4b454e3a20617070726f76652066726f6d20746865207a65726f206164647265737357686974656c6973743a206163636f756e7420697320616c72656164792077686974656c69737465645265736375653a20726563697069656e7420697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206e6577206f776e65722061646472657373564f4b454e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a265627a7a723158204e26dd44b55a6a43ffa435fee457b7473bdf9e5207a533c9bf8b7c7dac94d4cc64736f6c634300050b00324275726e696e674d6f64653a2076616c75652069732067726561746572207468616e20313030304f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c80635c975abb11610175578063a9059cbb116100dc578063c316351211610095578063d936547e1161006f578063d936547e14610d91578063dd62ed3e14610dc4578063f19158ef14610dff578063f2fde38b14610e42576102ae565b8063c316351214610ce8578063c9322adb14610d1b578063cea9d26f14610d4e576102ae565b8063a9059cbb14610b86578063aa271e1a14610bbf578063abe3219c14610bf2578063adaebf0114610c07578063b84c824614610c3a578063be116c3b14610cb5576102ae565b806391a15bb31161012e57806391a15bb314610a7157806395d89b4114610aa4578063983b2d5614610ab95780639edeb53014610aec5780639ef306a614610b1f578063a457c2d714610b4d576102ae565b80635c975abb1461092557806366605ba41461093a57806370a08231146109b557806379ba5097146109e857806379cc6790146109fd5780638da5cb5b14610a36576102ae565b80632f54bf6e1161021957806340c10f19116101d257806340c10f191461078b57806342966c68146107c457806344b7e5f2146107ee5780634e0fcfa91461081a578063522f68151461086957806352a9039c146108a2576102ae565b80632f54bf6e146106795780633092afd5146106ac578063313ce567146106df578063316893041461070a578063355274ea1461073d5780633950935114610752576102ae565b806318160ddd1161026b57806318160ddd1461046457806323b11d8d1461048b57806323b872dd146104be57806326f27e6d14610501578063297103881461051657806329f34ac114610549576102ae565b806306fdde03146102ed578063095ea7b3146103775780630ddb3aae146103c457806312c23565146103f057806313126bae1461040557806316c38b3c14610438575b34156102eb5760408051348152905133917f0553260a2e46b0577270d8992db02d30856ca880144c72d6e9503760946aef13919081900360200190a25b005b3480156102f957600080fd5b50610302610e75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038357600080fd5b506103b06004803603604081101561039a57600080fd5b506001600160a01b038135169060200135610f0c565b604080519115158252519081900360200190f35b3480156103d057600080fd5b506102eb600480360360208110156103e757600080fd5b50351515610f6c565b3480156103fc57600080fd5b506103b0611027565b34801561041157600080fd5b5061041a611030565b60408051921515835261ffff90911660208301528051918290030190f35b34801561044457600080fd5b506102eb6004803603602081101561045b57600080fd5b50351515611043565b34801561047057600080fd5b5061047961110c565b60408051918252519081900360200190f35b34801561049757600080fd5b506102eb600480360360208110156104ae57600080fd5b50356001600160a01b0316611112565b3480156104ca57600080fd5b506103b0600480360360608110156104e157600080fd5b506001600160a01b038135811691602081013590911690604001356111a2565b34801561050d57600080fd5b5061047961129c565b34801561052257600080fd5b506103b06004803603602081101561053957600080fd5b50356001600160a01b03166112a2565b34801561055557600080fd5b506103b06004803603604081101561056c57600080fd5b810190602081018135600160201b81111561058657600080fd5b82018360208201111561059857600080fd5b803590602001918460208302840111600160201b831117156105b957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561060857600080fd5b82018360208201111561061a57600080fd5b803590602001918460208302840111600160201b8311171561063b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112b5945050505050565b34801561068557600080fd5b506103b06004803603602081101561069c57600080fd5b50356001600160a01b03166113e9565b3480156106b857600080fd5b506102eb600480360360208110156106cf57600080fd5b50356001600160a01b03166113fd565b3480156106eb57600080fd5b506106f461148d565b6040805160ff9092168252519081900360200190f35b34801561071657600080fd5b506104796004803603602081101561072d57600080fd5b50356001600160a01b0316611496565b34801561074957600080fd5b506104796114b1565b34801561075e57600080fd5b506103b06004803603604081101561077557600080fd5b506001600160a01b0381351690602001356114b7565b34801561079757600080fd5b506103b0600480360360408110156107ae57600080fd5b506001600160a01b03813516906020013561153d565b3480156107d057600080fd5b506103b0600480360360208110156107e757600080fd5b50356115d6565b3480156107fa57600080fd5b506102eb6004803603602081101561081157600080fd5b50351515611633565b34801561082657600080fd5b5061084d6004803603602081101561083d57600080fd5b50356001600160a01b03166116f8565b604080516001600160a01b039092168252519081900360200190f35b34801561087557600080fd5b506102eb6004803603604081101561088c57600080fd5b506001600160a01b038135169060200135611716565b3480156108ae57600080fd5b506108d5600480360360208110156108c557600080fd5b50356001600160a01b0316611836565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109115781810151838201526020016108f9565b505050509050019250505060405180910390f35b34801561093157600080fd5b506103b06118ac565b34801561094657600080fd5b506102eb6004803603602081101561095d57600080fd5b810190602081018135600160201b81111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111600160201b831117156109aa57600080fd5b5090925090506118bc565b3480156109c157600080fd5b50610479600480360360208110156109d857600080fd5b50356001600160a01b0316611915565b3480156109f457600080fd5b506102eb611930565b348015610a0957600080fd5b506103b060048036036040811015610a2057600080fd5b506001600160a01b038135169060200135611a0d565b348015610a4257600080fd5b50610a4b611ab5565b604080516001600160a01b03938416815291909216602082015281519081900390910190f35b348015610a7d57600080fd5b506102eb60048036036020811015610a9457600080fd5b50356001600160a01b0316611acc565b348015610ab057600080fd5b50610302611b5c565b348015610ac557600080fd5b506102eb60048036036020811015610adc57600080fd5b50356001600160a01b0316611bbd565b348015610af857600080fd5b506103b060048036036020811015610b0f57600080fd5b50356001600160a01b0316611c4d565b348015610b2b57600080fd5b506102eb60048036036020811015610b4257600080fd5b503561ffff16611c60565b348015610b5957600080fd5b506103b060048036036040811015610b7057600080fd5b506001600160a01b038135169060200135611d76565b348015610b9257600080fd5b506103b060048036036040811015610ba957600080fd5b506001600160a01b038135169060200135611e14565b348015610bcb57600080fd5b506103b060048036036020811015610be257600080fd5b50356001600160a01b0316611eff565b348015610bfe57600080fd5b506103b0611f12565b348015610c1357600080fd5b506102eb60048036036020811015610c2a57600080fd5b50356001600160a01b0316611f20565b348015610c4657600080fd5b506102eb60048036036020811015610c5d57600080fd5b810190602081018135600160201b811115610c7757600080fd5b820183602082011115610c8957600080fd5b803590602001918460018302840111600160201b83111715610caa57600080fd5b509092509050611fb0565b348015610cc157600080fd5b506102eb60048036036020811015610cd857600080fd5b50356001600160a01b0316612004565b348015610cf457600080fd5b506108d560048036036020811015610d0b57600080fd5b50356001600160a01b0316612094565b348015610d2757600080fd5b5061047960048036036020811015610d3e57600080fd5b50356001600160a01b0316612108565b348015610d5a57600080fd5b506102eb60048036036060811015610d7157600080fd5b506001600160a01b038135811691602081013590911690604001356121f9565b348015610d9d57600080fd5b506103b060048036036020811015610db457600080fd5b50356001600160a01b03166123e7565b348015610dd057600080fd5b5061047960048036036040811015610de757600080fd5b506001600160a01b0381358116916020013516612407565b348015610e0b57600080fd5b506103b060048036036060811015610e2257600080fd5b506001600160a01b03813581169160208101359160409091013516612432565b348015610e4e57600080fd5b506102eb60048036036020811015610e6557600080fd5b50356001600160a01b03166124cc565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f015780601f10610ed657610100808354040283529160200191610f01565b820191906000526020600020905b815481529060010190602001808311610ee457829003601f168201915b505050505090505b90565b600154600090600160a01b900460ff1615610f57576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b610f6233848461251d565b5060015b92915050565b610f75336113e9565b610fb4576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b600a805460ff1916821515179081905560ff1615610ffa576040517f0208021534f45416f2c723a56f5c3824480afc61fb70b7b9286dfc90a55e412290600090a1611024565b6040517fae1e66777fb0c2bed5853128e030c8e4ce4c2c62c80606136b683277c482127e90600090a15b50565b600a5460ff1690565b600a5462010000900461ffff1680151591565b61104c336113e9565b61108b576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff910416156110e0576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1611024565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a150565b60095490565b61111b336113e9565b61115a576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61116b60038263ffffffff61265116565b6040516001600160a01b038216907f919e434c309b1e05df9dba7a1e2827e10cf511d2eb5330b6fffadf34f0632d0690600090a250565b600154600090600160a01b900460ff16156111ed576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b6001600160a01b03831630148061120b57506001600160a01b038316155b1561121f5761121a33836126d2565b611292565b600061122b85846127db565b905061123885858361286b565b611290853361128b8460405180606001604052806028815260200161389b602891396001600160a01b038b166000908152601e60209081526040808320338452909152902054919063ffffffff612af216565b61251d565b505b5060019392505050565b600b5490565b6000610f6660038363ffffffff612b8916565b60006112c0336112a2565b6112fb5760405162461bcd60e51b815260040180806020018281038252602e81526020018061374b602e913960400191505060405180910390fd5b815183511461133b5760405162461bcd60e51b815260040180806020018281038252602a815260200180613639602a913960400191505060405180910390fd5b60005b83518110156112925760006001600160a01b031684828151811061135e57fe5b60200260200101516001600160a01b031614158015611396575061139484828151811061138757fe5b60200260200101516123e7565b155b80156113ac57506113ac83828151811061138757fe5b156113e1576113e18482815181106113c057fe5b60200260200101518483815181106113d457fe5b6020026020010151612bf0565b60010161133e565b6000546001600160a01b0390811691161490565b611406336113e9565b611445576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61145660048263ffffffff612d2116565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60075460ff1690565b6001600160a01b031660009081526022602052604090205490565b60085490565b600154600090600160a01b900460ff1615611502576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b336000818152601e602090815260408083206001600160a01b0388168452909152902054610f629190859061128b908663ffffffff612d8816565b600154600090600160a01b900460ff1615611588576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61159133611eff565b6115cc5760405162461bcd60e51b81526004018080602001828103825260308152602001806136b26030913960400191505060405180910390fd5b610f628383612de9565b600154600090600160a01b900460ff1615611621576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61162b33836126d2565b506001919050565b61163c336113e9565b61167b576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b600a805461ff0019166101008315158102919091179182905560ff910416156116cc576040517f920a1ae5efe772816c4b2c32ca4e42c4b93762de96b3022c3e46f535ddf4f6c490600090a1611024565b6040517fd13cddd313ffdd1ce190fceb76cf83bf01c4c0246c9f633550d24baf0133810d90600090a150565b6001600160a01b039081166000908152602160205260409020541690565b61171f336113e9565b61175e576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6001600160a01b0382166117a35760405162461bcd60e51b81526004018080602001828103825260278152602001806137036027913960400191505060405180910390fd5b3031818110156117fa576040805162461bcd60e51b815260206004820181905260248201527f57697468647261773a20616d6f756e7420657863656564732062616c616e6365604482015290519081900360640190fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611830573d6000803e3d6000fd5b50505050565b6001600160a01b0381166000908152601f60209081526040918290208054835181840281018401909452808452606093928301828280156118a057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611882575b50505050509050919050565b600154600160a01b900460ff1690565b6118c5336113e9565b611904576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6119106005838361349c565b505050565b6001600160a01b03166000908152601d602052604090205490565b6001546001600160a01b031633146119795760405162461bcd60e51b815260040180806020018281038252602c81526020018061386f602c913960400191505060405180910390fd5b336119b55760405162461bcd60e51b815260040180806020018281038252602381526020018061368f6023913960400191505060405180910390fd5b6000805460405133926001600160a01b03909216917f357bdeb5828fa83945f38a88510ce5cd7d628dafb346d767efbc693149fdd97c91a3600080546001600160a01b03199081163317909155600180549091169055565b600154600090600160a01b900460ff1615611a58576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b611a6283836126d2565b610f62833361128b856040518060600160405280602481526020016135c9602491396001600160a01b0389166000908152601e60209081526040808320338452909152902054919063ffffffff612af216565b6000546001546001600160a01b0391821692911690565b611ad5336113e9565b611b14576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611b2560028263ffffffff61265116565b6040516001600160a01b038216907f3557494d1731a5740ae239774519b4c0ce38768fbef9ce574f84c9a8d08311f090600090a250565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f015780601f10610ed657610100808354040283529160200191610f01565b611bc6336113e9565b611c05576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611c1660048263ffffffff61265116565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6000610f6660028363ffffffff612b8916565b611c69336113e9565b611ca8576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6103e88161ffff161115611ced5760405162461bcd60e51b81526004018080602001828103825260278152602001806135a26027913960400191505060405180910390fd5b61ffff811615611d3d57600a805463ffff000019166201000061ffff8416021790556040517fe219d7fe9c009b39d654d5dae368d825b055057c4c0168db20e38c3fdcc9d05e90600090a1611024565b600a805463ffff0000191690556040517f7d00f058aaf72e16e87a740bb23222cd092f14044833e7916aa86c8055e29a3c90600090a150565b600154600090600160a01b900460ff1615611dc1576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b610f62338461128b8560405180606001604052806025815260200161355760259139336000908152601e602090815260408083206001600160a01b038d168452909152902054919063ffffffff612af216565b600154600090600160a01b900460ff1615611e5f576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b600c5482148015611e725750600a5460ff165b8015611e825750611e82836123e7565b8015611e945750611e92336123e7565b155b15611ebe57611ea63330600c54612f71565b611eb03384612bf0565b611eb933612fb6565b610f62565b6001600160a01b038316301480611edc57506001600160a01b038316155b15611eeb57611eb933836126d2565b610f623384611efa33866127db565b61286b565b6000610f6660048363ffffffff612b8916565b600a54610100900460ff1690565b611f29336113e9565b611f68576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611f7960028263ffffffff612d2116565b6040516001600160a01b038216907f50aa81349419539410d0bfbc090794c6df2344776ad4dee02103a1e810c1fd0290600090a250565b611fb9336113e9565b611ff8576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b6119106006838361349c565b61200d336113e9565b61204c576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b61205d60038263ffffffff612d2116565b6040516001600160a01b038216907fc19ec636c33767d631869f17e127e7bc2d0237fbd3720cac3cbd73c1360c72f590600090a250565b6001600160a01b0381166000908152602260209081526040918290208054835181840281018401909452808452606093928301828280156118a0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116118825750505050509050919050565b6001600160a01b0381166000908152601f602052604081205480156121f35760005b818110156121f1576001600160a01b0384166000908152601f6020526040902080546121e791908390811061215b57fe5b600091825260209182902001546040805163c9322adb60e01b81526001600160a01b0389811660048301529151919092169263c9322adb9260248082019391829003018186803b1580156121ae57600080fd5b505afa1580156121c2573d6000803e3d6000fd5b505050506040513d60208110156121d857600080fd5b5051849063ffffffff612d8816565b925060010161212a565b505b50919050565b612202336113e9565b612241576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b826001600160a01b0383166122875760405162461bcd60e51b815260040180806020018281038252602581526020018061384a6025913960400191505060405180910390fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156122d157600080fd5b505afa1580156122e5573d6000803e3d6000fd5b505050506040513d60208110156122fb57600080fd5b5051905082811015612354576040805162461bcd60e51b815260206004820152601e60248201527f5265736375653a20616d6f756e7420657863656564732062616c616e63650000604482015290519081900360640190fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123b457600080fd5b505af11580156123c8573d6000803e3d6000fd5b505050506040513d60208110156123de57600080fd5b50505050505050565b6001600160a01b0390811660009081526021602052604090205416151590565b6001600160a01b039182166000908152601e6020908152604080832093909416825291909152205490565b600154600090600160a01b900460ff161561247d576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b61248633611eff565b6124c15760405162461bcd60e51b81526004018080602001828103825260308152602001806136b26030913960400191505060405180910390fd5b6112928484846130a9565b6124d5336113e9565b612514576040805162461bcd60e51b81526020600482018190526024820152600080516020613779833981519152604482015290519081900360640190fd5b611024816132c2565b6001600160a01b0383166125625760405162461bcd60e51b81526004018080602001828103825260248152602001806137fd6024913960400191505060405180910390fd5b6001600160a01b0382166125a75760405162461bcd60e51b81526004018080602001828103825260228152602001806135356022913960400191505060405180910390fd5b6125b182826127db565b8111156125ef5760405162461bcd60e51b81526004018080602001828103825260288152602001806136116028913960400191505060405180910390fd5b6001600160a01b038084166000818152601e6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61265b8282612b89565b156126ad576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006126de83836127db565b9050612723816040518060600160405280602281526020016137bb602291396001600160a01b0386166000908152601d6020526040902054919063ffffffff612af216565b6001600160a01b0384166000908152601d602052604090205560095461274f908263ffffffff61336216565b600955600854612765908263ffffffff61336216565b6008556040805182815290516001600160a01b038516917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a26040805182815290516000916001600160a01b038616916000805160206137dd8339815191529181900360200190a3505050565b6000806127ff6127ea85612108565b6127f386611915565b9063ffffffff61336216565b90508083116128115782915050610f66565b801561281e579050610f66565b6040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20617661696c61626c652062616c616e6365206973207a65726f604482015290519081900360640190fd5b6001600160a01b0382166128b05760405162461bcd60e51b81526004018080602001828103825260248152602001806135ed6024913960400191505060405180910390fd5b600a54610100900460ff1680156128cd57506128cb83611c4d565b155b80156128df57506128dd82611c4d565b155b1561293e576128ed836123e7565b61293e576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a2073656e646572206973206e6f742077686974656c6973746564604482015290519081900360640190fd5b600a5462010000900461ffff1615612a4a57600a5460009061297f906103e89061297390859062010000900461ffff166133a4565b9063ffffffff6133fd16565b90506000612993838363ffffffff61336216565b6001600160a01b0386166000908152601d60205260409020549091506129bf908263ffffffff61336216565b6001600160a01b038087166000908152601d602052604080822093909355908616815220546129f4908263ffffffff612d8816565b6001600160a01b038086166000818152601d602090815260409182902094909455805185815290519193928916926000805160206137dd83398151915292918290030190a3612a4385836126d2565b5050611910565b6001600160a01b0383166000908152601d6020526040902054612a73908263ffffffff61336216565b6001600160a01b038085166000908152601d60205260408082209390935590841681522054612aa8908263ffffffff612d8816565b6001600160a01b038084166000818152601d602090815260409182902094909455805185815290519193928716926000805160206137dd83398151915292918290030190a3505050565b60008184841115612b815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b46578181015183820152602001612b2e565b50505050905090810190601f168015612b735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006001600160a01b038216612bd05760405162461bcd60e51b81526004018080602001828103825260228152602001806137996022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b612bf9826123e7565b15612c355760405162461bcd60e51b81526004018080602001828103825260298152602001806138216029913960400191505060405180910390fd5b612c3e816123e7565b612c795760405162461bcd60e51b815260040180806020018281038252602c815260200180613663602c913960400191505060405180910390fd5b6001600160a01b03808316600081815260216020908152604080832080549587166001600160a01b03199687168117909155835260228252822080546001818101835591845291909220018054909316909117909155600b54612ce19163ffffffff612d8816565b600b556040516001600160a01b0380831691908416907f14fc63225bc85ae786ffdbede4d2704b3f0805ee2bb7129abb2d10376803514090600090a35050565b612d2b8282612b89565b612d665760405162461bcd60e51b81526004018080602001828103825260218152602001806136e26021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600082820183811015612de2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600854600954612dff908363ffffffff612d8816565b1115612e52576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20746f74616c20737570706c7920636170206578636565646564604482015290519081900360640190fd5b6001600160a01b038216612ead576040805162461bcd60e51b815260206004820152601f60248201527f564f4b454e3a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600954612ec0908263ffffffff612d8816565b6009556001600160a01b0382166000908152601d6020526040902054612eec908263ffffffff612d8816565b6001600160a01b0383166000818152601d6020908152604091829020939093558051848152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805182815290516001600160a01b038416916000916000805160206137dd8339815191529181900360200190a35050565b6001600160a01b038216612a4a5760405162461bcd60e51b81526004018080602001828103825260248152602001806135ed6024913960400191505060405180910390fd5b60008082815b600f81101561306e576001600160a01b038083166000908152602160205260409020541680158015906130015750826001600160a01b0316816001600160a01b031614155b801561302457506001600160a01b03811660009081526022602052604090205482105b15613064576130423082600e85600f811061303b57fe5b0154612f71565b613061600e83600f811061305257fe5b0154869063ffffffff612d8816565b94505b9150600101612fbc565b5061308a836127f3600d54600c5461336290919063ffffffff16565b9150811561309c5761309c30836126d2565b6118303085600d54612f71565b6008546009546130bf908463ffffffff612d8816565b1115613112576040805162461bcd60e51b815260206004820181905260248201527f564f4b454e3a20746f74616c20737570706c7920636170206578636565646564604482015290519081900360640190fd5b6001600160a01b03831661316d576040805162461bcd60e51b815260206004820152601f60248201527f564f4b454e3a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600954613180908363ffffffff612d8816565b6009556001600160a01b0383166000908152601d60205260409020546131ac908363ffffffff612d8816565b6001600160a01b038085166000908152601d6020908152604080832094909455808052838220928516825291909152205460ff16613243576001600160a01b038381166000818152601f602090815260408083208054600180820183559185528385200180546001600160a01b031916968816968717905593835281805280832094835293905291909120805460ff191690911790555b806001600160a01b0316836001600160a01b03167fb854b64d06c0e6d93dc3f3697093e30cca6265297271ccd5f3ad69d6e82b40fb846040518082815260200191505060405180910390a36040805183815290516001600160a01b038516916000916000805160206137dd8339815191529181900360200190a3505050565b6001600160a01b0381166133075760405162461bcd60e51b815260040180806020018281038252602681526020018061357c6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000612de283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612af2565b6000826133b357506000610f66565b828202828482816133c057fe5b0414612de25760405162461bcd60e51b815260040180806020018281038252602181526020018061372a6021913960400191505060405180910390fd5b6000612de283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836134895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b46578181015183820152602001612b2e565b5082848161349357fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106134dd5782800160ff1982351617855561350a565b8280016001018555821561350a579182015b8281111561350a5782358255916020019190600101906134ef565b5061351692915061351a565b5090565b610f0991905b80821115613516576000815560010161352056fe564f4b454e3a20617070726f766520746f20746865207a65726f2061646472657373564f4b454e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734275726e696e674d6f64653a2076616c75652069732067726561746572207468616e2031303030564f4b454e3a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365564f4b454e3a20726563697069656e7420697320746865207a65726f2061646472657373564f4b454e3a20617070726f7665206578636565647320617661696c61626c652062616c616e6365564f4b454e2057686974656c6973743a206261746368206c656e677468206973206e6f74206d6174636857686974656c6973743a20726566657265654163636f756e74206973206e6f742077686974656c69737465644f776e61626c653a2063616c6c657220697320746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6557697468647261773a20726563697069656e7420697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750726f7879526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050726f787920726f6c654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373564f4b454e3a206275726e20616d6f756e7420657863656564732062616c616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef564f4b454e3a20617070726f76652066726f6d20746865207a65726f206164647265737357686974656c6973743a206163636f756e7420697320616c72656164792077686974656c69737465645265736375653a20726563697069656e7420697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206e6577206f776e65722061646472657373564f4b454e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a265627a7a723158204e26dd44b55a6a43ffa435fee457b7473bdf9e5207a533c9bf8b7c7dac94d4cc64736f6c634300050b0032

Deployed Bytecode Sourcemap

9597:23638:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15609:9;:13;15605:80;;15644:29;;;15663:9;15644:29;;;;15651:10;;15644:29;;;;;;;;;;15605:80;9597:23638;15763:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15763:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15763:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21935:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21935:162:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21935:162:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31812:256;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31812:256:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31812:256:0;;;;:::i;28752:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28752:98:0;;;:::i;32685:124::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32685:124:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;9345:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9345:197:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9345:197:0;;;;:::i;16427:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16427:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;13647:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13647:127:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13647:127:0;-1:-1:-1;;;;;13647:127:0;;:::i;19486:594::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19486:594:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19486:594:0;;;;;;;;;;;;;;;;;:::i;28558:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28558:101:0;;;:::i;13399:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13399:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13399:108:0;-1:-1:-1;;;;;13399:108:0;;:::i;29568:512::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29568:512:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29568:512:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;29568:512:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29568:512:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29568:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29568:512:0;;;;;;;;-1:-1:-1;29568:512:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;29568:512:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29568:512:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29568:512:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29568:512:0;;-1:-1:-1;29568:512:0;;-1:-1:-1;;;;;29568:512:0:i;6296:104::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6296:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6296:104:0;-1:-1:-1;;;;;6296:104:0;;:::i;14890:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14890:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14890:137:0;-1:-1:-1;;;;;14890:137:0;;:::i;16108:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16108:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29327:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29327:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29327:132:0;-1:-1:-1;;;;;29327:132:0;;:::i;16271:75::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16271:75:0;;;:::i;22620:220::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22620:220:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22620:220:0;;;;;;;;:::i;21119:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21119:157:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21119:157:0;;;;;;;;:::i;20236:132::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20236:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20236:132:0;;:::i;32402:208::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32402:208:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32402:208:0;;;;:::i;28926:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28926:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28926:116:0;-1:-1:-1;;;;;28926:116:0;;:::i;:::-;;;;-1:-1:-1;;;;;28926:116:0;;;;;;;;;;;;;;8193:343;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8193:343:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8193:343:0;;;;;;;;:::i;17740:143::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17740:143:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17740:143:0;-1:-1:-1;;;;;17740:143:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17740:143:0;;;;;;;;;;;;;;;;;8955:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8955:78:0;;;:::i;27974:90::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27974:90:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27974:90:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;27974:90:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27974:90:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;27974:90:0;;-1:-1:-1;27974:90:0;-1:-1:-1;27974:90:0;:::i;16605:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16605:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16605:110:0;-1:-1:-1;;;;;16605:110:0;;:::i;7213:334::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7213:334:0;;;:::i;20702:276::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20702:276:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20702:276:0;;;;;;;;:::i;5850:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5850:149:0;;;:::i;:::-;;;;-1:-1:-1;;;;;5850:149:0;;;;;;;;;;;;;;;;;;;;;;;;12680:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12680:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12680:129:0;-1:-1:-1;;;;;12680:129:0;;:::i;15914:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15914:87:0;;;:::i;14616:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14616:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14616:129:0;-1:-1:-1;;;;;14616:129:0;;:::i;12430:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12430:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12430:109:0;-1:-1:-1;;;;;12430:109:0;;:::i;32882:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32882:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32882:350:0;;;;:::i;23026:271::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23026:271:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23026:271:0;;;;;;;;:::i;18274:737::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18274:737:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18274:737:0;;;;;;;;:::i;14366:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14366:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14366:109:0;-1:-1:-1;;;;;14366:109:0;;:::i;32182:82::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32182:82:0;;;:::i;12954:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12954:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12954:137:0;-1:-1:-1;;;;;12954:137:0;;:::i;28186:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28186:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28186:95:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28186:95:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28186:95:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;28186:95:0;;-1:-1:-1;28186:95:0;-1:-1:-1;28186:95:0;:::i;13918:135::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13918:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13918:135:0;-1:-1:-1;;;;;13918:135:0;;:::i;29114:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29114:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29114:129:0;-1:-1:-1;;;;;29114:129:0;;:::i;16805:330::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16805:330:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16805:330:0;-1:-1:-1;;;;;16805:330:0;;:::i;7673:409::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7673:409:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7673:409:0;;;;;;;;;;;;;;;;;:::i;28366:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28366:122:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28366:122:0;-1:-1:-1;;;;;28366:122:0;;:::i;22300:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22300:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22300:134:0;;;;;;;;;;:::i;21462:237::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21462:237:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21462:237:0;;;;;;;;;;;;;;;;;:::i;6978:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6978:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6978:109:0;-1:-1:-1;;;;;6978:109:0;;:::i;15763:83::-;15833:5;15826:12;;;;;;;;-1:-1:-1;;15826:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15800:13;;15826:12;;15833:5;;15826:12;;15833:5;15826:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15763:83;;:::o;21935:162::-;9192:7;;22014:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;22031:36;22040:10;22052:7;22061:5;22031:8;:36::i;:::-;-1:-1:-1;22085:4:0;9221:1;21935:162;;;;:::o;31812:256::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;31881:17;:25;;-1:-1:-1;;31881:25:0;;;;;;;;;;31923:17;31919:142;;;31962:24;;;;;;;31919:142;;;32024:25;;;;;;;31919:142;31812:256;:::o;28752:98::-;28825:17;;;;28752:98;:::o;32685:124::-;32762:16;;;;;;;:20;;;;32685:124::o;9345:197::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;9406:7;:15;;-1:-1:-1;;;;9406:15:0;-1:-1:-1;;;9406:15:0;;;;;;;;;;;;;;9438:7;;;9434:101;;;9467:8;;;;;;;9434:101;;;9513:10;;;;;;;9345:197;:::o;16427:91::-;16498:12;;16427:91;:::o;13647:127::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;13710:21;:8;13723:7;13710:21;:12;:21;:::i;:::-;13747:19;;-1:-1:-1;;;;;13747:19:0;;;;;;;;13647:127;:::o;19486:594::-;9192:7;;19589:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19627:26:0;;19648:4;19627:26;;:53;;-1:-1:-1;;;;;;19657:23:0;;;19627:53;19623:426;;;19697:25;19703:10;19715:6;19697:5;:25::i;:::-;19623:426;;;19794:16;19813:35;19833:6;19841;19813:19;:35::i;:::-;19794:54;;19865:38;19875:6;19883:9;19894:8;19865:9;:38::i;:::-;19918:119;19927:6;19935:10;19947:89;19983:8;19947:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19947:19:0;;;;;;:11;:19;;;;;;;;19967:10;19947:31;;;;;;;;;:89;;:35;:89;:::i;:::-;19918:8;:119::i;:::-;19623:426;;-1:-1:-1;20068:4:0;19486:594;;;;;:::o;28558:101::-;28634:17;;28558:101;:::o;13399:108::-;13454:4;13478:21;:8;13491:7;13478:21;:12;:21;:::i;29568:512::-;29678:4;13220:19;13228:10;13220:7;:19::i;:::-;13212:78;;;;-1:-1:-1;;;13212:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29722:15;:22;29703:8;:15;:41;29695:96;;;;-1:-1:-1;;;29695:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29809:9;29804:245;29828:8;:15;29824:1;:19;29804:245;;;29892:1;-1:-1:-1;;;;;29869:25:0;:8;29878:1;29869:11;;;;;;;;;;;;;;-1:-1:-1;;;;;29869:25:0;;;:54;;;;;29899:24;29911:8;29920:1;29911:11;;;;;;;;;;;;;;29899;:24::i;:::-;29898:25;29869:54;:89;;;;;29927:31;29939:15;29955:1;29939:18;;;;;;;29927:31;29865:173;;;29979:43;29990:8;29999:1;29990:11;;;;;;;;;;;;;;30003:15;30019:1;30003:18;;;;;;;;;;;;;;29979:10;:43::i;:::-;29845:3;;29804:245;;6296:104;6351:4;6386:6;-1:-1:-1;;;;;6386:6:0;;;6375:17;;;;6296:104::o;14890:137::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;14957:24;:8;14973:7;14957:24;:15;:24;:::i;:::-;14997:22;;-1:-1:-1;;;;;14997:22:0;;;;;;;;14890:137;:::o;16108:83::-;16174:9;;;;16108:83;:::o;29327:132::-;-1:-1:-1;;;;;29425:19:0;29398:7;29425:19;;;:10;:19;;;;;:26;;29327:132::o;16271:75::-;16334:4;;16271:75;:::o;22620:220::-;9192:7;;22714:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;22740:10;22761:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22761:32:0;;;;;;;;;;22731:79;;22740:10;22752:7;;22761:48;;22798:10;22761:48;:36;:48;:::i;21119:157::-;9192:7;;21207:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;14184:20;14193:10;14184:8;:20::i;:::-;14176:81;;;;-1:-1:-1;;;14176:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21224:22;21230:7;21239:6;21224:5;:22::i;20236:132::-;9192:7;;20296:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;20313:25;20319:10;20331:6;20313:5;:25::i;:::-;-1:-1:-1;20356:4:0;20236:132;;;:::o;32402:208::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;32463:9;:17;;-1:-1:-1;;32463:17:0;;;;;;;;;;;;;;;;32497:9;;;32493:110;;;32528:12;;;;;;;32493:110;;;32578:13;;;;;;;32402:208;:::o;28926:116::-;-1:-1:-1;;;;;29017:17:0;;;28990:7;29017:17;;;:8;:17;;;;;;;;28926:116::o;8193:343::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8297:23:0;;8289:75;;;;-1:-1:-1;;;8289:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8403:4;8395:21;8437:17;;;;8429:62;;;;;-1:-1:-1;;;8429:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8502:26;;-1:-1:-1;;;;;8502:18:0;;;:26;;;;;8521:6;;8502:26;;;;8521:6;8502:18;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8502:26:0;6199:1;8193:343;;:::o;17740:143::-;-1:-1:-1;;;;;17854:21:0;;;;;;:12;:21;;;;;;;;;17842:33;;;;;;;;;;;;;;;;;17799:30;;17842:33;;;17854:21;17842:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17842:33:0;;;;;;;;;;;;;;;;;;;;;;;17740:143;;;:::o;8955:78::-;9018:7;;-1:-1:-1;;;9018:7:0;;;;;8955:78::o;27974:90::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;28043:13;:5;28051;;28043:13;:::i;:::-;;27974:90;;:::o;16605:110::-;-1:-1:-1;;;;;16689:18:0;16662:7;16689:18;;;:9;:18;;;;;;;16605:110::o;7213:334::-;7280:9;;-1:-1:-1;;;;;7280:9:0;7266:10;:23;7258:80;;;;-1:-1:-1;;;7258:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7357:10;7349:72;;;;-1:-1:-1;;;7349:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7457:6;;;7439:37;;7465:10;;-1:-1:-1;;;;;7457:6:0;;;;7439:37;;;7487:6;:19;;-1:-1:-1;;;;;;7487:19:0;;;7496:10;7487:19;;;;;7517:22;;;;;;;7213:334::o;20702:276::-;9192:7;;20783:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;20800:22;20806:7;20815:6;20800:5;:22::i;:::-;20833:115;20842:7;20851:10;20863:84;20900:6;20863:84;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20863:20:0;;;;;;:11;:20;;;;;;;;20884:10;20863:32;;;;;;;;;:84;;:36;:84;:::i;5850:149::-;5888:20;5954:6;;5982:9;-1:-1:-1;;;;;5954:6:0;;;;5982:9;;;5850:149::o;12680:129::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;12744:21;:8;12757:7;12744:21;:12;:21;:::i;:::-;12781:20;;-1:-1:-1;;;;;12781:20:0;;;;;;;;12680:129;:::o;15914:87::-;15986:7;15979:14;;;;;;;;-1:-1:-1;;15979:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15953:13;;15979:14;;15986:7;;15979:14;;15986:7;15979:14;;;;;;;;;;;;;;;;;;;;;;;;14616:129;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;14680:21;:8;14693:7;14680:21;:12;:21;:::i;:::-;14717:20;;-1:-1:-1;;;;;14717:20:0;;;;;;;;14616:129;:::o;12430:109::-;12486:4;12510:21;:8;12523:7;12510:21;:12;:21;:::i;32882:350::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;32965:4;32956:5;:13;;;;32948:65;;;;-1:-1:-1;;;32948:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33030:9;;;;33026:199;;33056:16;:24;;-1:-1:-1;;33056:24:0;;;;;;;;;33100:15;;;;-1:-1:-1;;33100:15:0;33026:199;;;33157:16;:20;;-1:-1:-1;;33157:20:0;;;33197:16;;;;33176:1;;33197:16;32882:350;:::o;23026:271::-;9192:7;;23125:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;23142:125;23151:10;23163:7;23172:94;23209:15;23172:94;;;;;;;;;;;;;;;;;23184:10;23172:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;23172:32:0;;;;;;;;;;;:94;;:36;:94;:::i;18274:737::-;9192:7;;18357:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;18418:18;;18408:6;:28;:49;;;;-1:-1:-1;18440:17:0;;;;18408:49;:75;;;;;18461:22;18473:9;18461:11;:22::i;:::-;18408:103;;;;;18488:23;18500:10;18488:11;:23::i;:::-;18487:24;18408:103;18404:576;;;18528:52;18534:10;18554:4;18561:18;;18528:5;:52::i;:::-;18595:33;18606:10;18618:9;18595:10;:33::i;:::-;18643:35;18667:10;18643:23;:35::i;:::-;18404:576;;;-1:-1:-1;;;;;18728:26:0;;18749:4;18728:26;;:53;;-1:-1:-1;;;;;;18758:23:0;;;18728:53;18724:256;;;18798:25;18804:10;18816:6;18798:5;:25::i;18724:256::-;18895:73;18905:10;18917:9;18928:39;18948:10;18960:6;18928:19;:39::i;:::-;18895:9;:73::i;14366:109::-;14422:4;14446:21;:8;14459:7;14446:21;:12;:21;:::i;32182:82::-;32247:9;;;;;;;;32182:82::o;12954:137::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;13021:24;:8;13037:7;13021:24;:15;:24;:::i;:::-;13061:22;;-1:-1:-1;;;;;13061:22:0;;;;;;;;12954:137;:::o;28186:95::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;28258:15;:7;28268:5;;28258:15;:::i;13918:135::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;13984:24;:8;14000:7;13984:24;:15;:24;:::i;:::-;14024:21;;-1:-1:-1;;;;;14024:21:0;;;;;;;;13918:135;:::o;29114:129::-;-1:-1:-1;;;;;29216:19:0;;;;;;:10;:19;;;;;;;;;29209:26;;;;;;;;;;;;;;;;;29180:16;;29209:26;;;29216:19;29209:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29209:26:0;;;;;;;;;;;;;;;;;;;;;;29114:129;;;:::o;16805:330::-;-1:-1:-1;;;;;16908:21:0;;16863:16;16908:21;;;:12;:21;;;;;:28;16951:9;;16947:181;;16982:9;16977:140;17001:5;16997:1;:9;16977:140;;;-1:-1:-1;;;;;17056:21:0;;;;;;:12;:21;;;;;:24;;17043:58;;17056:21;17078:1;;17056:24;;;;;;;;;;;;;;;;;:44;;;-1:-1:-1;;;17056:44:0;;-1:-1:-1;;;;;17056:44:0;;;;;;;;;:24;;;;;:35;;:44;;;;;;;;;;;:24;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;17056:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17056:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17056:44:0;17043:8;;:58;:12;:58;:::i;:::-;17032:69;-1:-1:-1;17008:3:0;;16977:140;;;;16947:181;16805:330;;;;:::o;7673:409::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;7802:9;-1:-1:-1;;;;;7831:23:0;;7823:73;;;;-1:-1:-1;;;7823:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7925:31;;;-1:-1:-1;;;7925:31:0;;7950:4;7925:31;;;;;;7907:15;;-1:-1:-1;;;;;7925:16:0;;;;;:31;;;;;;;;;;;;;;;:16;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;7925:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7925:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7925:31:0;;-1:-1:-1;7977:17:0;;;;7969:60;;;;;-1:-1:-1;;;7969:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8040:6;-1:-1:-1;;;;;8040:15:0;;8056:9;8067:6;8040:34;;;;;;;;;;;;;-1:-1:-1;;;;;8040:34:0;-1:-1:-1;;;;;8040:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8040:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8040:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;;7673:409:0:o;28366:122::-;-1:-1:-1;;;;;28449:17:0;;;28425:4;28449:17;;;:8;:17;;;;;;;:31;;;28366:122::o;22300:134::-;-1:-1:-1;;;;;22399:18:0;;;22372:7;22399:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22300:134::o;21462:237::-;9192:7;;21596:4;;-1:-1:-1;;;9192:7:0;;;;9191:8;9183:27;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;-1:-1:-1;;;9183:27:0;;;;;;;;;;;;;;;14184:20;14193:10;14184:8;:20::i;:::-;14176:81;;;;-1:-1:-1;;;14176:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21613:56;21633:7;21642:6;21650:18;21613:19;:56::i;6978:109::-;6132:19;6140:10;6132:7;:19::i;:::-;6124:64;;;;;-1:-1:-1;;;6124:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6124:64:0;;;;;;;;;;;;;;;7051:28;7070:8;7051:18;:28::i;27407:442::-;-1:-1:-1;;;;;27499:19:0;;27491:68;;;;-1:-1:-1;;;27491:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27578:21:0;;27570:68;;;;-1:-1:-1;;;27570:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27666:35;27686:7;27695:5;27666:19;:35::i;:::-;27657:5;:44;;27649:97;;;;-1:-1:-1;;;27649:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27759:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;27810:31;;;;;;;;;;;;;;;;;27407:442;;;:::o;3252:178::-;3330:18;3334:4;3340:7;3330:3;:18::i;:::-;3329:19;3321:63;;;;;-1:-1:-1;;;3321:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3395:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;3395:27:0;3418:4;3395:27;;;3252:178::o;26840:416::-;26907:16;26926:36;26946:7;26955:6;26926:19;:36::i;:::-;26907:55;;26996:70;27019:8;26996:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26996:18:0;;;;;;:9;:18;;;;;;;:70;;:22;:70;:::i;:::-;-1:-1:-1;;;;;26975:18:0;;;;;;:9;:18;;;;;:91;27092:12;;:26;;27109:8;27092:26;:16;:26;:::i;:::-;27077:12;:41;27136:4;;:18;;27145:8;27136:18;:8;:18;:::i;:::-;27129:4;:25;27170:23;;;;;;;;-1:-1:-1;;;;;27170:23:0;;;;;;;;;;;;;27209:39;;;;;;;;27235:1;;-1:-1:-1;;;;;27209:39:0;;;-1:-1:-1;;;;;;;;;;;27209:39:0;;;;;;;;26840:416;;;:::o;17249:394::-;17333:7;17353:19;17375:43;17398:19;17409:7;17398:10;:19::i;:::-;17375:18;17385:7;17375:9;:18::i;:::-;:22;:43;:22;:43;:::i;:::-;17353:65;;17445:11;17435:6;:21;17431:150;;17480:6;17473:13;;;;;17431:150;17519:15;;17515:66;;17558:11;-1:-1:-1;17551:18:0;;17515:66;17593:42;;;-1:-1:-1;;;17593:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23483:966;-1:-1:-1;;;;;23580:23:0;;23572:72;;;;-1:-1:-1;;;23572:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:9;;;;;;;:30;;;;;23675:16;23684:6;23675:8;:16::i;:::-;23674:17;23661:30;:54;;;;;23696:19;23705:9;23696:8;:19::i;:::-;23695:20;23661:54;23657:151;;;23740:19;23752:6;23740:11;:19::i;:::-;23732:64;;;;;-1:-1:-1;;;23732:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23824:16;;;;;;;:20;23820:622;;23892:16;;23861:17;;23881:38;;23914:4;;23881:28;;:6;;23892:16;;;;;23881:10;:28::i;:::-;:32;:38;:32;:38;:::i;:::-;23861:58;-1:-1:-1;23934:16:0;23953:21;:6;23861:58;23953:21;:10;:21;:::i;:::-;-1:-1:-1;;;;;24011:17:0;;;;;;:9;:17;;;;;;23934:40;;-1:-1:-1;24011:31:0;;23934:40;24011:31;:21;:31;:::i;:::-;-1:-1:-1;;;;;23991:17:0;;;;;;;:9;:17;;;;;;:51;;;;24080:20;;;;;;;:34;;24105:8;24080:34;:24;:34;:::i;:::-;-1:-1:-1;;;;;24057:20:0;;;;;;;:9;:20;;;;;;;;;:57;;;;24134:37;;;;;;;24057:20;;24134:37;;;;-1:-1:-1;;;;;;;;;;;24134:37:0;;;;;;;;24188:24;24194:6;24202:9;24188:5;:24::i;:::-;23820:622;;;;;-1:-1:-1;;;;;24276:17:0;;;;;;:9;:17;;;;;;:29;;24298:6;24276:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;24256:17:0;;;;;;;:9;:17;;;;;;:49;;;;24343:20;;;;;;;:32;;24368:6;24343:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;24320:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;24395:35;;;;;;;24320:20;;24395:35;;;;-1:-1:-1;;;;;;;;;;;24395:35:0;;;;;;;;23483:966;;;:::o;1098:192::-;1184:7;1220:12;1212:6;;;;1204:29;;;;-1:-1:-1;;;1204:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1204:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1256:5:0;;;1098:192::o;3796:203::-;3868:4;-1:-1:-1;;;;;3893:21:0;;3885:68;;;;-1:-1:-1;;;3885:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3971:20:0;:11;:20;;;;;;;;;;;;;;;3796:203::o;30214:469::-;30303:20;30315:7;30303:11;:20::i;:::-;30302:21;30294:75;;;;-1:-1:-1;;;30294:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30388:27;30400:14;30388:11;:27::i;:::-;30380:84;;;;-1:-1:-1;;;30380:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30477:17:0;;;;;;;:8;:17;;;;;;;;:34;;;;;-1:-1:-1;;;;;;30477:34:0;;;;;;;;30522:26;;:10;:26;;;;27:10:-1;;30477:34:0;23:18:-1;;;45:23;;30522:40:0;;;;;;;;;;;;;;;;;;;30593:17;;:24;;;:21;:24;:::i;:::-;30573:17;:44;30635:40;;-1:-1:-1;;;;;30635:40:0;;;;;;;;;;;;;30214:469;;:::o;3510:183::-;3590:18;3594:4;3600:7;3590:3;:18::i;:::-;3582:64;;;;-1:-1:-1;;;3582:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3657:20:0;3680:5;3657:20;;;;;;;;;;;:28;;-1:-1:-1;;3657:28:0;;;3510:183::o;461:181::-;519:7;551:5;;;575:6;;;;567:46;;;;;-1:-1:-1;;;567:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;633:1;461:181;-1:-1:-1;;;461:181:0:o;25209:432::-;25312:4;;25284:12;;:24;;25301:6;25284:24;:16;:24;:::i;:::-;:32;;25276:77;;;;;-1:-1:-1;;;25276:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25372:21:0;;25364:65;;;;;-1:-1:-1;;;25364:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25457:12;;:24;;25474:6;25457:24;:16;:24;:::i;:::-;25442:12;:39;-1:-1:-1;;;;;25513:18:0;;;;;;:9;:18;;;;;;:30;;25536:6;25513:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;25492:18:0;;;;;;:9;:18;;;;;;;;;:51;;;;25559:21;;;;;;;25492:18;;25559:21;;;;;;;;;25596:37;;;;;;;;-1:-1:-1;;;;;25596:37:0;;;25613:1;;-1:-1:-1;;;;;;;;;;;25596:37:0;;;;;;;;25209:432;;:::o;24635:344::-;-1:-1:-1;;;;;24728:23:0;;24720:72;;;;-1:-1:-1;;;24720:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30734:944;30803:27;;30894:7;30803:27;30912:439;30932:25;30928:1;:29;30912:439;;;-1:-1:-1;;;;;30999:19:0;;;30979:17;30999:19;;;:8;:19;;;;;;;31039:23;;;;;:49;;;31079:9;-1:-1:-1;;;;;31066:22:0;:9;-1:-1:-1;;;;;31066:22:0;;;31039:49;:85;;;;-1:-1:-1;;;;;;31092:21:0;;;;;;:10;:21;;;;;:28;:32;-1:-1:-1;31039:85:0;31035:267;;;31145:54;31159:4;31166:9;31177:18;31196:1;31177:21;;;;;;;;;31145:5;:54::i;:::-;31240:46;31264:18;31283:1;31264:21;;;;;;;;;31240:19;;:46;:23;:46;:::i;:::-;31218:68;;31035:267;31330:9;-1:-1:-1;30959:3:0;;30912:439;;;;31395:66;31441:19;31395:41;31418:17;;31395:18;;:22;;:41;;;;:::i;:66::-;31380:81;-1:-1:-1;31476:16:0;;31472:83;;31509:34;31523:4;31530:12;31509:5;:34::i;:::-;31622:48;31636:4;31643:7;31652:17;;31622:5;:48::i;25886:742::-;26035:4;;26007:12;;:24;;26024:6;26007:24;:16;:24;:::i;:::-;:32;;25999:77;;;;;-1:-1:-1;;;25999:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26095:21:0;;26087:65;;;;;-1:-1:-1;;;26087:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26180:12;;:24;;26197:6;26180:24;:16;:24;:::i;:::-;26165:12;:39;-1:-1:-1;;;;;26236:18:0;;;;;;:9;:18;;;;;;:30;;26259:6;26236:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;26215:18:0;;;;;;;:9;:18;;;;;;;;:51;;;;26284:28;;;;;;:57;;;;;;;;;;;;;26279:216;;-1:-1:-1;;;;;26358:21:0;;;;;;;:12;:21;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;26358:46:0;;;;;;;;;-1:-1:-1;;;;;;26358:46:0;;;;;;;;;26419:28;;;;;;;;;:57;;;;;;;;;;:64;;-1:-1:-1;;26419:64:0;;;;;;26279:216;26548:18;-1:-1:-1;;;;;26512:55:0;26531:7;-1:-1:-1;;;;;26512:55:0;;26540:6;26512:55;;;;;;;;;;;;;;;;;;26583:37;;;;;;;;-1:-1:-1;;;;;26583:37:0;;;26600:1;;-1:-1:-1;;;;;;;;;;;26583:37:0;;;;;;;;25886:742;;;:::o;6581:234::-;-1:-1:-1;;;;;6655:22:0;;6647:73;;;;-1:-1:-1;;;6647:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6759:6;;;6738:38;;-1:-1:-1;;;;;6738:38:0;;;;6759:6;;;6738:38;;;6787:9;:20;;-1:-1:-1;;;;;;6787:20:0;-1:-1:-1;;;;;6787:20:0;;;;;;;;;;6581:234::o;792:136::-;850:7;877:43;881:1;884;877:43;;;;;;;;;;;;;;;;;:3;:43::i;1405:250::-;1463:7;1487:6;1483:47;;-1:-1:-1;1517:1:0;1510:8;;1483:47;1554:5;;;1558:1;1554;:5;:1;1578:5;;;;;:10;1570:56;;;;-1:-1:-1;;;1570:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1822:132;1880:7;1907:39;1911:1;1914;1907:39;;;;;;;;;;;;;;;;;2227:7;2329:12;2322:5;2314:28;;;;-1:-1:-1;;;2314:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2314:28:0;;2364:1;2360;:5;;;;;;;2141:232;-1:-1:-1;;;;2141:232:0:o;9597:23638::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9597:23638:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9597:23638:0;;;-1:-1:-1;9597:23638:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://4e26dd44b55a6a43ffa435fee457b7473bdf9e5207a533c9bf8b7c7dac94d4cc

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.