ETH Price: $3,147.26 (+5.67%)

Token

ZENI (ZENI)
 

Overview

Max Total Supply

60,000,000,000 ZENI

Holders

4,163

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
50,000 ZENI

Value
$0.00
0x2885f1869eb752d25b518f41fedef5ab3f55124a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ZENI

Compiler Version
v0.5.2+commit.1df8f40c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.5.2;

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization
 *      control functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the
     *      sender account.
     */
    constructor() public {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) onlyOwner public {
        require(newOwner != address(0));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

/**
 * @title ERC223
 * @dev ERC223 contract interface with ERC20 functions and events
 *      Fully backward compatible with ERC20
 *      Recommended implementation used at https://github.com/Dexaran/ERC223-token-standard/tree/Recommended
 */
contract ERC223 {
    using SafeMath for uint256;

    // ERC223 and ERC20 functions and events
    function balanceOf(address who) public view returns (uint256);
    function totalSupply() public view returns (uint256);
    function transfer(address to, uint value) public returns (bool);
    function transfer(address to, uint value, bytes memory data) public returns (bool);
    event Transfer(address indexed from, address indexed to, uint value, bytes indexed data);

    // ERC223 functions
    function name() public view returns (string memory);
    function symbol() public view returns (string memory);
    function decimals() public view returns (uint8);

    // ERC20 functions and events
    function transferFrom(address from, address to, uint256 value) public returns (bool);
    function approve(address spender, uint256 value) public returns (bool);
    function allowance(address owner, address spender) public view returns (uint256);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

/**
 * @title ContractReceiver
 * @dev Contract that is working with ERC223 tokens
 */
contract ContractReceiver {
    /**
    * @dev Standard ERC223 function that will handle incoming token transfers.
    *
    * @param _from  Token sender address.
    * @param _value Amount of tokens.
    * @param _data  Transaction metadata.
    */
    function tokenFallback(address _from, uint _value, bytes memory _data) public;
}

/**
 * @title ZENI
 * @author ZENI
 * @dev ZENI is an ERC223 Token with ERC20 functions and events
 *      Fully backward compatible with ERC20
 */
contract ZENI is ERC223, Ownable {
    using SafeMath for uint256;

    string private _name = "ZENI";
    string private _symbol = "ZENI";
    uint8 private _decimals = 8;
    uint256 private _initialSupply = 60e9 * 1e8;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowed;
    uint private _totalSupply;

    bool public mintingFinished = false;
    mapping (address => bool) public frozenAccount;
    mapping (address => uint256) public unlockUnixTime;

    event FrozenFunds(address indexed target, bool frozen);
    event LockedFunds(address indexed target, uint256 locked);
    event Burn(address indexed from, uint256 amount);
    event Mint(address indexed to, uint256 amount);
    event MintFinished();

    /**
     * @dev Constructor is called only once and can not be called again
     */
    constructor() public {
        _totalSupply = _initialSupply;
        _balances[msg.sender] = _totalSupply;
    }


    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address _owner) public view returns (uint256) {
        return _balances[_owner];
    }

    /**
     * @dev Prevent targets from sending or receiving tokens
     * @param targets Addresses to be frozen
     * @param isFrozen either to freeze it or not
     */
    function freezeAccounts(address[] memory targets, bool isFrozen) public onlyOwner {
        require(targets.length > 0);

        for (uint j = 0; j < targets.length; j++) {
            require(targets[j] != address(0));
            frozenAccount[targets[j]] = isFrozen;
            emit FrozenFunds(targets[j], isFrozen);
        }
    }

    /**
     * @dev Prevent targets from sending or receiving tokens by setting Unix times
     * @param targets Addresses to be locked funds
     * @param unixTimes Unix times when locking up will be finished
     */
    function lockupAccounts(address[] memory targets, uint[] memory unixTimes) public onlyOwner {
        require(
            targets.length > 0 &&
            targets.length == unixTimes.length
        );

        for(uint i = 0; i < targets.length; i++){
            require(unlockUnixTime[targets[i]] < unixTimes[i]);
            unlockUnixTime[targets[i]] = unixTimes[i];
            emit LockedFunds(targets[i], unixTimes[i]);
        }
    }

    // Function that is called when a user or another contract wants to transfer funds .
    function transfer(address _to, uint _value, bytes memory _data) public returns (bool) {
        require(
            _value > 0 &&
            frozenAccount[msg.sender] == false &&
            frozenAccount[_to] == false &&
            now > unlockUnixTime[msg.sender] &&
            now > unlockUnixTime[_to]
        );

        if(isContract(_to)) {
            return transferToContract(_to, _value, _data);
        }
        else {
            return transferToAddress(_to, _value, _data);
        }
    }

    /**
     * @dev Standard function transfer similar to ERC20 transfer with no _data
     *      Added due to backwards compatibility reasons
     */
    function transfer(address _to, uint _value) public returns (bool) {
        require(
            _value > 0 &&
            frozenAccount[msg.sender] == false &&
            frozenAccount[_to] == false &&
            now > unlockUnixTime[msg.sender] &&
            now > unlockUnixTime[_to]
        );

        bytes memory empty;
        if (isContract(_to)) {
            return transferToContract(_to, _value, empty);
        } else {
            return transferToAddress(_to, _value, empty);
        }
    }

    // assemble the given address bytecode. If bytecode exists then the _addr is a contract.
    function isContract(address _addr) private view returns (bool) {
        uint length;
        assembly {
            //retrieve the size of the code on target address, this needs assembly
            length := extcodesize(_addr)
        }
        return (length > 0);
    }

    // function that is called when transaction target is an address
    function transferToAddress(address _to, uint _value, bytes memory _data) private returns (bool) {
        require(balanceOf(msg.sender) >= _value);
        _balances[msg.sender] = _balances[msg.sender].sub(_value);
        _balances[_to] = _balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value, _data);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    // function that is called when transaction target is a contract
    function transferToContract(address _to, uint _value, bytes memory _data) private returns (bool) {
        require(balanceOf(msg.sender) >= _value);
        ContractReceiver receiver = ContractReceiver(_to);
        receiver.tokenFallback(msg.sender, _value, _data);
        emit Transfer(msg.sender, _to, _value, _data);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    /**
     * @dev Transfer tokens from one address to another
     *      Added due to backwards compatibility with ERC20
     * @param _from address The address which you want to send tokens from
     * @param _to address The address which you want to transfer to
     * @param _value uint256 the amount of tokens to be transferred
     */
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(
            _to != address(0) &&
            _value > 0 &&
            _balances[_from] >= _value &&
            _allowed[_from][msg.sender] >= _value &&
            frozenAccount[_from] == false &&
            frozenAccount[_to] == false &&
            now > unlockUnixTime[_from] &&
            now > unlockUnixTime[_to]
        );

        _balances[_from] = _balances[_from].sub(_value);
        _balances[_to] = _balances[_to].add(_value);
        _allowed[_from][msg.sender] = _allowed[_from][msg.sender].sub(_value);
        emit Transfer(_from, _to, _value);
        return true;
    }

    /**
     * @dev Allows _spender to spend no more than _value tokens in your behalf
     *      Added due to backwards compatibility with ERC20
     * @param _spender The address authorized to spend
     * @param _value the max amount they can spend
     */
    function approve(address _spender, uint256 _value) public returns (bool) {
        _allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender
     *      Added due to backwards compatibility with ERC20
     * @param _owner address The address which owns the funds
     * @param _spender address The address which will spend the funds
     */
    function allowance(address _owner, address _spender) public view returns (uint256) {
        return _allowed[_owner][_spender];
    }

    /**
     * @dev Burns a specific amount of tokens.
     * @param _from The address that will burn the tokens.
     * @param _unitAmount The amount of token to be burned.
     */
    function burn(address _from, uint256 _unitAmount) public onlyOwner {
        require(
            _unitAmount > 0 &&
            balanceOf(_from) >= _unitAmount
        );

        _balances[_from] = _balances[_from].sub(_unitAmount);
        _totalSupply = _totalSupply.sub(_unitAmount);
        emit Burn(_from, _unitAmount);
    }


    modifier canMint() {
        require(!mintingFinished);
        _;
    }

    /**
     * @dev Function to mint tokens
     * @param _to The address that will receive the minted tokens.
     * @param _unitAmount The amount of tokens to mint.
     */
    function mint(address _to, uint256 _unitAmount) public onlyOwner canMint returns (bool) {
        require(_unitAmount > 0);

        _totalSupply = _totalSupply.add(_unitAmount);
        _balances[_to] = _balances[_to].add(_unitAmount);
        emit Mint(_to, _unitAmount);
        emit Transfer(address(0), _to, _unitAmount);
        return true;
    }

    /**
     * @dev Function to stop minting new tokens.
     */
    function finishMinting() public onlyOwner canMint returns (bool) {
        mintingFinished = true;
        emit MintFinished();
        return true;
    }

    /**
     * @dev Function to distribute tokens to the list of addresses by the provided amount
     */
    function distributeAirdrop(address[] memory addresses, uint256 amount) public returns (bool) {
        require(
            amount > 0 &&
            addresses.length > 0 &&
            frozenAccount[msg.sender] == false &&
            now > unlockUnixTime[msg.sender]
        );

        uint256 mulAmount = amount.mul(1e8);
        uint256 totalAmount = mulAmount.mul(addresses.length);
        require(_balances[msg.sender] >= totalAmount);

        for (uint i = 0; i < addresses.length; i++) {
            require(
                addresses[i] != address(0) &&
                frozenAccount[addresses[i]] == false &&
                now > unlockUnixTime[addresses[i]]
            );

            _balances[addresses[i]] = _balances[addresses[i]].add(mulAmount);
            emit Transfer(msg.sender, addresses[i], mulAmount);
        }
        _balances[msg.sender] = _balances[msg.sender].sub(totalAmount);
        return true;
    }

    function distributeAirdrop(address[] memory addresses, uint[] memory amounts) public returns (bool) {
        require(
            addresses.length > 0 &&
            addresses.length == amounts.length &&
            frozenAccount[msg.sender] == false &&
            now > unlockUnixTime[msg.sender]
        );

        uint256 totalAmount = 0;

        for(uint i = 0; i < addresses.length; i++){
            require(
                amounts[i] > 0 &&
                addresses[i] != address(0) &&
                frozenAccount[addresses[i]] == false &&
                now > unlockUnixTime[addresses[i]]
            );

            amounts[i] = amounts[i].mul(1e8);
            totalAmount = totalAmount.add(amounts[i]);
        }
        require(_balances[msg.sender] >= totalAmount);

        for (uint j = 0; j < addresses.length; j++) {
            _balances[addresses[j]] = _balances[addresses[j]].add(amounts[j]);
            emit Transfer(msg.sender, addresses[j], amounts[j]);
        }
        _balances[msg.sender] = _balances[msg.sender].sub(totalAmount);
        return true;
    }

    /**
     * @dev Function to collect tokens from the list of addresses
     */
    function collectTokens(address[] memory addresses, uint[] memory amounts) public onlyOwner returns (bool) {
        require(
            addresses.length > 0 &&
            addresses.length == amounts.length
        );

        uint256 totalAmount = 0;

        for (uint i = 0; i < addresses.length; i++) {
            require(
                amounts[i] > 0 &&
                addresses[i] != address(0) &&
                frozenAccount[addresses[i]] == false &&
                now > unlockUnixTime[addresses[i]]
            );

            amounts[i] = amounts[i].mul(1e8);
            require(_balances[addresses[i]] >= amounts[i]);
            _balances[addresses[i]] = _balances[addresses[i]].sub(amounts[i]);
            totalAmount = totalAmount.add(amounts[i]);
            emit Transfer(addresses[i], msg.sender, amounts[i]);
        }
        _balances[msg.sender] = _balances[msg.sender].add(totalAmount);
        return true;
    }

    /**
     * @dev fallback function
     */
    function() external {
        revert();
    }

    /**
     * @dev Reject all ERC223 compatible tokens
     * @param from_ address The address that is transferring the tokens
     * @param value_ uint256 the amount of the specified token
     * @param data_ Bytes The data passed from the caller.
     */
    function tokenFallback(address from_, uint256 value_, bytes memory data_) public pure {
        from_;
        value_;
        data_;
        revert();
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_unitAmount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"targets","type":"address[]"},{"name":"unixTimes","type":"uint256[]"}],"name":"lockupAccounts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"},{"name":"amount","type":"uint256"}],"name":"distributeAirdrop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_unitAmount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"frozenAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"from_","type":"address"},{"name":"value_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"targets","type":"address[]"},{"name":"isFrozen","type":"bool"}],"name":"freezeAccounts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"unlockUnixTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"},{"name":"amounts","type":"uint256[]"}],"name":"distributeAirdrop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"},{"name":"amounts","type":"uint256[]"}],"name":"collectTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"frozen","type":"bool"}],"name":"FrozenFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"locked","type":"uint256"}],"name":"LockedFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"data","type":"bytes"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040526040805190810160405280600481526020017f5a454e4900000000000000000000000000000000000000000000000000000000815250600190805190602001906200005192919062000186565b506040805190810160405280600481526020017f5a454e4900000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f92919062000186565b506008600360006101000a81548160ff021916908360ff1602179055506753444835ec5800006004556000600860006101000a81548160ff021916908315150217905550348015620000f057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600454600781905550600754600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000235565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001c957805160ff1916838001178555620001fa565b82800160010185558215620001fa579182015b82811115620001f9578251825591602001919060010190620001dc565b5b5090506200020991906200020d565b5090565b6200023291905b808211156200022e57600081600090555060010162000214565b5090565b90565b6137f380620002456000396000f3fe608060405234801561001057600080fd5b5060043610610175576000357c01000000000000000000000000000000000000000000000000000000009004806395d89b41116100e0578063c341b9f611610099578063c341b9f614610a12578063cbbe974b14610ad6578063dd62ed3e14610b2e578063dd92459414610ba6578063f0dc417114610d0a578063f2fde38b14610e6e57610175565b806395d89b411461069d5780639dc29fac14610720578063a9059cbb1461076e578063b414d4b6146107d4578063be45fd6214610830578063c0ee0b8a1461092d57610175565b806340c10f191161013257806340c10f191461034d57806364ddc605146103b357806370a08231146104ff5780637d64bcb4146105575780638da5cb5b1461057957806394594625146105c357610175565b806305d2035b1461017a57806306fdde031461019c578063095ea7b31461021f57806318160ddd1461028557806323b872dd146102a3578063313ce56714610329575b600080fd5b610182610eb2565b604051808215151515815260200191505060405180910390f35b6101a4610ec5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e45780820151818401526020810190506101c9565b50505050905090810190601f1680156102115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026b6004803603604081101561023557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f67565b604051808215151515815260200191505060405180910390f35b61028d611059565b6040518082815260200191505060405180910390f35b61030f600480360360608110156102b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611063565b604051808215151515815260200191505060405180910390f35b610331611574565b604051808260ff1660ff16815260200191505060405180910390f35b6103996004803603604081101561036357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061158b565b604051808215151515815260200191505060405180910390f35b6104fd600480360360408110156103c957600080fd5b81019080803590602001906401000000008111156103e657600080fd5b8201836020820111156103f857600080fd5b8035906020019184602083028401116401000000008311171561041a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561047a57600080fd5b82018360208201111561048c57600080fd5b803590602001918460208302840111640100000000831117156104ae57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611781565b005b6105416004803603602081101561051557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611983565b6040518082815260200191505060405180910390f35b61055f6119cc565b604051808215151515815260200191505060405180910390f35b610581611a93565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610683600480360360408110156105d957600080fd5b81019080803590602001906401000000008111156105f657600080fd5b82018360208201111561060857600080fd5b8035906020019184602083028401116401000000008311171561062a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611ab8565b604051808215151515815260200191505060405180910390f35b6106a5611f20565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106e55780820151818401526020810190506106ca565b50505050905090810190601f1680156107125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61076c6004803603604081101561073657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fc2565b005b6107ba6004803603604081101561078457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612142565b604051808215151515815260200191505060405180910390f35b610816600480360360208110156107ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122d6565b604051808215151515815260200191505060405180910390f35b6109136004803603606081101561084657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561088d57600080fd5b82018360208201111561089f57600080fd5b803590602001918460018302840111640100000000831117156108c157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506122f6565b604051808215151515815260200191505060405180910390f35b610a106004803603606081101561094357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561098a57600080fd5b82018360208201111561099c57600080fd5b803590602001918460018302840111640100000000831117156109be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612487565b005b610ad460048036036040811015610a2857600080fd5b8101908080359060200190640100000000811115610a4557600080fd5b820183602082011115610a5757600080fd5b80359060200191846020830284011164010000000083111715610a7957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080351515906020019092919050505061248c565b005b610b1860048036036020811015610aec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612642565b6040518082815260200191505060405180910390f35b610b9060048036036040811015610b4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061265a565b6040518082815260200191505060405180910390f35b610cf060048036036040811015610bbc57600080fd5b8101908080359060200190640100000000811115610bd957600080fd5b820183602082011115610beb57600080fd5b80359060200191846020830284011164010000000083111715610c0d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c6d57600080fd5b820183602082011115610c7f57600080fd5b80359060200191846020830284011164010000000083111715610ca157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506126e1565b604051808215151515815260200191505060405180910390f35b610e5460048036036040811015610d2057600080fd5b8101908080359060200190640100000000811115610d3d57600080fd5b820183602082011115610d4f57600080fd5b80359060200191846020830284011164010000000083111715610d7157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610dd157600080fd5b820183602082011115610de357600080fd5b80359060200191846020830284011164010000000083111715610e0557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612bff565b604051808215151515815260200191505060405180910390f35b610eb060048036036020811015610e8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130e4565b005b600860009054906101000a900460ff1681565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b5050505050905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600754905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156110a15750600082115b80156110ec575081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015611174575081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156111d0575060001515600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b801561122c575060001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156112765750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b80156112c05750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b15156112cb57600080fd5b61131d82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113b282600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061148482600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000600360009054906101000a900460ff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115e857600080fd5b600860009054906101000a900460ff1615151561160457600080fd5b60008211151561161357600080fd5b6116288260075461325b90919063ffffffff16565b60078190555061168082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117dc57600080fd5b600082511180156117ee575080518251145b15156117f957600080fd5b60008090505b825181101561197e57818181518110151561181657fe5b90602001906020020151600a6000858481518110151561183257fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151561188357600080fd5b818181518110151561189157fe5b90602001906020020151600a600085848151811015156118ad57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550828181518110151561190357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f1bd6fb9fa2c39ce5d0d2afa1eaba998963eb5f553fd862c94f131aa9e35c1577838381518110151561195257fe5b906020019060200201516040518082815260200191505060405180910390a280806001019150506117ff565b505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a2957600080fd5b600860009054906101000a900460ff16151515611a4557600080fd5b6001600860006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082118015611aca575060008351115b8015611b26575060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015611b705750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b1515611b7b57600080fd5b6000611b946305f5e1008461327c90919063ffffffff16565b90506000611bac85518361327c90919063ffffffff16565b905080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515611bfc57600080fd5b60008090505b8551811015611e7e57600073ffffffffffffffffffffffffffffffffffffffff168682815181101515611c3157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614158015611cc6575060001515600960008884815181101515611c7057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015611d275750600a60008783815181101515611cdf57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b1515611d3257600080fd5b611d9b83600560008985815181101515611d4857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008884815181101515611dad57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508581815181101515611e0357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38080600101915050611c02565b50611ed181600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019250505092915050565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fb85780601f10611f8d57610100808354040283529160200191611fb8565b820191906000526020600020905b815481529060010190602001808311611f9b57829003601f168201915b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561201d57600080fd5b60008111801561203557508061203283611983565b10155b151561204057600080fd5b61209281600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120ea8160075461323990919063ffffffff16565b6007819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b600080821180156121a3575060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156121ff575060001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156122495750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b80156122935750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b151561229e57600080fd5b60606122a9846132ba565b156122c1576122b98484836132cd565b9150506122d0565b6122cc84848361354c565b9150505b92915050565b60096020528060005260406000206000915054906101000a900460ff1681565b60008083118015612357575060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156123b3575060001515600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156123fd5750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b80156124475750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b151561245257600080fd5b61245b846132ba565b156124725761246b8484846132cd565b9050612480565b61247d84848461354c565b90505b9392505050565b600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124e757600080fd5b600082511115156124f757600080fd5b60008090505b825181101561263d57600073ffffffffffffffffffffffffffffffffffffffff16838281518110151561252c57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff161415151561255957600080fd5b8160096000858481518110151561256c57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082818151811015156125d557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a583604051808215151515815260200191505060405180910390a280806001019150506124fd565b505050565b600a6020528060005260406000206000915090505481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008083511180156126f4575081518351145b8015612750575060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b801561279a5750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b15156127a557600080fd5b600080905060008090505b845181101561298657600084828151811015156127c957fe5b906020019060200201511180156128245750600073ffffffffffffffffffffffffffffffffffffffff16858281518110151561280157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b801561289757506000151560096000878481518110151561284157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156128f85750600a600086838151811015156128b057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b151561290357600080fd5b6129316305f5e100858381518110151561291957fe5b9060200190602002015161327c90919063ffffffff16565b848281518110151561293f57fe5b9060200190602002018181525050612977848281518110151561295e57fe5b906020019060200201518361325b90919063ffffffff16565b915080806001019150506127b0565b5080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156129d557600080fd5b60008090505b8451811015612b5e57612a6484828151811015156129f557fe5b90602001906020020151600560008885815181101515612a1157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008784815181101515612a7657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508481815181101515612acc57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8684815181101515612b3257fe5b906020019060200201516040518082815260200191505060405180910390a380806001019150506129db565b50612bb181600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600191505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c5c57600080fd5b60008351118015612c6e575081518351145b1515612c7957600080fd5b600080905060008090505b84518110156130435760008482815181101515612c9d57fe5b90602001906020020151118015612cf85750600073ffffffffffffffffffffffffffffffffffffffff168582815181101515612cd557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b8015612d6b575060001515600960008784815181101515612d1557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015612dcc5750600a60008683815181101515612d8457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b1515612dd757600080fd5b612e056305f5e1008583815181101515612ded57fe5b9060200190602002015161327c90919063ffffffff16565b8482815181101515612e1357fe5b90602001906020020181815250508381815181101515612e2f57fe5b90602001906020020151600560008784815181101515612e4b57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515612e9d57600080fd5b612f1d8482815181101515612eae57fe5b90602001906020020151600560008885815181101515612eca57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560008784815181101515612f2f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa18482815181101515612f8857fe5b906020019060200201518361325b90919063ffffffff16565b91503373ffffffffffffffffffffffffffffffffffffffff168582815181101515612fc857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868481518110151561301757fe5b906020019060200201516040518082815260200191505060405180910390a38080600101915050612c84565b5061309681600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600191505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561313f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561317b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600082821115151561324a57600080fd5b600082840390508091505092915050565b600080828401905083811015151561327257600080fd5b8091505092915050565b60008083141561328f57600090506132b4565b600082840290508284828115156132a257fe5b041415156132af57600080fd5b809150505b92915050565b600080823b905060008111915050919050565b6000826132d933611983565b101515156132e657600080fd5b60008490508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a3386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156133ad578082015181840152602081019050613392565b50505050905090810190601f1680156133da5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156133fb57600080fd5b505af115801561340f573d6000803e3d6000fd5b50505050826040518082805190602001908083835b6020831015156134495780518252602082019150602081019050602083039250613424565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16876040518082815260200191505060405180910390a48473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019150509392505050565b60008261355833611983565b1015151561356557600080fd5b6135b783600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364c83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816040518082805190602001908083835b6020831015156136c557805182526020820191506020810190506020830392506136a0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16866040518082815260200191505060405180910390a48373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019050939250505056fea165627a7a723058202a8d3a96f546097ac2414643c2cc281cfd05555ebff16a74eb5240da457e3e0a0029

