ETH Price: $2,937.79 (-0.34%)
 

Overview

Max Total Supply

1,200,000,000 CRAPPY

Holders

449,603 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (-36.20%)

Onchain Market Cap

$3,912.00

Circulating Supply Market Cap

$3,906.16

Other Info

Token Contract (WITH 18 Decimals)

Balance
2.23 CRAPPY

Value
$0.00 ( ~0 ETH) [0.0000%]
0x036f1e40bd41595e30737b23bb3526420b1d11f9
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The idea envisions escaping the grind by holding majestic pigeon coins, quitting a job after a 100x win in a Crappy Bird game, and joining the $CRAPPY Army, a community built around this unique concept.

Market

Volume (24H):$39.61
Market Capitalization:$3,906.16
Circulating Supply:1,197,649,942.00 CRAPPY
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
CrappyBird

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-10-22
*/

// File: @openzeppelin/[email protected]/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/[email protected]/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/[email protected]/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

// File: a.sol


pragma solidity ^0.8.21;

// Import specific versions of OpenZeppelin Contracts



/**
 * @title Custom ERC20 Token with Phased Trading
 * @dev ERC20 token that includes renounceable ownership, airdrop functionality,
 *  phased trading control, and max token per wallet limits.
 */
contract CrappyBird is ERC20, Ownable {
    uint256 private constant _initialSupply = 1_200_000_000 * 10 ** 18;

    enum TradingPhase { Phase1, Phase2, Phase3 }
    TradingPhase public tradingPhase = TradingPhase.Phase1;

    uint256 public maxTokenPerWalletPercent = 50; // Default is 0.5%

        mapping(address => bool) public phase1Whitelist;
    mapping(address => bool) public phase2Whitelist;
    mapping(address => bool) public isMaxTokenExempt;
    mapping(address => bool) public automatedMarketMakerPairs;

    // Event declarations
    
    event AddedToPhase1Whitelist(address indexed account);
    event RemovedFromPhase1Whitelist(address indexed account);
    event AddedToPhase2Whitelist(address indexed account);
    event RemovedFromPhase2Whitelist(address indexed account);
    event TradingPhaseAdvanced(uint8 newPhase);
    event MaxTokenPerWalletPercentSet(uint256 percent);
    event MaxTokenExemptSet(address indexed account, bool exempt);
    event AutomatedMarketMakerPairSet(address indexed pair, bool value);
    event Airdrop(address indexed recipient, uint256 amount);

    /**
     * @dev Constructor that mints initial supply to the specified address.
     * @param initialHolder Address to receive the initial token supply.
     */
    constructor(address initialHolder) ERC20("CrappyBird", "CRAPPY") {
        _mint(initialHolder, _initialSupply);
        isMaxTokenExempt[initialHolder] = true;
    }

    /**
     * @dev Airdrops tokens to multiple addresses.
     * @param recipients Array of recipient addresses.
     * @param amounts Array of token amounts corresponding to each recipient.
     */
    function airdrop(address[] calldata recipients, uint256[] calldata amounts) external onlyOwner {
        require(recipients.length == amounts.length, "CrappyBird: Mismatched arrays");
        for (uint256 i = 0; i < recipients.length; i++) {
            _transfer(_msgSender(), recipients[i], amounts[i]);
            emit Airdrop(recipients[i], amounts[i]);
        }
    }

   

    /**
     * @dev Adds an address to the Phase1 whitelist.
     * @param account Address to whitelist.
     */
    function addToPhase1Whitelist(address account) external onlyOwner {
        phase1Whitelist[account] = true;
        isMaxTokenExempt[account] = true;
        emit AddedToPhase1Whitelist(account);
    }

    /**
     * @dev Removes an address from the Phase1 whitelist.
     * @param account Address to remove from whitelist.
     */
    function removeFromPhase1Whitelist(address account) external onlyOwner {
        phase1Whitelist[account] = false;
        isMaxTokenExempt[account] = false;
        emit RemovedFromPhase1Whitelist(account);
    }

    /**
     * @dev Adds multiple addresses to the Phase1 whitelist.
     * @param accounts Array of addresses to whitelist.
     */
    function addMultipleToPhase1Whitelist(address[] calldata accounts) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            phase1Whitelist[accounts[i]] = true;
            isMaxTokenExempt[accounts[i]] = true;
            emit AddedToPhase1Whitelist(accounts[i]);
        }
    }

    /**
     * @dev Removes multiple addresses from the Phase1 whitelist.
     * @param accounts Array of addresses to remove from whitelist.
     */
    function removeMultipleFromPhase1Whitelist(address[] calldata accounts) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            phase1Whitelist[accounts[i]] = false;
            isMaxTokenExempt[accounts[i]] = false;
            emit RemovedFromPhase1Whitelist(accounts[i]);
        }
    }

    /**
     * @dev Adds an address to the Phase2 whitelist.
     * @param account Address to whitelist.
     */
    function addToPhase2Whitelist(address account) external onlyOwner {
        phase2Whitelist[account] = true;
        emit AddedToPhase2Whitelist(account);
    }

    /**
     * @dev Removes an address from the Phase2 whitelist.
     * @param account Address to remove from whitelist.
     */
    function removeFromPhase2Whitelist(address account) external onlyOwner {
        phase2Whitelist[account] = false;
        emit RemovedFromPhase2Whitelist(account);
    }

    /**
     * @dev Adds multiple addresses to the Phase2 whitelist.
     * @param accounts Array of addresses to whitelist.
     */
    function addMultipleToPhase2Whitelist(address[] calldata accounts) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            phase2Whitelist[accounts[i]] = true;
            emit AddedToPhase2Whitelist(accounts[i]);
        }
    }

    /**
     * @dev Removes multiple addresses from the Phase2 whitelist.
     * @param accounts Array of addresses to remove from whitelist.
     */
    function removeMultipleFromPhase2Whitelist(address[] calldata accounts) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            phase2Whitelist[accounts[i]] = false;
            emit RemovedFromPhase2Whitelist(accounts[i]);
        }
    }

    /**
     * @dev Moves the contract to Phase2.
     */
    function enterPhase2() external onlyOwner {
        require(tradingPhase == TradingPhase.Phase1, "CrappyBird: Can only move from Phase1 to Phase2");
        tradingPhase = TradingPhase.Phase2;
        emit TradingPhaseAdvanced(uint8(tradingPhase));
    }

    /**
     * @dev Moves the contract to Phase3.
     */
    function enterPhase3() external onlyOwner {
        require(tradingPhase == TradingPhase.Phase2, "CrappyBird: Can only move from Phase2 to Phase3");
        tradingPhase = TradingPhase.Phase3;
        emit TradingPhaseAdvanced(uint8(tradingPhase));
    }

    /**
     * @dev Sets the maximum token percentage per wallet.
     * @param percent Maximum percentage (in basis points, where 10000 = 100%).
     */
    function setMaxTokenPerWalletPercent(uint256 percent) external onlyOwner {
        require(percent >= 1 && percent <= 10000, "CrappyBird: Invalid percentage");
        maxTokenPerWalletPercent = percent;
        emit MaxTokenPerWalletPercentSet(percent);
    }

    /**
     * @dev Exempts or unexempts an address from the max token per wallet limit.
     * @param account Address to exempt or unexempt.
     * @param exempt Boolean indicating exemption status.
     */
    function setMaxTokenExempt(address account, bool exempt) public onlyOwner {
        isMaxTokenExempt[account] = exempt;
        emit MaxTokenExemptSet(account, exempt);
    }

    /**
     * @dev Sets an address as an automated market maker pair (e.g., Uniswap pair).
     * @param pair Address of the pair.
     * @param value Boolean indicating if it's a pair.
     */
    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != address(0), "CrappyBird: Pair is zero address");
        automatedMarketMakerPairs[pair] = value;
        isMaxTokenExempt[pair] = value;
        emit AutomatedMarketMakerPairSet(pair, value);
    }

     /**
     * @dev Overrides the _beforeTokenTransfer hook to enforce custom rules.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override(ERC20) {
        super._beforeTokenTransfer(from, to, amount);

       

        if (tradingPhase == TradingPhase.Phase1) {
            _handlePhase1Transfer(from, to, amount);
        } else if (tradingPhase == TradingPhase.Phase2) {
            _handlePhase2Transfer(from, to, amount);
        } else if (tradingPhase == TradingPhase.Phase3) {
            _handlePhase3Transfer(from, to, amount);
        } else {
            revert("CrappyBird: Invalid trading phase");
        }
    }

    /**
     * @dev Handles transfers during Phase1.
     */
    function _handlePhase1Transfer(address from, address to, uint256) private view {
        if (from == owner() || from == address(0)) {
            return;
        }

        if (automatedMarketMakerPairs[from] && phase1Whitelist[to]) {
            return;
        }

        if (phase1Whitelist[from]) {
            revert("CrappyBird: Whitelisted addresses cannot transfer tokens in Phase1");
        }

        revert("CrappyBird: Trading not enabled in Phase1");
    }

    /**
     * @dev Handles transfers during Phase2.
     */
    function _handlePhase2Transfer(address from, address to, uint256 amount) private view {
        if (from == owner() || from == address(0)) {
            return;
        }

        if (automatedMarketMakerPairs[from] && (phase1Whitelist[to] || phase2Whitelist[to])) {
            if (phase2Whitelist[to] && !isMaxTokenExempt[to]) {
                uint256 maxTokens = totalSupply() * maxTokenPerWalletPercent / 10000;
                require(balanceOf(to) + amount <= maxTokens, "CrappyBird: Exceeds max tokens per wallet");
            }
            return;
        }

        if (phase1Whitelist[from] || phase2Whitelist[from]) {
            revert("CrappyBird: Whitelisted addresses cannot transfer tokens in Phase2");
        }

        revert("CrappyBird: Trading not enabled in Phase2");
    }

    /**
     * @dev Handles transfers during Phase3.
     */
    function _handlePhase3Transfer(address, address to, uint256 amount) private view {
        if (to != address(0) && !isMaxTokenExempt[to]) {
            uint256 maxTokens = totalSupply() * maxTokenPerWalletPercent / 10000;
            require(balanceOf(to) + amount <= maxTokens, "CrappyBird: Exceeds max tokens per wallet");
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"initialHolder","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AddedToPhase1Whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AddedToPhase2Whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"MaxTokenExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxTokenPerWalletPercentSet","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":"account","type":"address"}],"name":"RemovedFromPhase1Whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RemovedFromPhase2Whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"newPhase","type":"uint8"}],"name":"TradingPhaseAdvanced","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":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addMultipleToPhase1Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addMultipleToPhase2Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToPhase1Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToPhase2Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","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":[],"name":"enterPhase2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enterPhase3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxTokenExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenPerWalletPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"phase1Whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"phase2Whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromPhase1Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromPhase2Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeMultipleFromPhase1Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeMultipleFromPhase2Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setMaxTokenExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxTokenPerWalletPercent","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":[],"name":"tradingPhase","outputs":[{"internalType":"enum CrappyBird.TradingPhase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040525f600560146101000a81548160ff021916908360028111156200002c576200002b62000c89565b5b0217905550603260065534801562000042575f80fd5b5060405162004f7338038062004f73833981810160405281019062000068919062000d1b565b6040518060400160405280600a81526020017f43726170707942697264000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f43524150505900000000000000000000000000000000000000000000000000008152508160039081620000e5919062000faf565b508060049081620000f7919062000faf565b5050506200011a6200010e6200019460201b60201c565b6200019b60201b60201c565b62000138816b03e09de2596099e2b00000006200025e60201b60201c565b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505062001616565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c690620010f1565b60405180910390fd5b620002e25f8383620003c360201b60201c565b8060025f828254620002f591906200113e565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003a4919062001189565b60405180910390a3620003bf5f83836200052960201b60201c565b5050565b620003d68383836200052e60201b60201c565b5f6002811115620003ec57620003eb62000c89565b5b600560149054906101000a900460ff16600281111562000411576200041062000c89565b5b0362000430576200042a8383836200053360201b60201c565b62000524565b6001600281111562000447576200044662000c89565b5b600560149054906101000a900460ff1660028111156200046c576200046b62000c89565b5b036200048b57620004858383836200071e60201b60201c565b62000523565b600280811115620004a157620004a062000c89565b5b600560149054906101000a900460ff166002811115620004c657620004c562000c89565b5b03620004e557620004df83838362000aee60201b60201c565b62000522565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005199062001218565b60405180910390fd5b5b5b505050565b505050565b505050565b6200054362000c1360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620005a857505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6200071957600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156200064a575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b620007195760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615620006dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d390620012d2565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007109062001366565b60405180910390fd5b505050565b6200072e62000c1360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806200079357505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b62000ae957600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801562000887575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168062000886575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b5b15620009cd5760085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156200092b575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15620009c7575f6127106006546200094862000c3b60201b60201c565b62000954919062001386565b620009609190620013fd565b90508082620009758562000c4460201b60201c565b6200098191906200113e565b1115620009c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bc90620014a8565b60405180910390fd5b505b62000ae9565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168062000a69575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1562000aac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aa39062001562565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae090620015f6565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801562000b72575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1562000c0e575f61271060065462000b8f62000c3b60201b60201c565b62000b9b919062001386565b62000ba79190620013fd565b9050808262000bbc8562000c4460201b60201c565b62000bc891906200113e565b111562000c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0390620014a8565b60405180910390fd5b505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f600254905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ce58262000cba565b9050919050565b62000cf78162000cd9565b811462000d02575f80fd5b50565b5f8151905062000d158162000cec565b92915050565b5f6020828403121562000d335762000d3262000cb6565b5b5f62000d428482850162000d05565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000dc757607f821691505b60208210810362000ddd5762000ddc62000d82565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000e417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e04565b62000e4d868362000e04565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000e9762000e9162000e8b8462000e65565b62000e6e565b62000e65565b9050919050565b5f819050919050565b62000eb28362000e77565b62000eca62000ec18262000e9e565b84845462000e10565b825550505050565b5f90565b62000ee062000ed2565b62000eed81848462000ea7565b505050565b5b8181101562000f145762000f085f8262000ed6565b60018101905062000ef3565b5050565b601f82111562000f635762000f2d8162000de3565b62000f388462000df5565b8101602085101562000f48578190505b62000f6062000f578562000df5565b83018262000ef2565b50505b505050565b5f82821c905092915050565b5f62000f855f198460080262000f68565b1980831691505092915050565b5f62000f9f838362000f74565b9150826002028217905092915050565b62000fba8262000d4b565b67ffffffffffffffff81111562000fd65762000fd562000d55565b5b62000fe2825462000daf565b62000fef82828562000f18565b5f60209050601f83116001811462001025575f841562001010578287015190505b6200101c858262000f92565b8655506200108b565b601f198416620010358662000de3565b5f5b828110156200105e5784890151825560018201915060208501945060208101905062001037565b868310156200107e57848901516200107a601f89168262000f74565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010d9601f8362001093565b9150620010e682620010a3565b602082019050919050565b5f6020820190508181035f8301526200110a81620010cb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200114a8262000e65565b9150620011578362000e65565b925082820190508082111562001172576200117162001111565b5b92915050565b620011838162000e65565b82525050565b5f6020820190506200119e5f83018462001178565b92915050565b7f437261707079426972643a20496e76616c69642074726164696e6720706861735f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200120060218362001093565b91506200120d82620011a4565b604082019050919050565b5f6020820190508181035f8301526200123181620011f2565b9050919050565b7f437261707079426972643a2057686974656c69737465642061646472657373655f8201527f732063616e6e6f74207472616e7366657220746f6b656e7320696e205068617360208201527f6531000000000000000000000000000000000000000000000000000000000000604082015250565b5f620012ba60428362001093565b9150620012c78262001238565b606082019050919050565b5f6020820190508181035f830152620012eb81620012ac565b9050919050565b7f437261707079426972643a2054726164696e67206e6f7420656e61626c6564205f8201527f696e205068617365310000000000000000000000000000000000000000000000602082015250565b5f6200134e60298362001093565b91506200135b82620012f2565b604082019050919050565b5f6020820190508181035f8301526200137f8162001340565b9050919050565b5f620013928262000e65565b91506200139f8362000e65565b9250828202620013af8162000e65565b91508282048414831517620013c957620013c862001111565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620014098262000e65565b9150620014168362000e65565b925082620014295762001428620013d0565b5b828204905092915050565b7f437261707079426972643a2045786365656473206d617820746f6b656e7320705f8201527f65722077616c6c65740000000000000000000000000000000000000000000000602082015250565b5f6200149060298362001093565b91506200149d8262001434565b604082019050919050565b5f6020820190508181035f830152620014c18162001482565b9050919050565b7f437261707079426972643a2057686974656c69737465642061646472657373655f8201527f732063616e6e6f74207472616e7366657220746f6b656e7320696e205068617360208201527f6532000000000000000000000000000000000000000000000000000000000000604082015250565b5f6200154a60428362001093565b91506200155782620014c8565b606082019050919050565b5f6020820190508181035f8301526200157b816200153c565b9050919050565b7f437261707079426972643a2054726164696e67206e6f7420656e61626c6564205f8201527f696e205068617365320000000000000000000000000000000000000000000000602082015250565b5f620015de60298362001093565b9150620015eb8262001582565b604082019050919050565b5f6020820190508181035f8301526200160f81620015d0565b9050919050565b61394f80620016245f395ff3fe608060405234801561000f575f80fd5b5060043610610204575f3560e01c80638321194511610118578063a9059cbb116100ab578063e9588fb71161007a578063e9588fb7146105be578063f11aacfe146105ee578063f2fde38b1461060a578063f940262014610626578063fcef28df1461064457610204565b8063a9059cbb14610524578063ab92ca1414610554578063b62496f51461055e578063dd62ed3e1461058e57610204565b80639a7a23d6116100e75780639a7a23d61461048c578063a22a07e1146104a8578063a3edcd1a146104d8578063a457c2d7146104f457610204565b806383211945146104185780638da5cb5b146104345780638e4ae5381461045257806395d89b411461046e57610204565b80633f23d91f1161019b5780636acbd39b1161016a5780636acbd39b146103885780636c2c22a1146103a657806370a08231146103c2578063715018a6146103f257806379272f3d146103fc57610204565b80633f23d91f14610318578063536febfb14610334578063647bea1d14610350578063672434821461036c57610204565b806323b872dd116101d757806323b872dd1461029057806330d2c730146102c0578063313ce567146102ca57806339509351146102e857610204565b806306fdde0314610208578063095ea7b31461022657806318160ddd146102565780631e06aa1914610274575b5f80fd5b610210610674565b60405161021d91906127a3565b60405180910390f35b610240600480360381019061023b9190612858565b610704565b60405161024d91906128b0565b60405180910390f35b61025e610726565b60405161026b91906128d8565b60405180910390f35b61028e60048036038101906102899190612952565b61072f565b005b6102aa60048036038101906102a5919061299d565b610841565b6040516102b791906128b0565b60405180910390f35b6102c861086f565b005b6102d2610972565b6040516102df9190612a08565b60405180910390f35b61030260048036038101906102fd9190612858565b61097a565b60405161030f91906128b0565b60405180910390f35b610332600480360381019061032d9190612a4b565b6109b0565b005b61034e60048036038101906103499190612a89565b610a5e565b005b61036a60048036038101906103659190612952565b610b56565b005b61038660048036038101906103819190612b09565b610c69565b005b610390610dc0565b60405161039d9190612bfa565b60405180910390f35b6103c060048036038101906103bb9190612c13565b610dd3565b005b6103dc60048036038101906103d79190612a89565b610e6e565b6040516103e991906128d8565b60405180910390f35b6103fa610eb3565b005b61041660048036038101906104119190612a89565b610ec6565b005b610432600480360381019061042d9190612952565b610f68565b005b61043c6110f5565b6040516104499190612c4d565b60405180910390f35b61046c60048036038101906104679190612a89565b61111d565b005b610476611213565b60405161048391906127a3565b60405180910390f35b6104a660048036038101906104a19190612a4b565b6112a3565b005b6104c260048036038101906104bd9190612a89565b611413565b6040516104cf91906128b0565b60405180910390f35b6104f260048036038101906104ed9190612a89565b611430565b005b61050e60048036038101906105099190612858565b6114d3565b60405161051b91906128b0565b60405180910390f35b61053e60048036038101906105399190612858565b611548565b60405161054b91906128b0565b60405180910390f35b61055c61156a565b005b61057860048036038101906105739190612a89565b61166c565b60405161058591906128b0565b60405180910390f35b6105a860048036038101906105a39190612c66565b611689565b6040516105b591906128d8565b60405180910390f35b6105d860048036038101906105d39190612a89565b61170b565b6040516105e591906128b0565b60405180910390f35b61060860048036038101906106039190612952565b611728565b005b610624600480360381019061061f9190612a89565b6118b7565b005b61062e611939565b60405161063b91906128d8565b60405180910390f35b61065e60048036038101906106599190612a89565b61193f565b60405161066b91906128b0565b60405180910390f35b60606003805461068390612cd1565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90612cd1565b80156106fa5780601f106106d1576101008083540402835291602001916106fa565b820191905f5260205f20905b8154815290600101906020018083116106dd57829003601f168201915b5050505050905090565b5f8061070e61195c565b905061071b818585611963565b600191505092915050565b5f600254905090565b610737611b26565b5f5b8282905081101561083c575f60085f85858581811061075b5761075a612d01565b5b90506020020160208101906107709190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508282828181106107d2576107d1612d01565b5b90506020020160208101906107e79190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f24240d91e5573fe802f61a7b4d94c349832722696feee27214899e4710437ab160405160405180910390a2808061083490612d5b565b915050610739565b505050565b5f8061084b61195c565b9050610858858285611ba4565b610863858585611c2f565b60019150509392505050565b610877611b26565b6001600281111561088b5761088a612b87565b5b600560149054906101000a900460ff1660028111156108ad576108ac612b87565b5b146108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e490612e12565b60405180910390fd5b6002600560146101000a81548160ff0219169083600281111561091357610912612b87565b5b02179055507fd402f1c6a8d8c2977a4c987cf96373ad33a76688c57ff507a12c19ed00c24966600560149054906101000a900460ff16600281111561095b5761095a612b87565b5b6040516109689190612a08565b60405180910390a1565b5f6012905090565b5f8061098461195c565b90506109a58185856109968589611689565b6109a09190612e30565b611963565b600191505092915050565b6109b8611b26565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fe9ccb79e3e682b2e1af55736071f1430adb40c24c8e5d51a81fa6a9cb5303a6f82604051610a5291906128b0565b60405180910390a25050565b610a66611b26565b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f820807fca83be1af27c3cbc0b37485830c86b9ed2ece3a575d94242f3aa42c6360405160405180910390a250565b610b5e611b26565b5f5b82829050811015610c6457600160085f858585818110610b8357610b82612d01565b5b9050602002016020810190610b989190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550828282818110610bfa57610bf9612d01565b5b9050602002016020810190610c0f9190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f3e4b2945ae8d2ab5e2745129211918249de2298611050c69f074a72f816b3ff560405160405180910390a28080610c5c90612d5b565b915050610b60565b505050565b610c71611b26565b818190508484905014610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb090612ead565b60405180910390fd5b5f5b84849050811015610db957610d18610cd161195c565b868684818110610ce457610ce3612d01565b5b9050602002016020810190610cf99190612a89565b858585818110610d0c57610d0b612d01565b5b90506020020135611c2f565b848482818110610d2b57610d2a612d01565b5b9050602002016020810190610d409190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f8c32c568416fcf97be35ce5b27844cfddcd63a67a1a602c3595ba5dac38f303a848484818110610d8a57610d89612d01565b5b90506020020135604051610d9e91906128d8565b60405180910390a28080610db190612d5b565b915050610cbb565b5050505050565b600560149054906101000a900460ff1681565b610ddb611b26565b60018110158015610dee57506127108111155b610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490612f15565b60405180910390fd5b806006819055507f33b8a504a814d6f350c9334cae222a170fa0475218b74055de3bba9089c4bf4181604051610e6391906128d8565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ebb611b26565b610ec45f611e9b565b565b610ece611b26565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f24240d91e5573fe802f61a7b4d94c349832722696feee27214899e4710437ab160405160405180910390a250565b610f70611b26565b5f5b828290508110156110f0575f60075f858585818110610f9457610f93612d01565b5b9050602002016020810190610fa99190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60095f85858581811061100f5761100e612d01565b5b90506020020160208101906110249190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082828281811061108657611085612d01565b5b905060200201602081019061109b9190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f79eeb8f3b8439e84f6944d43f7adf488494a39ee6db15c60381fed668430d62660405160405180910390a280806110e890612d5b565b915050610f72565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611125611b26565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f79eeb8f3b8439e84f6944d43f7adf488494a39ee6db15c60381fed668430d62660405160405180910390a250565b60606004805461122290612cd1565b80601f016020809104026020016040519081016040528092919081815260200182805461124e90612cd1565b80156112995780601f1061127057610100808354040283529160200191611299565b820191905f5260205f20905b81548152906001019060200180831161127c57829003601f168201915b5050505050905090565b6112ab611b26565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612f7d565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f167fec55059eb0be5a803ca151d74e2f1df0223b4482c9eb80a57be642be0bf58260405161140791906128b0565b60405180910390a25050565b6007602052805f5260405f205f915054906101000a900460ff1681565b611438611b26565b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f3e4b2945ae8d2ab5e2745129211918249de2298611050c69f074a72f816b3ff560405160405180910390a250565b5f806114dd61195c565b90505f6114ea8286611689565b90508381101561152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115269061300b565b60405180910390fd5b61153c8286868403611963565b60019250505092915050565b5f8061155261195c565b905061155f818585611c2f565b600191505092915050565b611572611b26565b5f600281111561158557611584612b87565b5b600560149054906101000a900460ff1660028111156115a7576115a6612b87565b5b146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613099565b60405180910390fd5b6001600560146101000a81548160ff0219169083600281111561160d5761160c612b87565b5b02179055507fd402f1c6a8d8c2977a4c987cf96373ad33a76688c57ff507a12c19ed00c24966600560149054906101000a900460ff16600281111561165557611654612b87565b5b6040516116629190612a08565b60405180910390a1565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6008602052805f5260405f205f915054906101000a900460ff1681565b611730611b26565b5f5b828290508110156118b257600160075f85858581811061175557611754612d01565b5b905060200201602081019061176a9190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f8585858181106117d1576117d0612d01565b5b90506020020160208101906117e69190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082828281811061184857611847612d01565b5b905060200201602081019061185d9190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f820807fca83be1af27c3cbc0b37485830c86b9ed2ece3a575d94242f3aa42c6360405160405180910390a280806118aa90612d5b565b915050611732565b505050565b6118bf611b26565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490613127565b60405180910390fd5b61193681611e9b565b50565b60065481565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906131b5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3690613243565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b1991906128d8565b60405180910390a3505050565b611b2e61195c565b73ffffffffffffffffffffffffffffffffffffffff16611b4c6110f5565b73ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b99906132ab565b60405180910390fd5b565b5f611baf8484611689565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c295781811015611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613313565b60405180910390fd5b611c288484848403611963565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c94906133a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061342f565b60405180910390fd5b611d16838383611f5e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d90906134bd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e8291906128d8565b60405180910390a3611e9584848461208a565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f6983838361208f565b5f6002811115611f7c57611f7b612b87565b5b600560149054906101000a900460ff166002811115611f9e57611f9d612b87565b5b03611fb357611fae838383612094565b612085565b60016002811115611fc757611fc6612b87565b5b600560149054906101000a900460ff166002811115611fe957611fe8612b87565b5b03611ffe57611ff983838361226e565b612084565b60028081111561201157612010612b87565b5b600560149054906101000a900460ff16600281111561203357612032612b87565b5b036120485761204383838361260f565b612083565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a9061354b565b60405180910390fd5b5b5b505050565b505050565b505050565b61209c6110f5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061210057505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b61226957600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156121a0575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122695760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561222e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612225906135ff565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061368d565b60405180910390fd5b505050565b6122766110f5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806122da57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b61260a57600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123cb575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123ca575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b5b156124f45760085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561246d575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124ef575f612710600654612481610726565b61248b91906136ab565b6124959190613719565b905080826124a285610e6e565b6124ac9190612e30565b11156124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e4906137b9565b60405180910390fd5b505b61260a565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061258f575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c69061386d565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612601906138fb565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612692575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612714575f6127106006546126a6610726565b6126b091906136ab565b6126ba9190613719565b905080826126c785610e6e565b6126d19190612e30565b1115612712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612709906137b9565b60405180910390fd5b505b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612750578082015181840152602081019050612735565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61277582612719565b61277f8185612723565b935061278f818560208601612733565b6127988161275b565b840191505092915050565b5f6020820190508181035f8301526127bb818461276b565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127f4826127cb565b9050919050565b612804816127ea565b811461280e575f80fd5b50565b5f8135905061281f816127fb565b92915050565b5f819050919050565b61283781612825565b8114612841575f80fd5b50565b5f813590506128528161282e565b92915050565b5f806040838503121561286e5761286d6127c3565b5b5f61287b85828601612811565b925050602061288c85828601612844565b9150509250929050565b5f8115159050919050565b6128aa81612896565b82525050565b5f6020820190506128c35f8301846128a1565b92915050565b6128d281612825565b82525050565b5f6020820190506128eb5f8301846128c9565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612912576129116128f1565b5b8235905067ffffffffffffffff81111561292f5761292e6128f5565b5b60208301915083602082028301111561294b5761294a6128f9565b5b9250929050565b5f8060208385031215612968576129676127c3565b5b5f83013567ffffffffffffffff811115612985576129846127c7565b5b612991858286016128fd565b92509250509250929050565b5f805f606084860312156129b4576129b36127c3565b5b5f6129c186828701612811565b93505060206129d286828701612811565b92505060406129e386828701612844565b9150509250925092565b5f60ff82169050919050565b612a02816129ed565b82525050565b5f602082019050612a1b5f8301846129f9565b92915050565b612a2a81612896565b8114612a34575f80fd5b50565b5f81359050612a4581612a21565b92915050565b5f8060408385031215612a6157612a606127c3565b5b5f612a6e85828601612811565b9250506020612a7f85828601612a37565b9150509250929050565b5f60208284031215612a9e57612a9d6127c3565b5b5f612aab84828501612811565b91505092915050565b5f8083601f840112612ac957612ac86128f1565b5b8235905067ffffffffffffffff811115612ae657612ae56128f5565b5b602083019150836020820283011115612b0257612b016128f9565b5b9250929050565b5f805f8060408587031215612b2157612b206127c3565b5b5f85013567ffffffffffffffff811115612b3e57612b3d6127c7565b5b612b4a878288016128fd565b9450945050602085013567ffffffffffffffff811115612b6d57612b6c6127c7565b5b612b7987828801612ab4565b925092505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60038110612bc557612bc4612b87565b5b50565b5f819050612bd582612bb4565b919050565b5f612be482612bc8565b9050919050565b612bf481612bda565b82525050565b5f602082019050612c0d5f830184612beb565b92915050565b5f60208284031215612c2857612c276127c3565b5b5f612c3584828501612844565b91505092915050565b612c47816127ea565b82525050565b5f602082019050612c605f830184612c3e565b92915050565b5f8060408385031215612c7c57612c7b6127c3565b5b5f612c8985828601612811565b9250506020612c9a85828601612811565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ce857607f821691505b602082108103612cfb57612cfa612ca4565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d6582612825565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d9757612d96612d2e565b5b600182019050919050565b7f437261707079426972643a2043616e206f6e6c79206d6f76652066726f6d20505f8201527f686173653220746f205068617365330000000000000000000000000000000000602082015250565b5f612dfc602f83612723565b9150612e0782612da2565b604082019050919050565b5f6020820190508181035f830152612e2981612df0565b9050919050565b5f612e3a82612825565b9150612e4583612825565b9250828201905080821115612e5d57612e5c612d2e565b5b92915050565b7f437261707079426972643a204d69736d617463686564206172726179730000005f82015250565b5f612e97601d83612723565b9150612ea282612e63565b602082019050919050565b5f6020820190508181035f830152612ec481612e8b565b9050919050565b7f437261707079426972643a20496e76616c69642070657263656e7461676500005f82015250565b5f612eff601e83612723565b9150612f0a82612ecb565b602082019050919050565b5f6020820190508181035f830152612f2c81612ef3565b9050919050565b7f437261707079426972643a2050616972206973207a65726f20616464726573735f82015250565b5f612f67602083612723565b9150612f7282612f33565b602082019050919050565b5f6020820190508181035f830152612f9481612f5b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612ff5602583612723565b915061300082612f9b565b604082019050919050565b5f6020820190508181035f83015261302281612fe9565b9050919050565b7f437261707079426972643a2043616e206f6e6c79206d6f76652066726f6d20505f8201527f686173653120746f205068617365320000000000000000000000000000000000602082015250565b5f613083602f83612723565b915061308e82613029565b604082019050919050565b5f6020820190508181035f8301526130b081613077565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613111602683612723565b915061311c826130b7565b604082019050919050565b5f6020820190508181035f83015261313e81613105565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61319f602483612723565b91506131aa82613145565b604082019050919050565b5f6020820190508181035f8301526131cc81613193565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61322d602283612723565b9150613238826131d3565b604082019050919050565b5f6020820190508181035f83015261325a81613221565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613295602083612723565b91506132a082613261565b602082019050919050565b5f6020820190508181035f8301526132c281613289565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6132fd601d83612723565b9150613308826132c9565b602082019050919050565b5f6020820190508181035f83015261332a816132f1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61338b602583612723565b915061339682613331565b604082019050919050565b5f6020820190508181035f8301526133b88161337f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613419602383612723565b9150613424826133bf565b604082019050919050565b5f6020820190508181035f8301526134468161340d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6134a7602683612723565b91506134b28261344d565b604082019050919050565b5f6020820190508181035f8301526134d48161349b565b9050919050565b7f437261707079426972643a20496e76616c69642074726164696e6720706861735f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f613535602183612723565b9150613540826134db565b604082019050919050565b5f6020820190508181035f83015261356281613529565b9050919050565b7f437261707079426972643a2057686974656c69737465642061646472657373655f8201527f732063616e6e6f74207472616e7366657220746f6b656e7320696e205068617360208201527f6531000000000000000000000000000000000000000000000000000000000000604082015250565b5f6135e9604283612723565b91506135f482613569565b606082019050919050565b5f6020820190508181035f830152613616816135dd565b9050919050565b7f437261707079426972643a2054726164696e67206e6f7420656e61626c6564205f8201527f696e205068617365310000000000000000000000000000000000000000000000602082015250565b5f613677602983612723565b91506136828261361d565b604082019050919050565b5f6020820190508181035f8301526136a48161366b565b9050919050565b5f6136b582612825565b91506136c083612825565b92508282026136ce81612825565b915082820484148315176136e5576136e4612d2e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61372382612825565b915061372e83612825565b92508261373e5761373d6136ec565b5b828204905092915050565b7f437261707079426972643a2045786365656473206d617820746f6b656e7320705f8201527f65722077616c6c65740000000000000000000000000000000000000000000000602082015250565b5f6137a3602983612723565b91506137ae82613749565b604082019050919050565b5f6020820190508181035f8301526137d081613797565b9050919050565b7f437261707079426972643a2057686974656c69737465642061646472657373655f8201527f732063616e6e6f74207472616e7366657220746f6b656e7320696e205068617360208201527f6532000000000000000000000000000000000000000000000000000000000000604082015250565b5f613857604283612723565b9150613862826137d7565b606082019050919050565b5f6020820190508181035f8301526138848161384b565b9050919050565b7f437261707079426972643a2054726164696e67206e6f7420656e61626c6564205f8201527f696e205068617365320000000000000000000000000000000000000000000000602082015250565b5f6138e5602983612723565b91506138f08261388b565b604082019050919050565b5f6020820190508181035f830152613912816138d9565b905091905056fea26469706673582212204ef2c85f1976bb0d88fc416abb9882a6bb4f171e88f3f6140abd6a4d62c26a7364736f6c63430008150033000000000000000000000000f71f59bced07cd819b4dc24ba3a19da1dcef9f7f

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610204575f3560e01c80638321194511610118578063a9059cbb116100ab578063e9588fb71161007a578063e9588fb7146105be578063f11aacfe146105ee578063f2fde38b1461060a578063f940262014610626578063fcef28df1461064457610204565b8063a9059cbb14610524578063ab92ca1414610554578063b62496f51461055e578063dd62ed3e1461058e57610204565b80639a7a23d6116100e75780639a7a23d61461048c578063a22a07e1146104a8578063a3edcd1a146104d8578063a457c2d7146104f457610204565b806383211945146104185780638da5cb5b146104345780638e4ae5381461045257806395d89b411461046e57610204565b80633f23d91f1161019b5780636acbd39b1161016a5780636acbd39b146103885780636c2c22a1146103a657806370a08231146103c2578063715018a6146103f257806379272f3d146103fc57610204565b80633f23d91f14610318578063536febfb14610334578063647bea1d14610350578063672434821461036c57610204565b806323b872dd116101d757806323b872dd1461029057806330d2c730146102c0578063313ce567146102ca57806339509351146102e857610204565b806306fdde0314610208578063095ea7b31461022657806318160ddd146102565780631e06aa1914610274575b5f80fd5b610210610674565b60405161021d91906127a3565b60405180910390f35b610240600480360381019061023b9190612858565b610704565b60405161024d91906128b0565b60405180910390f35b61025e610726565b60405161026b91906128d8565b60405180910390f35b61028e60048036038101906102899190612952565b61072f565b005b6102aa60048036038101906102a5919061299d565b610841565b6040516102b791906128b0565b60405180910390f35b6102c861086f565b005b6102d2610972565b6040516102df9190612a08565b60405180910390f35b61030260048036038101906102fd9190612858565b61097a565b60405161030f91906128b0565b60405180910390f35b610332600480360381019061032d9190612a4b565b6109b0565b005b61034e60048036038101906103499190612a89565b610a5e565b005b61036a60048036038101906103659190612952565b610b56565b005b61038660048036038101906103819190612b09565b610c69565b005b610390610dc0565b60405161039d9190612bfa565b60405180910390f35b6103c060048036038101906103bb9190612c13565b610dd3565b005b6103dc60048036038101906103d79190612a89565b610e6e565b6040516103e991906128d8565b60405180910390f35b6103fa610eb3565b005b61041660048036038101906104119190612a89565b610ec6565b005b610432600480360381019061042d9190612952565b610f68565b005b61043c6110f5565b6040516104499190612c4d565b60405180910390f35b61046c60048036038101906104679190612a89565b61111d565b005b610476611213565b60405161048391906127a3565b60405180910390f35b6104a660048036038101906104a19190612a4b565b6112a3565b005b6104c260048036038101906104bd9190612a89565b611413565b6040516104cf91906128b0565b60405180910390f35b6104f260048036038101906104ed9190612a89565b611430565b005b61050e60048036038101906105099190612858565b6114d3565b60405161051b91906128b0565b60405180910390f35b61053e60048036038101906105399190612858565b611548565b60405161054b91906128b0565b60405180910390f35b61055c61156a565b005b61057860048036038101906105739190612a89565b61166c565b60405161058591906128b0565b60405180910390f35b6105a860048036038101906105a39190612c66565b611689565b6040516105b591906128d8565b60405180910390f35b6105d860048036038101906105d39190612a89565b61170b565b6040516105e591906128b0565b60405180910390f35b61060860048036038101906106039190612952565b611728565b005b610624600480360381019061061f9190612a89565b6118b7565b005b61062e611939565b60405161063b91906128d8565b60405180910390f35b61065e60048036038101906106599190612a89565b61193f565b60405161066b91906128b0565b60405180910390f35b60606003805461068390612cd1565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90612cd1565b80156106fa5780601f106106d1576101008083540402835291602001916106fa565b820191905f5260205f20905b8154815290600101906020018083116106dd57829003601f168201915b5050505050905090565b5f8061070e61195c565b905061071b818585611963565b600191505092915050565b5f600254905090565b610737611b26565b5f5b8282905081101561083c575f60085f85858581811061075b5761075a612d01565b5b90506020020160208101906107709190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508282828181106107d2576107d1612d01565b5b90506020020160208101906107e79190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f24240d91e5573fe802f61a7b4d94c349832722696feee27214899e4710437ab160405160405180910390a2808061083490612d5b565b915050610739565b505050565b5f8061084b61195c565b9050610858858285611ba4565b610863858585611c2f565b60019150509392505050565b610877611b26565b6001600281111561088b5761088a612b87565b5b600560149054906101000a900460ff1660028111156108ad576108ac612b87565b5b146108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e490612e12565b60405180910390fd5b6002600560146101000a81548160ff0219169083600281111561091357610912612b87565b5b02179055507fd402f1c6a8d8c2977a4c987cf96373ad33a76688c57ff507a12c19ed00c24966600560149054906101000a900460ff16600281111561095b5761095a612b87565b5b6040516109689190612a08565b60405180910390a1565b5f6012905090565b5f8061098461195c565b90506109a58185856109968589611689565b6109a09190612e30565b611963565b600191505092915050565b6109b8611b26565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fe9ccb79e3e682b2e1af55736071f1430adb40c24c8e5d51a81fa6a9cb5303a6f82604051610a5291906128b0565b60405180910390a25050565b610a66611b26565b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f820807fca83be1af27c3cbc0b37485830c86b9ed2ece3a575d94242f3aa42c6360405160405180910390a250565b610b5e611b26565b5f5b82829050811015610c6457600160085f858585818110610b8357610b82612d01565b5b9050602002016020810190610b989190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550828282818110610bfa57610bf9612d01565b5b9050602002016020810190610c0f9190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f3e4b2945ae8d2ab5e2745129211918249de2298611050c69f074a72f816b3ff560405160405180910390a28080610c5c90612d5b565b915050610b60565b505050565b610c71611b26565b818190508484905014610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb090612ead565b60405180910390fd5b5f5b84849050811015610db957610d18610cd161195c565b868684818110610ce457610ce3612d01565b5b9050602002016020810190610cf99190612a89565b858585818110610d0c57610d0b612d01565b5b90506020020135611c2f565b848482818110610d2b57610d2a612d01565b5b9050602002016020810190610d409190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f8c32c568416fcf97be35ce5b27844cfddcd63a67a1a602c3595ba5dac38f303a848484818110610d8a57610d89612d01565b5b90506020020135604051610d9e91906128d8565b60405180910390a28080610db190612d5b565b915050610cbb565b5050505050565b600560149054906101000a900460ff1681565b610ddb611b26565b60018110158015610dee57506127108111155b610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490612f15565b60405180910390fd5b806006819055507f33b8a504a814d6f350c9334cae222a170fa0475218b74055de3bba9089c4bf4181604051610e6391906128d8565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ebb611b26565b610ec45f611e9b565b565b610ece611b26565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f24240d91e5573fe802f61a7b4d94c349832722696feee27214899e4710437ab160405160405180910390a250565b610f70611b26565b5f5b828290508110156110f0575f60075f858585818110610f9457610f93612d01565b5b9050602002016020810190610fa99190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60095f85858581811061100f5761100e612d01565b5b90506020020160208101906110249190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082828281811061108657611085612d01565b5b905060200201602081019061109b9190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f79eeb8f3b8439e84f6944d43f7adf488494a39ee6db15c60381fed668430d62660405160405180910390a280806110e890612d5b565b915050610f72565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611125611b26565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f79eeb8f3b8439e84f6944d43f7adf488494a39ee6db15c60381fed668430d62660405160405180910390a250565b60606004805461122290612cd1565b80601f016020809104026020016040519081016040528092919081815260200182805461124e90612cd1565b80156112995780601f1061127057610100808354040283529160200191611299565b820191905f5260205f20905b81548152906001019060200180831161127c57829003601f168201915b5050505050905090565b6112ab611b26565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612f7d565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f167fec55059eb0be5a803ca151d74e2f1df0223b4482c9eb80a57be642be0bf58260405161140791906128b0565b60405180910390a25050565b6007602052805f5260405f205f915054906101000a900460ff1681565b611438611b26565b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f3e4b2945ae8d2ab5e2745129211918249de2298611050c69f074a72f816b3ff560405160405180910390a250565b5f806114dd61195c565b90505f6114ea8286611689565b90508381101561152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115269061300b565b60405180910390fd5b61153c8286868403611963565b60019250505092915050565b5f8061155261195c565b905061155f818585611c2f565b600191505092915050565b611572611b26565b5f600281111561158557611584612b87565b5b600560149054906101000a900460ff1660028111156115a7576115a6612b87565b5b146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613099565b60405180910390fd5b6001600560146101000a81548160ff0219169083600281111561160d5761160c612b87565b5b02179055507fd402f1c6a8d8c2977a4c987cf96373ad33a76688c57ff507a12c19ed00c24966600560149054906101000a900460ff16600281111561165557611654612b87565b5b6040516116629190612a08565b60405180910390a1565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6008602052805f5260405f205f915054906101000a900460ff1681565b611730611b26565b5f5b828290508110156118b257600160075f85858581811061175557611754612d01565b5b905060200201602081019061176a9190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f8585858181106117d1576117d0612d01565b5b90506020020160208101906117e69190612a89565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082828281811061184857611847612d01565b5b905060200201602081019061185d9190612a89565b73ffffffffffffffffffffffffffffffffffffffff167f820807fca83be1af27c3cbc0b37485830c86b9ed2ece3a575d94242f3aa42c6360405160405180910390a280806118aa90612d5b565b915050611732565b505050565b6118bf611b26565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490613127565b60405180910390fd5b61193681611e9b565b50565b60065481565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906131b5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3690613243565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b1991906128d8565b60405180910390a3505050565b611b2e61195c565b73ffffffffffffffffffffffffffffffffffffffff16611b4c6110f5565b73ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b99906132ab565b60405180910390fd5b565b5f611baf8484611689565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c295781811015611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613313565b60405180910390fd5b611c288484848403611963565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c94906133a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d029061342f565b60405180910390fd5b611d16838383611f5e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d90906134bd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e8291906128d8565b60405180910390a3611e9584848461208a565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f6983838361208f565b5f6002811115611f7c57611f7b612b87565b5b600560149054906101000a900460ff166002811115611f9e57611f9d612b87565b5b03611fb357611fae838383612094565b612085565b60016002811115611fc757611fc6612b87565b5b600560149054906101000a900460ff166002811115611fe957611fe8612b87565b5b03611ffe57611ff983838361226e565b612084565b60028081111561201157612010612b87565b5b600560149054906101000a900460ff16600281111561203357612032612b87565b5b036120485761204383838361260f565b612083565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a9061354b565b60405180910390fd5b5b5b505050565b505050565b505050565b61209c6110f5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061210057505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b61226957600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156121a0575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122695760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561222e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612225906135ff565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061368d565b60405180910390fd5b505050565b6122766110f5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806122da57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b61260a57600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123cb575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123ca575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b5b156124f45760085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561246d575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124ef575f612710600654612481610726565b61248b91906136ab565b6124959190613719565b905080826124a285610e6e565b6124ac9190612e30565b11156124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e4906137b9565b60405180910390fd5b505b61260a565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061258f575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c69061386d565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612601906138fb565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612692575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612714575f6127106006546126a6610726565b6126b091906136ab565b6126ba9190613719565b905080826126c785610e6e565b6126d19190612e30565b1115612712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612709906137b9565b60405180910390fd5b505b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612750578082015181840152602081019050612735565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61277582612719565b61277f8185612723565b935061278f818560208601612733565b6127988161275b565b840191505092915050565b5f6020820190508181035f8301526127bb818461276b565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127f4826127cb565b9050919050565b612804816127ea565b811461280e575f80fd5b50565b5f8135905061281f816127fb565b92915050565b5f819050919050565b61283781612825565b8114612841575f80fd5b50565b5f813590506128528161282e565b92915050565b5f806040838503121561286e5761286d6127c3565b5b5f61287b85828601612811565b925050602061288c85828601612844565b9150509250929050565b5f8115159050919050565b6128aa81612896565b82525050565b5f6020820190506128c35f8301846128a1565b92915050565b6128d281612825565b82525050565b5f6020820190506128eb5f8301846128c9565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612912576129116128f1565b5b8235905067ffffffffffffffff81111561292f5761292e6128f5565b5b60208301915083602082028301111561294b5761294a6128f9565b5b9250929050565b5f8060208385031215612968576129676127c3565b5b5f83013567ffffffffffffffff811115612985576129846127c7565b5b612991858286016128fd565b92509250509250929050565b5f805f606084860312156129b4576129b36127c3565b5b5f6129c186828701612811565b93505060206129d286828701612811565b92505060406129e386828701612844565b9150509250925092565b5f60ff82169050919050565b612a02816129ed565b82525050565b5f602082019050612a1b5f8301846129f9565b92915050565b612a2a81612896565b8114612a34575f80fd5b50565b5f81359050612a4581612a21565b92915050565b5f8060408385031215612a6157612a606127c3565b5b5f612a6e85828601612811565b9250506020612a7f85828601612a37565b9150509250929050565b5f60208284031215612a9e57612a9d6127c3565b5b5f612aab84828501612811565b91505092915050565b5f8083601f840112612ac957612ac86128f1565b5b8235905067ffffffffffffffff811115612ae657612ae56128f5565b5b602083019150836020820283011115612b0257612b016128f9565b5b9250929050565b5f805f8060408587031215612b2157612b206127c3565b5b5f85013567ffffffffffffffff811115612b3e57612b3d6127c7565b5b612b4a878288016128fd565b9450945050602085013567ffffffffffffffff811115612b6d57612b6c6127c7565b5b612b7987828801612ab4565b925092505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60038110612bc557612bc4612b87565b5b50565b5f819050612bd582612bb4565b919050565b5f612be482612bc8565b9050919050565b612bf481612bda565b82525050565b5f602082019050612c0d5f830184612beb565b92915050565b5f60208284031215612c2857612c276127c3565b5b5f612c3584828501612844565b91505092915050565b612c47816127ea565b82525050565b5f602082019050612c605f830184612c3e565b92915050565b5f8060408385031215612c7c57612c7b6127c3565b5b5f612c8985828601612811565b9250506020612c9a85828601612811565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ce857607f821691505b602082108103612cfb57612cfa612ca4565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d6582612825565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d9757612d96612d2e565b5b600182019050919050565b7f437261707079426972643a2043616e206f6e6c79206d6f76652066726f6d20505f8201527f686173653220746f205068617365330000000000000000000000000000000000602082015250565b5f612dfc602f83612723565b9150612e0782612da2565b604082019050919050565b5f6020820190508181035f830152612e2981612df0565b9050919050565b5f612e3a82612825565b9150612e4583612825565b9250828201905080821115612e5d57612e5c612d2e565b5b92915050565b7f437261707079426972643a204d69736d617463686564206172726179730000005f82015250565b5f612e97601d83612723565b9150612ea282612e63565b602082019050919050565b5f6020820190508181035f830152612ec481612e8b565b9050919050565b7f437261707079426972643a20496e76616c69642070657263656e7461676500005f82015250565b5f612eff601e83612723565b9150612f0a82612ecb565b602082019050919050565b5f6020820190508181035f830152612f2c81612ef3565b9050919050565b7f437261707079426972643a2050616972206973207a65726f20616464726573735f82015250565b5f612f67602083612723565b9150612f7282612f33565b602082019050919050565b5f6020820190508181035f830152612f9481612f5b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612ff5602583612723565b915061300082612f9b565b604082019050919050565b5f6020820190508181035f83015261302281612fe9565b9050919050565b7f437261707079426972643a2043616e206f6e6c79206d6f76652066726f6d20505f8201527f686173653120746f205068617365320000000000000000000000000000000000602082015250565b5f613083602f83612723565b915061308e82613029565b604082019050919050565b5f6020820190508181035f8301526130b081613077565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613111602683612723565b915061311c826130b7565b604082019050919050565b5f6020820190508181035f83015261313e81613105565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61319f602483612723565b91506131aa82613145565b604082019050919050565b5f6020820190508181035f8301526131cc81613193565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61322d602283612723565b9150613238826131d3565b604082019050919050565b5f6020820190508181035f83015261325a81613221565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613295602083612723565b91506132a082613261565b602082019050919050565b5f6020820190508181035f8301526132c281613289565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6132fd601d83612723565b9150613308826132c9565b602082019050919050565b5f6020820190508181035f83015261332a816132f1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61338b602583612723565b915061339682613331565b604082019050919050565b5f6020820190508181035f8301526133b88161337f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613419602383612723565b9150613424826133bf565b604082019050919050565b5f6020820190508181035f8301526134468161340d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6134a7602683612723565b91506134b28261344d565b604082019050919050565b5f6020820190508181035f8301526134d48161349b565b9050919050565b7f437261707079426972643a20496e76616c69642074726164696e6720706861735f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f613535602183612723565b9150613540826134db565b604082019050919050565b5f6020820190508181035f83015261356281613529565b9050919050565b7f437261707079426972643a2057686974656c69737465642061646472657373655f8201527f732063616e6e6f74207472616e7366657220746f6b656e7320696e205068617360208201527f6531000000000000000000000000000000000000000000000000000000000000604082015250565b5f6135e9604283612723565b91506135f482613569565b606082019050919050565b5f6020820190508181035f830152613616816135dd565b9050919050565b7f437261707079426972643a2054726164696e67206e6f7420656e61626c6564205f8201527f696e205068617365310000000000000000000000000000000000000000000000602082015250565b5f613677602983612723565b91506136828261361d565b604082019050919050565b5f6020820190508181035f8301526136a48161366b565b9050919050565b5f6136b582612825565b91506136c083612825565b92508282026136ce81612825565b915082820484148315176136e5576136e4612d2e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61372382612825565b915061372e83612825565b92508261373e5761373d6136ec565b5b828204905092915050565b7f437261707079426972643a2045786365656473206d617820746f6b656e7320705f8201527f65722077616c6c65740000000000000000000000000000000000000000000000602082015250565b5f6137a3602983612723565b91506137ae82613749565b604082019050919050565b5f6020820190508181035f8301526137d081613797565b9050919050565b7f437261707079426972643a2057686974656c69737465642061646472657373655f8201527f732063616e6e6f74207472616e7366657220746f6b656e7320696e205068617360208201527f6532000000000000000000000000000000000000000000000000000000000000604082015250565b5f613857604283612723565b9150613862826137d7565b606082019050919050565b5f6020820190508181035f8301526138848161384b565b9050919050565b7f437261707079426972643a2054726164696e67206e6f7420656e61626c6564205f8201527f696e205068617365320000000000000000000000000000000000000000000000602082015250565b5f6138e5602983612723565b91506138f08261388b565b604082019050919050565b5f6020820190508181035f830152613912816138d9565b905091905056fea26469706673582212204ef2c85f1976bb0d88fc416abb9882a6bb4f171e88f3f6140abd6a4d62c26a7364736f6c63430008150033

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

