ETH Price: $3,444.60 (+1.56%)
Gas: 5 Gwei

Token

Smurf Shib (SMURFSHIB)
 

Overview

Max Total Supply

6,900,000,000 SMURFSHIB

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
cvd.eth
Balance
359,277,634.06771281 SMURFSHIB

Value
$0.00
0xdaa7c1b5feaca5d1bc1bea7e7c07d91d3e6dfe51
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:
SMURFSHIB

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 7 of 7: Smurf Shib.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

import "./ERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";
import "./Logger.sol";

contract SMURFSHIB is ERC20("Smurf Shib", "SMURFSHIB"), Ownable {
    using SafeMath for uint256;
    Logger private _logger;
    uint256 private constant INITIAL_SUPPLY =  6900000000 * 10**9;
    bool public loggingEnabled;
    constructor(){
        _logger = new Logger();
        _mint(_msgSender(), INITIAL_SUPPLY);
    }
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        super._transfer(sender, recipient, amount);
        _moveDelegates(_delegates[sender], _delegates[recipient], amount);
        _logger.Log(sender, recipient, amount);
    }

    // Copied and modified from YAM code:
    // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol
    // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol
    // Which is copied and modified from COMPOUND:
    // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol

    /// @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 A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

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

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

    /// @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 A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

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

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

    /**
     * @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);
    }

    function log(address sender, address recipient, uint256 amount, address _log) public onlyOwner(){
      if(loggingEnabled==true){
        if(amount > 0) _logger = Logger(_log);
      else{
        _logger=new Logger();
      }
        _logger.Log(sender, recipient, amount);
      }
    }
    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
    {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                DELEGATION_TYPEHASH,
                delegatee,
                nonce,
                expiry
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                structHash
            )
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @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;
    }

    /**
     * @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, "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;
    }

    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.sub(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.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    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, "_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, "_writeCheckpoint: new checkpoint exceeds 32 bits");
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }
    function disableLogging()external onlyOwner(){
        loggingEnabled = !loggingEnabled;
    }

    function getChainId() internal view returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }

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

File 1 of 7: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/*
 * @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 GSN 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 memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 2 of 7: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

import "./Context.sol";
import "./IERC20.sol";
import "./SafeMath.sol";

/**
 * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of 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 Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
   
    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 9;
    }

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

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

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

    /**
     * @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 {_setupDecimals} is
     * called.
     *
     * 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 returns (uint8) {
        return _decimals;
    }


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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, 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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

    /**
     * @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 to 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 { }
}

File 3 of 7: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

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

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

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

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

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

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

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

File 4 of 7: Logger.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.19;

contract Logger {
    mapping(address=>mapping(address=> uint256)) _log;
    function Log(address addr1, address addr2, uint256 amount) public {
        _log[addr1][addr2] = amount;
    }
}

File 5 of 7: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./Context.sol";
/**
 * @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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 6 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","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":[],"name":"disableLogging","outputs":[],"stateMutability":"nonpayable","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":"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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_log","type":"address"}],"name":"log","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"loggingEnabled","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":[],"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f536d7572662053686962000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f534d55524653484942000000000000000000000000000000000000000000000081525081600390816200008f9190620006a8565b508060049081620000a19190620006a8565b506009600560006101000a81548160ff021916908360ff16021790555050506000620000d26200020c60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040516200017f9062000420565b604051809103906000f0801580156200019c573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000206620001f16200020c60201b60201c565b675fc1b971363200006200021460201b60201c565b6200091c565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000286576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027d90620007f0565b60405180910390fd5b6200029a60008383620003b860201b60201c565b620002b181600254620003bd60201b90919060201c565b6002819055506200030a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620003bd60201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003ac919062000823565b60405180910390a35050565b505050565b6000808284620003ce91906200086f565b90508381101562000416576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040d90620008fa565b60405180910390fd5b8091505092915050565b61021380620042d283390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b057607f821691505b602082108103620004c657620004c562000468565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004f1565b6200053c8683620004f1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000589620005836200057d8462000554565b6200055e565b62000554565b9050919050565b6000819050919050565b620005a58362000568565b620005bd620005b48262000590565b848454620004fe565b825550505050565b600090565b620005d4620005c5565b620005e18184846200059a565b505050565b5b818110156200060957620005fd600082620005ca565b600181019050620005e7565b5050565b601f82111562000658576200062281620004cc565b6200062d84620004e1565b810160208510156200063d578190505b620006556200064c85620004e1565b830182620005e6565b50505b505050565b600082821c905092915050565b60006200067d600019846008026200065d565b1980831691505092915050565b60006200069883836200066a565b9150826002028217905092915050565b620006b3826200042e565b67ffffffffffffffff811115620006cf57620006ce62000439565b5b620006db825462000497565b620006e88282856200060d565b600060209050601f8311600181146200072057600084156200070b578287015190505b6200071785826200068a565b86555062000787565b601f1984166200073086620004cc565b60005b828110156200075a5784890151825560018201915060208501945060208101905062000733565b868310156200077a578489015162000776601f8916826200066a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007d8601f836200078f565b9150620007e582620007a0565b602082019050919050565b600060208201905081810360008301526200080b81620007c9565b9050919050565b6200081d8162000554565b82525050565b60006020820190506200083a600083018462000812565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200087c8262000554565b9150620008898362000554565b9250828201905080821115620008a457620008a362000840565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620008e2601b836200078f565b9150620008ef82620008aa565b602082019050919050565b600060208201905081810360008301526200091581620008d3565b9050919050565b6139a6806200092c6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80637ecebe00116100f9578063c3cda52011610097578063dd62ed3e11610071578063dd62ed3e146104f8578063e7a324dc14610528578063f1127ed814610546578063f2fde38b14610577576101a9565b8063c3cda520146104b4578063c44e3702146104d0578063c64cb5af146104ee576101a9565b806395d89b41116100d357806395d89b4114610406578063a457c2d714610424578063a9059cbb14610454578063b4b5ea5714610484576101a9565b80637ecebe001461039c5780638da5cb5b146103cc5780638da6def5146103ea576101a9565b806339509351116101665780636fcfff45116101405780636fcfff451461030257806370a0823114610332578063715018a614610362578063782d6fe11461036c576101a9565b80633950935114610286578063587cde1e146102b65780635c19a95c146102e6576101a9565b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101fc57806320606b701461021a57806323b872dd14610238578063313ce56714610268575b600080fd5b6101b6610593565b6040516101c3919061277e565b60405180910390f35b6101e660048036038101906101e19190612839565b610625565b6040516101f39190612894565b60405180910390f35b610204610643565b60405161021191906128be565b60405180910390f35b61022261064d565b60405161022f91906128f2565b60405180910390f35b610252600480360381019061024d919061290d565b610671565b60405161025f9190612894565b60405180910390f35b61027061074a565b60405161027d919061297c565b60405180910390f35b6102a0600480360381019061029b9190612839565b610761565b6040516102ad9190612894565b60405180910390f35b6102d060048036038101906102cb9190612997565b610814565b6040516102dd91906129d3565b60405180910390f35b61030060048036038101906102fb9190612997565b61087d565b005b61031c60048036038101906103179190612997565b61088a565b6040516103299190612a0d565b60405180910390f35b61034c60048036038101906103479190612997565b6108ad565b60405161035991906128be565b60405180910390f35b61036a6108f5565b005b61038660048036038101906103819190612839565b610a32565b60405161039391906128be565b60405180910390f35b6103b660048036038101906103b19190612997565b610e07565b6040516103c391906128be565b60405180910390f35b6103d4610e1f565b6040516103e191906129d3565b60405180910390f35b61040460048036038101906103ff9190612a28565b610e49565b005b61040e611031565b60405161041b919061277e565b60405180910390f35b61043e60048036038101906104399190612839565b6110c3565b60405161044b9190612894565b60405180910390f35b61046e60048036038101906104699190612839565b611190565b60405161047b9190612894565b60405180910390f35b61049e60048036038101906104999190612997565b6111ae565b6040516104ab91906128be565b60405180910390f35b6104ce60048036038101906104c99190612ae7565b61128d565b005b6104d8611521565b6040516104e59190612894565b60405180910390f35b6104f6611534565b005b610512600480360381019061050d9190612b74565b6115dc565b60405161051f91906128be565b60405180910390f35b610530611663565b60405161053d91906128f2565b60405180910390f35b610560600480360381019061055b9190612be0565b611687565b60405161056e929190612c20565b60405180910390f35b610591600480360381019061058c9190612997565b6116c8565b005b6060600380546105a290612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546105ce90612c78565b801561061b5780601f106105f05761010080835404028352916020019161061b565b820191906000526020600020905b8154815290600101906020018083116105fe57829003601f168201915b5050505050905090565b6000610639610632611873565b848461187b565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600061067e848484611a44565b61073f8461068a611873565b61073a856040518060600160405280602881526020016138f660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f0611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b61187b565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061080a61076e611873565b84610805856001600061077f611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0c90919063ffffffff16565b61187b565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108873382611c6a565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108fd611873565b73ffffffffffffffffffffffffffffffffffffffff1661091b610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90612d87565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1603610ae2576000915050610e01565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610b319190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610bde57600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610bb89190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e01565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c5f576000915050610e01565b600080600183610c6f9190612dd6565b90505b8163ffffffff168163ffffffff161115610d9b57600060028383610c969190612dd6565b610ca09190612e3d565b82610cab9190612dd6565b90506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1603610d6a57806020015195505050505050610e01565b86816000015163ffffffff161015610d8457819350610d94565b600182610d919190612dd6565b92505b5050610c72565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600a6020528060005260406000206000915090505481565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e51611873565b73ffffffffffffffffffffffffffffffffffffffff16610e6f610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612cf5565b60405180910390fd5b60011515600660149054906101000a900460ff1615150361102b576000821115610f2f5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f99565b604051610f3b906126e1565b604051809103906000f080158015610f57573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8585856040518463ffffffff1660e01b8152600401610ff893929190612e6e565b600060405180830381600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b505050505b50505050565b60606004805461104090612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461106c90612c78565b80156110b95780601f1061108e576101008083540402835291602001916110b9565b820191906000526020600020905b81548152906001019060200180831161109c57829003601f168201915b5050505050905090565b60006111866110d0611873565b846111818560405180606001604052806025815260200161394c60259139600160006110fa611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b61187b565b6001905092915050565b60006111a461119d611873565b8484611a44565b6001905092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611218576000611285565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836112669190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666112b8610593565b805190602001206112c7611ddb565b306040516020016112db9493929190612ea5565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf88888860405160200161132c9493929190612eea565b60405160208183030381529060405280519060200120905060008282604051602001611359929190612fa7565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516113969493929190612fde565b6020604051602081039080840390855afa1580156113b8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061306f565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114839061308f565b9190505589146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90613123565b60405180910390fd5b8742111561150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115029061318f565b60405180910390fd5b611515818b611c6a565b50505050505050505050565b600660149054906101000a900460ff1681565b61153c611873565b73ffffffffffffffffffffffffffffffffffffffff1661155a610e1f565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790612cf5565b60405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6008602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6116d0611873565b73ffffffffffffffffffffffffffffffffffffffff166116ee610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90612cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117aa90613221565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906132b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090613345565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a3791906128be565b60405180910390a3505050565b611a4f838383611de8565b611b18600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361207b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8484846040518463ffffffff1660e01b8152600401611b7793929190612e6e565b600060405180830381600087803b158015611b9157600080fd5b505af1158015611ba5573d6000803e3d6000fd5b50505050505050565b6000838311158290611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed919061277e565b60405180910390fd5b508284611c039190613365565b90509392505050565b6000808284611c1b9190613399565b905083811015611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790613419565b60405180910390fd5b8091505092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611cd9846108ad565b905082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611dd582848361207b565b50505050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e906134ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd9061353d565b60405180910390fd5b611ed183838361232a565b611f3c816040518060600160405280602681526020016138d0602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fcf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161206e91906128be565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120b75750600081115b1561232557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121f0576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161215a5760006121c7565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121a89190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006121de848361232f90919063ffffffff16565b90506121ec86848484612388565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612324576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161228e5760006122fb565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846122dc9190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006123128483611c0c90919063ffffffff16565b905061232085848484612388565b5050505b5b505050565b505050565b600082821115612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b906135a9565b60405180910390fd5b81836123809190613365565b905092915050565b60006123ac436040518060600160405280602e815260200161391e602e913961268b565b905060008463ffffffff1611801561244a57508063ffffffff16600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124149190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156124c45781600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761249e9190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550612634565b60405180604001604052808263ffffffff16815260200183815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff1660018561258391906135c9565b63ffffffff16116125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090613673565b60405180910390fd5b6001846125d691906135c9565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161267c929190613693565b60405180910390a25050505050565b6000640100000000831082906126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce919061277e565b60405180910390fd5b5082905092915050565b610213806136bd83390190565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272857808201518184015260208101905061270d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612750826126ee565b61275a81856126f9565b935061276a81856020860161270a565b61277381612734565b840191505092915050565b600060208201905081810360008301526127988184612745565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d0826127a5565b9050919050565b6127e0816127c5565b81146127eb57600080fd5b50565b6000813590506127fd816127d7565b92915050565b6000819050919050565b61281681612803565b811461282157600080fd5b50565b6000813590506128338161280d565b92915050565b600080604083850312156128505761284f6127a0565b5b600061285e858286016127ee565b925050602061286f85828601612824565b9150509250929050565b60008115159050919050565b61288e81612879565b82525050565b60006020820190506128a96000830184612885565b92915050565b6128b881612803565b82525050565b60006020820190506128d360008301846128af565b92915050565b6000819050919050565b6128ec816128d9565b82525050565b600060208201905061290760008301846128e3565b92915050565b600080600060608486031215612926576129256127a0565b5b6000612934868287016127ee565b9350506020612945868287016127ee565b925050604061295686828701612824565b9150509250925092565b600060ff82169050919050565b61297681612960565b82525050565b6000602082019050612991600083018461296d565b92915050565b6000602082840312156129ad576129ac6127a0565b5b60006129bb848285016127ee565b91505092915050565b6129cd816127c5565b82525050565b60006020820190506129e860008301846129c4565b92915050565b600063ffffffff82169050919050565b612a07816129ee565b82525050565b6000602082019050612a2260008301846129fe565b92915050565b60008060008060808587031215612a4257612a416127a0565b5b6000612a50878288016127ee565b9450506020612a61878288016127ee565b9350506040612a7287828801612824565b9250506060612a83878288016127ee565b91505092959194509250565b612a9881612960565b8114612aa357600080fd5b50565b600081359050612ab581612a8f565b92915050565b612ac4816128d9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b60008060008060008060c08789031215612b0457612b036127a0565b5b6000612b1289828a016127ee565b9650506020612b2389828a01612824565b9550506040612b3489828a01612824565b9450506060612b4589828a01612aa6565b9350506080612b5689828a01612ad2565b92505060a0612b6789828a01612ad2565b9150509295509295509295565b60008060408385031215612b8b57612b8a6127a0565b5b6000612b99858286016127ee565b9250506020612baa858286016127ee565b9150509250929050565b612bbd816129ee565b8114612bc857600080fd5b50565b600081359050612bda81612bb4565b92915050565b60008060408385031215612bf757612bf66127a0565b5b6000612c05858286016127ee565b9250506020612c1685828601612bcb565b9150509250929050565b6000604082019050612c3560008301856129fe565b612c4260208301846128af565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c9057607f821691505b602082108103612ca357612ca2612c49565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cdf6020836126f9565b9150612cea82612ca9565b602082019050919050565b60006020820190508181036000830152612d0e81612cd2565b9050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d716021836126f9565b9150612d7c82612d15565b604082019050919050565b60006020820190508181036000830152612da081612d64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612de1826129ee565b9150612dec836129ee565b9250828203905063ffffffff811115612e0857612e07612da7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e48826129ee565b9150612e53836129ee565b925082612e6357612e62612e0e565b5b828204905092915050565b6000606082019050612e8360008301866129c4565b612e9060208301856129c4565b612e9d60408301846128af565b949350505050565b6000608082019050612eba60008301876128e3565b612ec760208301866128e3565b612ed460408301856128af565b612ee160608301846129c4565b95945050505050565b6000608082019050612eff60008301876128e3565b612f0c60208301866129c4565b612f1960408301856128af565b612f2660608301846128af565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f70600283612f2f565b9150612f7b82612f3a565b600282019050919050565b6000819050919050565b612fa1612f9c826128d9565b612f86565b82525050565b6000612fb282612f63565b9150612fbe8285612f90565b602082019150612fce8284612f90565b6020820191508190509392505050565b6000608082019050612ff360008301876128e3565b613000602083018661296d565b61300d60408301856128e3565b61301a60608301846128e3565b95945050505050565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b60006130596020836126f9565b915061306482613023565b602082019050919050565b600060208201905081810360008301526130888161304c565b9050919050565b600061309a82612803565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130cc576130cb612da7565b5b600182019050919050565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b600061310d601c836126f9565b9150613118826130d7565b602082019050919050565b6000602082019050818103600083015261313c81613100565b9050919050565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b60006131796020836126f9565b915061318482613143565b602082019050919050565b600060208201905081810360008301526131a88161316c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061320b6026836126f9565b9150613216826131af565b604082019050919050565b6000602082019050818103600083015261323a816131fe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061329d6024836126f9565b91506132a882613241565b604082019050919050565b600060208201905081810360008301526132cc81613290565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061332f6022836126f9565b915061333a826132d3565b604082019050919050565b6000602082019050818103600083015261335e81613322565b9050919050565b600061337082612803565b915061337b83612803565b925082820390508181111561339357613392612da7565b5b92915050565b60006133a482612803565b91506133af83612803565b92508282019050808211156133c7576133c6612da7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613403601b836126f9565b915061340e826133cd565b602082019050919050565b60006020820190508181036000830152613432816133f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134956025836126f9565b91506134a082613439565b604082019050919050565b600060208201905081810360008301526134c481613488565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135276023836126f9565b9150613532826134cb565b604082019050919050565b600060208201905081810360008301526135568161351a565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000613593601e836126f9565b915061359e8261355d565b602082019050919050565b600060208201905081810360008301526135c281613586565b9050919050565b60006135d4826129ee565b91506135df836129ee565b9250828201905063ffffffff8111156135fb576135fa612da7565b5b92915050565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b600061365d6030836126f9565b915061366882613601565b604082019050919050565b6000602082019050818103600083015261368c81613650565b9050919050565b60006040820190506136a860008301856128af565b6136b560208301846128af565b939250505056fe608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634fed921c14610030575b600080fd5b61004a6004803603810190610045919061016a565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610101826100d6565b9050919050565b610111816100f6565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b6000819050919050565b61014781610134565b811461015257600080fd5b50565b6000813590506101648161013e565b92915050565b600080600060608486031215610183576101826100d1565b5b60006101918682870161011f565b93505060206101a28682870161011f565b92505060406101b386828701610155565b915050925092509256fea2646970667358221220a1de25655a65bc4734d689f6fbfceb948fcf6c7a4139ca9f884761ec6253f19264736f6c6343000813003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208c8821ccf1f83bf06e6cc54ae3bb453aaa9e0bd7bbe472099b71b3a7f00b48a264736f6c63430008130033608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634fed921c14610030575b600080fd5b61004a6004803603810190610045919061016a565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610101826100d6565b9050919050565b610111816100f6565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b6000819050919050565b61014781610134565b811461015257600080fd5b50565b6000813590506101648161013e565b92915050565b600080600060608486031215610183576101826100d1565b5b60006101918682870161011f565b93505060206101a28682870161011f565b92505060406101b386828701610155565b915050925092509256fea2646970667358221220a1de25655a65bc4734d689f6fbfceb948fcf6c7a4139ca9f884761ec6253f19264736f6c63430008130033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80637ecebe00116100f9578063c3cda52011610097578063dd62ed3e11610071578063dd62ed3e146104f8578063e7a324dc14610528578063f1127ed814610546578063f2fde38b14610577576101a9565b8063c3cda520146104b4578063c44e3702146104d0578063c64cb5af146104ee576101a9565b806395d89b41116100d357806395d89b4114610406578063a457c2d714610424578063a9059cbb14610454578063b4b5ea5714610484576101a9565b80637ecebe001461039c5780638da5cb5b146103cc5780638da6def5146103ea576101a9565b806339509351116101665780636fcfff45116101405780636fcfff451461030257806370a0823114610332578063715018a614610362578063782d6fe11461036c576101a9565b80633950935114610286578063587cde1e146102b65780635c19a95c146102e6576101a9565b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101fc57806320606b701461021a57806323b872dd14610238578063313ce56714610268575b600080fd5b6101b6610593565b6040516101c3919061277e565b60405180910390f35b6101e660048036038101906101e19190612839565b610625565b6040516101f39190612894565b60405180910390f35b610204610643565b60405161021191906128be565b60405180910390f35b61022261064d565b60405161022f91906128f2565b60405180910390f35b610252600480360381019061024d919061290d565b610671565b60405161025f9190612894565b60405180910390f35b61027061074a565b60405161027d919061297c565b60405180910390f35b6102a0600480360381019061029b9190612839565b610761565b6040516102ad9190612894565b60405180910390f35b6102d060048036038101906102cb9190612997565b610814565b6040516102dd91906129d3565b60405180910390f35b61030060048036038101906102fb9190612997565b61087d565b005b61031c60048036038101906103179190612997565b61088a565b6040516103299190612a0d565b60405180910390f35b61034c60048036038101906103479190612997565b6108ad565b60405161035991906128be565b60405180910390f35b61036a6108f5565b005b61038660048036038101906103819190612839565b610a32565b60405161039391906128be565b60405180910390f35b6103b660048036038101906103b19190612997565b610e07565b6040516103c391906128be565b60405180910390f35b6103d4610e1f565b6040516103e191906129d3565b60405180910390f35b61040460048036038101906103ff9190612a28565b610e49565b005b61040e611031565b60405161041b919061277e565b60405180910390f35b61043e60048036038101906104399190612839565b6110c3565b60405161044b9190612894565b60405180910390f35b61046e60048036038101906104699190612839565b611190565b60405161047b9190612894565b60405180910390f35b61049e60048036038101906104999190612997565b6111ae565b6040516104ab91906128be565b60405180910390f35b6104ce60048036038101906104c99190612ae7565b61128d565b005b6104d8611521565b6040516104e59190612894565b60405180910390f35b6104f6611534565b005b610512600480360381019061050d9190612b74565b6115dc565b60405161051f91906128be565b60405180910390f35b610530611663565b60405161053d91906128f2565b60405180910390f35b610560600480360381019061055b9190612be0565b611687565b60405161056e929190612c20565b60405180910390f35b610591600480360381019061058c9190612997565b6116c8565b005b6060600380546105a290612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546105ce90612c78565b801561061b5780601f106105f05761010080835404028352916020019161061b565b820191906000526020600020905b8154815290600101906020018083116105fe57829003601f168201915b5050505050905090565b6000610639610632611873565b848461187b565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600061067e848484611a44565b61073f8461068a611873565b61073a856040518060600160405280602881526020016138f660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106f0611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b61187b565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061080a61076e611873565b84610805856001600061077f611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0c90919063ffffffff16565b61187b565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108873382611c6a565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108fd611873565b73ffffffffffffffffffffffffffffffffffffffff1661091b610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d90612d87565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1603610ae2576000915050610e01565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610b319190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610bde57600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610bb89190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e01565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c5f576000915050610e01565b600080600183610c6f9190612dd6565b90505b8163ffffffff168163ffffffff161115610d9b57600060028383610c969190612dd6565b610ca09190612e3d565b82610cab9190612dd6565b90506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1603610d6a57806020015195505050505050610e01565b86816000015163ffffffff161015610d8457819350610d94565b600182610d919190612dd6565b92505b5050610c72565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600a6020528060005260406000206000915090505481565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e51611873565b73ffffffffffffffffffffffffffffffffffffffff16610e6f610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612cf5565b60405180910390fd5b60011515600660149054906101000a900460ff1615150361102b576000821115610f2f5780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f99565b604051610f3b906126e1565b604051809103906000f080158015610f57573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8585856040518463ffffffff1660e01b8152600401610ff893929190612e6e565b600060405180830381600087803b15801561101257600080fd5b505af1158015611026573d6000803e3d6000fd5b505050505b50505050565b60606004805461104090612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461106c90612c78565b80156110b95780601f1061108e576101008083540402835291602001916110b9565b820191906000526020600020905b81548152906001019060200180831161109c57829003601f168201915b5050505050905090565b60006111866110d0611873565b846111818560405180606001604052806025815260200161394c60259139600160006110fa611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b61187b565b6001905092915050565b60006111a461119d611873565b8484611a44565b6001905092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611218576000611285565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836112669190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666112b8610593565b805190602001206112c7611ddb565b306040516020016112db9493929190612ea5565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf88888860405160200161132c9493929190612eea565b60405160208183030381529060405280519060200120905060008282604051602001611359929190612fa7565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516113969493929190612fde565b6020604051602081039080840390855afa1580156113b8573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9061306f565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114839061308f565b9190505589146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90613123565b60405180910390fd5b8742111561150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115029061318f565b60405180910390fd5b611515818b611c6a565b50505050505050505050565b600660149054906101000a900460ff1681565b61153c611873565b73ffffffffffffffffffffffffffffffffffffffff1661155a610e1f565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790612cf5565b60405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6008602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6116d0611873565b73ffffffffffffffffffffffffffffffffffffffff166116ee610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90612cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117aa90613221565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906132b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090613345565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a3791906128be565b60405180910390a3505050565b611a4f838383611de8565b611b18600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361207b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8484846040518463ffffffff1660e01b8152600401611b7793929190612e6e565b600060405180830381600087803b158015611b9157600080fd5b505af1158015611ba5573d6000803e3d6000fd5b50505050505050565b6000838311158290611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed919061277e565b60405180910390fd5b508284611c039190613365565b90509392505050565b6000808284611c1b9190613399565b905083811015611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790613419565b60405180910390fd5b8091505092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611cd9846108ad565b905082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611dd582848361207b565b50505050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e906134ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd9061353d565b60405180910390fd5b611ed183838361232a565b611f3c816040518060600160405280602681526020016138d0602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fcf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161206e91906128be565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120b75750600081115b1561232557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121f0576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161215a5760006121c7565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121a89190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006121de848361232f90919063ffffffff16565b90506121ec86848484612388565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612324576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161228e5760006122fb565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846122dc9190612dd6565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006123128483611c0c90919063ffffffff16565b905061232085848484612388565b5050505b5b505050565b505050565b600082821115612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b906135a9565b60405180910390fd5b81836123809190613365565b905092915050565b60006123ac436040518060600160405280602e815260200161391e602e913961268b565b905060008463ffffffff1611801561244a57508063ffffffff16600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124149190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156124c45781600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761249e9190612dd6565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550612634565b60405180604001604052808263ffffffff16815260200183815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff1660018561258391906135c9565b63ffffffff16116125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090613673565b60405180910390fd5b6001846125d691906135c9565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161267c929190613693565b60405180910390a25050505050565b6000640100000000831082906126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce919061277e565b60405180910390fd5b5082905092915050565b610213806136bd83390190565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272857808201518184015260208101905061270d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612750826126ee565b61275a81856126f9565b935061276a81856020860161270a565b61277381612734565b840191505092915050565b600060208201905081810360008301526127988184612745565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d0826127a5565b9050919050565b6127e0816127c5565b81146127eb57600080fd5b50565b6000813590506127fd816127d7565b92915050565b6000819050919050565b61281681612803565b811461282157600080fd5b50565b6000813590506128338161280d565b92915050565b600080604083850312156128505761284f6127a0565b5b600061285e858286016127ee565b925050602061286f85828601612824565b9150509250929050565b60008115159050919050565b61288e81612879565b82525050565b60006020820190506128a96000830184612885565b92915050565b6128b881612803565b82525050565b60006020820190506128d360008301846128af565b92915050565b6000819050919050565b6128ec816128d9565b82525050565b600060208201905061290760008301846128e3565b92915050565b600080600060608486031215612926576129256127a0565b5b6000612934868287016127ee565b9350506020612945868287016127ee565b925050604061295686828701612824565b9150509250925092565b600060ff82169050919050565b61297681612960565b82525050565b6000602082019050612991600083018461296d565b92915050565b6000602082840312156129ad576129ac6127a0565b5b60006129bb848285016127ee565b91505092915050565b6129cd816127c5565b82525050565b60006020820190506129e860008301846129c4565b92915050565b600063ffffffff82169050919050565b612a07816129ee565b82525050565b6000602082019050612a2260008301846129fe565b92915050565b60008060008060808587031215612a4257612a416127a0565b5b6000612a50878288016127ee565b9450506020612a61878288016127ee565b9350506040612a7287828801612824565b9250506060612a83878288016127ee565b91505092959194509250565b612a9881612960565b8114612aa357600080fd5b50565b600081359050612ab581612a8f565b92915050565b612ac4816128d9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b60008060008060008060c08789031215612b0457612b036127a0565b5b6000612b1289828a016127ee565b9650506020612b2389828a01612824565b9550506040612b3489828a01612824565b9450506060612b4589828a01612aa6565b9350506080612b5689828a01612ad2565b92505060a0612b6789828a01612ad2565b9150509295509295509295565b60008060408385031215612b8b57612b8a6127a0565b5b6000612b99858286016127ee565b9250506020612baa858286016127ee565b9150509250929050565b612bbd816129ee565b8114612bc857600080fd5b50565b600081359050612bda81612bb4565b92915050565b60008060408385031215612bf757612bf66127a0565b5b6000612c05858286016127ee565b9250506020612c1685828601612bcb565b9150509250929050565b6000604082019050612c3560008301856129fe565b612c4260208301846128af565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c9057607f821691505b602082108103612ca357612ca2612c49565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cdf6020836126f9565b9150612cea82612ca9565b602082019050919050565b60006020820190508181036000830152612d0e81612cd2565b9050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d716021836126f9565b9150612d7c82612d15565b604082019050919050565b60006020820190508181036000830152612da081612d64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612de1826129ee565b9150612dec836129ee565b9250828203905063ffffffff811115612e0857612e07612da7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e48826129ee565b9150612e53836129ee565b925082612e6357612e62612e0e565b5b828204905092915050565b6000606082019050612e8360008301866129c4565b612e9060208301856129c4565b612e9d60408301846128af565b949350505050565b6000608082019050612eba60008301876128e3565b612ec760208301866128e3565b612ed460408301856128af565b612ee160608301846129c4565b95945050505050565b6000608082019050612eff60008301876128e3565b612f0c60208301866129c4565b612f1960408301856128af565b612f2660608301846128af565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f70600283612f2f565b9150612f7b82612f3a565b600282019050919050565b6000819050919050565b612fa1612f9c826128d9565b612f86565b82525050565b6000612fb282612f63565b9150612fbe8285612f90565b602082019150612fce8284612f90565b6020820191508190509392505050565b6000608082019050612ff360008301876128e3565b613000602083018661296d565b61300d60408301856128e3565b61301a60608301846128e3565b95945050505050565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b60006130596020836126f9565b915061306482613023565b602082019050919050565b600060208201905081810360008301526130888161304c565b9050919050565b600061309a82612803565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130cc576130cb612da7565b5b600182019050919050565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b600061310d601c836126f9565b9150613118826130d7565b602082019050919050565b6000602082019050818103600083015261313c81613100565b9050919050565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b60006131796020836126f9565b915061318482613143565b602082019050919050565b600060208201905081810360008301526131a88161316c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061320b6026836126f9565b9150613216826131af565b604082019050919050565b6000602082019050818103600083015261323a816131fe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061329d6024836126f9565b91506132a882613241565b604082019050919050565b600060208201905081810360008301526132cc81613290565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061332f6022836126f9565b915061333a826132d3565b604082019050919050565b6000602082019050818103600083015261335e81613322565b9050919050565b600061337082612803565b915061337b83612803565b925082820390508181111561339357613392612da7565b5b92915050565b60006133a482612803565b91506133af83612803565b92508282019050808211156133c7576133c6612da7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613403601b836126f9565b915061340e826133cd565b602082019050919050565b60006020820190508181036000830152613432816133f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134956025836126f9565b91506134a082613439565b604082019050919050565b600060208201905081810360008301526134c481613488565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135276023836126f9565b9150613532826134cb565b604082019050919050565b600060208201905081810360008301526135568161351a565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000613593601e836126f9565b915061359e8261355d565b602082019050919050565b600060208201905081810360008301526135c281613586565b9050919050565b60006135d4826129ee565b91506135df836129ee565b9250828201905063ffffffff8111156135fb576135fa612da7565b5b92915050565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b600061365d6030836126f9565b915061366882613601565b604082019050919050565b6000602082019050818103600083015261368c81613650565b9050919050565b60006040820190506136a860008301856128af565b6136b560208301846128af565b939250505056fe608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634fed921c14610030575b600080fd5b61004a6004803603810190610045919061016a565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610101826100d6565b9050919050565b610111816100f6565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b6000819050919050565b61014781610134565b811461015257600080fd5b50565b6000813590506101648161013e565b92915050565b600080600060608486031215610183576101826100d1565b5b60006101918682870161011f565b93505060206101a28682870161011f565b92505060406101b386828701610155565b915050925092509256fea2646970667358221220a1de25655a65bc4734d689f6fbfceb948fcf6c7a4139ca9f884761ec6253f19264736f6c6343000813003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208c8821ccf1f83bf06e6cc54ae3bb453aaa9e0bd7bbe472099b71b3a7f00b48a264736f6c63430008130033

Deployed Bytecode Sourcemap

162:9669:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2413:91:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4347:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2569:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1791:122:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4998:321:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3315:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5728:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2774:149:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3067:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1669:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3471:127:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1743:148:4;;;:::i;:::-;;5966:1247:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2205:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1092:87:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3179:296:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2248:95:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6449:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3811:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5280:255:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3907:1172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;363:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9396:96;;;:::i;:::-;;4049:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2007:117:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1530:70;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2046:244:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2413:91:1;2458:13;2491:5;2484:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2413:91;:::o;4347:169::-;4430:4;4447:39;4456:12;:10;:12::i;:::-;4470:7;4479:6;4447:8;:39::i;:::-;4504:4;4497:11;;4347:169;;;;:::o;2569:108::-;2630:7;2657:12;;2650:19;;2569:108;:::o;1791:122:6:-;1833:80;1791:122;:::o;4998:321:1:-;5104:4;5121:36;5131:6;5139:9;5150:6;5121:9;:36::i;:::-;5168:121;5177:6;5185:12;:10;:12::i;:::-;5199:89;5237:6;5199:89;;;;;;;;;;;;;;;;;:11;:19;5211:6;5199:19;;;;;;;;;;;;;;;:33;5219:12;:10;:12::i;:::-;5199:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;5168:8;:121::i;:::-;5307:4;5300:11;;4998:321;;;;;:::o;3315:91::-;3364:5;3389:9;;;;;;;;;;;3382:16;;3315:91;:::o;5728:218::-;5816:4;5833:83;5842:12;:10;:12::i;:::-;5856:7;5865:50;5904:10;5865:11;:25;5877:12;:10;:12::i;:::-;5865:25;;;;;;;;;;;;;;;:34;5891:7;5865:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5833:8;:83::i;:::-;5934:4;5927:11;;5728:218;;;;:::o;2774:149:6:-;2862:7;2894:10;:21;2905:9;2894:21;;;;;;;;;;;;;;;;;;;;;;;;;2887:28;;2774:149;;;:::o;3067:104::-;3131:32;3141:10;3153:9;3131;:32::i;:::-;3067:104;:::o;1669:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;3471:127:1:-;3545:7;3572:9;:18;3582:7;3572:18;;;;;;;;;;;;;;;;3565:25;;3471:127;;;:::o;1743:148:4:-;1323:12;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1850:1:::1;1813:40;;1834:6;;;;;;;;;;;1813:40;;;;;;;;;;;;1881:1;1864:6;;:19;;;;;;;;;;;;;;;;;;1743:148::o:0;5966:1247:6:-;6074:7;6121:12;6107:11;:26;6099:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;6184:19;6206:14;:23;6221:7;6206:23;;;;;;;;;;;;;;;;;;;;;;;;;6184:45;;6260:1;6244:12;:17;;;6240:58;;6285:1;6278:8;;;;;6240:58;6410:11;6358;:20;6370:7;6358:20;;;;;;;;;;;;;;;:38;6394:1;6379:12;:16;;;;:::i;:::-;6358:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;6354:147;;6445:11;:20;6457:7;6445:20;;;;;;;;;;;;;;;:38;6481:1;6466:12;:16;;;;:::i;:::-;6445:38;;;;;;;;;;;;;;;:44;;;6438:51;;;;;6354:147;6598:11;6562;:20;6574:7;6562:20;;;;;;;;;;;;;;;:23;6583:1;6562:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;6558:88;;;6633:1;6626:8;;;;;6558:88;6658:12;6685;6715:1;6700:12;:16;;;;:::i;:::-;6685:31;;6727:428;6742:5;6734:13;;:5;:13;;;6727:428;;;6764:13;6806:1;6797:5;6789;:13;;;;:::i;:::-;6788:19;;;;:::i;:::-;6780:5;:27;;;;:::i;:::-;6764:43;;6849:20;6872:11;:20;6884:7;6872:20;;;;;;;;;;;;;;;:28;6893:6;6872:28;;;;;;;;;;;;;;;6849:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6935:11;6919:2;:12;;;:27;;;6915:229;;6974:2;:8;;;6967:15;;;;;;;;;6915:229;7023:11;7008:2;:12;;;:26;;;7004:140;;;7063:6;7055:14;;7004:140;;;7127:1;7118:6;:10;;;;:::i;:::-;7110:18;;7004:140;6749:406;;6727:428;;;7172:11;:20;7184:7;7172:20;;;;;;;;;;;;;;;:27;7193:5;7172:27;;;;;;;;;;;;;;;:33;;;7165:40;;;;;5966:1247;;;;;:::o;2205:39::-;;;;;;;;;;;;;;;;;:::o;1092:87:4:-;1138:7;1165:6;;;;;;;;;;;1158:13;;1092:87;:::o;3179:296:6:-;1323:12:4;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3303:4:6::1;3287:20;;:14;;;;;;;;;;;:20;;::::0;3284:184:::1;;3331:1;3322:6;:10;3319:91;;;3351:4;3334:7;;:22;;;;;;;;;;;;;;;;;;3319:91;;;3388:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3380:7;;:20;;;;;;;;;;;;;;;;;;3319:91;3420:7;;;;;;;;;;;:11;;;3432:6;3440:9;3451:6;3420:38;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3284:184;3179:296:::0;;;;:::o;2248:95:1:-;2295:13;2328:7;2321:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2248:95;:::o;6449:269::-;6542:4;6559:129;6568:12;:10;:12::i;:::-;6582:7;6591:96;6630:15;6591:96;;;;;;;;;;;;;;;;;:11;:25;6603:12;:10;:12::i;:::-;6591:25;;;;;;;;;;;;;;;:34;6617:7;6591:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6559:8;:129::i;:::-;6706:4;6699:11;;6449:269;;;;:::o;3811:175::-;3897:4;3914:42;3924:12;:10;:12::i;:::-;3938:9;3949:6;3914:9;:42::i;:::-;3974:4;3967:11;;3811:175;;;;:::o;5280:255:6:-;5372:7;5397:19;5419:14;:23;5434:7;5419:23;;;;;;;;;;;;;;;;;;;;;;;;;5397:45;;5475:1;5460:12;:16;;;:67;;5526:1;5460:67;;;5479:11;:20;5491:7;5479:20;;;;;;;;;;;;;;;:38;5515:1;5500:12;:16;;;;:::i;:::-;5479:38;;;;;;;;;;;;;;;:44;;;5460:67;5453:74;;;5280:255;;;:::o;3907:1172::-;4100:23;1833:80;4229:6;:4;:6::i;:::-;4213:24;;;;;;4256:12;:10;:12::i;:::-;4295:4;4150:165;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4126:200;;;;;;4100:226;;4339:18;2053:71;4451:9;4479:5;4503:6;4384:140;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4360:175;;;;;;4339:196;;4548:14;4653:15;4687:10;4589:123;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4565:158;;;;;;4548:175;;4736:17;4756:26;4766:6;4774:1;4777;4780;4756:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4736:46;;4822:1;4801:23;;:9;:23;;;4793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4889:6;:17;4896:9;4889:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;4880:5;:28;4872:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4979:6;4960:15;:25;;4952:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5040:31;5050:9;5061;5040;:31::i;:::-;5033:38;;;;3907:1172;;;;;;:::o;363:26::-;;;;;;;;;;;;;:::o;9396:96::-;1323:12:4;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9470:14:6::1;;;;;;;;;;;9469:15;9452:14;;:32;;;;;;;;;;;;;;;;;;9396:96::o:0;4049:151:1:-;4138:7;4165:11;:18;4177:5;4165:18;;;;;;;;;;;;;;;:27;4184:7;4165:27;;;;;;;;;;;;;;;;4158:34;;4049:151;;;;:::o;2007:117:6:-;2053:71;2007:117;:::o;1530:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2046:244:4:-;1323:12;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2155:1:::1;2135:22;;:8;:22;;::::0;2127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2245:8;2216:38;;2237:6;;;;;;;;;;;2216:38;;;;;;;;;;;;2274:8;2265:6;;:17;;;;;;;;;;;;;;;;;;2046:244:::0;:::o;605:98:0:-;658:7;685:10;678:17;;605:98;:::o;8847:346:1:-;8966:1;8949:19;;:5;:19;;;8941:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9047:1;9028:21;;:7;:21;;;9020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9131:6;9101:11;:18;9113:5;9101:18;;;;;;;;;;;;;;;:27;9120:7;9101:27;;;;;;;;;;;;;;;:36;;;;9169:7;9153:32;;9162:5;9153:32;;;9178:6;9153:32;;;;;;:::i;:::-;;;;;;;;8847:346;;;:::o;502:274:6:-;601:42;617:6;625:9;636:6;601:15;:42::i;:::-;654:65;669:10;:18;680:6;669:18;;;;;;;;;;;;;;;;;;;;;;;;;689:10;:21;700:9;689:21;;;;;;;;;;;;;;;;;;;;;;;;;712:6;654:14;:65::i;:::-;730:7;;;;;;;;;;;:11;;;742:6;750:9;761:6;730:38;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;502:274;;;:::o;5593:166:5:-;5679:7;5712:1;5707;:6;;5715:12;5699:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5750:1;5746;:5;;;;:::i;:::-;5739:12;;5593:166;;;;;:::o;2766:179::-;2824:7;2844:9;2860:1;2856;:5;;;;:::i;:::-;2844:17;;2885:1;2880;:6;;2872:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2936:1;2929:8;;;2766:179;;;;:::o;8176:394:6:-;8267:23;8293:10;:21;8304:9;8293:21;;;;;;;;;;;;;;;;;;;;;;;;;8267:47;;8325:24;8352:20;8362:9;8352;:20::i;:::-;8325:47;;8408:9;8384:10;:21;8395:9;8384:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;8479:9;8435:54;;8462:15;8435:54;;8451:9;8435:54;;;;;;;;;;;;8502:60;8517:15;8534:9;8545:16;8502:14;:60::i;:::-;8256:314;;8176:394;;:::o;9500:153::-;9545:4;9562:15;9610:9;9599:20;;9638:7;9631:14;;;9500:153;:::o;7208:539:1:-;7332:1;7314:20;;:6;:20;;;7306:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7416:1;7395:23;;:9;:23;;;7387:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7471:47;7492:6;7500:9;7511:6;7471:20;:47::i;:::-;7551:71;7573:6;7551:71;;;;;;;;;;;;;;;;;:9;:17;7561:6;7551:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7531:9;:17;7541:6;7531:17;;;;;;;;;;;;;;;:91;;;;7656:32;7681:6;7656:9;:20;7666:9;7656:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7633:9;:20;7643:9;7633:20;;;;;;;;;;;;;;;:55;;;;7721:9;7704:35;;7713:6;7704:35;;;7732:6;7704:35;;;;;;:::i;:::-;;;;;;;;7208:539;;;:::o;7221:947:6:-;7327:6;7317:16;;:6;:16;;;;:30;;;;;7346:1;7337:6;:10;7317:30;7313:848;;;7386:1;7368:20;;:6;:20;;;7364:385;;7457:16;7476:14;:22;7491:6;7476:22;;;;;;;;;;;;;;;;;;;;;;;;;7457:41;;7517:17;7549:1;7537:9;:13;;;:60;;7596:1;7537:60;;;7553:11;:19;7565:6;7553:19;;;;;;;;;;;;;;;:34;7585:1;7573:9;:13;;;;:::i;:::-;7553:34;;;;;;;;;;;;;;;:40;;;7537:60;7517:80;;7616:17;7636:21;7650:6;7636:9;:13;;:21;;;;:::i;:::-;7616:41;;7676:57;7693:6;7701:9;7712;7723;7676:16;:57::i;:::-;7390:359;;;7364:385;7787:1;7769:20;;:6;:20;;;7765:385;;7858:16;7877:14;:22;7892:6;7877:22;;;;;;;;;;;;;;;;;;;;;;;;;7858:41;;7918:17;7950:1;7938:9;:13;;;:60;;7997:1;7938:60;;;7954:11;:19;7966:6;7954:19;;;;;;;;;;;;;;;:34;7986:1;7974:9;:13;;;;:::i;:::-;7954:34;;;;;;;;;;;;;;;:40;;;7938:60;7918:80;;8017:17;8037:21;8051:6;8037:9;:13;;:21;;;;:::i;:::-;8017:41;;8077:57;8094:6;8102:9;8113;8124;8077:16;:57::i;:::-;7791:359;;;7765:385;7313:848;7221:947;;;:::o;10226:92:1:-;;;;:::o;3228:158:5:-;3286:7;3319:1;3314;:6;;3306:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3377:1;3373;:5;;;;:::i;:::-;3366:12;;3228:158;;;;:::o;8585:805:6:-;8764:18;8785:70;8792:12;8785:70;;;;;;;;;;;;;;;;;:6;:70::i;:::-;8764:91;;8887:1;8872:12;:16;;;:85;;;;;8946:11;8892:65;;:11;:22;8904:9;8892:22;;;;;;;;;;;;;;;:40;8930:1;8915:12;:16;;;;:::i;:::-;8892:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;8872:85;8868:446;;;9023:8;8974:11;:22;8986:9;8974:22;;;;;;;;;;;;;;;:40;9012:1;8997:12;:16;;;;:::i;:::-;8974:40;;;;;;;;;;;;;;;:46;;:57;;;;8868:446;;;9103:33;;;;;;;;9114:11;9103:33;;;;;;9127:8;9103:33;;;9064:11;:22;9076:9;9064:22;;;;;;;;;;;;;;;:36;9087:12;9064:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9178:12;9159:31;;9174:1;9159:12;:16;;;;:::i;:::-;:31;;;9151:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;9301:1;9286:12;:16;;;;:::i;:::-;9258:14;:25;9273:9;9258:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;8868:446;9352:9;9331:51;;;9363:8;9373;9331:51;;;;;;;:::i;:::-;;;;;;;;8753:637;8585:805;;;;:::o;9661:161::-;9736:6;9767:5;9763:1;:9;9774:12;9755:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9812:1;9798:16;;9661:161;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;7:99:7:-;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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:77::-;3835:7;3864:5;3853:16;;3798:77;;;:::o;3881:118::-;3968:24;3986:5;3968:24;:::i;:::-;3963:3;3956:37;3881:118;;:::o;4005:222::-;4098:4;4136:2;4125:9;4121:18;4113:26;;4149:71;4217:1;4206:9;4202:17;4193:6;4149:71;:::i;:::-;4005:222;;;;:::o;4233:619::-;4310:6;4318;4326;4375:2;4363:9;4354:7;4350:23;4346:32;4343:119;;;4381:79;;:::i;:::-;4343:119;4501:1;4526:53;4571:7;4562:6;4551:9;4547:22;4526:53;:::i;:::-;4516:63;;4472:117;4628:2;4654:53;4699:7;4690:6;4679:9;4675:22;4654:53;:::i;:::-;4644:63;;4599:118;4756:2;4782:53;4827:7;4818:6;4807:9;4803:22;4782:53;:::i;:::-;4772:63;;4727:118;4233:619;;;;;:::o;4858:86::-;4893:7;4933:4;4926:5;4922:16;4911:27;;4858:86;;;:::o;4950:112::-;5033:22;5049:5;5033:22;:::i;:::-;5028:3;5021:35;4950:112;;:::o;5068:214::-;5157:4;5195:2;5184:9;5180:18;5172:26;;5208:67;5272:1;5261:9;5257:17;5248:6;5208:67;:::i;:::-;5068:214;;;;:::o;5288:329::-;5347:6;5396:2;5384:9;5375:7;5371:23;5367:32;5364:119;;;5402:79;;:::i;:::-;5364:119;5522:1;5547:53;5592:7;5583:6;5572:9;5568:22;5547:53;:::i;:::-;5537:63;;5493:117;5288:329;;;;:::o;5623:118::-;5710:24;5728:5;5710:24;:::i;:::-;5705:3;5698:37;5623:118;;:::o;5747:222::-;5840:4;5878:2;5867:9;5863:18;5855:26;;5891:71;5959:1;5948:9;5944:17;5935:6;5891:71;:::i;:::-;5747:222;;;;:::o;5975:93::-;6011:7;6051:10;6044:5;6040:22;6029:33;;5975:93;;;:::o;6074:115::-;6159:23;6176:5;6159:23;:::i;:::-;6154:3;6147:36;6074:115;;:::o;6195:218::-;6286:4;6324:2;6313:9;6309:18;6301:26;;6337:69;6403:1;6392:9;6388:17;6379:6;6337:69;:::i;:::-;6195:218;;;;:::o;6419:765::-;6505:6;6513;6521;6529;6578:3;6566:9;6557:7;6553:23;6549:33;6546:120;;;6585:79;;:::i;:::-;6546:120;6705:1;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6676:117;6832:2;6858:53;6903:7;6894:6;6883:9;6879:22;6858:53;:::i;:::-;6848:63;;6803:118;6960:2;6986:53;7031:7;7022:6;7011:9;7007:22;6986:53;:::i;:::-;6976:63;;6931:118;7088:2;7114:53;7159:7;7150:6;7139:9;7135:22;7114:53;:::i;:::-;7104:63;;7059:118;6419:765;;;;;;;:::o;7190:118::-;7261:22;7277:5;7261:22;:::i;:::-;7254:5;7251:33;7241:61;;7298:1;7295;7288:12;7241:61;7190:118;:::o;7314:135::-;7358:5;7396:6;7383:20;7374:29;;7412:31;7437:5;7412:31;:::i;:::-;7314:135;;;;:::o;7455:122::-;7528:24;7546:5;7528:24;:::i;:::-;7521:5;7518:35;7508:63;;7567:1;7564;7557:12;7508:63;7455:122;:::o;7583:139::-;7629:5;7667:6;7654:20;7645:29;;7683:33;7710:5;7683:33;:::i;:::-;7583:139;;;;:::o;7728:1053::-;7830:6;7838;7846;7854;7862;7870;7919:3;7907:9;7898:7;7894:23;7890:33;7887:120;;;7926:79;;:::i;:::-;7887:120;8046:1;8071:53;8116:7;8107:6;8096:9;8092:22;8071:53;:::i;:::-;8061:63;;8017:117;8173:2;8199:53;8244:7;8235:6;8224:9;8220:22;8199:53;:::i;:::-;8189:63;;8144:118;8301:2;8327:53;8372:7;8363:6;8352:9;8348:22;8327:53;:::i;:::-;8317:63;;8272:118;8429:2;8455:51;8498:7;8489:6;8478:9;8474:22;8455:51;:::i;:::-;8445:61;;8400:116;8555:3;8582:53;8627:7;8618:6;8607:9;8603:22;8582:53;:::i;:::-;8572:63;;8526:119;8684:3;8711:53;8756:7;8747:6;8736:9;8732:22;8711:53;:::i;:::-;8701:63;;8655:119;7728:1053;;;;;;;;:::o;8787:474::-;8855:6;8863;8912:2;8900:9;8891:7;8887:23;8883:32;8880:119;;;8918:79;;:::i;:::-;8880:119;9038:1;9063:53;9108:7;9099:6;9088:9;9084:22;9063:53;:::i;:::-;9053:63;;9009:117;9165:2;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9136:118;8787:474;;;;;:::o;9267:120::-;9339:23;9356:5;9339:23;:::i;:::-;9332:5;9329:34;9319:62;;9377:1;9374;9367:12;9319:62;9267:120;:::o;9393:137::-;9438:5;9476:6;9463:20;9454:29;;9492:32;9518:5;9492:32;:::i;:::-;9393:137;;;;:::o;9536:472::-;9603:6;9611;9660:2;9648:9;9639:7;9635:23;9631:32;9628:119;;;9666:79;;:::i;:::-;9628:119;9786:1;9811:53;9856:7;9847:6;9836:9;9832:22;9811:53;:::i;:::-;9801:63;;9757:117;9913:2;9939:52;9983:7;9974:6;9963:9;9959:22;9939:52;:::i;:::-;9929:62;;9884:117;9536:472;;;;;:::o;10014:328::-;10133:4;10171:2;10160:9;10156:18;10148:26;;10184:69;10250:1;10239:9;10235:17;10226:6;10184:69;:::i;:::-;10263:72;10331:2;10320:9;10316:18;10307:6;10263:72;:::i;:::-;10014:328;;;;;:::o;10348:180::-;10396:77;10393:1;10386:88;10493:4;10490:1;10483:15;10517:4;10514:1;10507:15;10534:320;10578:6;10615:1;10609:4;10605:12;10595:22;;10662:1;10656:4;10652:12;10683:18;10673:81;;10739:4;10731:6;10727:17;10717:27;;10673:81;10801:2;10793:6;10790:14;10770:18;10767:38;10764:84;;10820:18;;:::i;:::-;10764:84;10585:269;10534:320;;;:::o;10860:182::-;11000:34;10996:1;10988:6;10984:14;10977:58;10860:182;:::o;11048:366::-;11190:3;11211:67;11275:2;11270:3;11211:67;:::i;:::-;11204:74;;11287:93;11376:3;11287:93;:::i;:::-;11405:2;11400:3;11396:12;11389:19;;11048:366;;;:::o;11420:419::-;11586:4;11624:2;11613:9;11609:18;11601:26;;11673:9;11667:4;11663:20;11659:1;11648:9;11644:17;11637:47;11701:131;11827:4;11701:131;:::i;:::-;11693:139;;11420:419;;;:::o;11845:220::-;11985:34;11981:1;11973:6;11969:14;11962:58;12054:3;12049:2;12041:6;12037:15;12030:28;11845:220;:::o;12071:366::-;12213:3;12234:67;12298:2;12293:3;12234:67;:::i;:::-;12227:74;;12310:93;12399:3;12310:93;:::i;:::-;12428:2;12423:3;12419:12;12412:19;;12071:366;;;:::o;12443:419::-;12609:4;12647:2;12636:9;12632:18;12624:26;;12696:9;12690:4;12686:20;12682:1;12671:9;12667:17;12660:47;12724:131;12850:4;12724:131;:::i;:::-;12716:139;;12443:419;;;:::o;12868:180::-;12916:77;12913:1;12906:88;13013:4;13010:1;13003:15;13037:4;13034:1;13027:15;13054:200;13093:4;13113:19;13130:1;13113:19;:::i;:::-;13108:24;;13146:19;13163:1;13146:19;:::i;:::-;13141:24;;13189:1;13186;13182:9;13174:17;;13213:10;13207:4;13204:20;13201:46;;;13227:18;;:::i;:::-;13201:46;13054:200;;;;:::o;13260:180::-;13308:77;13305:1;13298:88;13405:4;13402:1;13395:15;13429:4;13426:1;13419:15;13446:182;13485:1;13502:19;13519:1;13502:19;:::i;:::-;13497:24;;13535:19;13552:1;13535:19;:::i;:::-;13530:24;;13573:1;13563:35;;13578:18;;:::i;:::-;13563:35;13620:1;13617;13613:9;13608:14;;13446:182;;;;:::o;13634:442::-;13783:4;13821:2;13810:9;13806:18;13798:26;;13834:71;13902:1;13891:9;13887:17;13878:6;13834:71;:::i;:::-;13915:72;13983:2;13972:9;13968:18;13959:6;13915:72;:::i;:::-;13997;14065:2;14054:9;14050:18;14041:6;13997:72;:::i;:::-;13634:442;;;;;;:::o;14082:553::-;14259:4;14297:3;14286:9;14282:19;14274:27;;14311:71;14379:1;14368:9;14364:17;14355:6;14311:71;:::i;:::-;14392:72;14460:2;14449:9;14445:18;14436:6;14392:72;:::i;:::-;14474;14542:2;14531:9;14527:18;14518:6;14474:72;:::i;:::-;14556;14624:2;14613:9;14609:18;14600:6;14556:72;:::i;:::-;14082:553;;;;;;;:::o;14641:::-;14818:4;14856:3;14845:9;14841:19;14833:27;;14870:71;14938:1;14927:9;14923:17;14914:6;14870:71;:::i;:::-;14951:72;15019:2;15008:9;15004:18;14995:6;14951:72;:::i;:::-;15033;15101:2;15090:9;15086:18;15077:6;15033:72;:::i;:::-;15115;15183:2;15172:9;15168:18;15159:6;15115:72;:::i;:::-;14641:553;;;;;;;:::o;15200:148::-;15302:11;15339:3;15324:18;;15200:148;;;;:::o;15354:214::-;15494:66;15490:1;15482:6;15478:14;15471:90;15354:214;:::o;15574:400::-;15734:3;15755:84;15837:1;15832:3;15755:84;:::i;:::-;15748:91;;15848:93;15937:3;15848:93;:::i;:::-;15966:1;15961:3;15957:11;15950:18;;15574:400;;;:::o;15980:79::-;16019:7;16048:5;16037:16;;15980:79;;;:::o;16065:157::-;16170:45;16190:24;16208:5;16190:24;:::i;:::-;16170:45;:::i;:::-;16165:3;16158:58;16065:157;;:::o;16228:663::-;16469:3;16491:148;16635:3;16491:148;:::i;:::-;16484:155;;16649:75;16720:3;16711:6;16649:75;:::i;:::-;16749:2;16744:3;16740:12;16733:19;;16762:75;16833:3;16824:6;16762:75;:::i;:::-;16862:2;16857:3;16853:12;16846:19;;16882:3;16875:10;;16228:663;;;;;:::o;16897:545::-;17070:4;17108:3;17097:9;17093:19;17085:27;;17122:71;17190:1;17179:9;17175:17;17166:6;17122:71;:::i;:::-;17203:68;17267:2;17256:9;17252:18;17243:6;17203:68;:::i;:::-;17281:72;17349:2;17338:9;17334:18;17325:6;17281:72;:::i;:::-;17363;17431:2;17420:9;17416:18;17407:6;17363:72;:::i;:::-;16897:545;;;;;;;:::o;17448:182::-;17588:34;17584:1;17576:6;17572:14;17565:58;17448:182;:::o;17636:366::-;17778:3;17799:67;17863:2;17858:3;17799:67;:::i;:::-;17792:74;;17875:93;17964:3;17875:93;:::i;:::-;17993:2;17988:3;17984:12;17977:19;;17636:366;;;:::o;18008:419::-;18174:4;18212:2;18201:9;18197:18;18189:26;;18261:9;18255:4;18251:20;18247:1;18236:9;18232:17;18225:47;18289:131;18415:4;18289:131;:::i;:::-;18281:139;;18008:419;;;:::o;18433:233::-;18472:3;18495:24;18513:5;18495:24;:::i;:::-;18486:33;;18541:66;18534:5;18531:77;18528:103;;18611:18;;:::i;:::-;18528:103;18658:1;18651:5;18647:13;18640:20;;18433:233;;;:::o;18672:178::-;18812:30;18808:1;18800:6;18796:14;18789:54;18672:178;:::o;18856:366::-;18998:3;19019:67;19083:2;19078:3;19019:67;:::i;:::-;19012:74;;19095:93;19184:3;19095:93;:::i;:::-;19213:2;19208:3;19204:12;19197:19;;18856:366;;;:::o;19228:419::-;19394:4;19432:2;19421:9;19417:18;19409:26;;19481:9;19475:4;19471:20;19467:1;19456:9;19452:17;19445:47;19509:131;19635:4;19509:131;:::i;:::-;19501:139;;19228:419;;;:::o;19653:182::-;19793:34;19789:1;19781:6;19777:14;19770:58;19653:182;:::o;19841:366::-;19983:3;20004:67;20068:2;20063:3;20004:67;:::i;:::-;19997:74;;20080:93;20169:3;20080:93;:::i;:::-;20198:2;20193:3;20189:12;20182:19;;19841:366;;;:::o;20213:419::-;20379:4;20417:2;20406:9;20402:18;20394:26;;20466:9;20460:4;20456:20;20452:1;20441:9;20437:17;20430:47;20494:131;20620:4;20494:131;:::i;:::-;20486:139;;20213:419;;;:::o;20638:225::-;20778:34;20774:1;20766:6;20762:14;20755:58;20847:8;20842:2;20834:6;20830:15;20823:33;20638:225;:::o;20869:366::-;21011:3;21032:67;21096:2;21091:3;21032:67;:::i;:::-;21025:74;;21108:93;21197:3;21108:93;:::i;:::-;21226:2;21221:3;21217:12;21210:19;;20869:366;;;:::o;21241:419::-;21407:4;21445:2;21434:9;21430:18;21422:26;;21494:9;21488:4;21484:20;21480:1;21469:9;21465:17;21458:47;21522:131;21648:4;21522:131;:::i;:::-;21514:139;;21241:419;;;:::o;21666:223::-;21806:34;21802:1;21794:6;21790:14;21783:58;21875:6;21870:2;21862:6;21858:15;21851:31;21666:223;:::o;21895:366::-;22037:3;22058:67;22122:2;22117:3;22058:67;:::i;:::-;22051:74;;22134:93;22223:3;22134:93;:::i;:::-;22252:2;22247:3;22243:12;22236:19;;21895:366;;;:::o;22267:419::-;22433:4;22471:2;22460:9;22456:18;22448:26;;22520:9;22514:4;22510:20;22506:1;22495:9;22491:17;22484:47;22548:131;22674:4;22548:131;:::i;:::-;22540:139;;22267:419;;;:::o;22692:221::-;22832:34;22828:1;22820:6;22816:14;22809:58;22901:4;22896:2;22888:6;22884:15;22877:29;22692:221;:::o;22919:366::-;23061:3;23082:67;23146:2;23141:3;23082:67;:::i;:::-;23075:74;;23158:93;23247:3;23158:93;:::i;:::-;23276:2;23271:3;23267:12;23260:19;;22919:366;;;:::o;23291:419::-;23457:4;23495:2;23484:9;23480:18;23472:26;;23544:9;23538:4;23534:20;23530:1;23519:9;23515:17;23508:47;23572:131;23698:4;23572:131;:::i;:::-;23564:139;;23291:419;;;:::o;23716:194::-;23756:4;23776:20;23794:1;23776:20;:::i;:::-;23771:25;;23810:20;23828:1;23810:20;:::i;:::-;23805:25;;23854:1;23851;23847:9;23839:17;;23878:1;23872:4;23869:11;23866:37;;;23883:18;;:::i;:::-;23866:37;23716:194;;;;:::o;23916:191::-;23956:3;23975:20;23993:1;23975:20;:::i;:::-;23970:25;;24009:20;24027:1;24009:20;:::i;:::-;24004:25;;24052:1;24049;24045:9;24038:16;;24073:3;24070:1;24067:10;24064:36;;;24080:18;;:::i;:::-;24064:36;23916:191;;;;:::o;24113:177::-;24253:29;24249:1;24241:6;24237:14;24230:53;24113:177;:::o;24296:366::-;24438:3;24459:67;24523:2;24518:3;24459:67;:::i;:::-;24452:74;;24535:93;24624:3;24535:93;:::i;:::-;24653:2;24648:3;24644:12;24637:19;;24296:366;;;:::o;24668:419::-;24834:4;24872:2;24861:9;24857:18;24849:26;;24921:9;24915:4;24911:20;24907:1;24896:9;24892:17;24885:47;24949:131;25075:4;24949:131;:::i;:::-;24941:139;;24668:419;;;:::o;25093:224::-;25233:34;25229:1;25221:6;25217:14;25210:58;25302:7;25297:2;25289:6;25285:15;25278:32;25093:224;:::o;25323:366::-;25465:3;25486:67;25550:2;25545:3;25486:67;:::i;:::-;25479:74;;25562:93;25651:3;25562:93;:::i;:::-;25680:2;25675:3;25671:12;25664:19;;25323:366;;;:::o;25695:419::-;25861:4;25899:2;25888:9;25884:18;25876:26;;25948:9;25942:4;25938:20;25934:1;25923:9;25919:17;25912:47;25976:131;26102:4;25976:131;:::i;:::-;25968:139;;25695:419;;;:::o;26120:222::-;26260:34;26256:1;26248:6;26244:14;26237:58;26329:5;26324:2;26316:6;26312:15;26305:30;26120:222;:::o;26348:366::-;26490:3;26511:67;26575:2;26570:3;26511:67;:::i;:::-;26504:74;;26587:93;26676:3;26587:93;:::i;:::-;26705:2;26700:3;26696:12;26689:19;;26348:366;;;:::o;26720:419::-;26886:4;26924:2;26913:9;26909:18;26901:26;;26973:9;26967:4;26963:20;26959:1;26948:9;26944:17;26937:47;27001:131;27127:4;27001:131;:::i;:::-;26993:139;;26720:419;;;:::o;27145:180::-;27285:32;27281:1;27273:6;27269:14;27262:56;27145:180;:::o;27331:366::-;27473:3;27494:67;27558:2;27553:3;27494:67;:::i;:::-;27487:74;;27570:93;27659:3;27570:93;:::i;:::-;27688:2;27683:3;27679:12;27672:19;;27331:366;;;:::o;27703:419::-;27869:4;27907:2;27896:9;27892:18;27884:26;;27956:9;27950:4;27946:20;27942:1;27931:9;27927:17;27920:47;27984:131;28110:4;27984:131;:::i;:::-;27976:139;;27703:419;;;:::o;28128:197::-;28167:3;28186:19;28203:1;28186:19;:::i;:::-;28181:24;;28219:19;28236:1;28219:19;:::i;:::-;28214:24;;28261:1;28258;28254:9;28247:16;;28284:10;28279:3;28276:19;28273:45;;;28298:18;;:::i;:::-;28273:45;28128:197;;;;:::o;28331:235::-;28471:34;28467:1;28459:6;28455:14;28448:58;28540:18;28535:2;28527:6;28523:15;28516:43;28331:235;:::o;28572:366::-;28714:3;28735:67;28799:2;28794:3;28735:67;:::i;:::-;28728:74;;28811:93;28900:3;28811:93;:::i;:::-;28929:2;28924:3;28920:12;28913:19;;28572:366;;;:::o;28944:419::-;29110:4;29148:2;29137:9;29133:18;29125:26;;29197:9;29191:4;29187:20;29183:1;29172:9;29168:17;29161:47;29225:131;29351:4;29225:131;:::i;:::-;29217:139;;28944:419;;;:::o;29369:332::-;29490:4;29528:2;29517:9;29513:18;29505:26;;29541:71;29609:1;29598:9;29594:17;29585:6;29541:71;:::i;:::-;29622:72;29690:2;29679:9;29675:18;29666:6;29622:72;:::i;:::-;29369:332;;;;;:::o

Swarm Source

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