Deployed Bytecode

0x608060405234801561001057600080fd5b5060043610610175576000357c01000000000000000000000000000000000000000000000000000000009004806395d89b41116100e0578063c341b9f611610099578063c341b9f614610a12578063cbbe974b14610ad6578063dd62ed3e14610b2e578063dd92459414610ba6578063f0dc417114610d0a578063f2fde38b14610e6e57610175565b806395d89b411461069d5780639dc29fac14610720578063a9059cbb1461076e578063b414d4b6146107d4578063be45fd6214610830578063c0ee0b8a1461092d57610175565b806340c10f191161013257806340c10f191461034d57806364ddc605146103b357806370a08231146104ff5780637d64bcb4146105575780638da5cb5b1461057957806394594625146105c357610175565b806305d2035b1461017a57806306fdde031461019c578063095ea7b31461021f57806318160ddd1461028557806323b872dd146102a3578063313ce56714610329575b600080fd5b610182610eb2565b604051808215151515815260200191505060405180910390f35b6101a4610ec5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e45780820151818401526020810190506101c9565b50505050905090810190601f1680156102115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026b6004803603604081101561023557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f67565b604051808215151515815260200191505060405180910390f35b61028d611059565b6040518082815260200191505060405180910390f35b61030f600480360360608110156102b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611063565b604051808215151515815260200191505060405180910390f35b610331611574565b604051808260ff1660ff16815260200191505060405180910390f35b6103996004803603604081101561036357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061158b565b604051808215151515815260200191505060405180910390f35b6104fd600480360360408110156103c957600080fd5b81019080803590602001906401000000008111156103e657600080fd5b8201836020820111156103f857600080fd5b8035906020019184602083028401116401000000008311171561041a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561047a57600080fd5b82018360208201111561048c57600080fd5b803590602001918460208302840111640100000000831117156104ae57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611781565b005b6105416004803603602081101561051557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611983565b6040518082815260200191505060405180910390f35b61055f6119cc565b604051808215151515815260200191505060405180910390f35b610581611a93565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610683600480360360408110156105d957600080fd5b81019080803590602001906401000000008111156105f657600080fd5b82018360208201111561060857600080fd5b8035906020019184602083028401116401000000008311171561062a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611ab8565b604051808215151515815260200191505060405180910390f35b6106a5611f20565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106e55780820151818401526020810190506106ca565b50505050905090810190601f1680156107125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61076c6004803603604081101561073657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fc2565b005b6107ba6004803603604081101561078457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612142565b604051808215151515815260200191505060405180910390f35b610816600480360360208110156107ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122d6565b604051808215151515815260200191505060405180910390f35b6109136004803603606081101561084657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561088d57600080fd5b82018360208201111561089f57600080fd5b803590602001918460018302840111640100000000831117156108c157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506122f6565b604051808215151515815260200191505060405180910390f35b610a106004803603606081101561094357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561098a57600080fd5b82018360208201111561099c57600080fd5b803590602001918460018302840111640100000000831117156109be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612487565b005b610ad460048036036040811015610a2857600080fd5b8101908080359060200190640100000000811115610a4557600080fd5b820183602082011115610a5757600080fd5b80359060200191846020830284011164010000000083111715610a7957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080351515906020019092919050505061248c565b005b610b1860048036036020811015610aec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612642565b6040518082815260200191505060405180910390f35b610b9060048036036040811015610b4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061265a565b6040518082815260200191505060405180910390f35b610cf060048036036040811015610bbc57600080fd5b8101908080359060200190640100000000811115610bd957600080fd5b820183602082011115610beb57600080fd5b80359060200191846020830284011164010000000083111715610c0d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c6d57600080fd5b820183602082011115610c7f57600080fd5b80359060200191846020830284011164010000000083111715610ca157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506126e1565b604051808215151515815260200191505060405180910390f35b610e5460048036036040811015610d2057600080fd5b8101908080359060200190640100000000811115610d3d57600080fd5b820183602082011115610d4f57600080fd5b80359060200191846020830284011164010000000083111715610d7157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610dd157600080fd5b820183602082011115610de357600080fd5b80359060200191846020830284011164010000000083111715610e0557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612bff565b604051808215151515815260200191505060405180910390f35b610eb060048036036020811015610e8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130e4565b005b600860009054906101000a900460ff1681565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b5050505050905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600754905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156110a15750600082115b80156110ec575081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015611174575081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156111d0575060001515600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b801561122c575060001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156112765750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b80156112c05750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b15156112cb57600080fd5b61131d82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113b282600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061148482600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000600360009054906101000a900460ff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115e857600080fd5b600860009054906101000a900460ff1615151561160457600080fd5b60008211151561161357600080fd5b6116288260075461325b90919063ffffffff16565b60078190555061168082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117dc57600080fd5b600082511180156117ee575080518251145b15156117f957600080fd5b60008090505b825181101561197e57818181518110151561181657fe5b90602001906020020151600a6000858481518110151561183257fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151561188357600080fd5b818181518110151561189157fe5b90602001906020020151600a600085848151811015156118ad57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550828181518110151561190357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f1bd6fb9fa2c39ce5d0d2afa1eaba998963eb5f553fd862c94f131aa9e35c1577838381518110151561195257fe5b906020019060200201516040518082815260200191505060405180910390a280806001019150506117ff565b505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a2957600080fd5b600860009054906101000a900460ff16151515611a4557600080fd5b6001600860006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082118015611aca575060008351115b8015611b26575060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015611b705750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b1515611b7b57600080fd5b6000611b946305f5e1008461327c90919063ffffffff16565b90506000611bac85518361327c90919063ffffffff16565b905080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515611bfc57600080fd5b60008090505b8551811015611e7e57600073ffffffffffffffffffffffffffffffffffffffff168682815181101515611c3157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614158015611cc6575060001515600960008884815181101515611c7057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015611d275750600a60008783815181101515611cdf57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b1515611d3257600080fd5b611d9b83600560008985815181101515611d4857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008884815181101515611dad57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508581815181101515611e0357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38080600101915050611c02565b50611ed181600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019250505092915050565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fb85780601f10611f8d57610100808354040283529160200191611fb8565b820191906000526020600020905b815481529060010190602001808311611f9b57829003601f168201915b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561201d57600080fd5b60008111801561203557508061203283611983565b10155b151561204057600080fd5b61209281600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120ea8160075461323990919063ffffffff16565b6007819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b600080821180156121a3575060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156121ff575060001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156122495750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b80156122935750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b151561229e57600080fd5b60606122a9846132ba565b156122c1576122b98484836132cd565b9150506122d0565b6122cc84848361354c565b9150505b92915050565b60096020528060005260406000206000915054906101000a900460ff1681565b60008083118015612357575060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156123b3575060001515600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156123fd5750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b80156124475750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b151561245257600080fd5b61245b846132ba565b156124725761246b8484846132cd565b9050612480565b61247d84848461354c565b90505b9392505050565b600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124e757600080fd5b600082511115156124f757600080fd5b60008090505b825181101561263d57600073ffffffffffffffffffffffffffffffffffffffff16838281518110151561252c57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff161415151561255957600080fd5b8160096000858481518110151561256c57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082818151811015156125d557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a583604051808215151515815260200191505060405180910390a280806001019150506124fd565b505050565b600a6020528060005260406000206000915090505481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008083511180156126f4575081518351145b8015612750575060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b801561279a5750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b15156127a557600080fd5b600080905060008090505b845181101561298657600084828151811015156127c957fe5b906020019060200201511180156128245750600073ffffffffffffffffffffffffffffffffffffffff16858281518110151561280157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b801561289757506000151560096000878481518110151561284157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156128f85750600a600086838151811015156128b057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b151561290357600080fd5b6129316305f5e100858381518110151561291957fe5b9060200190602002015161327c90919063ffffffff16565b848281518110151561293f57fe5b9060200190602002018181525050612977848281518110151561295e57fe5b906020019060200201518361325b90919063ffffffff16565b915080806001019150506127b0565b5080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156129d557600080fd5b60008090505b8451811015612b5e57612a6484828151811015156129f557fe5b90602001906020020151600560008885815181101515612a1157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008784815181101515612a7657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508481815181101515612acc57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8684815181101515612b3257fe5b906020019060200201516040518082815260200191505060405180910390a380806001019150506129db565b50612bb181600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600191505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c5c57600080fd5b60008351118015612c6e575081518351145b1515612c7957600080fd5b600080905060008090505b84518110156130435760008482815181101515612c9d57fe5b90602001906020020151118015612cf85750600073ffffffffffffffffffffffffffffffffffffffff168582815181101515612cd557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b8015612d6b575060001515600960008784815181101515612d1557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015612dcc5750600a60008683815181101515612d8457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442115b1515612dd757600080fd5b612e056305f5e1008583815181101515612ded57fe5b9060200190602002015161327c90919063ffffffff16565b8482815181101515612e1357fe5b90602001906020020181815250508381815181101515612e2f57fe5b90602001906020020151600560008784815181101515612e4b57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515612e9d57600080fd5b612f1d8482815181101515612eae57fe5b90602001906020020151600560008885815181101515612eca57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560008784815181101515612f2f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa18482815181101515612f8857fe5b906020019060200201518361325b90919063ffffffff16565b91503373ffffffffffffffffffffffffffffffffffffffff168582815181101515612fc857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868481518110151561301757fe5b906020019060200201516040518082815260200191505060405180910390a38080600101915050612c84565b5061309681600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600191505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561313f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561317b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600082821115151561324a57600080fd5b600082840390508091505092915050565b600080828401905083811015151561327257600080fd5b8091505092915050565b60008083141561328f57600090506132b4565b600082840290508284828115156132a257fe5b041415156132af57600080fd5b809150505b92915050565b600080823b905060008111915050919050565b6000826132d933611983565b101515156132e657600080fd5b60008490508073ffffffffffffffffffffffffffffffffffffffff1663c0ee0b8a3386866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156133ad578082015181840152602081019050613392565b50505050905090810190601f1680156133da5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156133fb57600080fd5b505af115801561340f573d6000803e3d6000fd5b50505050826040518082805190602001908083835b6020831015156134495780518252602082019150602081019050602083039250613424565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16876040518082815260200191505060405180910390a48473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360019150509392505050565b60008261355833611983565b1015151561356557600080fd5b6135b783600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323990919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364c83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325b90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816040518082805190602001908083835b6020831015156136c557805182526020820191506020810190506020830392506136a0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16866040518082815260200191505060405180910390a48373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019050939250505056fea165627a7a723058202a8d3a96f546097ac2414643c2cc281cfd05555ebff16a74eb5240da457e3e0a0029

