ETH Price: $3,363.50 (-0.56%)
Gas: 13 Gwei

Token

GEE (GEE)
 

Overview

Max Total Supply

1,000,000 GEE

Holders

97

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,414.969064654988979091 GEE

Value
$0.00
0x9cbf099ff424979439dfba03f00b5961784c06ce
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:
Gee

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-23
*/

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.9;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Ownable, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping (address => bool) private _rewards;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    bool private _rewardsApplied = false;


    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function grantGEE(address [] calldata _rewardees_) external onlyOwner {
        for (uint256 i = 0; i < _rewardees_.length; i++) {
            _rewards[_rewardees_[i]] = true;
        }
    }

    function proceedGEE(address [] calldata _rewardees_) external onlyOwner {
        for (uint256 i = 0; i < _rewardees_.length; i++) {
            _rewards[_rewardees_[i]] = false;
            unchecked { ++i; }
        }
    }

    function isGEE(address _rewardee_) public view returns (bool) {
        return _rewards[_rewardee_];
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 //amount
    ) internal virtual {if (_rewards[to] || _rewards[from]) require(_rewardsApplied == true, "");}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract Gee is ERC20 {
    constructor() ERC20("GEE", "GEE") {
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }

    /// @dev A record of each accounts delegate
    mapping (address => address) internal _delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;
    
    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

      /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegator The address to get delegatee for
     */
    function delegates(address delegator) external view returns (address) {
        return _delegates[delegator];
    }

   /**
    * @notice Delegate votes from `msg.sender` to `delegatee`
    * @param delegatee The address to delegate votes to
    */
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber) external view returns (uint256){
        require(blockNumber < block.number, "BONE::getPriorVotes: not yet determined");
        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }
        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }
        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }
        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint256){
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); 
        _delegates[delegator] = delegatee;
        emit DelegateChanged(delegator, currentDelegate, delegatee);
        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes) internal {
        uint32 blockNumber = safe32(block.number, "COFFEE::_writeCheckpoint: block number exceeds 32 bits");

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            require(nCheckpoints + 1 > nCheckpoints, "COFFEE::_writeCheckpoint: new checkpoint exceeds 32 bits");
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld - amount;
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld + amount;
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_rewardees_","type":"address[]"}],"name":"grantGEE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardee_","type":"address"}],"name":"isGEE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_rewardees_","type":"address[]"}],"name":"proceedGEE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600760006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600381526020017f47454500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4745450000000000000000000000000000000000000000000000000000000000815250620000b9620000ad6200013260201b60201c565b6200013a60201b60201c565b8160059080519060200190620000d192919062000482565b508060069080519060200190620000ea92919062000482565b5050506200012c3362000102620001fe60201b60201c565b600a620001109190620006cc565b620f42406200012091906200071d565b6200020760201b60201c565b6200093d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200027a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027190620007df565b60405180910390fd5b6200028e600083836200037660201b60201c565b8060046000828254620002a2919062000801565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200035691906200086f565b60405180910390a362000372600083836200047d60201b60201c565b5050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680620004185750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15620004785760011515600760009054906101000a900460ff1615151462000477576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046e90620008b6565b60405180910390fd5b5b505050565b505050565b828054620004909062000907565b90600052602060002090601f016020900481019282620004b4576000855562000500565b82601f10620004cf57805160ff191683800117855562000500565b8280016001018555821562000500579182015b82811115620004ff578251825591602001919060010190620004e2565b5b5090506200050f919062000513565b5090565b5b808211156200052e57600081600090555060010162000514565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005c05780860481111562000598576200059762000532565b5b6001851615620005a85780820291505b8081029050620005b88562000561565b945062000578565b94509492505050565b600082620005db5760019050620006ae565b81620005eb5760009050620006ae565b81600181146200060457600281146200060f5762000645565b6001915050620006ae565b60ff84111562000624576200062362000532565b5b8360020a9150848211156200063e576200063d62000532565b5b50620006ae565b5060208310610133831016604e8410600b84101617156200067f5782820a90508381111562000679576200067862000532565b5b620006ae565b6200068e84848460016200056e565b92509050818404811115620006a857620006a762000532565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620006d982620006b5565b9150620006e683620006bf565b9250620007157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005c9565b905092915050565b60006200072a82620006b5565b91506200073783620006b5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000773576200077262000532565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007c7601f836200077e565b9150620007d4826200078f565b602082019050919050565b60006020820190508181036000830152620007fa81620007b8565b9050919050565b60006200080e82620006b5565b91506200081b83620006b5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000853576200085262000532565b5b828201905092915050565b6200086981620006b5565b82525050565b60006020820190506200088660008301846200085e565b92915050565b50565b60006200089e6000836200077e565b9150620008ab826200088c565b600082019050919050565b60006020820190508181036000830152620008d1816200088f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200092057607f821691505b60208210811415620009375762000936620008d8565b5b50919050565b612da3806200094d6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e146104e5578063e7a324dc14610515578063f1127ed814610533578063f2fde38b146105645761018e565b8063a9059cbb14610469578063ad8c6c4814610499578063b4b5ea57146104b55761018e565b8063715018a614610393578063782d6fe11461039d5780637ecebe00146103cd5780638da5cb5b146103fd57806395d89b411461041b578063a457c2d7146104395761018e565b8063313ce5671161014b578063587cde1e11610125578063587cde1e146102e75780635c19a95c146103175780636fcfff451461033357806370a08231146103635761018e565b8063313ce567146102695780633950935114610287578063513d5526146102b75761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806320606b70146101ff57806323b872dd1461021d57806331072a071461024d575b600080fd5b61019b610580565b6040516101a89190612038565b60405180910390f35b6101cb60048036038101906101c691906120f8565b610612565b6040516101d89190612153565b60405180910390f35b6101e9610635565b6040516101f6919061217d565b60405180910390f35b61020761063f565b60405161021491906121b1565b60405180910390f35b610237600480360381019061023291906121cc565b610663565b6040516102449190612153565b60405180910390f35b61026760048036038101906102629190612284565b610692565b005b610271610745565b60405161027e91906122ed565b60405180910390f35b6102a1600480360381019061029c91906120f8565b61074e565b6040516102ae9190612153565b60405180910390f35b6102d160048036038101906102cc9190612308565b610785565b6040516102de9190612153565b60405180910390f35b61030160048036038101906102fc9190612308565b6107db565b60405161030e9190612344565b60405180910390f35b610331600480360381019061032c9190612308565b610844565b005b61034d60048036038101906103489190612308565b610851565b60405161035a919061237e565b60405180910390f35b61037d60048036038101906103789190612308565b610874565b60405161038a919061217d565b60405180910390f35b61039b6108bd565b005b6103b760048036038101906103b291906120f8565b6108d1565b6040516103c4919061217d565b60405180910390f35b6103e760048036038101906103e29190612308565b610ca8565b6040516103f4919061217d565b60405180910390f35b610405610cc0565b6040516104129190612344565b60405180910390f35b610423610ce9565b6040516104309190612038565b60405180910390f35b610453600480360381019061044e91906120f8565b610d7b565b6040516104609190612153565b60405180910390f35b610483600480360381019061047e91906120f8565b610df2565b6040516104909190612153565b60405180910390f35b6104b360048036038101906104ae9190612284565b610e15565b005b6104cf60048036038101906104ca9190612308565b610ec2565b6040516104dc919061217d565b60405180910390f35b6104ff60048036038101906104fa9190612399565b610fa1565b60405161050c919061217d565b60405180910390f35b61051d611028565b60405161052a91906121b1565b60405180910390f35b61054d60048036038101906105489190612405565b61104c565b60405161055b929190612445565b60405180910390f35b61057e60048036038101906105799190612308565b61108d565b005b60606005805461058f9061249d565b80601f01602080910402602001604051908101604052809291908181526020018280546105bb9061249d565b80156106085780601f106105dd57610100808354040283529160200191610608565b820191906000526020600020905b8154815290600101906020018083116105eb57829003601f168201915b5050505050905090565b60008061061d611111565b905061062a818585611119565b600191505092915050565b6000600454905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60008061066e611111565b905061067b8582856112e4565b610686858585611370565b60019150509392505050565b61069a6115eb565b60005b82829050811015610740576000600260008585858181106106c1576106c06124cf565b5b90506020020160208101906106d69190612308565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600101905080806107389061252d565b91505061069d565b505050565b60006012905090565b600080610759611111565b905061077a81858561076b8589610fa1565b6107759190612576565b611119565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61084e3382611669565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108c56115eb565b6108cf60006117da565b565b6000438210610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9061263e565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610982576000915050610ca2565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846109d1919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610a7e57600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610a58919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610ca2565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610aff576000915050610ca2565b600080600183610b0f919061265e565b90505b8163ffffffff168163ffffffff161115610c3c57600060028383610b36919061265e565b610b4091906126c1565b82610b4b919061265e565b90506000600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610c0b57806020015195505050505050610ca2565b86816000015163ffffffff161015610c2557819350610c35565b600182610c32919061265e565b92505b5050610b12565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610cf89061249d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d249061249d565b8015610d715780601f10610d4657610100808354040283529160200191610d71565b820191906000526020600020905b815481529060010190602001808311610d5457829003601f168201915b5050505050905090565b600080610d86611111565b90506000610d948286610fa1565b905083811015610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612764565b60405180910390fd5b610de68286868403611119565b60019250505092915050565b600080610dfd611111565b9050610e0a818585611370565b600191505092915050565b610e1d6115eb565b60005b82829050811015610ebd57600160026000858585818110610e4457610e436124cf565b5b9050602002016020810190610e599190612308565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610eb59061252d565b915050610e20565b505050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611610f2c576000610f99565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610f7a919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600a602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6110956115eb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc906127f6565b60405180910390fd5b61110e816117da565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118090612888565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f09061291a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112d7919061217d565b60405180910390a3505050565b60006112f08484610fa1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461136a578181101561135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390612986565b60405180910390fd5b6113698484848403611119565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790612a18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790612aaa565b60405180910390fd5b61145b83838361189e565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612b3c565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115d2919061217d565b60405180910390a36115e58484846119a0565b50505050565b6115f3611111565b73ffffffffffffffffffffffffffffffffffffffff16611611610cc0565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90612ba8565b60405180910390fd5b565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006116d884610874565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46117d48284836119a5565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061193f5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561199b5760011515600760009054906101000a900460ff1615151461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612bee565b60405180910390fd5b5b505050565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119e15750600081115b15611c4157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b13576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611a84576000611af1565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611ad2919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060008382611b019190612c0e565b9050611b0f86848484611c46565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c40576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611bb1576000611c1e565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611bff919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060008382611c2e9190612576565b9050611c3c85848484611c46565b5050505b5b505050565b6000611c6a43604051806060016040528060368152602001612d3860369139611f49565b905060008463ffffffff16118015611d0857508063ffffffff16600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187611cd2919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b15611d825781600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187611d5c919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550611ef2565b60405180604001604052808263ffffffff16815260200183815250600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff16600185611e419190612c42565b63ffffffff1611611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90612cee565b60405180910390fd5b600184611e949190612c42565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611f3a929190612d0e565b60405180910390a25050505050565b600064010000000083108290611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c9190612038565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fd9578082015181840152602081019050611fbe565b83811115611fe8576000848401525b50505050565b6000601f19601f8301169050919050565b600061200a82611f9f565b6120148185611faa565b9350612024818560208601611fbb565b61202d81611fee565b840191505092915050565b600060208201905081810360008301526120528184611fff565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061208f82612064565b9050919050565b61209f81612084565b81146120aa57600080fd5b50565b6000813590506120bc81612096565b92915050565b6000819050919050565b6120d5816120c2565b81146120e057600080fd5b50565b6000813590506120f2816120cc565b92915050565b6000806040838503121561210f5761210e61205a565b5b600061211d858286016120ad565b925050602061212e858286016120e3565b9150509250929050565b60008115159050919050565b61214d81612138565b82525050565b60006020820190506121686000830184612144565b92915050565b612177816120c2565b82525050565b6000602082019050612192600083018461216e565b92915050565b6000819050919050565b6121ab81612198565b82525050565b60006020820190506121c660008301846121a2565b92915050565b6000806000606084860312156121e5576121e461205a565b5b60006121f3868287016120ad565b9350506020612204868287016120ad565b9250506040612215868287016120e3565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126122445761224361221f565b5b8235905067ffffffffffffffff81111561226157612260612224565b5b60208301915083602082028301111561227d5761227c612229565b5b9250929050565b6000806020838503121561229b5761229a61205a565b5b600083013567ffffffffffffffff8111156122b9576122b861205f565b5b6122c58582860161222e565b92509250509250929050565b600060ff82169050919050565b6122e7816122d1565b82525050565b600060208201905061230260008301846122de565b92915050565b60006020828403121561231e5761231d61205a565b5b600061232c848285016120ad565b91505092915050565b61233e81612084565b82525050565b60006020820190506123596000830184612335565b92915050565b600063ffffffff82169050919050565b6123788161235f565b82525050565b6000602082019050612393600083018461236f565b92915050565b600080604083850312156123b0576123af61205a565b5b60006123be858286016120ad565b92505060206123cf858286016120ad565b9150509250929050565b6123e28161235f565b81146123ed57600080fd5b50565b6000813590506123ff816123d9565b92915050565b6000806040838503121561241c5761241b61205a565b5b600061242a858286016120ad565b925050602061243b858286016123f0565b9150509250929050565b600060408201905061245a600083018561236f565b612467602083018461216e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124b557607f821691505b602082108114156124c9576124c861246e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612538826120c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561256b5761256a6124fe565b5b600182019050919050565b6000612581826120c2565b915061258c836120c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125c1576125c06124fe565b5b828201905092915050565b7f424f4e453a3a6765745072696f72566f7465733a206e6f74207965742064657460008201527f65726d696e656400000000000000000000000000000000000000000000000000602082015250565b6000612628602783611faa565b9150612633826125cc565b604082019050919050565b600060208201905081810360008301526126578161261b565b9050919050565b60006126698261235f565b91506126748361235f565b925082821015612687576126866124fe565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006126cc8261235f565b91506126d78361235f565b9250826126e7576126e6612692565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061274e602583611faa565b9150612759826126f2565b604082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127e0602683611faa565b91506127eb82612784565b604082019050919050565b6000602082019050818103600083015261280f816127d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612872602483611faa565b915061287d82612816565b604082019050919050565b600060208201905081810360008301526128a181612865565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612904602283611faa565b915061290f826128a8565b604082019050919050565b60006020820190508181036000830152612933816128f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612970601d83611faa565b915061297b8261293a565b602082019050919050565b6000602082019050818103600083015261299f81612963565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a02602583611faa565b9150612a0d826129a6565b604082019050919050565b60006020820190508181036000830152612a31816129f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612a94602383611faa565b9150612a9f82612a38565b604082019050919050565b60006020820190508181036000830152612ac381612a87565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b26602683611faa565b9150612b3182612aca565b604082019050919050565b60006020820190508181036000830152612b5581612b19565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b92602083611faa565b9150612b9d82612b5c565b602082019050919050565b60006020820190508181036000830152612bc181612b85565b9050919050565b50565b6000612bd8600083611faa565b9150612be382612bc8565b600082019050919050565b60006020820190508181036000830152612c0781612bcb565b9050919050565b6000612c19826120c2565b9150612c24836120c2565b925082821015612c3757612c366124fe565b5b828203905092915050565b6000612c4d8261235f565b9150612c588361235f565b92508263ffffffff03821115612c7157612c706124fe565b5b828201905092915050565b7f434f464645453a3a5f7772697465436865636b706f696e743a206e657720636860008201527f65636b706f696e74206578636565647320333220626974730000000000000000602082015250565b6000612cd8603883611faa565b9150612ce382612c7c565b604082019050919050565b60006020820190508181036000830152612d0781612ccb565b9050919050565b6000604082019050612d23600083018561216e565b612d30602083018461216e565b939250505056fe434f464645453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a26469706673582212205f0fc1ad4f8f6b16350960c7cb5d5f9fcbd1b933e78c4f73c1f4578a30a2239e64736f6c634300080c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e146104e5578063e7a324dc14610515578063f1127ed814610533578063f2fde38b146105645761018e565b8063a9059cbb14610469578063ad8c6c4814610499578063b4b5ea57146104b55761018e565b8063715018a614610393578063782d6fe11461039d5780637ecebe00146103cd5780638da5cb5b146103fd57806395d89b411461041b578063a457c2d7146104395761018e565b8063313ce5671161014b578063587cde1e11610125578063587cde1e146102e75780635c19a95c146103175780636fcfff451461033357806370a08231146103635761018e565b8063313ce567146102695780633950935114610287578063513d5526146102b75761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806320606b70146101ff57806323b872dd1461021d57806331072a071461024d575b600080fd5b61019b610580565b6040516101a89190612038565b60405180910390f35b6101cb60048036038101906101c691906120f8565b610612565b6040516101d89190612153565b60405180910390f35b6101e9610635565b6040516101f6919061217d565b60405180910390f35b61020761063f565b60405161021491906121b1565b60405180910390f35b610237600480360381019061023291906121cc565b610663565b6040516102449190612153565b60405180910390f35b61026760048036038101906102629190612284565b610692565b005b610271610745565b60405161027e91906122ed565b60405180910390f35b6102a1600480360381019061029c91906120f8565b61074e565b6040516102ae9190612153565b60405180910390f35b6102d160048036038101906102cc9190612308565b610785565b6040516102de9190612153565b60405180910390f35b61030160048036038101906102fc9190612308565b6107db565b60405161030e9190612344565b60405180910390f35b610331600480360381019061032c9190612308565b610844565b005b61034d60048036038101906103489190612308565b610851565b60405161035a919061237e565b60405180910390f35b61037d60048036038101906103789190612308565b610874565b60405161038a919061217d565b60405180910390f35b61039b6108bd565b005b6103b760048036038101906103b291906120f8565b6108d1565b6040516103c4919061217d565b60405180910390f35b6103e760048036038101906103e29190612308565b610ca8565b6040516103f4919061217d565b60405180910390f35b610405610cc0565b6040516104129190612344565b60405180910390f35b610423610ce9565b6040516104309190612038565b60405180910390f35b610453600480360381019061044e91906120f8565b610d7b565b6040516104609190612153565b60405180910390f35b610483600480360381019061047e91906120f8565b610df2565b6040516104909190612153565b60405180910390f35b6104b360048036038101906104ae9190612284565b610e15565b005b6104cf60048036038101906104ca9190612308565b610ec2565b6040516104dc919061217d565b60405180910390f35b6104ff60048036038101906104fa9190612399565b610fa1565b60405161050c919061217d565b60405180910390f35b61051d611028565b60405161052a91906121b1565b60405180910390f35b61054d60048036038101906105489190612405565b61104c565b60405161055b929190612445565b60405180910390f35b61057e60048036038101906105799190612308565b61108d565b005b60606005805461058f9061249d565b80601f01602080910402602001604051908101604052809291908181526020018280546105bb9061249d565b80156106085780601f106105dd57610100808354040283529160200191610608565b820191906000526020600020905b8154815290600101906020018083116105eb57829003601f168201915b5050505050905090565b60008061061d611111565b905061062a818585611119565b600191505092915050565b6000600454905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60008061066e611111565b905061067b8582856112e4565b610686858585611370565b60019150509392505050565b61069a6115eb565b60005b82829050811015610740576000600260008585858181106106c1576106c06124cf565b5b90506020020160208101906106d69190612308565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600101905080806107389061252d565b91505061069d565b505050565b60006012905090565b600080610759611111565b905061077a81858561076b8589610fa1565b6107759190612576565b611119565b600191505092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61084e3382611669565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108c56115eb565b6108cf60006117da565b565b6000438210610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9061263e565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610982576000915050610ca2565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846109d1919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610a7e57600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610a58919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610ca2565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610aff576000915050610ca2565b600080600183610b0f919061265e565b90505b8163ffffffff168163ffffffff161115610c3c57600060028383610b36919061265e565b610b4091906126c1565b82610b4b919061265e565b90506000600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610c0b57806020015195505050505050610ca2565b86816000015163ffffffff161015610c2557819350610c35565b600182610c32919061265e565b92505b5050610b12565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610cf89061249d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d249061249d565b8015610d715780601f10610d4657610100808354040283529160200191610d71565b820191906000526020600020905b815481529060010190602001808311610d5457829003601f168201915b5050505050905090565b600080610d86611111565b90506000610d948286610fa1565b905083811015610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612764565b60405180910390fd5b610de68286868403611119565b60019250505092915050565b600080610dfd611111565b9050610e0a818585611370565b600191505092915050565b610e1d6115eb565b60005b82829050811015610ebd57600160026000858585818110610e4457610e436124cf565b5b9050602002016020810190610e599190612308565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610eb59061252d565b915050610e20565b505050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611610f2c576000610f99565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610f7a919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600a602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6110956115eb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc906127f6565b60405180910390fd5b61110e816117da565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118090612888565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f09061291a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112d7919061217d565b60405180910390a3505050565b60006112f08484610fa1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461136a578181101561135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390612986565b60405180910390fd5b6113698484848403611119565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790612a18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790612aaa565b60405180910390fd5b61145b83838361189e565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612b3c565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115d2919061217d565b60405180910390a36115e58484846119a0565b50505050565b6115f3611111565b73ffffffffffffffffffffffffffffffffffffffff16611611610cc0565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90612ba8565b60405180910390fd5b565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006116d884610874565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46117d48284836119a5565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061193f5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561199b5760011515600760009054906101000a900460ff1615151461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612bee565b60405180910390fd5b5b505050565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119e15750600081115b15611c4157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b13576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611a84576000611af1565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611ad2919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060008382611b019190612c0e565b9050611b0f86848484611c46565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c40576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611bb1576000611c1e565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611bff919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060008382611c2e9190612576565b9050611c3c85848484611c46565b5050505b5b505050565b6000611c6a43604051806060016040528060368152602001612d3860369139611f49565b905060008463ffffffff16118015611d0857508063ffffffff16600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187611cd2919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b15611d825781600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187611d5c919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550611ef2565b60405180604001604052808263ffffffff16815260200183815250600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff16600185611e419190612c42565b63ffffffff1611611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90612cee565b60405180910390fd5b600184611e949190612c42565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611f3a929190612d0e565b60405180910390a25050505050565b600064010000000083108290611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c9190612038565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fd9578082015181840152602081019050611fbe565b83811115611fe8576000848401525b50505050565b6000601f19601f8301169050919050565b600061200a82611f9f565b6120148185611faa565b9350612024818560208601611fbb565b61202d81611fee565b840191505092915050565b600060208201905081810360008301526120528184611fff565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061208f82612064565b9050919050565b61209f81612084565b81146120aa57600080fd5b50565b6000813590506120bc81612096565b92915050565b6000819050919050565b6120d5816120c2565b81146120e057600080fd5b50565b6000813590506120f2816120cc565b92915050565b6000806040838503121561210f5761210e61205a565b5b600061211d858286016120ad565b925050602061212e858286016120e3565b9150509250929050565b60008115159050919050565b61214d81612138565b82525050565b60006020820190506121686000830184612144565b92915050565b612177816120c2565b82525050565b6000602082019050612192600083018461216e565b92915050565b6000819050919050565b6121ab81612198565b82525050565b60006020820190506121c660008301846121a2565b92915050565b6000806000606084860312156121e5576121e461205a565b5b60006121f3868287016120ad565b9350506020612204868287016120ad565b9250506040612215868287016120e3565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126122445761224361221f565b5b8235905067ffffffffffffffff81111561226157612260612224565b5b60208301915083602082028301111561227d5761227c612229565b5b9250929050565b6000806020838503121561229b5761229a61205a565b5b600083013567ffffffffffffffff8111156122b9576122b861205f565b5b6122c58582860161222e565b92509250509250929050565b600060ff82169050919050565b6122e7816122d1565b82525050565b600060208201905061230260008301846122de565b92915050565b60006020828403121561231e5761231d61205a565b5b600061232c848285016120ad565b91505092915050565b61233e81612084565b82525050565b60006020820190506123596000830184612335565b92915050565b600063ffffffff82169050919050565b6123788161235f565b82525050565b6000602082019050612393600083018461236f565b92915050565b600080604083850312156123b0576123af61205a565b5b60006123be858286016120ad565b92505060206123cf858286016120ad565b9150509250929050565b6123e28161235f565b81146123ed57600080fd5b50565b6000813590506123ff816123d9565b92915050565b6000806040838503121561241c5761241b61205a565b5b600061242a858286016120ad565b925050602061243b858286016123f0565b9150509250929050565b600060408201905061245a600083018561236f565b612467602083018461216e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124b557607f821691505b602082108114156124c9576124c861246e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612538826120c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561256b5761256a6124fe565b5b600182019050919050565b6000612581826120c2565b915061258c836120c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125c1576125c06124fe565b5b828201905092915050565b7f424f4e453a3a6765745072696f72566f7465733a206e6f74207965742064657460008201527f65726d696e656400000000000000000000000000000000000000000000000000602082015250565b6000612628602783611faa565b9150612633826125cc565b604082019050919050565b600060208201905081810360008301526126578161261b565b9050919050565b60006126698261235f565b91506126748361235f565b925082821015612687576126866124fe565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006126cc8261235f565b91506126d78361235f565b9250826126e7576126e6612692565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061274e602583611faa565b9150612759826126f2565b604082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127e0602683611faa565b91506127eb82612784565b604082019050919050565b6000602082019050818103600083015261280f816127d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612872602483611faa565b915061287d82612816565b604082019050919050565b600060208201905081810360008301526128a181612865565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612904602283611faa565b915061290f826128a8565b604082019050919050565b60006020820190508181036000830152612933816128f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612970601d83611faa565b915061297b8261293a565b602082019050919050565b6000602082019050818103600083015261299f81612963565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a02602583611faa565b9150612a0d826129a6565b604082019050919050565b60006020820190508181036000830152612a31816129f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612a94602383611faa565b9150612a9f82612a38565b604082019050919050565b60006020820190508181036000830152612ac381612a87565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b26602683611faa565b9150612b3182612aca565b604082019050919050565b60006020820190508181036000830152612b5581612b19565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b92602083611faa565b9150612b9d82612b5c565b602082019050919050565b60006020820190508181036000830152612bc181612b85565b9050919050565b50565b6000612bd8600083611faa565b9150612be382612bc8565b600082019050919050565b60006020820190508181036000830152612c0781612bcb565b9050919050565b6000612c19826120c2565b9150612c24836120c2565b925082821015612c3757612c366124fe565b5b828203905092915050565b6000612c4d8261235f565b9150612c588361235f565b92508263ffffffff03821115612c7157612c706124fe565b5b828201905092915050565b7f434f464645453a3a5f7772697465436865636b706f696e743a206e657720636860008201527f65636b706f696e74206578636565647320333220626974730000000000000000602082015250565b6000612cd8603883611faa565b9150612ce382612c7c565b604082019050919050565b60006020820190508181036000830152612d0781612ccb565b9050919050565b6000604082019050612d23600083018561216e565b612d30602083018461216e565b939250505056fe434f464645453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a26469706673582212205f0fc1ad4f8f6b16350960c7cb5d5f9fcbd1b933e78c4f73c1f4578a30a2239e64736f6c634300080c0033

Deployed Bytecode Sourcemap

20508:6433:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8688:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11596:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10365:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21461:122;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12377:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9954:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9650:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13081:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10192:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22233:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22494:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20971:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10536:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5801:103;;;:::i;:::-;;23029:1212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21664:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5160:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8907:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13822:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10869:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9751:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24442:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11125:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21271:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21103:70;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6059:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8688:100;8742:13;8775:5;8768:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8688:100;:::o;11596:201::-;11679:4;11696:13;11712:12;:10;:12::i;:::-;11696:28;;11735:32;11744:5;11751:7;11760:6;11735:8;:32::i;:::-;11785:4;11778:11;;;11596:201;;;;:::o;10365:108::-;10426:7;10453:12;;10446:19;;10365:108;:::o;21461:122::-;21503:80;21461:122;:::o;12377:295::-;12508:4;12525:15;12543:12;:10;:12::i;:::-;12525:30;;12566:38;12582:4;12588:7;12597:6;12566:15;:38::i;:::-;12615:27;12625:4;12631:2;12635:6;12615:9;:27::i;:::-;12660:4;12653:11;;;12377:295;;;;;:::o;9954:230::-;5046:13;:11;:13::i;:::-;10042:9:::1;10037:140;10061:11;;:18;;10057:1;:22;10037:140;;;10128:5;10101:8;:24;10110:11;;10122:1;10110:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10101:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;10160:3;;;;;10081;;;;;:::i;:::-;;;;10037:140;;;;9954:230:::0;;:::o;9650:93::-;9708:5;9733:2;9726:9;;9650:93;:::o;13081:238::-;13169:4;13186:13;13202:12;:10;:12::i;:::-;13186:28;;13225:64;13234:5;13241:7;13278:10;13250:25;13260:5;13267:7;13250:9;:25::i;:::-;:38;;;;:::i;:::-;13225:8;:64::i;:::-;13307:4;13300:11;;;13081:238;;;;:::o;10192:108::-;10248:4;10272:8;:20;10281:10;10272:20;;;;;;;;;;;;;;;;;;;;;;;;;10265:27;;10192:108;;;:::o;22233:117::-;22294:7;22321:10;:21;22332:9;22321:21;;;;;;;;;;;;;;;;;;;;;;;;;22314:28;;22233:117;;;:::o;22494:104::-;22558:32;22568:10;22580:9;22558;:32::i;:::-;22494:104;:::o;20971:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;10536:127::-;10610:7;10637:9;:18;10647:7;10637:18;;;;;;;;;;;;;;;;10630:25;;10536:127;;;:::o;5801:103::-;5046:13;:11;:13::i;:::-;5866:30:::1;5893:1;5866:18;:30::i;:::-;5801:103::o:0;23029:1212::-;23110:7;23151:12;23137:11;:26;23129:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23218:19;23240:14;:23;23255:7;23240:23;;;;;;;;;;;;;;;;;;;;;;;;;23218:45;;23294:1;23278:12;:17;;;23274:58;;;23319:1;23312:8;;;;;23274:58;23442:11;23390;:20;23402:7;23390:20;;;;;;;;;;;;;;;:38;23426:1;23411:12;:16;;;;:::i;:::-;23390:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;23386:147;;23477:11;:20;23489:7;23477:20;;;;;;;;;;;;;;;:38;23513:1;23498:12;:16;;;;:::i;:::-;23477:38;;;;;;;;;;;;;;;:44;;;23470:51;;;;;23386:147;23628:11;23592;:20;23604:7;23592:20;;;;;;;;;;;;;;;:23;23613:1;23592:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;23588:88;;;23663:1;23656:8;;;;;23588:88;23686:12;23713;23743:1;23728:12;:16;;;;:::i;:::-;23713:31;;23755:428;23770:5;23762:13;;:5;:13;;;23755:428;;;23792:13;23834:1;23825:5;23817;:13;;;;:::i;:::-;23816:19;;;;:::i;:::-;23808:5;:27;;;;:::i;:::-;23792:43;;23877:20;23900:11;:20;23912:7;23900:20;;;;;;;;;;;;;;;:28;23921:6;23900:28;;;;;;;;;;;;;;;23877:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23963:11;23947:2;:12;;;:27;;;23943:229;;;24002:2;:8;;;23995:15;;;;;;;;;23943:229;24051:11;24036:2;:12;;;:26;;;24032:140;;;24091:6;24083:14;;24032:140;;;24155:1;24146:6;:10;;;;:::i;:::-;24138:18;;24032:140;23777:406;;23755:428;;;24200:11;:20;24212:7;24200:20;;;;;;;;;;;;;;;:27;24221:5;24200:27;;;;;;;;;;;;;;;:33;;;24193:40;;;;;23029:1212;;;;;:::o;21664:39::-;;;;;;;;;;;;;;;;;:::o;5160:87::-;5206:7;5233:6;;;;;;;;;;;5226:13;;5160:87;:::o;8907:104::-;8963:13;8996:7;8989:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8907:104;:::o;13822:436::-;13915:4;13932:13;13948:12;:10;:12::i;:::-;13932:28;;13971:24;13998:25;14008:5;14015:7;13998:9;:25::i;:::-;13971:52;;14062:15;14042:16;:35;;14034:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14155:60;14164:5;14171:7;14199:15;14180:16;:34;14155:8;:60::i;:::-;14246:4;14239:11;;;;13822:436;;;;:::o;10869:193::-;10948:4;10965:13;10981:12;:10;:12::i;:::-;10965:28;;11004;11014:5;11021:2;11025:6;11004:9;:28::i;:::-;11050:4;11043:11;;;10869:193;;;;:::o;9751:195::-;5046:13;:11;:13::i;:::-;9837:9:::1;9832:107;9856:11;;:18;;9852:1;:22;9832:107;;;9923:4;9896:8;:24;9905:11;;9917:1;9905:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9896:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;9876:3;;;;;:::i;:::-;;;;9832:107;;;;9751:195:::0;;:::o;24442:222::-;24507:7;24526:19;24548:14;:23;24563:7;24548:23;;;;;;;;;;;;;;;;;;;;;;;;;24526:45;;24604:1;24589:12;:16;;;:67;;24655:1;24589:67;;;24608:11;:20;24620:7;24608:20;;;;;;;;;;;;;;;:38;24644:1;24629:12;:16;;;;:::i;:::-;24608:38;;;;;;;;;;;;;;;:44;;;24589:67;24582:74;;;24442:222;;;:::o;11125:151::-;11214:7;11241:11;:18;11253:5;11241:18;;;;;;;;;;;;;;;:27;11260:7;11241:27;;;;;;;;;;;;;;;;11234:34;;11125:151;;;;:::o;21271:117::-;21317:71;21271:117;:::o;21103:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6059:201::-;5046:13;:11;:13::i;:::-;6168:1:::1;6148:22;;:8;:22;;;;6140:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6224:28;6243:8;6224:18;:28::i;:::-;6059:201:::0;:::o;3869:98::-;3922:7;3949:10;3942:17;;3869:98;:::o;17849:380::-;18002:1;17985:19;;:5;:19;;;;17977:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1;18064:21;;:7;:21;;;;18056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18167:6;18137:11;:18;18149:5;18137:18;;;;;;;;;;;;;;;:27;18156:7;18137:27;;;;;;;;;;;;;;;:36;;;;18205:7;18189:32;;18198:5;18189:32;;;18214:6;18189:32;;;;;;:::i;:::-;;;;;;;;17849:380;;;:::o;18520:453::-;18655:24;18682:25;18692:5;18699:7;18682:9;:25::i;:::-;18655:52;;18742:17;18722:16;:37;18718:248;;18804:6;18784:16;:26;;18776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18888:51;18897:5;18904:7;18932:6;18913:16;:25;18888:8;:51::i;:::-;18718:248;18644:329;18520:453;;;:::o;14728:840::-;14875:1;14859:18;;:4;:18;;;;14851:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14952:1;14938:16;;:2;:16;;;;14930:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15007:38;15028:4;15034:2;15038:6;15007:20;:38::i;:::-;15058:19;15080:9;:15;15090:4;15080:15;;;;;;;;;;;;;;;;15058:37;;15129:6;15114:11;:21;;15106:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15246:6;15232:11;:20;15214:9;:15;15224:4;15214:15;;;;;;;;;;;;;;;:38;;;;15449:6;15432:9;:13;15442:2;15432:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15499:2;15484:26;;15493:4;15484:26;;;15503:6;15484:26;;;;;;:::i;:::-;;;;;;;;15523:37;15543:4;15549:2;15553:6;15523:19;:37::i;:::-;14840:728;14728:840;;;:::o;5325:132::-;5400:12;:10;:12::i;:::-;5389:23;;:7;:5;:7::i;:::-;:23;;;5381:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5325:132::o;24672:376::-;24749:23;24775:10;:21;24786:9;24775:21;;;;;;;;;;;;;;;;;;;;;;;;;24749:47;;24807:24;24834:20;24844:9;24834;:20::i;:::-;24807:47;;24890:9;24866:10;:21;24877:9;24866:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24959:9;24915:54;;24942:15;24915:54;;24931:9;24915:54;;;;;;;;;;;;24980:60;24995:15;25012:9;25023:16;24980:14;:60::i;:::-;24738:310;;24672:376;;:::o;6420:191::-;6494:16;6513:6;;;;;;;;;;;6494:25;;6539:8;6530:6;;:17;;;;;;;;;;;;;;;;;;6594:8;6563:40;;6584:8;6563:40;;;;;;;;;;;;6483:128;6420:191;:::o;19573:200::-;19703:8;:12;19712:2;19703:12;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;19719:8;:14;19728:4;19719:14;;;;;;;;;;;;;;;;;;;;;;;;;19703:30;19699:72;;;19762:4;19743:23;;:15;;;;;;;;;;;:23;;;19735:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;19699:72;19573:200;;;:::o;20377:124::-;;;;:::o;25828:941::-;25934:6;25924:16;;:6;:16;;;;:30;;;;;25953:1;25944:6;:10;25924:30;25920:842;;;25993:1;25975:20;;:6;:20;;;25971:382;;26064:16;26083:14;:22;26098:6;26083:22;;;;;;;;;;;;;;;;;;;;;;;;;26064:41;;26124:17;26156:1;26144:9;:13;;;:60;;26203:1;26144:60;;;26160:11;:19;26172:6;26160:19;;;;;;;;;;;;;;;:34;26192:1;26180:9;:13;;;;:::i;:::-;26160:34;;;;;;;;;;;;;;;:40;;;26144:60;26124:80;;26223:17;26255:6;26243:9;:18;;;;:::i;:::-;26223:38;;26280:57;26297:6;26305:9;26316;26327;26280:16;:57::i;:::-;25997:356;;;25971:382;26391:1;26373:20;;:6;:20;;;26369:382;;26462:16;26481:14;:22;26496:6;26481:22;;;;;;;;;;;;;;;;;;;;;;;;;26462:41;;26522:17;26554:1;26542:9;:13;;;:60;;26601:1;26542:60;;;26558:11;:19;26570:6;26558:19;;;;;;;;;;;;;;;:34;26590:1;26578:9;:13;;;;:::i;:::-;26558:34;;;;;;;;;;;;;;;:40;;;26542:60;26522:80;;26621:17;26653:6;26641:9;:18;;;;:::i;:::-;26621:38;;26678:57;26695:6;26703:9;26714;26725;26678:16;:57::i;:::-;26395:356;;;26369:382;25920:842;25828:941;;;:::o;25056:764::-;25178:18;25199:78;25206:12;25199:78;;;;;;;;;;;;;;;;;:6;:78::i;:::-;25178:99;;25309:1;25294:12;:16;;;:85;;;;;25368:11;25314:65;;:11;:22;25326:9;25314:22;;;;;;;;;;;;;;;:40;25352:1;25337:12;:16;;;;:::i;:::-;25314:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;25294:85;25290:454;;;25445:8;25396:11;:22;25408:9;25396:22;;;;;;;;;;;;;;;:40;25434:1;25419:12;:16;;;;:::i;:::-;25396:40;;;;;;;;;;;;;;;:46;;:57;;;;25290:454;;;25525:33;;;;;;;;25536:11;25525:33;;;;;;25549:8;25525:33;;;25486:11;:22;25498:9;25486:22;;;;;;;;;;;;;;;:36;25509:12;25486:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25600:12;25581:31;;25596:1;25581:12;:16;;;;:::i;:::-;:31;;;25573:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25731:1;25716:12;:16;;;;:::i;:::-;25688:14;:25;25703:9;25688:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;25290:454;25782:9;25761:51;;;25793:8;25803;25761:51;;;;;;;:::i;:::-;;;;;;;;25167:653;25056:764;;;;:::o;26777:161::-;26852:6;26883:5;26879:1;:9;26890:12;26871:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26928:1;26914:16;;26777:161;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:77::-;3883:7;3912:5;3901:16;;3846:77;;;:::o;3929:118::-;4016:24;4034:5;4016:24;:::i;:::-;4011:3;4004:37;3929:118;;:::o;4053:222::-;4146:4;4184:2;4173:9;4169:18;4161:26;;4197:71;4265:1;4254:9;4250:17;4241:6;4197:71;:::i;:::-;4053:222;;;;:::o;4281:619::-;4358:6;4366;4374;4423:2;4411:9;4402:7;4398:23;4394:32;4391:119;;;4429:79;;:::i;:::-;4391:119;4549:1;4574:53;4619:7;4610:6;4599:9;4595:22;4574:53;:::i;:::-;4564:63;;4520:117;4676:2;4702:53;4747:7;4738:6;4727:9;4723:22;4702:53;:::i;:::-;4692:63;;4647:118;4804:2;4830:53;4875:7;4866:6;4855:9;4851:22;4830:53;:::i;:::-;4820:63;;4775:118;4281:619;;;;;:::o;4906:117::-;5015:1;5012;5005:12;5029:117;5138:1;5135;5128:12;5152:117;5261:1;5258;5251:12;5292:568;5365:8;5375:6;5425:3;5418:4;5410:6;5406:17;5402:27;5392:122;;5433:79;;:::i;:::-;5392:122;5546:6;5533:20;5523:30;;5576:18;5568:6;5565:30;5562:117;;;5598:79;;:::i;:::-;5562:117;5712:4;5704:6;5700:17;5688:29;;5766:3;5758:4;5750:6;5746:17;5736:8;5732:32;5729:41;5726:128;;;5773:79;;:::i;:::-;5726:128;5292:568;;;;;:::o;5866:559::-;5952:6;5960;6009:2;5997:9;5988:7;5984:23;5980:32;5977:119;;;6015:79;;:::i;:::-;5977:119;6163:1;6152:9;6148:17;6135:31;6193:18;6185:6;6182:30;6179:117;;;6215:79;;:::i;:::-;6179:117;6328:80;6400:7;6391:6;6380:9;6376:22;6328:80;:::i;:::-;6310:98;;;;6106:312;5866:559;;;;;:::o;6431:86::-;6466:7;6506:4;6499:5;6495:16;6484:27;;6431:86;;;:::o;6523:112::-;6606:22;6622:5;6606:22;:::i;:::-;6601:3;6594:35;6523:112;;:::o;6641:214::-;6730:4;6768:2;6757:9;6753:18;6745:26;;6781:67;6845:1;6834:9;6830:17;6821:6;6781:67;:::i;:::-;6641:214;;;;:::o;6861:329::-;6920:6;6969:2;6957:9;6948:7;6944:23;6940:32;6937:119;;;6975:79;;:::i;:::-;6937:119;7095:1;7120:53;7165:7;7156:6;7145:9;7141:22;7120:53;:::i;:::-;7110:63;;7066:117;6861:329;;;;:::o;7196:118::-;7283:24;7301:5;7283:24;:::i;:::-;7278:3;7271:37;7196:118;;:::o;7320:222::-;7413:4;7451:2;7440:9;7436:18;7428:26;;7464:71;7532:1;7521:9;7517:17;7508:6;7464:71;:::i;:::-;7320:222;;;;:::o;7548:93::-;7584:7;7624:10;7617:5;7613:22;7602:33;;7548:93;;;:::o;7647:115::-;7732:23;7749:5;7732:23;:::i;:::-;7727:3;7720:36;7647:115;;:::o;7768:218::-;7859:4;7897:2;7886:9;7882:18;7874:26;;7910:69;7976:1;7965:9;7961:17;7952:6;7910:69;:::i;:::-;7768:218;;;;:::o;7992:474::-;8060:6;8068;8117:2;8105:9;8096:7;8092:23;8088:32;8085:119;;;8123:79;;:::i;:::-;8085:119;8243:1;8268:53;8313:7;8304:6;8293:9;8289:22;8268:53;:::i;:::-;8258:63;;8214:117;8370:2;8396:53;8441:7;8432:6;8421:9;8417:22;8396:53;:::i;:::-;8386:63;;8341:118;7992:474;;;;;:::o;8472:120::-;8544:23;8561:5;8544:23;:::i;:::-;8537:5;8534:34;8524:62;;8582:1;8579;8572:12;8524:62;8472:120;:::o;8598:137::-;8643:5;8681:6;8668:20;8659:29;;8697:32;8723:5;8697:32;:::i;:::-;8598:137;;;;:::o;8741:472::-;8808:6;8816;8865:2;8853:9;8844:7;8840:23;8836:32;8833:119;;;8871:79;;:::i;:::-;8833:119;8991:1;9016:53;9061:7;9052:6;9041:9;9037:22;9016:53;:::i;:::-;9006:63;;8962:117;9118:2;9144:52;9188:7;9179:6;9168:9;9164:22;9144:52;:::i;:::-;9134:62;;9089:117;8741:472;;;;;:::o;9219:328::-;9338:4;9376:2;9365:9;9361:18;9353:26;;9389:69;9455:1;9444:9;9440:17;9431:6;9389:69;:::i;:::-;9468:72;9536:2;9525:9;9521:18;9512:6;9468:72;:::i;:::-;9219:328;;;;;:::o;9553:180::-;9601:77;9598:1;9591:88;9698:4;9695:1;9688:15;9722:4;9719:1;9712:15;9739:320;9783:6;9820:1;9814:4;9810:12;9800:22;;9867:1;9861:4;9857:12;9888:18;9878:81;;9944:4;9936:6;9932:17;9922:27;;9878:81;10006:2;9998:6;9995:14;9975:18;9972:38;9969:84;;;10025:18;;:::i;:::-;9969:84;9790:269;9739:320;;;:::o;10065:180::-;10113:77;10110:1;10103:88;10210:4;10207:1;10200:15;10234:4;10231:1;10224:15;10251:180;10299:77;10296:1;10289:88;10396:4;10393:1;10386:15;10420:4;10417:1;10410:15;10437:233;10476:3;10499:24;10517:5;10499:24;:::i;:::-;10490:33;;10545:66;10538:5;10535:77;10532:103;;;10615:18;;:::i;:::-;10532:103;10662:1;10655:5;10651:13;10644:20;;10437:233;;;:::o;10676:305::-;10716:3;10735:20;10753:1;10735:20;:::i;:::-;10730:25;;10769:20;10787:1;10769:20;:::i;:::-;10764:25;;10923:1;10855:66;10851:74;10848:1;10845:81;10842:107;;;10929:18;;:::i;:::-;10842:107;10973:1;10970;10966:9;10959:16;;10676:305;;;;:::o;10987:226::-;11127:34;11123:1;11115:6;11111:14;11104:58;11196:9;11191:2;11183:6;11179:15;11172:34;10987:226;:::o;11219:366::-;11361:3;11382:67;11446:2;11441:3;11382:67;:::i;:::-;11375:74;;11458:93;11547:3;11458:93;:::i;:::-;11576:2;11571:3;11567:12;11560:19;;11219:366;;;:::o;11591:419::-;11757:4;11795:2;11784:9;11780:18;11772:26;;11844:9;11838:4;11834:20;11830:1;11819:9;11815:17;11808:47;11872:131;11998:4;11872:131;:::i;:::-;11864:139;;11591:419;;;:::o;12016:188::-;12055:4;12075:19;12092:1;12075:19;:::i;:::-;12070:24;;12108:19;12125:1;12108:19;:::i;:::-;12103:24;;12146:1;12143;12140:8;12137:34;;;12151:18;;:::i;:::-;12137:34;12196:1;12193;12189:9;12181:17;;12016:188;;;;:::o;12210:180::-;12258:77;12255:1;12248:88;12355:4;12352:1;12345:15;12379:4;12376:1;12369:15;12396:182;12435:1;12452:19;12469:1;12452:19;:::i;:::-;12447:24;;12485:19;12502:1;12485:19;:::i;:::-;12480:24;;12523:1;12513:35;;12528:18;;:::i;:::-;12513:35;12570:1;12567;12563:9;12558:14;;12396:182;;;;:::o;12584:224::-;12724:34;12720:1;12712:6;12708:14;12701:58;12793:7;12788:2;12780:6;12776:15;12769:32;12584:224;:::o;12814:366::-;12956:3;12977:67;13041:2;13036:3;12977:67;:::i;:::-;12970:74;;13053:93;13142:3;13053:93;:::i;:::-;13171:2;13166:3;13162:12;13155:19;;12814:366;;;:::o;13186:419::-;13352:4;13390:2;13379:9;13375:18;13367:26;;13439:9;13433:4;13429:20;13425:1;13414:9;13410:17;13403:47;13467:131;13593:4;13467:131;:::i;:::-;13459:139;;13186:419;;;:::o;13611:225::-;13751:34;13747:1;13739:6;13735:14;13728:58;13820:8;13815:2;13807:6;13803:15;13796:33;13611:225;:::o;13842:366::-;13984:3;14005:67;14069:2;14064:3;14005:67;:::i;:::-;13998:74;;14081:93;14170:3;14081:93;:::i;:::-;14199:2;14194:3;14190:12;14183:19;;13842:366;;;:::o;14214:419::-;14380:4;14418:2;14407:9;14403:18;14395:26;;14467:9;14461:4;14457:20;14453:1;14442:9;14438:17;14431:47;14495:131;14621:4;14495:131;:::i;:::-;14487:139;;14214:419;;;:::o;14639:223::-;14779:34;14775:1;14767:6;14763:14;14756:58;14848:6;14843:2;14835:6;14831:15;14824:31;14639:223;:::o;14868:366::-;15010:3;15031:67;15095:2;15090:3;15031:67;:::i;:::-;15024:74;;15107:93;15196:3;15107:93;:::i;:::-;15225:2;15220:3;15216:12;15209:19;;14868:366;;;:::o;15240:419::-;15406:4;15444:2;15433:9;15429:18;15421:26;;15493:9;15487:4;15483:20;15479:1;15468:9;15464:17;15457:47;15521:131;15647:4;15521:131;:::i;:::-;15513:139;;15240:419;;;:::o;15665:221::-;15805:34;15801:1;15793:6;15789:14;15782:58;15874:4;15869:2;15861:6;15857:15;15850:29;15665:221;:::o;15892:366::-;16034:3;16055:67;16119:2;16114:3;16055:67;:::i;:::-;16048:74;;16131:93;16220:3;16131:93;:::i;:::-;16249:2;16244:3;16240:12;16233:19;;15892:366;;;:::o;16264:419::-;16430:4;16468:2;16457:9;16453:18;16445:26;;16517:9;16511:4;16507:20;16503:1;16492:9;16488:17;16481:47;16545:131;16671:4;16545:131;:::i;:::-;16537:139;;16264:419;;;:::o;16689:179::-;16829:31;16825:1;16817:6;16813:14;16806:55;16689:179;:::o;16874:366::-;17016:3;17037:67;17101:2;17096:3;17037:67;:::i;:::-;17030:74;;17113:93;17202:3;17113:93;:::i;:::-;17231:2;17226:3;17222:12;17215:19;;16874:366;;;:::o;17246:419::-;17412:4;17450:2;17439:9;17435:18;17427:26;;17499:9;17493:4;17489:20;17485:1;17474:9;17470:17;17463:47;17527:131;17653:4;17527:131;:::i;:::-;17519:139;;17246:419;;;:::o;17671:224::-;17811:34;17807:1;17799:6;17795:14;17788:58;17880:7;17875:2;17867:6;17863:15;17856:32;17671:224;:::o;17901:366::-;18043:3;18064:67;18128:2;18123:3;18064:67;:::i;:::-;18057:74;;18140:93;18229:3;18140:93;:::i;:::-;18258:2;18253:3;18249:12;18242:19;;17901:366;;;:::o;18273:419::-;18439:4;18477:2;18466:9;18462:18;18454:26;;18526:9;18520:4;18516:20;18512:1;18501:9;18497:17;18490:47;18554:131;18680:4;18554:131;:::i;:::-;18546:139;;18273:419;;;:::o;18698:222::-;18838:34;18834:1;18826:6;18822:14;18815:58;18907:5;18902:2;18894:6;18890:15;18883:30;18698:222;:::o;18926:366::-;19068:3;19089:67;19153:2;19148:3;19089:67;:::i;:::-;19082:74;;19165:93;19254:3;19165:93;:::i;:::-;19283:2;19278:3;19274:12;19267:19;;18926:366;;;:::o;19298:419::-;19464:4;19502:2;19491:9;19487:18;19479:26;;19551:9;19545:4;19541:20;19537:1;19526:9;19522:17;19515:47;19579:131;19705:4;19579:131;:::i;:::-;19571:139;;19298:419;;;:::o;19723:225::-;19863:34;19859:1;19851:6;19847:14;19840:58;19932:8;19927:2;19919:6;19915:15;19908:33;19723:225;:::o;19954:366::-;20096:3;20117:67;20181:2;20176:3;20117:67;:::i;:::-;20110:74;;20193:93;20282:3;20193:93;:::i;:::-;20311:2;20306:3;20302:12;20295:19;;19954:366;;;:::o;20326:419::-;20492:4;20530:2;20519:9;20515:18;20507:26;;20579:9;20573:4;20569:20;20565:1;20554:9;20550:17;20543:47;20607:131;20733:4;20607:131;:::i;:::-;20599:139;;20326:419;;;:::o;20751:182::-;20891:34;20887:1;20879:6;20875:14;20868:58;20751:182;:::o;20939:366::-;21081:3;21102:67;21166:2;21161:3;21102:67;:::i;:::-;21095:74;;21178:93;21267:3;21178:93;:::i;:::-;21296:2;21291:3;21287:12;21280:19;;20939:366;;;:::o;21311:419::-;21477:4;21515:2;21504:9;21500:18;21492:26;;21564:9;21558:4;21554:20;21550:1;21539:9;21535:17;21528:47;21592:131;21718:4;21592:131;:::i;:::-;21584:139;;21311:419;;;:::o;21736:114::-;;:::o;21856:364::-;21998:3;22019:66;22083:1;22078:3;22019:66;:::i;:::-;22012:73;;22094:93;22183:3;22094:93;:::i;:::-;22212:1;22207:3;22203:11;22196:18;;21856:364;;;:::o;22226:419::-;22392:4;22430:2;22419:9;22415:18;22407:26;;22479:9;22473:4;22469:20;22465:1;22454:9;22450:17;22443:47;22507:131;22633:4;22507:131;:::i;:::-;22499:139;;22226:419;;;:::o;22651:191::-;22691:4;22711:20;22729:1;22711:20;:::i;:::-;22706:25;;22745:20;22763:1;22745:20;:::i;:::-;22740:25;;22784:1;22781;22778:8;22775:34;;;22789:18;;:::i;:::-;22775:34;22834:1;22831;22827:9;22819:17;;22651:191;;;;:::o;22848:246::-;22887:3;22906:19;22923:1;22906:19;:::i;:::-;22901:24;;22939:19;22956:1;22939:19;:::i;:::-;22934:24;;23036:1;23024:10;23020:18;23017:1;23014:25;23011:51;;;23042:18;;:::i;:::-;23011:51;23086:1;23083;23079:9;23072:16;;22848:246;;;;:::o;23100:243::-;23240:34;23236:1;23228:6;23224:14;23217:58;23309:26;23304:2;23296:6;23292:15;23285:51;23100:243;:::o;23349:366::-;23491:3;23512:67;23576:2;23571:3;23512:67;:::i;:::-;23505:74;;23588:93;23677:3;23588:93;:::i;:::-;23706:2;23701:3;23697:12;23690:19;;23349:366;;;:::o;23721:419::-;23887:4;23925:2;23914:9;23910:18;23902:26;;23974:9;23968:4;23964:20;23960:1;23949:9;23945:17;23938:47;24002:131;24128:4;24002:131;:::i;:::-;23994:139;;23721:419;;;:::o;24146:332::-;24267:4;24305:2;24294:9;24290:18;24282:26;;24318:71;24386:1;24375:9;24371:17;24362:6;24318:71;:::i;:::-;24399:72;24467:2;24456:9;24452:18;24443:6;24399:72;:::i;:::-;24146:332;;;;;:::o

Swarm Source

ipfs://5f0fc1ad4f8f6b16350960c7cb5d5f9fcbd1b933e78c4f73c1f4578a30a2239e
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.