000000000000000000000000f71f59bced07cd819b4dc24ba3a19da1dcef9f7f

-----Decoded View---------------
Arg [0] : initialHolder (address): 0xf71f59bcED07CD819B4DC24Ba3A19da1DcEF9F7f

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f71f59bced07cd819b4dc24ba3a19da1dcef9f7f


Deployed Bytecode Sourcemap

20650:9730:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6645:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9005:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7774:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25541:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9786:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26214:258;;;:::i;:::-;;7616:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10456:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27123:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22845:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25112:267;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22333:380;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20820:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26638:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7945:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19520:103;;;:::i;:::-;;24794:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24035:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18879:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23193:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6864:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27508:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20959:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24489:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11197:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8278:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25887:258;;;:::i;:::-;;21122:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8534:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21013:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23555:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19778:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20883:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21067:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6645:100;6699:13;6732:5;6725:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6645:100;:::o;9005:201::-;9088:4;9105:13;9121:12;:10;:12::i;:::-;9105:28;;9144:32;9153:5;9160:7;9169:6;9144:8;:32::i;:::-;9194:4;9187:11;;;9005:201;;;;:::o;7774:108::-;7835:7;7862:12;;7855:19;;7774:108;:::o;25541:277::-;18765:13;:11;:13::i;:::-;25648:9:::1;25643:168;25667:8;;:15;;25663:1;:19;25643:168;;;25735:5;25704:15;:28;25720:8;;25729:1;25720:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25704:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;25787:8;;25796:1;25787:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25760:39;;;;;;;;;;;;25684:3;;;;;:::i;:::-;;;;25643:168;;;;25541:277:::0;;:::o;9786:261::-;9883:4;9900:15;9918:12;:10;:12::i;:::-;9900:30;;9941:38;9957:4;9963:7;9972:6;9941:15;:38::i;:::-;9990:27;10000:4;10006:2;10010:6;9990:9;:27::i;:::-;10035:4;10028:11;;;9786:261;;;;;:::o;26214:258::-;18765:13;:11;:13::i;:::-;26291:19:::1;26275:35;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:35;;;;;;;;:::i;:::-;;;26267:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;26388:19;26373:12;;:34;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;26423:41;26450:12;;;;;;;;;;;26444:19;;;;;;;;:::i;:::-;;26423:41;;;;;;:::i;:::-;;;;;;;;26214:258::o:0;7616:93::-;7674:5;7699:2;7692:9;;7616:93;:::o;10456:238::-;10544:4;10561:13;10577:12;:10;:12::i;:::-;10561:28;;10600:64;10609:5;10616:7;10653:10;10625:25;10635:5;10642:7;10625:9;:25::i;:::-;:38;;;;:::i;:::-;10600:8;:64::i;:::-;10682:4;10675:11;;;10456:238;;;;:::o;27123:177::-;18765:13;:11;:13::i;:::-;27236:6:::1;27208:16;:25;27225:7;27208:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;27276:7;27258:34;;;27285:6;27258:34;;;;;;:::i;:::-;;;;;;;;27123:177:::0;;:::o;22845:206::-;18765:13;:11;:13::i;:::-;22949:4:::1;22922:15;:24;22938:7;22922:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22992:4;22964:16;:25;22981:7;22964:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;23035:7;23012:31;;;;;;;;;;;;22845:206:::0;:::o;25112:267::-;18765:13;:11;:13::i;:::-;25214:9:::1;25209:163;25233:8;;:15;;25229:1;:19;25209:163;;;25301:4;25270:15;:28;25286:8;;25295:1;25286:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25270:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25348:8;;25357:1;25348:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25325:35;;;;;;;;;;;;25250:3;;;;;:::i;:::-;;;;25209:163;;;;25112:267:::0;;:::o;22333:380::-;18765:13;:11;:13::i;:::-;22468:7:::1;;:14;;22447:10;;:17;;:35;22439:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22532:9;22527:179;22551:10;;:17;;22547:1;:21;22527:179;;;22590:50;22600:12;:10;:12::i;:::-;22614:10;;22625:1;22614:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22629:7;;22637:1;22629:10;;;;;;;:::i;:::-;;;;;;;;22590:9;:50::i;:::-;22668:10;;22679:1;22668:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22660:34;;;22683:7;;22691:1;22683:10;;;;;;;:::i;:::-;;;;;;;;22660:34;;;;;;:::i;:::-;;;;;;;;22570:3;;;;;:::i;:::-;;;;22527:179;;;;22333:380:::0;;;;:::o;20820:54::-;;;;;;;;;;;;;:::o;26638:264::-;18765:13;:11;:13::i;:::-;26741:1:::1;26730:7;:12;;:32;;;;;26757:5;26746:7;:16;;26730:32;26722:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26835:7;26808:24;:34;;;;26858:36;26886:7;26858:36;;;;;;:::i;:::-;;;;;;;;26638:264:::0;:::o;7945:127::-;8019:7;8046:9;:18;8056:7;8046:18;;;;;;;;;;;;;;;;8039:25;;7945:127;;;:::o;19520:103::-;18765:13;:11;:13::i;:::-;19585:30:::1;19612:1;19585:18;:30::i;:::-;19520:103::o:0;24794:173::-;18765:13;:11;:13::i;:::-;24903:5:::1;24876:15;:24;24892:7;24876:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;24951:7;24924:35;;;;;;;;;;;;24794:173:::0;:::o;24035:329::-;18765:13;:11;:13::i;:::-;24142:9:::1;24137:220;24161:8;;:15;;24157:1;:19;24137:220;;;24229:5;24198:15;:28;24214:8;;24223:1;24214:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24198:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24281:5;24249:16;:29;24266:8;;24275:1;24266:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24249:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;24333:8;;24342:1;24333:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24306:39;;;;;;;;;;;;24178:3;;;;;:::i;:::-;;;;24137:220;;;;24035:329:::0;;:::o;18879:87::-;18925:7;18952:6;;;;;;;;;;;18945:13;;18879:87;:::o;23193:217::-;18765:13;:11;:13::i;:::-;23302:5:::1;23275:15;:24;23291:7;23275:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;23346:5;23318:16;:25;23335:7;23318:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;23394:7;23367:35;;;;;;;;;;;;23193:217:::0;:::o;6864:104::-;6920:13;6953:7;6946:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6864:104;:::o;27508:311::-;18765:13;:11;:13::i;:::-;27625:1:::1;27609:18;;:4;:18;;::::0;27601:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27709:5;27675:25;:31;27701:4;27675:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27750:5;27725:16;:22;27742:4;27725:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;27799:4;27771:40;;;27805:5;27771:40;;;;;;:::i;:::-;;;;;;;;27508:311:::0;;:::o;20959:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;24489:163::-;18765:13;:11;:13::i;:::-;24593:4:::1;24566:15;:24;24582:7;24566:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24636:7;24613:31;;;;;;;;;;;;24489:163:::0;:::o;11197:436::-;11290:4;11307:13;11323:12;:10;:12::i;:::-;11307:28;;11346:24;11373:25;11383:5;11390:7;11373:9;:25::i;:::-;11346:52;;11437:15;11417:16;:35;;11409:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11530:60;11539:5;11546:7;11574:15;11555:16;:34;11530:8;:60::i;:::-;11621:4;11614:11;;;;11197:436;;;;:::o;8278:193::-;8357:4;8374:13;8390:12;:10;:12::i;:::-;8374:28;;8413;8423:5;8430:2;8434:6;8413:9;:28::i;:::-;8459:4;8452:11;;;8278:193;;;;:::o;25887:258::-;18765:13;:11;:13::i;:::-;25964:19:::1;25948:35;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:35;;;;;;;;:::i;:::-;;;25940:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;26061:19;26046:12;;:34;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;26096:41;26123:12;;;;;;;;;;;26117:19;;;;;;;;:::i;:::-;;26096:41;;;;;;:::i;:::-;;;;;;;;25887:258::o:0;21122:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;8534:151::-;8623:7;8650:11;:18;8662:5;8650:18;;;;;;;;;;;;;;;:27;8669:7;8650:27;;;;;;;;;;;;;;;;8643:34;;8534:151;;;;:::o;21013:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;23555:318::-;18765:13;:11;:13::i;:::-;23657:9:::1;23652:214;23676:8;;:15;;23672:1;:19;23652:214;;;23744:4;23713:15;:28;23729:8;;23738:1;23729:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23713:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;23795:4;23763:16;:29;23780:8;;23789:1;23780:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23763:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23842:8;;23851:1;23842:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23819:35;;;;;;;;;;;;23693:3;;;;;:::i;:::-;;;;23652:214;;;;23555:318:::0;;:::o;19778:201::-;18765:13;:11;:13::i;:::-;19887:1:::1;19867:22;;:8;:22;;::::0;19859:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19943:28;19962:8;19943:18;:28::i;:::-;19778:201:::0;:::o;20883:44::-;;;;:::o;21067:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;4277:98::-;4330:7;4357:10;4350:17;;4277:98;:::o;15190:346::-;15309:1;15292:19;;:5;:19;;;15284:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15390:1;15371:21;;:7;:21;;;15363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15474:6;15444:11;:18;15456:5;15444:18;;;;;;;;;;;;;;;:27;15463:7;15444:27;;;;;;;;;;;;;;;:36;;;;15512:7;15496:32;;15505:5;15496:32;;;15521:6;15496:32;;;;;;:::i;:::-;;;;;;;;15190:346;;;:::o;19044:132::-;19119:12;:10;:12::i;:::-;19108:23;;:7;:5;:7::i;:::-;:23;;;19100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19044:132::o;15827:419::-;15928:24;15955:25;15965:5;15972:7;15955:9;:25::i;:::-;15928:52;;16015:17;15995:16;:37;15991:248;;16077:6;16057:16;:26;;16049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16161:51;16170:5;16177:7;16205:6;16186:16;:25;16161:8;:51::i;:::-;15991:248;15917:329;15827:419;;;:::o;12103:806::-;12216:1;12200:18;;:4;:18;;;12192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12293:1;12279:16;;:2;:16;;;12271:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12348:38;12369:4;12375:2;12379:6;12348:20;:38::i;:::-;12399:19;12421:9;:15;12431:4;12421:15;;;;;;;;;;;;;;;;12399:37;;12470:6;12455:11;:21;;12447:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12587:6;12573:11;:20;12555:9;:15;12565:4;12555:15;;;;;;;;;;;;;;;:38;;;;12790:6;12773:9;:13;12783:2;12773:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12840:2;12825:26;;12834:4;12825:26;;;12844:6;12825:26;;;;;;:::i;:::-;;;;;;;;12864:37;12884:4;12890:2;12894:6;12864:19;:37::i;:::-;12181:728;12103:806;;;:::o;20139:191::-;20213:16;20232:6;;;;;;;;;;;20213:25;;20258:8;20249:6;;:17;;;;;;;;;;;;;;;;;;20313:8;20282:40;;20303:8;20282:40;;;;;;;;;;;;20202:128;20139:191;:::o;27924:592::-;28032:44;28059:4;28065:2;28069:6;28032:26;:44::i;:::-;28120:19;28104:35;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:35;;;;;;;;:::i;:::-;;;28100:409;;28156:39;28178:4;28184:2;28188:6;28156:21;:39::i;:::-;28100:409;;;28233:19;28217:35;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:35;;;;;;;;:::i;:::-;;;28213:296;;28269:39;28291:4;28297:2;28301:6;28269:21;:39::i;:::-;28213:296;;;28346:19;28330:35;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:35;;;;;;;;:::i;:::-;;;28326:183;;28382:39;28404:4;28410:2;28414:6;28382:21;:39::i;:::-;28326:183;;;28454:43;;;;;;;;;;:::i;:::-;;;;;;;;28326:183;28213:296;28100:409;27924:592;;;:::o;17541:90::-;;;;:::o;16846:91::-;;;;:::o;28588:484::-;28690:7;:5;:7::i;:::-;28682:15;;:4;:15;;;:37;;;;28717:1;28701:18;;:4;:18;;;28682:37;28736:7;28678:76;28770:25;:31;28796:4;28770:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;28805:15;:19;28821:2;28805:19;;;;;;;;;;;;;;;;;;;;;;;;;28770:54;28841:7;28766:93;28875:15;:21;28891:4;28875:21;;;;;;;;;;;;;;;;;;;;;;;;;28871:130;;;28913:76;;;;;;;;;;:::i;:::-;;;;;;;;28871:130;29013:51;;;;;;;;;;:::i;:::-;;;;;;;;28588:484;;;;:::o;29144:816::-;29253:7;:5;:7::i;:::-;29245:15;;:4;:15;;;:37;;;;29280:1;29264:18;;:4;:18;;;29245:37;29299:7;29241:76;29333:25;:31;29359:4;29333:31;;;;;;;;;;;;;;;;;;;;;;;;;:79;;;;;29369:15;:19;29385:2;29369:19;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;29392:15;:19;29408:2;29392:19;;;;;;;;;;;;;;;;;;;;;;;;;29369:42;29333:79;29329:393;;;29433:15;:19;29449:2;29433:19;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;29457:16;:20;29474:2;29457:20;;;;;;;;;;;;;;;;;;;;;;;;;29456:21;29433:44;29429:261;;;29498:17;29561:5;29534:24;;29518:13;:11;:13::i;:::-;:40;;;;:::i;:::-;:48;;;;:::i;:::-;29498:68;;29619:9;29609:6;29593:13;29603:2;29593:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;29585:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;29479:211;29429:261;29704:7;;29329:393;29738:15;:21;29754:4;29738:21;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;29763:15;:21;29779:4;29763:21;;;;;;;;;;;;;;;;;;;;;;;;;29738:46;29734:155;;;29801:76;;;;;;;;;;:::i;:::-;;;;;;;;29734:155;29901:51;;;;;;;;;;:::i;:::-;;;;;;;;29144:816;;;;:::o;30032:345::-;30142:1;30128:16;;:2;:16;;;;:41;;;;;30149:16;:20;30166:2;30149:20;;;;;;;;;;;;;;;;;;;;;;;;;30148:21;30128:41;30124:246;;;30186:17;30249:5;30222:24;;30206:13;:11;:13::i;:::-;:40;;;;:::i;:::-;:48;;;;:::i;:::-;30186:68;;30303:9;30293:6;30277:13;30287:2;30277:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;30269:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;30171:199;30124:246;30032:345;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287: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;1553:117;1662:1;1659;1652: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:117::-;3907:1;3904;3897:12;3921:117;4030:1;4027;4020:12;4044:117;4153:1;4150;4143:12;4184:568;4257:8;4267:6;4317:3;4310:4;4302:6;4298:17;4294:27;4284:122;;4325:79;;:::i;:::-;4284:122;4438:6;4425:20;4415:30;;4468:18;4460:6;4457:30;4454:117;;;4490:79;;:::i;:::-;4454:117;4604:4;4596:6;4592:17;4580:29;;4658:3;4650:4;4642:6;4638:17;4628:8;4624:32;4621:41;4618:128;;;4665:79;;:::i;:::-;4618:128;4184:568;;;;;:::o;4758:559::-;4844:6;4852;4901:2;4889:9;4880:7;4876:23;4872:32;4869:119;;;4907:79;;:::i;:::-;4869:119;5055:1;5044:9;5040:17;5027:31;5085:18;5077:6;5074:30;5071:117;;;5107:79;;:::i;:::-;5071:117;5220:80;5292:7;5283:6;5272:9;5268:22;5220:80;:::i;:::-;5202:98;;;;4998:312;4758:559;;;;;:::o;5323:619::-;5400:6;5408;5416;5465:2;5453:9;5444:7;5440:23;5436:32;5433:119;;;5471:79;;:::i;:::-;5433:119;5591:1;5616:53;5661:7;5652:6;5641:9;5637:22;5616:53;:::i;:::-;5606:63;;5562:117;5718:2;5744:53;5789:7;5780:6;5769:9;5765:22;5744:53;:::i;:::-;5734:63;;5689:118;5846:2;5872:53;5917:7;5908:6;5897:9;5893:22;5872:53;:::i;:::-;5862:63;;5817:118;5323:619;;;;;:::o;5948:86::-;5983:7;6023:4;6016:5;6012:16;6001:27;;5948:86;;;:::o;6040:112::-;6123:22;6139:5;6123:22;:::i;:::-;6118:3;6111:35;6040:112;;:::o;6158:214::-;6247:4;6285:2;6274:9;6270:18;6262:26;;6298:67;6362:1;6351:9;6347:17;6338:6;6298:67;:::i;:::-;6158:214;;;;:::o;6378:116::-;6448:21;6463:5;6448:21;:::i;:::-;6441:5;6438:32;6428:60;;6484:1;6481;6474:12;6428:60;6378:116;:::o;6500:133::-;6543:5;6581:6;6568:20;6559:29;;6597:30;6621:5;6597:30;:::i;:::-;6500:133;;;;:::o;6639:468::-;6704:6;6712;6761:2;6749:9;6740:7;6736:23;6732:32;6729:119;;;6767:79;;:::i;:::-;6729:119;6887:1;6912:53;6957:7;6948:6;6937:9;6933:22;6912:53;:::i;:::-;6902:63;;6858:117;7014:2;7040:50;7082:7;7073:6;7062:9;7058:22;7040:50;:::i;:::-;7030:60;;6985:115;6639:468;;;;;:::o;7113:329::-;7172:6;7221:2;7209:9;7200:7;7196:23;7192:32;7189:119;;;7227:79;;:::i;:::-;7189:119;7347:1;7372:53;7417:7;7408:6;7397:9;7393:22;7372:53;:::i;:::-;7362:63;;7318:117;7113:329;;;;:::o;7465:568::-;7538:8;7548:6;7598:3;7591:4;7583:6;7579:17;7575:27;7565:122;;7606:79;;:::i;:::-;7565:122;7719:6;7706:20;7696:30;;7749:18;7741:6;7738:30;7735:117;;;7771:79;;:::i;:::-;7735:117;7885:4;7877:6;7873:17;7861:29;;7939:3;7931:4;7923:6;7919:17;7909:8;7905:32;7902:41;7899:128;;;7946:79;;:::i;:::-;7899:128;7465:568;;;;;:::o;8039:934::-;8161:6;8169;8177;8185;8234:2;8222:9;8213:7;8209:23;8205:32;8202:119;;;8240:79;;:::i;:::-;8202:119;8388:1;8377:9;8373:17;8360:31;8418:18;8410:6;8407:30;8404:117;;;8440:79;;:::i;:::-;8404:117;8553:80;8625:7;8616:6;8605:9;8601:22;8553:80;:::i;:::-;8535:98;;;;8331:312;8710:2;8699:9;8695:18;8682:32;8741:18;8733:6;8730:30;8727:117;;;8763:79;;:::i;:::-;8727:117;8876:80;8948:7;8939:6;8928:9;8924:22;8876:80;:::i;:::-;8858:98;;;;8653:313;8039:934;;;;;;;:::o;8979:180::-;9027:77;9024:1;9017:88;9124:4;9121:1;9114:15;9148:4;9145:1;9138:15;9165:121;9254:1;9247:5;9244:12;9234:46;;9260:18;;:::i;:::-;9234:46;9165:121;:::o;9292:143::-;9345:7;9374:5;9363:16;;9380:49;9423:5;9380:49;:::i;:::-;9292:143;;;:::o;9441:::-;9505:9;9538:40;9572:5;9538:40;:::i;:::-;9525:53;;9441:143;;;:::o;9590:159::-;9691:51;9736:5;9691:51;:::i;:::-;9686:3;9679:64;9590:159;;:::o;9755:250::-;9862:4;9900:2;9889:9;9885:18;9877:26;;9913:85;9995:1;9984:9;9980:17;9971:6;9913:85;:::i;:::-;9755:250;;;;:::o;10011:329::-;10070:6;10119:2;10107:9;10098:7;10094:23;10090:32;10087:119;;;10125:79;;:::i;:::-;10087:119;10245:1;10270:53;10315:7;10306:6;10295:9;10291:22;10270:53;:::i;:::-;10260:63;;10216:117;10011:329;;;;:::o;10346:118::-;10433:24;10451:5;10433:24;:::i;:::-;10428:3;10421:37;10346:118;;:::o;10470:222::-;10563:4;10601:2;10590:9;10586:18;10578:26;;10614:71;10682:1;10671:9;10667:17;10658:6;10614:71;:::i;:::-;10470:222;;;;:::o;10698:474::-;10766:6;10774;10823:2;10811:9;10802:7;10798:23;10794:32;10791:119;;;10829:79;;:::i;:::-;10791:119;10949:1;10974:53;11019:7;11010:6;10999:9;10995:22;10974:53;:::i;:::-;10964:63;;10920:117;11076:2;11102:53;11147:7;11138:6;11127:9;11123:22;11102:53;:::i;:::-;11092:63;;11047:118;10698:474;;;;;:::o;11178:180::-;11226:77;11223:1;11216:88;11323:4;11320:1;11313:15;11347:4;11344:1;11337:15;11364:320;11408:6;11445:1;11439:4;11435:12;11425:22;;11492:1;11486:4;11482:12;11513:18;11503:81;;11569:4;11561:6;11557:17;11547:27;;11503:81;11631:2;11623:6;11620:14;11600:18;11597:38;11594:84;;11650:18;;:::i;:::-;11594:84;11415:269;11364:320;;;:::o;11690:180::-;11738:77;11735:1;11728:88;11835:4;11832:1;11825:15;11859:4;11856:1;11849:15;11876:180;11924:77;11921:1;11914:88;12021:4;12018:1;12011:15;12045:4;12042:1;12035:15;12062:233;12101:3;12124:24;12142:5;12124:24;:::i;:::-;12115:33;;12170:66;12163:5;12160:77;12157:103;;12240:18;;:::i;:::-;12157:103;12287:1;12280:5;12276:13;12269:20;;12062:233;;;:::o;12301:234::-;12441:34;12437:1;12429:6;12425:14;12418:58;12510:17;12505:2;12497:6;12493:15;12486:42;12301:234;:::o;12541:366::-;12683:3;12704:67;12768:2;12763:3;12704:67;:::i;:::-;12697:74;;12780:93;12869:3;12780:93;:::i;:::-;12898:2;12893:3;12889:12;12882:19;;12541:366;;;:::o;12913:419::-;13079:4;13117:2;13106:9;13102:18;13094:26;;13166:9;13160:4;13156:20;13152:1;13141:9;13137:17;13130:47;13194:131;13320:4;13194:131;:::i;:::-;13186:139;;12913:419;;;:::o;13338:191::-;13378:3;13397:20;13415:1;13397:20;:::i;:::-;13392:25;;13431:20;13449:1;13431:20;:::i;:::-;13426:25;;13474:1;13471;13467:9;13460:16;;13495:3;13492:1;13489:10;13486:36;;;13502:18;;:::i;:::-;13486:36;13338:191;;;;:::o;13535:179::-;13675:31;13671:1;13663:6;13659:14;13652:55;13535:179;:::o;13720:366::-;13862:3;13883:67;13947:2;13942:3;13883:67;:::i;:::-;13876:74;;13959:93;14048:3;13959:93;:::i;:::-;14077:2;14072:3;14068:12;14061:19;;13720:366;;;:::o;14092:419::-;14258:4;14296:2;14285:9;14281:18;14273:26;;14345:9;14339:4;14335:20;14331:1;14320:9;14316:17;14309:47;14373:131;14499:4;14373:131;:::i;:::-;14365:139;;14092:419;;;:::o;14517:180::-;14657:32;14653:1;14645:6;14641:14;14634:56;14517:180;:::o;14703:366::-;14845:3;14866:67;14930:2;14925:3;14866:67;:::i;:::-;14859:74;;14942:93;15031:3;14942:93;:::i;:::-;15060:2;15055:3;15051:12;15044:19;;14703:366;;;:::o;15075:419::-;15241:4;15279:2;15268:9;15264:18;15256:26;;15328:9;15322:4;15318:20;15314:1;15303:9;15299:17;15292:47;15356:131;15482:4;15356:131;:::i;:::-;15348:139;;15075:419;;;:::o;15500:182::-;15640:34;15636:1;15628:6;15624:14;15617:58;15500:182;:::o;15688:366::-;15830:3;15851:67;15915:2;15910:3;15851:67;:::i;:::-;15844:74;;15927:93;16016:3;15927:93;:::i;:::-;16045:2;16040:3;16036:12;16029:19;;15688:366;;;:::o;16060:419::-;16226:4;16264:2;16253:9;16249:18;16241:26;;16313:9;16307:4;16303:20;16299:1;16288:9;16284:17;16277:47;16341:131;16467:4;16341:131;:::i;:::-;16333:139;;16060:419;;;:::o;16485:224::-;16625:34;16621:1;16613:6;16609:14;16602:58;16694:7;16689:2;16681:6;16677:15;16670:32;16485:224;:::o;16715:366::-;16857:3;16878:67;16942:2;16937:3;16878:67;:::i;:::-;16871:74;;16954:93;17043:3;16954:93;:::i;:::-;17072:2;17067:3;17063:12;17056:19;;16715:366;;;:::o;17087:419::-;17253:4;17291:2;17280:9;17276:18;17268:26;;17340:9;17334:4;17330:20;17326:1;17315:9;17311:17;17304:47;17368:131;17494:4;17368:131;:::i;:::-;17360:139;;17087:419;;;:::o;17512:234::-;17652:34;17648:1;17640:6;17636:14;17629:58;17721:17;17716:2;17708:6;17704:15;17697:42;17512:234;:::o;17752:366::-;17894:3;17915:67;17979:2;17974:3;17915:67;:::i;:::-;17908:74;;17991:93;18080:3;17991:93;:::i;:::-;18109:2;18104:3;18100:12;18093:19;;17752:366;;;:::o;18124:419::-;18290:4;18328:2;18317:9;18313:18;18305:26;;18377:9;18371:4;18367:20;18363:1;18352:9;18348:17;18341:47;18405:131;18531:4;18405:131;:::i;:::-;18397:139;;18124:419;;;:::o;18549:225::-;18689:34;18685:1;18677:6;18673:14;18666:58;18758:8;18753:2;18745:6;18741:15;18734:33;18549:225;:::o;18780:366::-;18922:3;18943:67;19007:2;19002:3;18943:67;:::i;:::-;18936:74;;19019:93;19108:3;19019:93;:::i;:::-;19137:2;19132:3;19128:12;19121:19;;18780:366;;;:::o;19152:419::-;19318:4;19356:2;19345:9;19341:18;19333:26;;19405:9;19399:4;19395:20;19391:1;19380:9;19376:17;19369:47;19433:131;19559:4;19433:131;:::i;:::-;19425:139;;19152:419;;;:::o;19577:223::-;19717:34;19713:1;19705:6;19701:14;19694:58;19786:6;19781:2;19773:6;19769:15;19762:31;19577:223;:::o;19806:366::-;19948:3;19969:67;20033:2;20028:3;19969:67;:::i;:::-;19962:74;;20045:93;20134:3;20045:93;:::i;:::-;20163:2;20158:3;20154:12;20147:19;;19806:366;;;:::o;20178:419::-;20344:4;20382:2;20371:9;20367:18;20359:26;;20431:9;20425:4;20421:20;20417:1;20406:9;20402:17;20395:47;20459:131;20585:4;20459:131;:::i;:::-;20451:139;;20178:419;;;:::o;20603:221::-;20743:34;20739:1;20731:6;20727:14;20720:58;20812:4;20807:2;20799:6;20795:15;20788:29;20603:221;:::o;20830:366::-;20972:3;20993:67;21057:2;21052:3;20993:67;:::i;:::-;20986:74;;21069:93;21158:3;21069:93;:::i;:::-;21187:2;21182:3;21178:12;21171:19;;20830:366;;;:::o;21202:419::-;21368:4;21406:2;21395:9;21391:18;21383:26;;21455:9;21449:4;21445:20;21441:1;21430:9;21426:17;21419:47;21483:131;21609:4;21483:131;:::i;:::-;21475:139;;21202:419;;;:::o;21627:182::-;21767:34;21763:1;21755:6;21751:14;21744:58;21627:182;:::o;21815:366::-;21957:3;21978:67;22042:2;22037:3;21978:67;:::i;:::-;21971:74;;22054:93;22143:3;22054:93;:::i;:::-;22172:2;22167:3;22163:12;22156:19;;21815:366;;;:::o;22187:419::-;22353:4;22391:2;22380:9;22376:18;22368:26;;22440:9;22434:4;22430:20;22426:1;22415:9;22411:17;22404:47;22468:131;22594:4;22468:131;:::i;:::-;22460:139;;22187:419;;;:::o;22612:179::-;22752:31;22748:1;22740:6;22736:14;22729:55;22612:179;:::o;22797:366::-;22939:3;22960:67;23024:2;23019:3;22960:67;:::i;:::-;22953:74;;23036:93;23125:3;23036:93;:::i;:::-;23154:2;23149:3;23145:12;23138:19;;22797:366;;;:::o;23169:419::-;23335:4;23373:2;23362:9;23358:18;23350:26;;23422:9;23416:4;23412:20;23408:1;23397:9;23393:17;23386:47;23450:131;23576:4;23450:131;:::i;:::-;23442:139;;23169:419;;;:::o;23594:224::-;23734:34;23730:1;23722:6;23718:14;23711:58;23803:7;23798:2;23790:6;23786:15;23779:32;23594:224;:::o;23824:366::-;23966:3;23987:67;24051:2;24046:3;23987:67;:::i;:::-;23980:74;;24063:93;24152:3;24063:93;:::i;:::-;24181:2;24176:3;24172:12;24165:19;;23824:366;;;:::o;24196:419::-;24362:4;24400:2;24389:9;24385:18;24377:26;;24449:9;24443:4;24439:20;24435:1;24424:9;24420:17;24413:47;24477:131;24603:4;24477:131;:::i;:::-;24469:139;;24196:419;;;:::o;24621:222::-;24761:34;24757:1;24749:6;24745:14;24738:58;24830:5;24825:2;24817:6;24813:15;24806:30;24621:222;:::o;24849:366::-;24991:3;25012:67;25076:2;25071:3;25012:67;:::i;:::-;25005:74;;25088:93;25177:3;25088:93;:::i;:::-;25206:2;25201:3;25197:12;25190:19;;24849:366;;;:::o;25221:419::-;25387:4;25425:2;25414:9;25410:18;25402:26;;25474:9;25468:4;25464:20;25460:1;25449:9;25445:17;25438:47;25502:131;25628:4;25502:131;:::i;:::-;25494:139;;25221:419;;;:::o;25646:225::-;25786:34;25782:1;25774:6;25770:14;25763:58;25855:8;25850:2;25842:6;25838:15;25831:33;25646:225;:::o;25877:366::-;26019:3;26040:67;26104:2;26099:3;26040:67;:::i;:::-;26033:74;;26116:93;26205:3;26116:93;:::i;:::-;26234:2;26229:3;26225:12;26218:19;;25877:366;;;:::o;26249:419::-;26415:4;26453:2;26442:9;26438:18;26430:26;;26502:9;26496:4;26492:20;26488:1;26477:9;26473:17;26466:47;26530:131;26656:4;26530:131;:::i;:::-;26522:139;;26249:419;;;:::o;26674:220::-;26814:34;26810:1;26802:6;26798:14;26791:58;26883:3;26878:2;26870:6;26866:15;26859:28;26674:220;:::o;26900:366::-;27042:3;27063:67;27127:2;27122:3;27063:67;:::i;:::-;27056:74;;27139:93;27228:3;27139:93;:::i;:::-;27257:2;27252:3;27248:12;27241:19;;26900:366;;;:::o;27272:419::-;27438:4;27476:2;27465:9;27461:18;27453:26;;27525:9;27519:4;27515:20;27511:1;27500:9;27496:17;27489:47;27553:131;27679:4;27553:131;:::i;:::-;27545:139;;27272:419;;;:::o;27697:290::-;27837:34;27833:1;27825:6;27821:14;27814:58;27906:34;27901:2;27893:6;27889:15;27882:59;27975:4;27970:2;27962:6;27958:15;27951:29;27697:290;:::o;27993:366::-;28135:3;28156:67;28220:2;28215:3;28156:67;:::i;:::-;28149:74;;28232:93;28321:3;28232:93;:::i;:::-;28350:2;28345:3;28341:12;28334:19;;27993:366;;;:::o;28365:419::-;28531:4;28569:2;28558:9;28554:18;28546:26;;28618:9;28612:4;28608:20;28604:1;28593:9;28589:17;28582:47;28646:131;28772:4;28646:131;:::i;:::-;28638:139;;28365:419;;;:::o;28790:228::-;28930:34;28926:1;28918:6;28914:14;28907:58;28999:11;28994:2;28986:6;28982:15;28975:36;28790:228;:::o;29024:366::-;29166:3;29187:67;29251:2;29246:3;29187:67;:::i;:::-;29180:74;;29263:93;29352:3;29263:93;:::i;:::-;29381:2;29376:3;29372:12;29365:19;;29024:366;;;:::o;29396:419::-;29562:4;29600:2;29589:9;29585:18;29577:26;;29649:9;29643:4;29639:20;29635:1;29624:9;29620:17;29613:47;29677:131;29803:4;29677:131;:::i;:::-;29669:139;;29396:419;;;:::o;29821:410::-;29861:7;29884:20;29902:1;29884:20;:::i;:::-;29879:25;;29918:20;29936:1;29918:20;:::i;:::-;29913:25;;29973:1;29970;29966:9;29995:30;30013:11;29995:30;:::i;:::-;29984:41;;30174:1;30165:7;30161:15;30158:1;30155:22;30135:1;30128:9;30108:83;30085:139;;30204:18;;:::i;:::-;30085:139;29869:362;29821:410;;;;:::o;30237:180::-;30285:77;30282:1;30275:88;30382:4;30379:1;30372:15;30406:4;30403:1;30396:15;30423:185;30463:1;30480:20;30498:1;30480:20;:::i;:::-;30475:25;;30514:20;30532:1;30514:20;:::i;:::-;30509:25;;30553:1;30543:35;;30558:18;;:::i;:::-;30543:35;30600:1;30597;30593:9;30588:14;;30423:185;;;;:::o;30614:228::-;30754:34;30750:1;30742:6;30738:14;30731:58;30823:11;30818:2;30810:6;30806:15;30799:36;30614:228;:::o;30848:366::-;30990:3;31011:67;31075:2;31070:3;31011:67;:::i;:::-;31004:74;;31087:93;31176:3;31087:93;:::i;:::-;31205:2;31200:3;31196:12;31189:19;;30848:366;;;:::o;31220:419::-;31386:4;31424:2;31413:9;31409:18;31401:26;;31473:9;31467:4;31463:20;31459:1;31448:9;31444:17;31437:47;31501:131;31627:4;31501:131;:::i;:::-;31493:139;;31220:419;;;:::o;31645:290::-;31785:34;31781:1;31773:6;31769:14;31762:58;31854:34;31849:2;31841:6;31837:15;31830:59;31923:4;31918:2;31910:6;31906:15;31899:29;31645:290;:::o;31941:366::-;32083:3;32104:67;32168:2;32163:3;32104:67;:::i;:::-;32097:74;;32180:93;32269:3;32180:93;:::i;:::-;32298:2;32293:3;32289:12;32282:19;;31941:366;;;:::o;32313:419::-;32479:4;32517:2;32506:9;32502:18;32494:26;;32566:9;32560:4;32556:20;32552:1;32541:9;32537:17;32530:47;32594:131;32720:4;32594:131;:::i;:::-;32586:139;;32313:419;;;:::o;32738:228::-;32878:34;32874:1;32866:6;32862:14;32855:58;32947:11;32942:2;32934:6;32930:15;32923:36;32738:228;:::o;32972:366::-;33114:3;33135:67;33199:2;33194:3;33135:67;:::i;:::-;33128:74;;33211:93;33300:3;33211:93;:::i;:::-;33329:2;33324:3;33320:12;33313:19;;32972:366;;;:::o;33344:419::-;33510:4;33548:2;33537:9;33533:18;33525:26;;33597:9;33591:4;33587:20;33583:1;33572:9;33568:17;33561:47;33625:131;33751:4;33625:131;:::i;:::-;33617:139;;33344:419;;;:::o

Swarm Source

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