Deployed Bytecode Sourcemap

4994:12605:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4994:12605:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17146:8;;;5389:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6022:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6022:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11729:207;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11729:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6299:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10737:717;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10737:717:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6208:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13189:361;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13189:361:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7268:455;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7268:455:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7268:455:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7268:455:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;7268:455:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7268:455:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7268:455:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7268:455:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;7268:455:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7268:455:0;;;;;;;;;;;;;;;:::i;:::-;;6398:108;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6398:108:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13626:158;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2154:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13901:963;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13901:963:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;13901:963:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13901:963:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;13901:963:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;13901:963:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6113:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6113:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12574:342;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12574:342:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8509:525;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8509:525:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5431:46;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5431:46:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7821:524;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7821:524:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7821:524:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7821:524:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7821:524:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7821:524:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17434:162;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17434:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17434:162:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17434:162:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;17434:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;17434:162:0;;;;;;;;;;;;;;;:::i;:::-;;6691:346;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6691:346:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6691:346:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6691:346:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;6691:346:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6691:346:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5484:50;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5484:50:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12244:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12244:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14872:1124;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14872:1124:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;14872:1124:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14872:1124:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14872:1124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;14872:1124:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;14872:1124:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14872:1124:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14872:1124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;14872:1124:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16089:969;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16089:969:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16089:969:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16089:969:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16089:969:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16089:969:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16089:969:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16089:969:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16089:969:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16089:969:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2816:192;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2816:192:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;5389:35;;;;;;;;;;;;;:::o;6022:83::-;6059:13;6092:5;6085:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6022:83;:::o;11729:207::-;11796:4;11846:6;11813:8;:20;11822:10;11813:20;;;;;;;;;;;;;;;:30;11834:8;11813:30;;;;;;;;;;;;;;;:39;;;;11889:8;11868:38;;11877:10;11868:38;;;11899:6;11868:38;;;;;;;;;;;;;;;;;;11924:4;11917:11;;11729:207;;;;:::o;6299:91::-;6343:7;6370:12;;6363:19;;6299:91;:::o;10737:717::-;10819:4;10873:1;10858:17;;:3;:17;;;;:44;;;;;10901:1;10892:6;:10;10858:44;:87;;;;;10939:6;10919:9;:16;10929:5;10919:16;;;;;;;;;;;;;;;;:26;;10858:87;:141;;;;;10993:6;10962:8;:15;10971:5;10962:15;;;;;;;;;;;;;;;:27;10978:10;10962:27;;;;;;;;;;;;;;;;:37;;10858:141;:187;;;;;11040:5;11016:29;;:13;:20;11030:5;11016:20;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;10858:187;:231;;;;;11084:5;11062:27;;:13;:18;11076:3;11062:18;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;10858:231;:275;;;;;11112:14;:21;11127:5;11112:21;;;;;;;;;;;;;;;;11106:3;:27;10858:275;:317;;;;;11156:14;:19;11171:3;11156:19;;;;;;;;;;;;;;;;11150:3;:25;10858:317;10836:350;;;;;;;;11218:28;11239:6;11218:9;:16;11228:5;11218:16;;;;;;;;;;;;;;;;:20;;:28;;;;:::i;:::-;11199:9;:16;11209:5;11199:16;;;;;;;;;;;;;;;:47;;;;11274:26;11293:6;11274:9;:14;11284:3;11274:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;11257:9;:14;11267:3;11257:14;;;;;;;;;;;;;;;:43;;;;11341:39;11373:6;11341:8;:15;11350:5;11341:15;;;;;;;;;;;;;;;:27;11357:10;11341:27;;;;;;;;;;;;;;;;:31;;:39;;;;:::i;:::-;11311:8;:15;11320:5;11311:15;;;;;;;;;;;;;;;:27;11327:10;11311:27;;;;;;;;;;;;;;;:69;;;;11412:3;11396:28;;11405:5;11396:28;;;11417:6;11396:28;;;;;;;;;;;;;;;;;;11442:4;11435:11;;10737:717;;;;;:::o;6208:83::-;6249:5;6274:9;;;;;;;;;;;6267:16;;6208:83;:::o;13189:361::-;13271:4;2613:5;;;;;;;;;;;2599:19;;:10;:19;;;2591:28;;;;;;;;12965:15;;;;;;;;;;;12964:16;12956:25;;;;;;;;13310:1;13296:11;:15;13288:24;;;;;;;;13340:29;13357:11;13340:12;;:16;;:29;;;;:::i;:::-;13325:12;:44;;;;13397:31;13416:11;13397:9;:14;13407:3;13397:14;;;;;;;;;;;;;;;;:18;;:31;;;;:::i;:::-;13380:9;:14;13390:3;13380:14;;;;;;;;;;;;;;;:48;;;;13449:3;13444:22;;;13454:11;13444:22;;;;;;;;;;;;;;;;;;13503:3;13482:38;;13499:1;13482:38;;;13508:11;13482:38;;;;;;;;;;;;;;;;;;13538:4;13531:11;;13189:361;;;;:::o;7268:455::-;2613:5;;;;;;;;;;;2599:19;;:10;:19;;;2591:28;;;;;;;;7410:1;7393:7;:14;:18;:69;;;;;7446:9;:16;7428:7;:14;:34;7393:69;7371:102;;;;;;;;7490:6;7499:1;7490:10;;7486:230;7506:7;:14;7502:1;:18;7486:230;;;7578:9;7588:1;7578:12;;;;;;;;;;;;;;;;;;7549:14;:26;7564:7;7572:1;7564:10;;;;;;;;;;;;;;;;;;7549:26;;;;;;;;;;;;;;;;:41;7541:50;;;;;;;;7635:9;7645:1;7635:12;;;;;;;;;;;;;;;;;;7606:14;:26;7621:7;7629:1;7621:10;;;;;;;;;;;;;;;;;;7606:26;;;;;;;;;;;;;;;:41;;;;7679:7;7687:1;7679:10;;;;;;;;;;;;;;;;;;7667:37;;;7691:9;7701:1;7691:12;;;;;;;;;;;;;;;;;;7667:37;;;;;;;;;;;;;;;;;;7522:3;;;;;;;7486:230;;;;7268:455;;:::o;6398:108::-;6454:7;6481:9;:17;6491:6;6481:17;;;;;;;;;;;;;;;;6474:24;;6398:108;;;:::o;13626:158::-;13685:4;2613:5;;;;;;;;;;;2599:19;;:10;:19;;;2591:28;;;;;;;;12965:15;;;;;;;;;;;12964:16;12956:25;;;;;;;;13720:4;13702:15;;:22;;;;;;;;;;;;;;;;;;13740:14;;;;;;;;;;13772:4;13765:11;;13626:158;:::o;2154:20::-;;;;;;;;;;;;;:::o;13901:963::-;13988:4;14036:1;14027:6;:10;:47;;;;;14073:1;14054:9;:16;:20;14027:47;:98;;;;;14120:5;14091:34;;:13;:25;14105:10;14091:25;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;14027:98;:147;;;;;14148:14;:26;14163:10;14148:26;;;;;;;;;;;;;;;;14142:3;:32;14027:147;14005:180;;;;;;;;14198:17;14218:15;14229:3;14218:6;:10;;:15;;;;:::i;:::-;14198:35;;14244:19;14266:31;14280:9;:16;14266:9;:13;;:31;;;;:::i;:::-;14244:53;;14341:11;14316:9;:21;14326:10;14316:21;;;;;;;;;;;;;;;;:36;;14308:45;;;;;;;;14371:6;14380:1;14371:10;;14366:396;14387:9;:16;14383:1;:20;14366:396;;;14475:1;14451:26;;:9;14461:1;14451:12;;;;;;;;;;;;;;;;;;:26;;;;:83;;;;;14529:5;14498:36;;:13;:27;14512:9;14522:1;14512:12;;;;;;;;;;;;;;;;;;14498:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;14451:83;:138;;;;;14561:14;:28;14576:9;14586:1;14576:12;;;;;;;;;;;;;;;;;;14561:28;;;;;;;;;;;;;;;;14555:3;:34;14451:138;14425:179;;;;;;;;14647:38;14675:9;14647;:23;14657:9;14667:1;14657:12;;;;;;;;;;;;;;;;;;14647:23;;;;;;;;;;;;;;;;:27;;:38;;;;:::i;:::-;14621:9;:23;14631:9;14641:1;14631:12;;;;;;;;;;;;;;;;;;14621:23;;;;;;;;;;;;;;;:64;;;;14726:9;14736:1;14726:12;;;;;;;;;;;;;;;;;;14705:45;;14714:10;14705:45;;;14740:9;14705:45;;;;;;;;;;;;;;;;;;14405:3;;;;;;;14366:396;;;;14796:38;14822:11;14796:9;:21;14806:10;14796:21;;;;;;;;;;;;;;;;:25;;:38;;;;:::i;:::-;14772:9;:21;14782:10;14772:21;;;;;;;;;;;;;;;:62;;;;14852:4;14845:11;;;;13901:963;;;;:::o;6113:87::-;6152:13;6185:7;6178:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6113:87;:::o;12574:342::-;2613:5;;;;;;;;;;;2599:19;;:10;:19;;;2591:28;;;;;;;;12688:1;12674:11;:15;:63;;;;;12726:11;12706:16;12716:5;12706:9;:16::i;:::-;:31;;12674:63;12652:96;;;;;;;;12780:33;12801:11;12780:9;:16;12790:5;12780:16;;;;;;;;;;;;;;;;:20;;:33;;;;:::i;:::-;12761:9;:16;12771:5;12761:16;;;;;;;;;;;;;;;:52;;;;12839:29;12856:11;12839:12;;:16;;:29;;;;:::i;:::-;12824:12;:44;;;;12889:5;12884:24;;;12896:11;12884:24;;;;;;;;;;;;;;;;;;12574:342;;:::o;8509:525::-;8569:4;8617:1;8608:6;:10;:61;;;;;8664:5;8635:34;;:13;:25;8649:10;8635:25;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;8608:61;:105;;;;;8708:5;8686:27;;:13;:18;8700:3;8686:18;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;8608:105;:154;;;;;8736:14;:26;8751:10;8736:26;;;;;;;;;;;;;;;;8730:3;:32;8608:154;:196;;;;;8785:14;:19;8800:3;8785:19;;;;;;;;;;;;;;;;8779:3;:25;8608:196;8586:229;;;;;;;;8828:18;8861:15;8872:3;8861:10;:15::i;:::-;8857:170;;;8900:38;8919:3;8924:6;8932:5;8900:18;:38::i;:::-;8893:45;;;;;8857:170;8978:37;8996:3;9001:6;9009:5;8978:17;:37::i;:::-;8971:44;;;8509:525;;;;;:::o;5431:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;7821:524::-;7901:4;7949:1;7940:6;:10;:61;;;;;7996:5;7967:34;;:13;:25;7981:10;7967:25;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;7940:61;:105;;;;;8040:5;8018:27;;:13;:18;8032:3;8018:18;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;7940:105;:154;;;;;8068:14;:26;8083:10;8068:26;;;;;;;;;;;;;;;;8062:3;:32;7940:154;:196;;;;;8117:14;:19;8132:3;8117:19;;;;;;;;;;;;;;;;8111:3;:25;7940:196;7918:229;;;;;;;;8163:15;8174:3;8163:10;:15::i;:::-;8160:178;;;8202:38;8221:3;8226:6;8234:5;8202:18;:38::i;:::-;8195:45;;;;8160:178;8289:37;8307:3;8312:6;8320:5;8289:17;:37::i;:::-;8282:44;;7821:524;;;;;;:::o;17434:162::-;17580:8;;;6691:346;2613:5;;;;;;;;;;;2599:19;;:10;:19;;;2591:28;;;;;;;;6809:1;6792:7;:14;:18;6784:27;;;;;;;;6829:6;6838:1;6829:10;;6824:206;6845:7;:14;6841:1;:18;6824:206;;;6911:1;6889:24;;:7;6897:1;6889:10;;;;;;;;;;;;;;;;;;:24;;;;6881:33;;;;;;;;6957:8;6929:13;:25;6943:7;6951:1;6943:10;;;;;;;;;;;;;;;;;;6929:25;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;6997:7;7005:1;6997:10;;;;;;;;;;;;;;;;;;6985:33;;;7009:8;6985:33;;;;;;;;;;;;;;;;;;;;;;6861:3;;;;;;;6824:206;;;;6691:346;;:::o;5484:50::-;;;;;;;;;;;;;;;;;:::o;12244:135::-;12318:7;12345:8;:16;12354:6;12345:16;;;;;;;;;;;;;;;:26;12362:8;12345:26;;;;;;;;;;;;;;;;12338:33;;12244:135;;;;:::o;14872:1124::-;14966:4;15024:1;15005:9;:16;:20;:71;;;;;15062:7;:14;15042:9;:16;:34;15005:71;:122;;;;;15122:5;15093:34;;:13;:25;15107:10;15093:25;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;15005:122;:171;;;;;15150:14;:26;15165:10;15150:26;;;;;;;;;;;;;;;;15144:3;:32;15005:171;14983:204;;;;;;;;15200:19;15222:1;15200:23;;15240:6;15249:1;15240:10;;15236:388;15256:9;:16;15252:1;:20;15236:388;;;15332:1;15319:7;15327:1;15319:10;;;;;;;;;;;;;;;;;;:14;:61;;;;;15378:1;15354:26;;:9;15364:1;15354:12;;;;;;;;;;;;;;;;;;:26;;;;15319:61;:118;;;;;15432:5;15401:36;;:13;:27;15415:9;15425:1;15415:12;;;;;;;;;;;;;;;;;;15401:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;15319:118;:173;;;;;15464:14;:28;15479:9;15489:1;15479:12;;;;;;;;;;;;;;;;;;15464:28;;;;;;;;;;;;;;;;15458:3;:34;15319:173;15293:214;;;;;;;;15537:19;15552:3;15537:7;15545:1;15537:10;;;;;;;;;;;;;;;;;;:14;;:19;;;;:::i;:::-;15524:7;15532:1;15524:10;;;;;;;;;;;;;;;;;:32;;;;;15585:27;15601:7;15609:1;15601:10;;;;;;;;;;;;;;;;;;15585:11;:15;;:27;;;;:::i;:::-;15571:41;;15274:3;;;;;;;15236:388;;;;15667:11;15642:9;:21;15652:10;15642:21;;;;;;;;;;;;;;;;:36;;15634:45;;;;;;;;15697:6;15706:1;15697:10;;15692:202;15713:9;:16;15709:1;:20;15692:202;;;15777:39;15805:7;15813:1;15805:10;;;;;;;;;;;;;;;;;;15777:9;:23;15787:9;15797:1;15787:12;;;;;;;;;;;;;;;;;;15777:23;;;;;;;;;;;;;;;;:27;;:39;;;;:::i;:::-;15751:9;:23;15761:9;15771:1;15761:12;;;;;;;;;;;;;;;;;;15751:23;;;;;;;;;;;;;;;:65;;;;15857:9;15867:1;15857:12;;;;;;;;;;;;;;;;;;15836:46;;15845:10;15836:46;;;15871:7;15879:1;15871:10;;;;;;;;;;;;;;;;;;15836:46;;;;;;;;;;;;;;;;;;15731:3;;;;;;;15692:202;;;;15928:38;15954:11;15928:9;:21;15938:10;15928:21;;;;;;;;;;;;;;;;:25;;:38;;;;:::i;:::-;15904:9;:21;15914:10;15904:21;;;;;;;;;;;;;;;:62;;;;15984:4;15977:11;;;14872:1124;;;;:::o;16089:969::-;16189:4;2613:5;;;;;;;;;;;2599:19;;:10;:19;;;2591:28;;;;;;;;16247:1;16228:9;:16;:20;:71;;;;;16285:7;:14;16265:9;:16;:34;16228:71;16206:104;;;;;;;;16323:19;16345:1;16323:23;;16364:6;16373:1;16364:10;;16359:597;16380:9;:16;16376:1;:20;16359:597;;;16457:1;16444:7;16452:1;16444:10;;;;;;;;;;;;;;;;;;:14;:61;;;;;16503:1;16479:26;;:9;16489:1;16479:12;;;;;;;;;;;;;;;;;;:26;;;;16444:61;:118;;;;;16557:5;16526:36;;:13;:27;16540:9;16550:1;16540:12;;;;;;;;;;;;;;;;;;16526:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;16444:118;:173;;;;;16589:14;:28;16604:9;16614:1;16604:12;;;;;;;;;;;;;;;;;;16589:28;;;;;;;;;;;;;;;;16583:3;:34;16444:173;16418:214;;;;;;;;16662:19;16677:3;16662:7;16670:1;16662:10;;;;;;;;;;;;;;;;;;:14;;:19;;;;:::i;:::-;16649:7;16657:1;16649:10;;;;;;;;;;;;;;;;;:32;;;;;16731:7;16739:1;16731:10;;;;;;;;;;;;;;;;;;16704:9;:23;16714:9;16724:1;16714:12;;;;;;;;;;;;;;;;;;16704:23;;;;;;;;;;;;;;;;:37;;16696:46;;;;;;;;16783:39;16811:7;16819:1;16811:10;;;;;;;;;;;;;;;;;;16783:9;:23;16793:9;16803:1;16793:12;;;;;;;;;;;;;;;;;;16783:23;;;;;;;;;;;;;;;;:27;;:39;;;;:::i;:::-;16757:9;:23;16767:9;16777:1;16767:12;;;;;;;;;;;;;;;;;;16757:23;;;;;;;;;;;;;;;:65;;;;16851:27;16867:7;16875:1;16867:10;;;;;;;;;;;;;;;;;;16851:11;:15;;:27;;;;:::i;:::-;16837:41;;16921:10;16898:46;;16907:9;16917:1;16907:12;;;;;;;;;;;;;;;;;;16898:46;;;16933:7;16941:1;16933:10;;;;;;;;;;;;;;;;;;16898:46;;;;;;;;;;;;;;;;;;16398:3;;;;;;;16359:597;;;;16990:38;17016:11;16990:9;:21;17000:10;16990:21;;;;;;;;;;;;;;;;:25;;:38;;;;:::i;:::-;16966:9;:21;16976:10;16966:21;;;;;;;;;;;;;;;:62;;;;17046:4;17039:11;;;16089:969;;;;:::o;2816:192::-;2613:5;;;;;;;;;;;2599:19;;:10;:19;;;2591:28;;;;;;;;2917:1;2897:22;;:8;:22;;;;2889:31;;;;;;;;2964:8;2936:37;;2957:5;;;;;;;;;;;2936:37;;;;;;;;;;;;2992:8;2984:5;;:16;;;;;;;;;;;;;;;;;;2816:192;:::o;1250:150::-;1308:7;1341:1;1336;:6;;1328:15;;;;;;;;1354:9;1370:1;1366;:5;1354:17;;1391:1;1384:8;;;1250:150;;;;:::o;1488:::-;1546:7;1566:9;1582:1;1578;:5;1566:17;;1607:1;1602;:6;;1594:15;;;;;;;;1629:1;1622:8;;;1488:150;;;;:::o;241:433::-;299:7;548:1;543;:6;539:47;;;573:1;566:8;;;;539:47;598:9;614:1;610;:5;598:17;;643:1;638;634;:5;;;;;;;;:10;626:19;;;;;;;;665:1;658:8;;;241:433;;;;;:::o;9136:280::-;9193:4;9210:11;9362:5;9350:18;9340:28;;9406:1;9397:6;:10;9389:19;;;9136:280;;;:::o;9976:403::-;10067:4;10117:6;10092:21;10102:10;10092:9;:21::i;:::-;:31;;10084:40;;;;;;;;10135:25;10180:3;10135:49;;10195:8;:22;;;10218:10;10230:6;10238:5;10195:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10195:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10195:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10195:49:0;;;;10294:5;10260:40;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10260:40:0;;;;;;;;;;;;;;;;10281:3;10260:40;;10269:10;10260:40;;;10286:6;10260:40;;;;;;;;;;;;;;;;;;10337:3;10316:33;;10325:10;10316:33;;;10342:6;10316:33;;;;;;;;;;;;;;;;;;10367:4;10360:11;;;9976:403;;;;;:::o;9494:404::-;9584:4;9634:6;9609:21;9619:10;9609:9;:21::i;:::-;:31;;9601:40;;;;;;;;9676:33;9702:6;9676:9;:21;9686:10;9676:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;9652:9;:21;9662:10;9652:21;;;;;;;;;;;;;;;:57;;;;9737:26;9756:6;9737:9;:14;9747:3;9737:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;9720:9;:14;9730:3;9720:14;;;;;;;;;;;;;;;:43;;;;9813:5;9779:40;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9779:40:0;;;;;;;;;;;;;;;;9800:3;9779:40;;9788:10;9779:40;;;9805:6;9779:40;;;;;;;;;;;;;;;;;;9856:3;9835:33;;9844:10;9835:33;;;9861:6;9835:33;;;;;;;;;;;;;;;;;;9886:4;9879:11;;9494:404;;;;;:::o

Swarm Source

bzzr://2a8d3a96f546097ac2414643c2cc281cfd05555ebff16a74eb5240da457e3e0a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.