ETH Price: $2,364.31 (+1.56%)

Token

ETHCORN (CORN)
 

Overview

Max Total Supply

420,690,000,000,000 CORN

Holders

65

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,035,203,284,068.672340116175833558 CORN

Value
$0.00
0x9e6a0ecb15dc1253d7d36726be237aae491c8845
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CORNToken

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-21
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/*
https://t.me/ethcorncoin
https://twitter.com/ethcorncoin
https://www.ethcorn.xyz/
*/

/**
 * @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/contracts/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/contracts/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/contracts/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/contracts/token/ERC20/extensions/ERC20Burnable.sol
 
 
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)
 
pragma solidity ^0.8.0;
 
 
 
/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}
 
// File: @openzeppelin/contracts/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);
    }
}
 
 
 
pragma solidity ^0.8.0;
 
contract CORNToken is Ownable, ERC20 {
    IUniswapV2Router02 public uniswapV2Router;
 
    uint256 public maxHoldingAmount =      9106900000000000000000000000000;
    uint256 public minAmountToSwapTaxes =  420690000000000000000000000000;
    bool inSwapAndLiq;
    bool paused = true;
    bool public limited = true;
    uint256 public buyTaxPercent = 1;
    uint256 public sellTaxPercent = 1;
    uint256 public launchedAt;
    bool taxesEnabled;
    address public marketingWallet1 = 0xF80F7Df2a26BDB61Fc41bf5d6D83Da699f217117; //99
    address public marketingWallet2 = 0xB5EDBD14d6058f108F8490983A5FbC461bAB88eF; //1



 
    address public uniswapV2Pair;
    mapping(address => bool) public _isExcludedFromFees;
 
    modifier lockTheSwap() {
        inSwapAndLiq = true;
        _;
        inSwapAndLiq = false;
    }
 
    constructor() ERC20("ETHCORN", "CORN") {
        _mint(msg.sender, 420690000000000000000000000000000);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
 
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
 
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet1] = true;
        _isExcludedFromFees[uniswapV2Pair] = true;
        _isExcludedFromFees[address(this)] = true;
 
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: transfer must be greater than 0");
 
        if (paused) {
            require(
                from == owner() || from == address(this) || from == 0xD152f549545093347A162Dce210e7293f1452150,
                "Trading not active yet"
            );
        }
 
        if (limited && from == uniswapV2Pair) {
            require(balanceOf(to) + amount <= maxHoldingAmount, "Forbid");
        }
 
        uint256 taxAmount;
        if (taxesEnabled) {
            //Buy
            if (from == uniswapV2Pair && buyTaxPercent != 0) {
                if (!_isExcludedFromFees[to]) {
                    getTax(block.number);
                    taxAmount = (amount * buyTaxPercent) / 100;
                }
            }
            // Sell
            if (to == uniswapV2Pair && sellTaxPercent != 0) {
                if (!_isExcludedFromFees[from]) {
                    getTax(block.number);
                    taxAmount = (amount * sellTaxPercent) / 100;
                }
            }
 
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinTokenBalance = contractTokenBalance >= minAmountToSwapTaxes;
 
            if (overMinTokenBalance && !inSwapAndLiq && from != uniswapV2Pair) {
                handleTax();
            }
        }
 
        // Fees
        if (taxAmount > 0) {
            uint256 userAmount = amount - taxAmount;
            super._transfer(from, address(this), taxAmount);
            super._transfer(from, to, userAmount);
        } else {
            super._transfer(from, to, amount);
        }
    }
 
    function handleTax() internal lockTheSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(
            address(this),
            address(uniswapV2Router),
            balanceOf(address(this))
        );
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            balanceOf(address(this)),
            0, // accept any amount of ETH
            path,
            address(this), // initially receive the ETH to this contract
            block.timestamp
        );
 
        uint256 contractBalance = address(this).balance;
        uint256 marketingWallet1Share = (contractBalance * 99) / 100; // 90%
        uint256 marketingWallet2Share = contractBalance - marketingWallet1Share; // 10%
 
        // Transfer to marketing wallets
        payable(marketingWallet1).transfer(marketingWallet1Share);
        payable(marketingWallet2).transfer(marketingWallet2Share);
    }
 
     function getTax(uint256 _block) internal {
        if (launchedAt  + 20 >= _block) {
            buyTaxPercent = 20;
            sellTaxPercent = 20;
            limited = false;
        } else if (launchedAt  + 21 >= _block) {
            buyTaxPercent = 15;
            sellTaxPercent = 15;
        } else if (launchedAt  + 22 >= _block) {
            buyTaxPercent = 5;
            sellTaxPercent = 5;
        } else {
            buyTaxPercent = 0;
            sellTaxPercent = 0;
        }
    }
 
    receive() external payable {}
 
    function changeMarketingWallet1(
        address _newMarketingWallet
    ) external onlyOwner {
        marketingWallet1 = _newMarketingWallet;
    }
    function changeMarketingWallet2(
        address _newMarketingWallet
    ) external onlyOwner {
        marketingWallet2 = _newMarketingWallet;
    }
 
    function changeTaxPercent(
        uint256 _newBuyTaxPercent,
        uint256 _newSellTaxPercent
    ) external onlyOwner {
        buyTaxPercent = _newBuyTaxPercent;
        sellTaxPercent = _newSellTaxPercent;
    }
 
    function excludeFromFees(
        address _address,
        bool _isExcluded
    ) external onlyOwner {
        _isExcludedFromFees[_address] = _isExcluded;
    }
 
    function changeMinAmountToSwapTaxes(
        uint256 newMinAmount
    ) external onlyOwner {
        require(newMinAmount > 0, "Cannot set to zero");
        minAmountToSwapTaxes = newMinAmount;
    }
 
    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }
 
    function enableTaxes(bool _enable) external onlyOwner {
        taxesEnabled = _enable;
    }
 
    function activate() external onlyOwner {
        paused = !paused;
        launchedAt = block.number;
        taxesEnabled = true;
    }
 
    function toggleLimited() external onlyOwner {
        limited = !limited;
    }
 
    function setRule(
        bool _limited,
        uint256 _maxHoldingAmount
    ) external onlyOwner {
        limited = _limited;
        maxHoldingAmount = _maxHoldingAmount;
    }
 
    function airdrop(
        address[] memory recipients,
        uint[] memory values
    ) external onlyOwner {
        uint256 total = 0;
        for (uint256 i; i < recipients.length; i++) total += values[i];
        _transfer(msg.sender, address(this), total);
        for (uint i; i < recipients.length; i++) {
            _transfer(address(this), recipients[i], values[i]);
        }
    }
}
 
// Interfaces
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );
 
    function feeTo() external view returns (address);
 
    function feeToSetter() external view returns (address);
 
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
 
    function allPairs(uint) external view returns (address pair);
 
    function allPairsLength() external view returns (uint);
 
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
 
    function setFeeTo(address) external;
 
    function setFeeToSetter(address) external;
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
 
    function symbol() external pure returns (string memory);
 
    function decimals() external pure returns (uint8);
 
    function totalSupply() external view returns (uint);
 
    function balanceOf(address owner) external view returns (uint);
 
    function allowance(
        address owner,
        address spender
    ) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
 
    function transfer(address to, uint value) external returns (bool);
 
    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
 
    function PERMIT_TYPEHASH() external pure returns (bytes32);
 
    function nonces(address owner) external view returns (uint);
 
    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
 
    function factory() external view returns (address);
 
    function token0() external view returns (address);
 
    function token1() external view returns (address);
 
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
 
    function price0CumulativeLast() external view returns (uint);
 
    function price1CumulativeLast() external view returns (uint);
 
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
 
    function burn(address to) external returns (uint amount0, uint amount1);
 
    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;
 
    function skim(address to) external;
 
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
 
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
 
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);
 
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
 
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
 
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);
 
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);
 
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
 
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
 
    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
 
    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
 
    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
 
    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
 
    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);
 
    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);
 
    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);
 
    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
 
    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
 
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
 
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
 
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newMarketingWallet","type":"address"}],"name":"changeMarketingWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMarketingWallet","type":"address"}],"name":"changeMarketingWallet2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinAmount","type":"uint256"}],"name":"changeMinAmountToSwapTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBuyTaxPercent","type":"uint256"},{"internalType":"uint256","name":"_newSellTaxPercent","type":"uint256"}],"name":"changeTaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromFees","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":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToSwapTaxes","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_limited","type":"bool"},{"internalType":"uint256","name":"_maxHoldingAmount","type":"uint256"}],"name":"setRule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleLimited","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526c72f1fb1ed66979e9de540000006007556c054f529ca52576bc68920000006008556001600960016101000a81548160ff0219169083151502179055506001600960026101000a81548160ff0219169083151502179055506001600a556001600b5573f80f7df2a26bdb61fc41bf5d6d83da699f217117600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b5edbd14d6058f108f8490983a5fbc461bab88ef600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200011b575f80fd5b506040518060400160405280600781526020017f455448434f524e000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f434f524e00000000000000000000000000000000000000000000000000000000815250620001a86200019c6200058660201b60201c565b6200058d60201b60201c565b8160049081620001b9919062000a22565b508060059081620001cb919062000a22565b505050620001ee336d14bddab3e51a57cff87a500000006200064e60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000251573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000277919062000b6b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000303919062000b6b565b6040518363ffffffff1660e01b81526004016200032292919062000bac565b6020604051808303815f875af11580156200033f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000365919062000b6b565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505062000ce8565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b69062000c35565b60405180910390fd5b620006d25f8383620007b460201b60201c565b8060035f828254620006e5919062000c82565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000795919062000ccd565b60405180910390a3620007b05f8383620007b960201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200083a57607f821691505b60208210810362000850576200084f620007f5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000877565b620008c0868362000877565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200090a62000904620008fe84620008d8565b620008e1565b620008d8565b9050919050565b5f819050919050565b6200092583620008ea565b6200093d620009348262000911565b84845462000883565b825550505050565b5f90565b6200095362000945565b620009608184846200091a565b505050565b5b8181101562000987576200097b5f8262000949565b60018101905062000966565b5050565b601f821115620009d657620009a08162000856565b620009ab8462000868565b81016020851015620009bb578190505b620009d3620009ca8562000868565b83018262000965565b50505b505050565b5f82821c905092915050565b5f620009f85f1984600802620009db565b1980831691505092915050565b5f62000a128383620009e7565b9150826002028217905092915050565b62000a2d82620007be565b67ffffffffffffffff81111562000a495762000a48620007c8565b5b62000a55825462000822565b62000a628282856200098b565b5f60209050601f83116001811462000a98575f841562000a83578287015190505b62000a8f858262000a05565b86555062000afe565b601f19841662000aa88662000856565b5f5b8281101562000ad15784890151825560018201915060208501945060208101905062000aaa565b8683101562000af1578489015162000aed601f891682620009e7565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000b358262000b0a565b9050919050565b62000b478162000b29565b811462000b52575f80fd5b50565b5f8151905062000b658162000b3c565b92915050565b5f6020828403121562000b835762000b8262000b06565b5b5f62000b928482850162000b55565b91505092915050565b62000ba68162000b29565b82525050565b5f60408201905062000bc15f83018562000b9b565b62000bd0602083018462000b9b565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000c1d601f8362000bd7565b915062000c2a8262000be7565b602082019050919050565b5f6020820190508181035f83015262000c4e8162000c0f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000c8e82620008d8565b915062000c9b83620008d8565b925082820190508082111562000cb65762000cb562000c55565b5b92915050565b62000cc781620008d8565b82525050565b5f60208201905062000ce25f83018462000cbc565b92915050565b6133a28062000cf65f395ff3fe608060405260043610610212575f3560e01c806370a0823111610117578063a457c2d71161009f578063c02466681161006e578063c024666814610755578063d21079e61461077d578063dd62ed3e146107a5578063e0bf7fd1146107e1578063f2fde38b1461081d57610219565b8063a457c2d71461068b578063a9059cbb146106c7578063b8a3483714610703578063bf56b3711461072b57610219565b8063860a32ec116100e6578063860a32ec146105bb57806389f9a1d3146105e55780638da5cb5b1461060f57806395d89b411461063957806397f92e951461066357610219565b806370a0823114610515578063715018a6146105515780637df405a41461056757806382f45cff1461059157610219565b8063302757441161019a57806342966c681161016957806342966c681461044757806349bd5a5e1461046f57806367243482146104995780636e4af82c146104c15780636fb1896c146104eb57610219565b80633027574414610391578063313ce567146103b957806339509351146103e35780633d5369f61461041f57610219565b80630d0020f2116101e15780630d0020f2146102c15780630f15f4c0146102eb5780631694505e1461030157806318160ddd1461032b57806323b872dd1461035557610219565b806303417ed51461021d57806306fdde031461023357806308d76dd91461025d578063095ea7b31461028557610219565b3661021957005b5f80fd5b348015610228575f80fd5b50610231610845565b005b34801561023e575f80fd5b50610247610879565b6040516102549190612206565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e9190612291565b610909565b005b348015610290575f80fd5b506102ab60048036038101906102a691906122ef565b610955565b6040516102b89190612347565b60405180910390f35b3480156102cc575f80fd5b506102d5610977565b6040516102e2919061236f565b60405180910390f35b3480156102f6575f80fd5b506102ff61099c565b005b34801561030c575f80fd5b506103156109f1565b60405161032291906123e3565b60405180910390f35b348015610336575f80fd5b5061033f610a16565b60405161034c919061240b565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190612424565b610a1f565b6040516103889190612347565b60405180910390f35b34801561039c575f80fd5b506103b760048036038101906103b2919061249e565b610a4d565b005b3480156103c4575f80fd5b506103cd610a71565b6040516103da91906124e4565b60405180910390f35b3480156103ee575f80fd5b50610409600480360381019061040491906122ef565b610a79565b6040516104169190612347565b60405180910390f35b34801561042a575f80fd5b50610445600480360381019061044091906124fd565b610aaf565b005b348015610452575f80fd5b5061046d600480360381019061046891906124fd565b610b03565b005b34801561047a575f80fd5b50610483610b10565b604051610490919061236f565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba9190612728565b610b35565b005b3480156104cc575f80fd5b506104d5610be7565b6040516104e2919061236f565b60405180910390f35b3480156104f6575f80fd5b506104ff610c0d565b60405161050c919061240b565b60405180910390f35b348015610520575f80fd5b5061053b60048036038101906105369190612291565b610c13565b604051610548919061240b565b60405180910390f35b34801561055c575f80fd5b50610565610c59565b005b348015610572575f80fd5b5061057b610c6c565b604051610588919061240b565b60405180910390f35b34801561059c575f80fd5b506105a5610c72565b6040516105b2919061240b565b60405180910390f35b3480156105c6575f80fd5b506105cf610c78565b6040516105dc9190612347565b60405180910390f35b3480156105f0575f80fd5b506105f9610c8b565b604051610606919061240b565b60405180910390f35b34801561061a575f80fd5b50610623610c91565b604051610630919061236f565b60405180910390f35b348015610644575f80fd5b5061064d610cb8565b60405161065a9190612206565b60405180910390f35b34801561066e575f80fd5b506106896004803603810190610684919061279e565b610d48565b005b348015610696575f80fd5b506106b160048036038101906106ac91906122ef565b610d62565b6040516106be9190612347565b60405180910390f35b3480156106d2575f80fd5b506106ed60048036038101906106e891906122ef565b610dd7565b6040516106fa9190612347565b60405180910390f35b34801561070e575f80fd5b5061072960048036038101906107249190612291565b610df9565b005b348015610736575f80fd5b5061073f610e44565b60405161074c919061240b565b60405180910390f35b348015610760575f80fd5b5061077b600480360381019061077691906127dc565b610e4a565b005b348015610788575f80fd5b506107a3600480360381019061079e919061281a565b610eaa565b005b3480156107b0575f80fd5b506107cb60048036038101906107c69190612858565b610ed7565b6040516107d8919061240b565b60405180910390f35b3480156107ec575f80fd5b5061080760048036038101906108029190612291565b610f59565b6040516108149190612347565b60405180910390f35b348015610828575f80fd5b50610843600480360381019061083e9190612291565b610f76565b005b61084d610ff8565b600960029054906101000a900460ff1615600960026101000a81548160ff021916908315150217905550565b606060048054610888906128c3565b80601f01602080910402602001604051908101604052809291908181526020018280546108b4906128c3565b80156108ff5780601f106108d6576101008083540402835291602001916108ff565b820191905f5260205f20905b8154815290600101906020018083116108e257829003601f168201915b5050505050905090565b610911610ff8565b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8061095f611076565b905061096c81858561107d565b600191505092915050565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109a4610ff8565b600960019054906101000a900460ff1615600960016101000a81548160ff02191690831515021790555043600c819055506001600d5f6101000a81548160ff021916908315150217905550565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354905090565b5f80610a29611076565b9050610a36858285611240565b610a418585856112cb565b60019150509392505050565b610a55610ff8565b80600d5f6101000a81548160ff02191690831515021790555050565b5f6012905090565b5f80610a83611076565b9050610aa4818585610a958589610ed7565b610a9f9190612920565b61107d565b600191505092915050565b610ab7610ff8565b5f8111610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af09061299d565b60405180910390fd5b8060088190555050565b610b0d338261185c565b50565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b3d610ff8565b5f805b8351811015610b7e57828181518110610b5c57610b5b6129bb565b5b602002602001015182610b6f9190612920565b91508080600101915050610b40565b50610b8a3330836112cb565b5f5b8351811015610be157610bd430858381518110610bac57610bab6129bb565b5b6020026020010151858481518110610bc757610bc66129bb565b5b60200260200101516112cb565b8080600101915050610b8c565b50505050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c61610ff8565b610c6a5f611a21565b565b600a5481565b60085481565b600960029054906101000a900460ff1681565b60075481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610cc7906128c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf3906128c3565b8015610d3e5780601f10610d1557610100808354040283529160200191610d3e565b820191905f5260205f20905b815481529060010190602001808311610d2157829003601f168201915b5050505050905090565b610d50610ff8565b81600a8190555080600b819055505050565b5f80610d6c611076565b90505f610d798286610ed7565b905083811015610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590612a58565b60405180910390fd5b610dcb828686840361107d565b60019250505092915050565b5f80610de1611076565b9050610dee8185856112cb565b600191505092915050565b610e01610ff8565b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b610e52610ff8565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610eb2610ff8565b81600960026101000a81548160ff021916908315150217905550806007819055505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6010602052805f5260405f205f915054906101000a900460ff1681565b610f7e610ff8565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612ae6565b60405180910390fd5b610ff581611a21565b50565b611000611076565b73ffffffffffffffffffffffffffffffffffffffff1661101e610c91565b73ffffffffffffffffffffffffffffffffffffffff1614611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90612b4e565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290612bdc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090612c6a565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611233919061240b565b60405180910390a3505050565b5f61124b8484610ed7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112c557818110156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90612cd2565b60405180910390fd5b6112c4848484840361107d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090612d60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612dee565b60405180910390fd5b5f81116113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e090612e7c565b60405180910390fd5b600960019054906101000a900460ff16156114f457611406610c91565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061146a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806114b4575073d152f549545093347a162dce210e7293f145215073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90612ee4565b60405180910390fd5b5b600960029054906101000a900460ff16801561155c5750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156115ba576007548161156e84610c13565b6115789190612920565b11156115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090612f4c565b60405180910390fd5b5b5f600d5f9054906101000a900460ff161561181757600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561162d57505f600a5414155b156116a75760105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166116a65761168943611ae2565b6064600a54836116999190612f6a565b6116a39190612fd8565b90505b5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561170557505f600b5414155b1561177f5760105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661177e5761176143611ae2565b6064600b54836117719190612f6a565b61177b9190612fd8565b90505b5b5f61178930610c13565b90505f60085482101590508080156117ad575060095f9054906101000a900460ff16155b80156118065750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b1561181457611813611b8e565b5b50505b5f81111561184a575f818361182c9190613008565b9050611839853084611f03565b611844858583611f03565b50611856565b611855848484611f03565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906130ab565b60405180910390fd5b6118d5825f83612172565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090613139565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a09919061240b565b60405180910390a3611a1c835f84612177565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806014600c54611af29190612920565b10611b26576014600a819055506014600b819055505f600960026101000a81548160ff021916908315150217905550611b8b565b806015600c54611b369190612920565b10611b5057600f600a81905550600f600b81905550611b8a565b806016600c54611b609190612920565b10611b7a576005600a819055506005600b81905550611b89565b5f600a819055505f600b819055505b5b5b50565b600160095f6101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611bc457611bc361252c565b5b604051908082528060200260200182016040528015611bf25781602001602082028036833780820191505090505b50905030815f81518110611c0957611c086129bb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd1919061316b565b81600181518110611ce557611ce46129bb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d533060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d4e30610c13565b61107d565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947611d9930610c13565b5f8430426040518663ffffffff1660e01b8152600401611dbd959493929190613286565b5f604051808303815f87803b158015611dd4575f80fd5b505af1158015611de6573d5f803e3d5ffd5b505050505f4790505f6064606383611dfe9190612f6a565b611e089190612fd8565b90505f8183611e179190613008565b9050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015611e7e573d5f803e3d5ffd5b50600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611ee3573d5f803e3d5ffd5b50505050505f60095f6101000a81548160ff021916908315150217905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890612d60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690612dee565b60405180910390fd5b611fea838383612172565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561206e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120659061334e565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612159919061240b565b60405180910390a361216c848484612177565b50505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156121b3578082015181840152602081019050612198565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6121d88261217c565b6121e28185612186565b93506121f2818560208601612196565b6121fb816121be565b840191505092915050565b5f6020820190508181035f83015261221e81846121ce565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61226082612237565b9050919050565b61227081612256565b811461227a575f80fd5b50565b5f8135905061228b81612267565b92915050565b5f602082840312156122a6576122a561222f565b5b5f6122b38482850161227d565b91505092915050565b5f819050919050565b6122ce816122bc565b81146122d8575f80fd5b50565b5f813590506122e9816122c5565b92915050565b5f80604083850312156123055761230461222f565b5b5f6123128582860161227d565b9250506020612323858286016122db565b9150509250929050565b5f8115159050919050565b6123418161232d565b82525050565b5f60208201905061235a5f830184612338565b92915050565b61236981612256565b82525050565b5f6020820190506123825f830184612360565b92915050565b5f819050919050565b5f6123ab6123a66123a184612237565b612388565b612237565b9050919050565b5f6123bc82612391565b9050919050565b5f6123cd826123b2565b9050919050565b6123dd816123c3565b82525050565b5f6020820190506123f65f8301846123d4565b92915050565b612405816122bc565b82525050565b5f60208201905061241e5f8301846123fc565b92915050565b5f805f6060848603121561243b5761243a61222f565b5b5f6124488682870161227d565b93505060206124598682870161227d565b925050604061246a868287016122db565b9150509250925092565b61247d8161232d565b8114612487575f80fd5b50565b5f8135905061249881612474565b92915050565b5f602082840312156124b3576124b261222f565b5b5f6124c08482850161248a565b91505092915050565b5f60ff82169050919050565b6124de816124c9565b82525050565b5f6020820190506124f75f8301846124d5565b92915050565b5f602082840312156125125761251161222f565b5b5f61251f848285016122db565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612562826121be565b810181811067ffffffffffffffff821117156125815761258061252c565b5b80604052505050565b5f612593612226565b905061259f8282612559565b919050565b5f67ffffffffffffffff8211156125be576125bd61252c565b5b602082029050602081019050919050565b5f80fd5b5f6125e56125e0846125a4565b61258a565b90508083825260208201905060208402830185811115612608576126076125cf565b5b835b81811015612631578061261d888261227d565b84526020840193505060208101905061260a565b5050509392505050565b5f82601f83011261264f5761264e612528565b5b813561265f8482602086016125d3565b91505092915050565b5f67ffffffffffffffff8211156126825761268161252c565b5b602082029050602081019050919050565b5f6126a56126a084612668565b61258a565b905080838252602082019050602084028301858111156126c8576126c76125cf565b5b835b818110156126f157806126dd88826122db565b8452602084019350506020810190506126ca565b5050509392505050565b5f82601f83011261270f5761270e612528565b5b813561271f848260208601612693565b91505092915050565b5f806040838503121561273e5761273d61222f565b5b5f83013567ffffffffffffffff81111561275b5761275a612233565b5b6127678582860161263b565b925050602083013567ffffffffffffffff81111561278857612787612233565b5b612794858286016126fb565b9150509250929050565b5f80604083850312156127b4576127b361222f565b5b5f6127c1858286016122db565b92505060206127d2858286016122db565b9150509250929050565b5f80604083850312156127f2576127f161222f565b5b5f6127ff8582860161227d565b92505060206128108582860161248a565b9150509250929050565b5f80604083850312156128305761282f61222f565b5b5f61283d8582860161248a565b925050602061284e858286016122db565b9150509250929050565b5f806040838503121561286e5761286d61222f565b5b5f61287b8582860161227d565b925050602061288c8582860161227d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806128da57607f821691505b6020821081036128ed576128ec612896565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61292a826122bc565b9150612935836122bc565b925082820190508082111561294d5761294c6128f3565b5b92915050565b7f43616e6e6f742073657420746f207a65726f00000000000000000000000000005f82015250565b5f612987601283612186565b915061299282612953565b602082019050919050565b5f6020820190508181035f8301526129b48161297b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612a42602583612186565b9150612a4d826129e8565b604082019050919050565b5f6020820190508181035f830152612a6f81612a36565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ad0602683612186565b9150612adb82612a76565b604082019050919050565b5f6020820190508181035f830152612afd81612ac4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b38602083612186565b9150612b4382612b04565b602082019050919050565b5f6020820190508181035f830152612b6581612b2c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612bc6602483612186565b9150612bd182612b6c565b604082019050919050565b5f6020820190508181035f830152612bf381612bba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612c54602283612186565b9150612c5f82612bfa565b604082019050919050565b5f6020820190508181035f830152612c8181612c48565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612cbc601d83612186565b9150612cc782612c88565b602082019050919050565b5f6020820190508181035f830152612ce981612cb0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612d4a602583612186565b9150612d5582612cf0565b604082019050919050565b5f6020820190508181035f830152612d7781612d3e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612dd8602383612186565b9150612de382612d7e565b604082019050919050565b5f6020820190508181035f830152612e0581612dcc565b9050919050565b7f45524332303a207472616e73666572206d7573742062652067726561746572205f8201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b5f612e66602683612186565b9150612e7182612e0c565b604082019050919050565b5f6020820190508181035f830152612e9381612e5a565b9050919050565b7f54726164696e67206e6f742061637469766520796574000000000000000000005f82015250565b5f612ece601683612186565b9150612ed982612e9a565b602082019050919050565b5f6020820190508181035f830152612efb81612ec2565b9050919050565b7f466f7262696400000000000000000000000000000000000000000000000000005f82015250565b5f612f36600683612186565b9150612f4182612f02565b602082019050919050565b5f6020820190508181035f830152612f6381612f2a565b9050919050565b5f612f74826122bc565b9150612f7f836122bc565b9250828202612f8d816122bc565b91508282048414831517612fa457612fa36128f3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fe2826122bc565b9150612fed836122bc565b925082612ffd57612ffc612fab565b5b828204905092915050565b5f613012826122bc565b915061301d836122bc565b9250828203905081811115613035576130346128f3565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613095602183612186565b91506130a08261303b565b604082019050919050565b5f6020820190508181035f8301526130c281613089565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613123602283612186565b915061312e826130c9565b604082019050919050565b5f6020820190508181035f83015261315081613117565b9050919050565b5f8151905061316581612267565b92915050565b5f602082840312156131805761317f61222f565b5b5f61318d84828501613157565b91505092915050565b5f819050919050565b5f6131b96131b46131af84613196565b612388565b6122bc565b9050919050565b6131c98161319f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61320181612256565b82525050565b5f61321283836131f8565b60208301905092915050565b5f602082019050919050565b5f613234826131cf565b61323e81856131d9565b9350613249836131e9565b805f5b838110156132795781516132608882613207565b975061326b8361321e565b92505060018101905061324c565b5085935050505092915050565b5f60a0820190506132995f8301886123fc565b6132a660208301876131c0565b81810360408301526132b8818661322a565b90506132c76060830185612360565b6132d460808301846123fc565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613338602683612186565b9150613343826132de565b604082019050919050565b5f6020820190508181035f8301526133658161332c565b905091905056fea26469706673582212203d73fcf8d9d36aea6343459e7d7c1acccc3c9e78629d5682b1896faf3533f06a64736f6c63430008160033

Deployed Bytecode

0x608060405260043610610212575f3560e01c806370a0823111610117578063a457c2d71161009f578063c02466681161006e578063c024666814610755578063d21079e61461077d578063dd62ed3e146107a5578063e0bf7fd1146107e1578063f2fde38b1461081d57610219565b8063a457c2d71461068b578063a9059cbb146106c7578063b8a3483714610703578063bf56b3711461072b57610219565b8063860a32ec116100e6578063860a32ec146105bb57806389f9a1d3146105e55780638da5cb5b1461060f57806395d89b411461063957806397f92e951461066357610219565b806370a0823114610515578063715018a6146105515780637df405a41461056757806382f45cff1461059157610219565b8063302757441161019a57806342966c681161016957806342966c681461044757806349bd5a5e1461046f57806367243482146104995780636e4af82c146104c15780636fb1896c146104eb57610219565b80633027574414610391578063313ce567146103b957806339509351146103e35780633d5369f61461041f57610219565b80630d0020f2116101e15780630d0020f2146102c15780630f15f4c0146102eb5780631694505e1461030157806318160ddd1461032b57806323b872dd1461035557610219565b806303417ed51461021d57806306fdde031461023357806308d76dd91461025d578063095ea7b31461028557610219565b3661021957005b5f80fd5b348015610228575f80fd5b50610231610845565b005b34801561023e575f80fd5b50610247610879565b6040516102549190612206565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e9190612291565b610909565b005b348015610290575f80fd5b506102ab60048036038101906102a691906122ef565b610955565b6040516102b89190612347565b60405180910390f35b3480156102cc575f80fd5b506102d5610977565b6040516102e2919061236f565b60405180910390f35b3480156102f6575f80fd5b506102ff61099c565b005b34801561030c575f80fd5b506103156109f1565b60405161032291906123e3565b60405180910390f35b348015610336575f80fd5b5061033f610a16565b60405161034c919061240b565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190612424565b610a1f565b6040516103889190612347565b60405180910390f35b34801561039c575f80fd5b506103b760048036038101906103b2919061249e565b610a4d565b005b3480156103c4575f80fd5b506103cd610a71565b6040516103da91906124e4565b60405180910390f35b3480156103ee575f80fd5b50610409600480360381019061040491906122ef565b610a79565b6040516104169190612347565b60405180910390f35b34801561042a575f80fd5b50610445600480360381019061044091906124fd565b610aaf565b005b348015610452575f80fd5b5061046d600480360381019061046891906124fd565b610b03565b005b34801561047a575f80fd5b50610483610b10565b604051610490919061236f565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba9190612728565b610b35565b005b3480156104cc575f80fd5b506104d5610be7565b6040516104e2919061236f565b60405180910390f35b3480156104f6575f80fd5b506104ff610c0d565b60405161050c919061240b565b60405180910390f35b348015610520575f80fd5b5061053b60048036038101906105369190612291565b610c13565b604051610548919061240b565b60405180910390f35b34801561055c575f80fd5b50610565610c59565b005b348015610572575f80fd5b5061057b610c6c565b604051610588919061240b565b60405180910390f35b34801561059c575f80fd5b506105a5610c72565b6040516105b2919061240b565b60405180910390f35b3480156105c6575f80fd5b506105cf610c78565b6040516105dc9190612347565b60405180910390f35b3480156105f0575f80fd5b506105f9610c8b565b604051610606919061240b565b60405180910390f35b34801561061a575f80fd5b50610623610c91565b604051610630919061236f565b60405180910390f35b348015610644575f80fd5b5061064d610cb8565b60405161065a9190612206565b60405180910390f35b34801561066e575f80fd5b506106896004803603810190610684919061279e565b610d48565b005b348015610696575f80fd5b506106b160048036038101906106ac91906122ef565b610d62565b6040516106be9190612347565b60405180910390f35b3480156106d2575f80fd5b506106ed60048036038101906106e891906122ef565b610dd7565b6040516106fa9190612347565b60405180910390f35b34801561070e575f80fd5b5061072960048036038101906107249190612291565b610df9565b005b348015610736575f80fd5b5061073f610e44565b60405161074c919061240b565b60405180910390f35b348015610760575f80fd5b5061077b600480360381019061077691906127dc565b610e4a565b005b348015610788575f80fd5b506107a3600480360381019061079e919061281a565b610eaa565b005b3480156107b0575f80fd5b506107cb60048036038101906107c69190612858565b610ed7565b6040516107d8919061240b565b60405180910390f35b3480156107ec575f80fd5b5061080760048036038101906108029190612291565b610f59565b6040516108149190612347565b60405180910390f35b348015610828575f80fd5b50610843600480360381019061083e9190612291565b610f76565b005b61084d610ff8565b600960029054906101000a900460ff1615600960026101000a81548160ff021916908315150217905550565b606060048054610888906128c3565b80601f01602080910402602001604051908101604052809291908181526020018280546108b4906128c3565b80156108ff5780601f106108d6576101008083540402835291602001916108ff565b820191905f5260205f20905b8154815290600101906020018083116108e257829003601f168201915b5050505050905090565b610911610ff8565b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8061095f611076565b905061096c81858561107d565b600191505092915050565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109a4610ff8565b600960019054906101000a900460ff1615600960016101000a81548160ff02191690831515021790555043600c819055506001600d5f6101000a81548160ff021916908315150217905550565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354905090565b5f80610a29611076565b9050610a36858285611240565b610a418585856112cb565b60019150509392505050565b610a55610ff8565b80600d5f6101000a81548160ff02191690831515021790555050565b5f6012905090565b5f80610a83611076565b9050610aa4818585610a958589610ed7565b610a9f9190612920565b61107d565b600191505092915050565b610ab7610ff8565b5f8111610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af09061299d565b60405180910390fd5b8060088190555050565b610b0d338261185c565b50565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b3d610ff8565b5f805b8351811015610b7e57828181518110610b5c57610b5b6129bb565b5b602002602001015182610b6f9190612920565b91508080600101915050610b40565b50610b8a3330836112cb565b5f5b8351811015610be157610bd430858381518110610bac57610bab6129bb565b5b6020026020010151858481518110610bc757610bc66129bb565b5b60200260200101516112cb565b8080600101915050610b8c565b50505050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c61610ff8565b610c6a5f611a21565b565b600a5481565b60085481565b600960029054906101000a900460ff1681565b60075481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610cc7906128c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf3906128c3565b8015610d3e5780601f10610d1557610100808354040283529160200191610d3e565b820191905f5260205f20905b815481529060010190602001808311610d2157829003601f168201915b5050505050905090565b610d50610ff8565b81600a8190555080600b819055505050565b5f80610d6c611076565b90505f610d798286610ed7565b905083811015610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590612a58565b60405180910390fd5b610dcb828686840361107d565b60019250505092915050565b5f80610de1611076565b9050610dee8185856112cb565b600191505092915050565b610e01610ff8565b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b610e52610ff8565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610eb2610ff8565b81600960026101000a81548160ff021916908315150217905550806007819055505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6010602052805f5260405f205f915054906101000a900460ff1681565b610f7e610ff8565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612ae6565b60405180910390fd5b610ff581611a21565b50565b611000611076565b73ffffffffffffffffffffffffffffffffffffffff1661101e610c91565b73ffffffffffffffffffffffffffffffffffffffff1614611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90612b4e565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290612bdc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090612c6a565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611233919061240b565b60405180910390a3505050565b5f61124b8484610ed7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112c557818110156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90612cd2565b60405180910390fd5b6112c4848484840361107d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090612d60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612dee565b60405180910390fd5b5f81116113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e090612e7c565b60405180910390fd5b600960019054906101000a900460ff16156114f457611406610c91565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061146a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806114b4575073d152f549545093347a162dce210e7293f145215073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90612ee4565b60405180910390fd5b5b600960029054906101000a900460ff16801561155c5750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156115ba576007548161156e84610c13565b6115789190612920565b11156115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090612f4c565b60405180910390fd5b5b5f600d5f9054906101000a900460ff161561181757600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561162d57505f600a5414155b156116a75760105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166116a65761168943611ae2565b6064600a54836116999190612f6a565b6116a39190612fd8565b90505b5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561170557505f600b5414155b1561177f5760105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661177e5761176143611ae2565b6064600b54836117719190612f6a565b61177b9190612fd8565b90505b5b5f61178930610c13565b90505f60085482101590508080156117ad575060095f9054906101000a900460ff16155b80156118065750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b1561181457611813611b8e565b5b50505b5f81111561184a575f818361182c9190613008565b9050611839853084611f03565b611844858583611f03565b50611856565b611855848484611f03565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906130ab565b60405180910390fd5b6118d5825f83612172565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090613139565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a09919061240b565b60405180910390a3611a1c835f84612177565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806014600c54611af29190612920565b10611b26576014600a819055506014600b819055505f600960026101000a81548160ff021916908315150217905550611b8b565b806015600c54611b369190612920565b10611b5057600f600a81905550600f600b81905550611b8a565b806016600c54611b609190612920565b10611b7a576005600a819055506005600b81905550611b89565b5f600a819055505f600b819055505b5b5b50565b600160095f6101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611bc457611bc361252c565b5b604051908082528060200260200182016040528015611bf25781602001602082028036833780820191505090505b50905030815f81518110611c0957611c086129bb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd1919061316b565b81600181518110611ce557611ce46129bb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d533060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d4e30610c13565b61107d565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947611d9930610c13565b5f8430426040518663ffffffff1660e01b8152600401611dbd959493929190613286565b5f604051808303815f87803b158015611dd4575f80fd5b505af1158015611de6573d5f803e3d5ffd5b505050505f4790505f6064606383611dfe9190612f6a565b611e089190612fd8565b90505f8183611e179190613008565b9050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015611e7e573d5f803e3d5ffd5b50600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611ee3573d5f803e3d5ffd5b50505050505f60095f6101000a81548160ff021916908315150217905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890612d60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690612dee565b60405180910390fd5b611fea838383612172565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561206e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120659061334e565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612159919061240b565b60405180910390a361216c848484612177565b50505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156121b3578082015181840152602081019050612198565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6121d88261217c565b6121e28185612186565b93506121f2818560208601612196565b6121fb816121be565b840191505092915050565b5f6020820190508181035f83015261221e81846121ce565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61226082612237565b9050919050565b61227081612256565b811461227a575f80fd5b50565b5f8135905061228b81612267565b92915050565b5f602082840312156122a6576122a561222f565b5b5f6122b38482850161227d565b91505092915050565b5f819050919050565b6122ce816122bc565b81146122d8575f80fd5b50565b5f813590506122e9816122c5565b92915050565b5f80604083850312156123055761230461222f565b5b5f6123128582860161227d565b9250506020612323858286016122db565b9150509250929050565b5f8115159050919050565b6123418161232d565b82525050565b5f60208201905061235a5f830184612338565b92915050565b61236981612256565b82525050565b5f6020820190506123825f830184612360565b92915050565b5f819050919050565b5f6123ab6123a66123a184612237565b612388565b612237565b9050919050565b5f6123bc82612391565b9050919050565b5f6123cd826123b2565b9050919050565b6123dd816123c3565b82525050565b5f6020820190506123f65f8301846123d4565b92915050565b612405816122bc565b82525050565b5f60208201905061241e5f8301846123fc565b92915050565b5f805f6060848603121561243b5761243a61222f565b5b5f6124488682870161227d565b93505060206124598682870161227d565b925050604061246a868287016122db565b9150509250925092565b61247d8161232d565b8114612487575f80fd5b50565b5f8135905061249881612474565b92915050565b5f602082840312156124b3576124b261222f565b5b5f6124c08482850161248a565b91505092915050565b5f60ff82169050919050565b6124de816124c9565b82525050565b5f6020820190506124f75f8301846124d5565b92915050565b5f602082840312156125125761251161222f565b5b5f61251f848285016122db565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612562826121be565b810181811067ffffffffffffffff821117156125815761258061252c565b5b80604052505050565b5f612593612226565b905061259f8282612559565b919050565b5f67ffffffffffffffff8211156125be576125bd61252c565b5b602082029050602081019050919050565b5f80fd5b5f6125e56125e0846125a4565b61258a565b90508083825260208201905060208402830185811115612608576126076125cf565b5b835b81811015612631578061261d888261227d565b84526020840193505060208101905061260a565b5050509392505050565b5f82601f83011261264f5761264e612528565b5b813561265f8482602086016125d3565b91505092915050565b5f67ffffffffffffffff8211156126825761268161252c565b5b602082029050602081019050919050565b5f6126a56126a084612668565b61258a565b905080838252602082019050602084028301858111156126c8576126c76125cf565b5b835b818110156126f157806126dd88826122db565b8452602084019350506020810190506126ca565b5050509392505050565b5f82601f83011261270f5761270e612528565b5b813561271f848260208601612693565b91505092915050565b5f806040838503121561273e5761273d61222f565b5b5f83013567ffffffffffffffff81111561275b5761275a612233565b5b6127678582860161263b565b925050602083013567ffffffffffffffff81111561278857612787612233565b5b612794858286016126fb565b9150509250929050565b5f80604083850312156127b4576127b361222f565b5b5f6127c1858286016122db565b92505060206127d2858286016122db565b9150509250929050565b5f80604083850312156127f2576127f161222f565b5b5f6127ff8582860161227d565b92505060206128108582860161248a565b9150509250929050565b5f80604083850312156128305761282f61222f565b5b5f61283d8582860161248a565b925050602061284e858286016122db565b9150509250929050565b5f806040838503121561286e5761286d61222f565b5b5f61287b8582860161227d565b925050602061288c8582860161227d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806128da57607f821691505b6020821081036128ed576128ec612896565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61292a826122bc565b9150612935836122bc565b925082820190508082111561294d5761294c6128f3565b5b92915050565b7f43616e6e6f742073657420746f207a65726f00000000000000000000000000005f82015250565b5f612987601283612186565b915061299282612953565b602082019050919050565b5f6020820190508181035f8301526129b48161297b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612a42602583612186565b9150612a4d826129e8565b604082019050919050565b5f6020820190508181035f830152612a6f81612a36565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ad0602683612186565b9150612adb82612a76565b604082019050919050565b5f6020820190508181035f830152612afd81612ac4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b38602083612186565b9150612b4382612b04565b602082019050919050565b5f6020820190508181035f830152612b6581612b2c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612bc6602483612186565b9150612bd182612b6c565b604082019050919050565b5f6020820190508181035f830152612bf381612bba565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612c54602283612186565b9150612c5f82612bfa565b604082019050919050565b5f6020820190508181035f830152612c8181612c48565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612cbc601d83612186565b9150612cc782612c88565b602082019050919050565b5f6020820190508181035f830152612ce981612cb0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612d4a602583612186565b9150612d5582612cf0565b604082019050919050565b5f6020820190508181035f830152612d7781612d3e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612dd8602383612186565b9150612de382612d7e565b604082019050919050565b5f6020820190508181035f830152612e0581612dcc565b9050919050565b7f45524332303a207472616e73666572206d7573742062652067726561746572205f8201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b5f612e66602683612186565b9150612e7182612e0c565b604082019050919050565b5f6020820190508181035f830152612e9381612e5a565b9050919050565b7f54726164696e67206e6f742061637469766520796574000000000000000000005f82015250565b5f612ece601683612186565b9150612ed982612e9a565b602082019050919050565b5f6020820190508181035f830152612efb81612ec2565b9050919050565b7f466f7262696400000000000000000000000000000000000000000000000000005f82015250565b5f612f36600683612186565b9150612f4182612f02565b602082019050919050565b5f6020820190508181035f830152612f6381612f2a565b9050919050565b5f612f74826122bc565b9150612f7f836122bc565b9250828202612f8d816122bc565b91508282048414831517612fa457612fa36128f3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fe2826122bc565b9150612fed836122bc565b925082612ffd57612ffc612fab565b5b828204905092915050565b5f613012826122bc565b915061301d836122bc565b9250828203905081811115613035576130346128f3565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613095602183612186565b91506130a08261303b565b604082019050919050565b5f6020820190508181035f8301526130c281613089565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613123602283612186565b915061312e826130c9565b604082019050919050565b5f6020820190508181035f83015261315081613117565b9050919050565b5f8151905061316581612267565b92915050565b5f602082840312156131805761317f61222f565b5b5f61318d84828501613157565b91505092915050565b5f819050919050565b5f6131b96131b46131af84613196565b612388565b6122bc565b9050919050565b6131c98161319f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61320181612256565b82525050565b5f61321283836131f8565b60208301905092915050565b5f602082019050919050565b5f613234826131cf565b61323e81856131d9565b9350613249836131e9565b805f5b838110156132795781516132608882613207565b975061326b8361321e565b92505060018101905061324c565b5085935050505092915050565b5f60a0820190506132995f8301886123fc565b6132a660208301876131c0565b81810360408301526132b8818661322a565b90506132c76060830185612360565b6132d460808301846123fc565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613338602683612186565b9150613343826132de565b604082019050919050565b5f6020820190508181035f8301526133658161332c565b905091905056fea26469706673582212203d73fcf8d9d36aea6343459e7d7c1acccc3c9e78629d5682b1896faf3533f06a64736f6c63430008160033

Deployed Bytecode Sourcemap

21581:7152:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28041:81;;;;;;;;;;;;;:::i;:::-;;6644:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26755:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9011:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22134:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27892:140;;;;;;;;;;;;;:::i;:::-;;21625:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7776:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9793:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27788:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7617:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10464:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27484:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27698:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22230:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28327:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22046:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21950:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7948:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20727:103;;;;;;;;;;;;;:::i;:::-;;21911:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21753:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21878:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21676:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20084:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6864:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27076:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11206:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8282:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26914:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21990:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27308:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28131:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8539:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22265:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20986:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28041:81;19969:13;:11;:13::i;:::-;28107:7:::1;;;;;;;;;;;28106:8;28096:7;;:18;;;;;;;;;;;;;;;;;;28041:81::o:0;6644:100::-;6698:13;6731:5;6724:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6644:100;:::o;26755:153::-;19969:13;:11;:13::i;:::-;26881:19:::1;26862:16;;:38;;;;;;;;;;;;;;;;;;26755:153:::0;:::o;9011:201::-;9094:4;9111:13;9127:12;:10;:12::i;:::-;9111:28;;9150:32;9159:5;9166:7;9175:6;9150:8;:32::i;:::-;9200:4;9193:11;;;9011:201;;;;:::o;22134:76::-;;;;;;;;;;;;;:::o;27892:140::-;19969:13;:11;:13::i;:::-;27952:6:::1;;;;;;;;;;;27951:7;27942:6;;:16;;;;;;;;;;;;;;;;;;27982:12;27969:10;:25;;;;28020:4;28005:12;;:19;;;;;;;;;;;;;;;;;;27892:140::o:0;21625:41::-;;;;;;;;;;;;;:::o;7776:108::-;7837:7;7864:12;;7857:19;;7776:108;:::o;9793:261::-;9890:4;9907:15;9925:12;:10;:12::i;:::-;9907:30;;9948:38;9964:4;9970:7;9979:6;9948:15;:38::i;:::-;9997:27;10007:4;10013:2;10017:6;9997:9;:27::i;:::-;10042:4;10035:11;;;9793:261;;;;;:::o;27788:95::-;19969:13;:11;:13::i;:::-;27868:7:::1;27853:12;;:22;;;;;;;;;;;;;;;;;;27788:95:::0;:::o;7617:93::-;7675:5;7700:2;7693:9;;7617:93;:::o;10464:238::-;10552:4;10569:13;10585:12;:10;:12::i;:::-;10569:28;;10608:64;10617:5;10624:7;10661:10;10633:25;10643:5;10650:7;10633:9;:25::i;:::-;:38;;;;:::i;:::-;10608:8;:64::i;:::-;10690:4;10683:11;;;10464:238;;;;:::o;27484:205::-;19969:13;:11;:13::i;:::-;27611:1:::1;27596:12;:16;27588:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;27669:12;27646:20;:35;;;;27484:205:::0;:::o;27698:81::-;27747:24;27753:10;27765:5;27747;:24::i;:::-;27698:81;:::o;22230:28::-;;;;;;;;;;;;;:::o;28327:403::-;19969:13;:11;:13::i;:::-;28450::::1;28483:9:::0;28478:62:::1;28498:10;:17;28494:1;:21;28478:62;;;28531:6;28538:1;28531:9;;;;;;;;:::i;:::-;;;;;;;;28522:18;;;;;:::i;:::-;;;28517:3;;;;;;;28478:62;;;;28551:43;28561:10;28581:4;28588:5;28551:9;:43::i;:::-;28610:6;28605:118;28622:10;:17;28618:1;:21;28605:118;;;28661:50;28679:4;28686:10;28697:1;28686:13;;;;;;;;:::i;:::-;;;;;;;;28701:6;28708:1;28701:9;;;;;;;;:::i;:::-;;;;;;;;28661;:50::i;:::-;28641:3;;;;;;;28605:118;;;;28439:291;28327:403:::0;;:::o;22046:76::-;;;;;;;;;;;;;:::o;21950:33::-;;;;:::o;7948:127::-;8022:7;8049:9;:18;8059:7;8049:18;;;;;;;;;;;;;;;;8042:25;;7948:127;;;:::o;20727:103::-;19969:13;:11;:13::i;:::-;20792:30:::1;20819:1;20792:18;:30::i;:::-;20727:103::o:0;21911:32::-;;;;:::o;21753:69::-;;;;:::o;21878:26::-;;;;;;;;;;;;;:::o;21676:70::-;;;;:::o;20084:87::-;20130:7;20157:6;;;;;;;;;;;20150:13;;20084:87;:::o;6864:104::-;6920:13;6953:7;6946:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6864:104;:::o;27076:223::-;19969:13;:11;:13::i;:::-;27228:17:::1;27212:13;:33;;;;27273:18;27256:14;:35;;;;27076:223:::0;;:::o;11206:437::-;11299:4;11316:13;11332:12;:10;:12::i;:::-;11316:28;;11355:24;11382:25;11392:5;11399:7;11382:9;:25::i;:::-;11355:52;;11446:15;11426:16;:35;;11418:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11539:60;11548:5;11555:7;11583:15;11564:16;:34;11539:8;:60::i;:::-;11631:4;11624:11;;;;11206:437;;;;:::o;8282:193::-;8361:4;8378:13;8394:12;:10;:12::i;:::-;8378:28;;8417;8427:5;8434:2;8438:6;8417:9;:28::i;:::-;8463:4;8456:11;;;8282:193;;;;:::o;26914:153::-;19969:13;:11;:13::i;:::-;27040:19:::1;27021:16;;:38;;;;;;;;;;;;;;;;;;26914:153:::0;:::o;21990:25::-;;;;:::o;27308:167::-;19969:13;:11;:13::i;:::-;27456:11:::1;27424:19;:29;27444:8;27424:29;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;27308:167:::0;;:::o;28131:187::-;19969:13;:11;:13::i;:::-;28255:8:::1;28245:7;;:18;;;;;;;;;;;;;;;;;;28293:17;28274:16;:36;;;;28131:187:::0;;:::o;8539:151::-;8628:7;8655:11;:18;8667:5;8655:18;;;;;;;;;;;;;;;:27;8674:7;8655:27;;;;;;;;;;;;;;;;8648:34;;8539:151;;;;:::o;22265:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;20986:201::-;19969:13;:11;:13::i;:::-;21095:1:::1;21075:22;;:8;:22;;::::0;21067:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21151:28;21170:8;21151:18;:28::i;:::-;20986:201:::0;:::o;20250:132::-;20325:12;:10;:12::i;:::-;20314:23;;:7;:5;:7::i;:::-;:23;;;20306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20250:132::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;15215:347::-;15334:1;15317:19;;:5;:19;;;15309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15415:1;15396:21;;:7;:21;;;15388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15500:6;15470:11;:18;15482:5;15470:18;;;;;;;;;;;;;;;:27;15489:7;15470:27;;;;;;;;;;;;;;;:36;;;;15538:7;15522:32;;15531:5;15522:32;;;15547:6;15522:32;;;;;;:::i;:::-;;;;;;;;15215:347;;;:::o;15854:419::-;15955:24;15982:25;15992:5;15999:7;15982:9;:25::i;:::-;15955:52;;16042:17;16022:16;:37;16018:248;;16104:6;16084:16;:26;;16076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16188:51;16197:5;16204:7;16232:6;16213:16;:25;16188:8;:51::i;:::-;16018:248;15944:329;15854:419;;;:::o;23142:1923::-;23290:1;23274:18;;:4;:18;;;23266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23367:1;23353:16;;:2;:16;;;23345:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23437:1;23428:6;:10;23420:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23499:6;;;;;;;;;;;23495:217;;;23556:7;:5;:7::i;:::-;23548:15;;:4;:15;;;:40;;;;23583:4;23567:21;;:4;:21;;;23548:40;:94;;;;23600:42;23592:50;;:4;:50;;;23548:94;23522:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;23495:217;23729:7;;;;;;;;;;;:32;;;;;23748:13;;;;;;;;;;;23740:21;;:4;:21;;;23729:32;23725:126;;;23812:16;;23802:6;23786:13;23796:2;23786:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;23778:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23725:126;23864:17;23896:12;;;;;;;;;;;23892:871;;;23956:13;;;;;;;;;;;23948:21;;:4;:21;;;:43;;;;;23990:1;23973:13;;:18;;23948:43;23944:241;;;24017:19;:23;24037:2;24017:23;;;;;;;;;;;;;;;;;;;;;;;;;24012:158;;24065:20;24072:12;24065:6;:20::i;:::-;24147:3;24130:13;;24121:6;:22;;;;:::i;:::-;24120:30;;;;:::i;:::-;24108:42;;24012:158;23944:241;24230:13;;;;;;;;;;;24224:19;;:2;:19;;;:42;;;;;24265:1;24247:14;;:19;;24224:42;24220:243;;;24292:19;:25;24312:4;24292:25;;;;;;;;;;;;;;;;;;;;;;;;;24287:161;;24342:20;24349:12;24342:6;:20::i;:::-;24425:3;24407:14;;24398:6;:23;;;;:::i;:::-;24397:31;;;;:::i;:::-;24385:43;;24287:161;24220:243;24480:28;24511:24;24529:4;24511:9;:24::i;:::-;24480:55;;24550:24;24601:20;;24577;:44;;24550:71;;24643:19;:36;;;;;24667:12;;;;;;;;;;;24666:13;24643:36;:61;;;;;24691:13;;;;;;;;;;;24683:21;;:4;:21;;;;24643:61;24639:113;;;24725:11;:9;:11::i;:::-;24639:113;23910:853;;23892:871;24809:1;24797:9;:13;24793:265;;;24827:18;24857:9;24848:6;:18;;;;:::i;:::-;24827:39;;24881:47;24897:4;24911;24918:9;24881:15;:47::i;:::-;24943:37;24959:4;24965:2;24969:10;24943:15;:37::i;:::-;24812:180;24793:265;;;25013:33;25029:4;25035:2;25039:6;25013:15;:33::i;:::-;24793:265;23255:1810;23142:1923;;;:::o;14097:679::-;14200:1;14181:21;;:7;:21;;;14173:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14254:49;14275:7;14292:1;14296:6;14254:20;:49::i;:::-;14317:22;14342:9;:18;14352:7;14342:18;;;;;;;;;;;;;;;;14317:43;;14397:6;14379:14;:24;;14371:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14516:6;14499:14;:23;14478:9;:18;14488:7;14478:18;;;;;;;;;;;;;;;:44;;;;14633:6;14617:12;;:22;;;;;;;;;;;14695:1;14669:37;;14678:7;14669:37;;;14699:6;14669:37;;;;;;:::i;:::-;;;;;;;;14720:48;14740:7;14757:1;14761:6;14720:19;:48::i;:::-;14162:614;14097:679;;:::o;21348:191::-;21422:16;21441:6;;;;;;;;;;;21422:25;;21467:8;21458:6;;:17;;;;;;;;;;;;;;;;;;21522:8;21491:40;;21512:8;21491:40;;;;;;;;;;;;21411:128;21348:191;:::o;26193:515::-;26269:6;26263:2;26249:10;;:16;;;;:::i;:::-;:26;26245:456;;26308:2;26292:13;:18;;;;26342:2;26325:14;:19;;;;26369:5;26359:7;;:15;;;;;;;;;;;;;;;;;;26245:456;;;26416:6;26410:2;26396:10;;:16;;;;:::i;:::-;:26;26392:309;;26455:2;26439:13;:18;;;;26489:2;26472:14;:19;;;;26392:309;;;26533:6;26527:2;26513:10;;:16;;;;:::i;:::-;:26;26509:192;;26572:1;26556:13;:17;;;;26605:1;26588:14;:18;;;;26509:192;;;26655:1;26639:13;:17;;;;26688:1;26671:14;:18;;;;26509:192;26392:309;26245:456;26193:515;:::o;25074:1109::-;22375:4;22360:12;;:19;;;;;;;;;;;;;;;;;;25187:21:::1;25225:1;25211:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25187:40;;25256:4;25238;25243:1;25238:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;25282:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25272:4;25277:1;25272:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;25318:125;25349:4;25377:15;;;;;;;;;;;25408:24;25426:4;25408:9;:24::i;:::-;25318:8;:125::i;:::-;25483:15;;;;;;;;;;;:66;;;25564:24;25582:4;25564:9;:24::i;:::-;25603:1;25647:4;25674;25740:15;25483:283;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25780:23;25806:21;25780:47;;25838:29;25895:3;25889:2;25871:15;:20;;;;:::i;:::-;25870:28;;;;:::i;:::-;25838:60;;25916:29;25966:21;25948:15;:39;;;;:::i;:::-;25916:71;;26058:16;;;;;;;;;;;26050:34;;:57;26085:21;26050:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26126:16;;;;;;;;;;;26118:34;;:57;26153:21;26118:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25116:1067;;;;22417:5:::0;22402:12;;:20;;;;;;;;;;;;;;;;;;25074:1109::o;12114:810::-;12227:1;12211:18;;:4;:18;;;12203:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12304:1;12290:16;;:2;:16;;;12282:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12360:38;12381:4;12387:2;12391:6;12360:20;:38::i;:::-;12412:19;12434:9;:15;12444:4;12434:15;;;;;;;;;;;;;;;;12412:37;;12483:6;12468:11;:21;;12460:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12600:6;12586:11;:20;12568:9;:15;12578:4;12568:15;;;;;;;;;;;;;;;:38;;;;12803:6;12786:9;:13;12796:2;12786:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12854:2;12839:26;;12848:4;12839:26;;;12858:6;12839:26;;;;;;:::i;:::-;;;;;;;;12879:37;12899:4;12905:2;12909:6;12879:19;:37::i;:::-;12192:732;12114:810;;;:::o;16874:91::-;;;;:::o;17570:90::-;;;;:::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;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::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:329::-;2242:6;2291:2;2279:9;2270:7;2266:23;2262:32;2259:119;;;2297:79;;:::i;:::-;2259:119;2417:1;2442:53;2487:7;2478:6;2467:9;2463:22;2442:53;:::i;:::-;2432:63;;2388:117;2183:329;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:118::-;5198:24;5216:5;5198:24;:::i;:::-;5193:3;5186:37;5111:118;;:::o;5235:222::-;5328:4;5366:2;5355:9;5351:18;5343:26;;5379:71;5447:1;5436:9;5432:17;5423:6;5379:71;:::i;:::-;5235:222;;;;:::o;5463:619::-;5540:6;5548;5556;5605:2;5593:9;5584:7;5580:23;5576:32;5573:119;;;5611:79;;:::i;:::-;5573:119;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;5463:619;;;;;:::o;6088:116::-;6158:21;6173:5;6158:21;:::i;:::-;6151:5;6148:32;6138:60;;6194:1;6191;6184:12;6138:60;6088:116;:::o;6210:133::-;6253:5;6291:6;6278:20;6269:29;;6307:30;6331:5;6307:30;:::i;:::-;6210:133;;;;:::o;6349:323::-;6405:6;6454:2;6442:9;6433:7;6429:23;6425:32;6422:119;;;6460:79;;:::i;:::-;6422:119;6580:1;6605:50;6647:7;6638:6;6627:9;6623:22;6605:50;:::i;:::-;6595:60;;6551:114;6349:323;;;;:::o;6678:86::-;6713:7;6753:4;6746:5;6742:16;6731:27;;6678:86;;;:::o;6770:112::-;6853:22;6869:5;6853:22;:::i;:::-;6848:3;6841:35;6770:112;;:::o;6888:214::-;6977:4;7015:2;7004:9;7000:18;6992:26;;7028:67;7092:1;7081:9;7077:17;7068:6;7028:67;:::i;:::-;6888:214;;;;:::o;7108:329::-;7167:6;7216:2;7204:9;7195:7;7191:23;7187:32;7184:119;;;7222:79;;:::i;:::-;7184:119;7342:1;7367:53;7412:7;7403:6;7392:9;7388:22;7367:53;:::i;:::-;7357:63;;7313:117;7108:329;;;;:::o;7443:117::-;7552:1;7549;7542:12;7566:180;7614:77;7611:1;7604:88;7711:4;7708:1;7701:15;7735:4;7732:1;7725:15;7752:281;7835:27;7857:4;7835:27;:::i;:::-;7827:6;7823:40;7965:6;7953:10;7950:22;7929:18;7917:10;7914:34;7911:62;7908:88;;;7976:18;;:::i;:::-;7908:88;8016:10;8012:2;8005:22;7795:238;7752:281;;:::o;8039:129::-;8073:6;8100:20;;:::i;:::-;8090:30;;8129:33;8157:4;8149:6;8129:33;:::i;:::-;8039:129;;;:::o;8174:311::-;8251:4;8341:18;8333:6;8330:30;8327:56;;;8363:18;;:::i;:::-;8327:56;8413:4;8405:6;8401:17;8393:25;;8473:4;8467;8463:15;8455:23;;8174:311;;;:::o;8491:117::-;8600:1;8597;8590:12;8631:710;8727:5;8752:81;8768:64;8825:6;8768:64;:::i;:::-;8752:81;:::i;:::-;8743:90;;8853:5;8882:6;8875:5;8868:21;8916:4;8909:5;8905:16;8898:23;;8969:4;8961:6;8957:17;8949:6;8945:30;8998:3;8990:6;8987:15;8984:122;;;9017:79;;:::i;:::-;8984:122;9132:6;9115:220;9149:6;9144:3;9141:15;9115:220;;;9224:3;9253:37;9286:3;9274:10;9253:37;:::i;:::-;9248:3;9241:50;9320:4;9315:3;9311:14;9304:21;;9191:144;9175:4;9170:3;9166:14;9159:21;;9115:220;;;9119:21;8733:608;;8631:710;;;;;:::o;9364:370::-;9435:5;9484:3;9477:4;9469:6;9465:17;9461:27;9451:122;;9492:79;;:::i;:::-;9451:122;9609:6;9596:20;9634:94;9724:3;9716:6;9709:4;9701:6;9697:17;9634:94;:::i;:::-;9625:103;;9441:293;9364:370;;;;:::o;9740:311::-;9817:4;9907:18;9899:6;9896:30;9893:56;;;9929:18;;:::i;:::-;9893:56;9979:4;9971:6;9967:17;9959:25;;10039:4;10033;10029:15;10021:23;;9740:311;;;:::o;10074:710::-;10170:5;10195:81;10211:64;10268:6;10211:64;:::i;:::-;10195:81;:::i;:::-;10186:90;;10296:5;10325:6;10318:5;10311:21;10359:4;10352:5;10348:16;10341:23;;10412:4;10404:6;10400:17;10392:6;10388:30;10441:3;10433:6;10430:15;10427:122;;;10460:79;;:::i;:::-;10427:122;10575:6;10558:220;10592:6;10587:3;10584:15;10558:220;;;10667:3;10696:37;10729:3;10717:10;10696:37;:::i;:::-;10691:3;10684:50;10763:4;10758:3;10754:14;10747:21;;10634:144;10618:4;10613:3;10609:14;10602:21;;10558:220;;;10562:21;10176:608;;10074:710;;;;;:::o;10807:370::-;10878:5;10927:3;10920:4;10912:6;10908:17;10904:27;10894:122;;10935:79;;:::i;:::-;10894:122;11052:6;11039:20;11077:94;11167:3;11159:6;11152:4;11144:6;11140:17;11077:94;:::i;:::-;11068:103;;10884:293;10807:370;;;;:::o;11183:894::-;11301:6;11309;11358:2;11346:9;11337:7;11333:23;11329:32;11326:119;;;11364:79;;:::i;:::-;11326:119;11512:1;11501:9;11497:17;11484:31;11542:18;11534:6;11531:30;11528:117;;;11564:79;;:::i;:::-;11528:117;11669:78;11739:7;11730:6;11719:9;11715:22;11669:78;:::i;:::-;11659:88;;11455:302;11824:2;11813:9;11809:18;11796:32;11855:18;11847:6;11844:30;11841:117;;;11877:79;;:::i;:::-;11841:117;11982:78;12052:7;12043:6;12032:9;12028:22;11982:78;:::i;:::-;11972:88;;11767:303;11183:894;;;;;:::o;12083:474::-;12151:6;12159;12208:2;12196:9;12187:7;12183:23;12179:32;12176:119;;;12214:79;;:::i;:::-;12176:119;12334:1;12359:53;12404:7;12395:6;12384:9;12380:22;12359:53;:::i;:::-;12349:63;;12305:117;12461:2;12487:53;12532:7;12523:6;12512:9;12508:22;12487:53;:::i;:::-;12477:63;;12432:118;12083:474;;;;;:::o;12563:468::-;12628:6;12636;12685:2;12673:9;12664:7;12660:23;12656:32;12653:119;;;12691:79;;:::i;:::-;12653:119;12811:1;12836:53;12881:7;12872:6;12861:9;12857:22;12836:53;:::i;:::-;12826:63;;12782:117;12938:2;12964:50;13006:7;12997:6;12986:9;12982:22;12964:50;:::i;:::-;12954:60;;12909:115;12563:468;;;;;:::o;13037:::-;13102:6;13110;13159:2;13147:9;13138:7;13134:23;13130:32;13127:119;;;13165:79;;:::i;:::-;13127:119;13285:1;13310:50;13352:7;13343:6;13332:9;13328:22;13310:50;:::i;:::-;13300:60;;13256:114;13409:2;13435:53;13480:7;13471:6;13460:9;13456:22;13435:53;:::i;:::-;13425:63;;13380:118;13037:468;;;;;:::o;13511:474::-;13579:6;13587;13636:2;13624:9;13615:7;13611:23;13607:32;13604:119;;;13642:79;;:::i;:::-;13604:119;13762:1;13787:53;13832:7;13823:6;13812:9;13808:22;13787:53;:::i;:::-;13777:63;;13733:117;13889:2;13915:53;13960:7;13951:6;13940:9;13936:22;13915:53;:::i;:::-;13905:63;;13860:118;13511:474;;;;;:::o;13991:180::-;14039:77;14036:1;14029:88;14136:4;14133:1;14126:15;14160:4;14157:1;14150:15;14177:320;14221:6;14258:1;14252:4;14248:12;14238:22;;14305:1;14299:4;14295:12;14326:18;14316:81;;14382:4;14374:6;14370:17;14360:27;;14316:81;14444:2;14436:6;14433:14;14413:18;14410:38;14407:84;;14463:18;;:::i;:::-;14407:84;14228:269;14177:320;;;:::o;14503:180::-;14551:77;14548:1;14541:88;14648:4;14645:1;14638:15;14672:4;14669:1;14662:15;14689:191;14729:3;14748:20;14766:1;14748:20;:::i;:::-;14743:25;;14782:20;14800:1;14782:20;:::i;:::-;14777:25;;14825:1;14822;14818:9;14811:16;;14846:3;14843:1;14840:10;14837:36;;;14853:18;;:::i;:::-;14837:36;14689:191;;;;:::o;14886:168::-;15026:20;15022:1;15014:6;15010:14;15003:44;14886:168;:::o;15060:366::-;15202:3;15223:67;15287:2;15282:3;15223:67;:::i;:::-;15216:74;;15299:93;15388:3;15299:93;:::i;:::-;15417:2;15412:3;15408:12;15401:19;;15060:366;;;:::o;15432:419::-;15598:4;15636:2;15625:9;15621:18;15613:26;;15685:9;15679:4;15675:20;15671:1;15660:9;15656:17;15649:47;15713:131;15839:4;15713:131;:::i;:::-;15705:139;;15432:419;;;:::o;15857:180::-;15905:77;15902:1;15895:88;16002:4;15999:1;15992:15;16026:4;16023:1;16016:15;16043:224;16183:34;16179:1;16171:6;16167:14;16160:58;16252:7;16247:2;16239:6;16235:15;16228:32;16043:224;:::o;16273:366::-;16415:3;16436:67;16500:2;16495:3;16436:67;:::i;:::-;16429:74;;16512:93;16601:3;16512:93;:::i;:::-;16630:2;16625:3;16621:12;16614:19;;16273:366;;;:::o;16645:419::-;16811:4;16849:2;16838:9;16834:18;16826:26;;16898:9;16892:4;16888:20;16884:1;16873:9;16869:17;16862:47;16926:131;17052:4;16926:131;:::i;:::-;16918:139;;16645:419;;;:::o;17070:225::-;17210:34;17206:1;17198:6;17194:14;17187:58;17279:8;17274:2;17266:6;17262:15;17255:33;17070:225;:::o;17301:366::-;17443:3;17464:67;17528:2;17523:3;17464:67;:::i;:::-;17457:74;;17540:93;17629:3;17540:93;:::i;:::-;17658:2;17653:3;17649:12;17642:19;;17301:366;;;:::o;17673:419::-;17839:4;17877:2;17866:9;17862:18;17854:26;;17926:9;17920:4;17916:20;17912:1;17901:9;17897:17;17890:47;17954:131;18080:4;17954:131;:::i;:::-;17946:139;;17673:419;;;:::o;18098:182::-;18238:34;18234:1;18226:6;18222:14;18215:58;18098:182;:::o;18286:366::-;18428:3;18449:67;18513:2;18508:3;18449:67;:::i;:::-;18442:74;;18525:93;18614:3;18525:93;:::i;:::-;18643:2;18638:3;18634:12;18627:19;;18286:366;;;:::o;18658:419::-;18824:4;18862:2;18851:9;18847:18;18839:26;;18911:9;18905:4;18901:20;18897:1;18886:9;18882:17;18875:47;18939:131;19065:4;18939:131;:::i;:::-;18931:139;;18658:419;;;:::o;19083:223::-;19223:34;19219:1;19211:6;19207:14;19200:58;19292:6;19287:2;19279:6;19275:15;19268:31;19083:223;:::o;19312:366::-;19454:3;19475:67;19539:2;19534:3;19475:67;:::i;:::-;19468:74;;19551:93;19640:3;19551:93;:::i;:::-;19669:2;19664:3;19660:12;19653:19;;19312:366;;;:::o;19684:419::-;19850:4;19888:2;19877:9;19873:18;19865:26;;19937:9;19931:4;19927:20;19923:1;19912:9;19908:17;19901:47;19965:131;20091:4;19965:131;:::i;:::-;19957:139;;19684:419;;;:::o;20109:221::-;20249:34;20245:1;20237:6;20233:14;20226:58;20318:4;20313:2;20305:6;20301:15;20294:29;20109:221;:::o;20336:366::-;20478:3;20499:67;20563:2;20558:3;20499:67;:::i;:::-;20492:74;;20575:93;20664:3;20575:93;:::i;:::-;20693:2;20688:3;20684:12;20677:19;;20336:366;;;:::o;20708:419::-;20874:4;20912:2;20901:9;20897:18;20889:26;;20961:9;20955:4;20951:20;20947:1;20936:9;20932:17;20925:47;20989:131;21115:4;20989:131;:::i;:::-;20981:139;;20708:419;;;:::o;21133:179::-;21273:31;21269:1;21261:6;21257:14;21250:55;21133:179;:::o;21318:366::-;21460:3;21481:67;21545:2;21540:3;21481:67;:::i;:::-;21474:74;;21557:93;21646:3;21557:93;:::i;:::-;21675:2;21670:3;21666:12;21659:19;;21318:366;;;:::o;21690:419::-;21856:4;21894:2;21883:9;21879:18;21871:26;;21943:9;21937:4;21933:20;21929:1;21918:9;21914:17;21907:47;21971:131;22097:4;21971:131;:::i;:::-;21963:139;;21690:419;;;:::o;22115:224::-;22255:34;22251:1;22243:6;22239:14;22232:58;22324:7;22319:2;22311:6;22307:15;22300:32;22115:224;:::o;22345:366::-;22487:3;22508:67;22572:2;22567:3;22508:67;:::i;:::-;22501:74;;22584:93;22673:3;22584:93;:::i;:::-;22702:2;22697:3;22693:12;22686:19;;22345:366;;;:::o;22717:419::-;22883:4;22921:2;22910:9;22906:18;22898:26;;22970:9;22964:4;22960:20;22956:1;22945:9;22941:17;22934:47;22998:131;23124:4;22998:131;:::i;:::-;22990:139;;22717:419;;;:::o;23142:222::-;23282:34;23278:1;23270:6;23266:14;23259:58;23351:5;23346:2;23338:6;23334:15;23327:30;23142:222;:::o;23370:366::-;23512:3;23533:67;23597:2;23592:3;23533:67;:::i;:::-;23526:74;;23609:93;23698:3;23609:93;:::i;:::-;23727:2;23722:3;23718:12;23711:19;;23370:366;;;:::o;23742:419::-;23908:4;23946:2;23935:9;23931:18;23923:26;;23995:9;23989:4;23985:20;23981:1;23970:9;23966:17;23959:47;24023:131;24149:4;24023:131;:::i;:::-;24015:139;;23742:419;;;:::o;24167:225::-;24307:34;24303:1;24295:6;24291:14;24284:58;24376:8;24371:2;24363:6;24359:15;24352:33;24167:225;:::o;24398:366::-;24540:3;24561:67;24625:2;24620:3;24561:67;:::i;:::-;24554:74;;24637:93;24726:3;24637:93;:::i;:::-;24755:2;24750:3;24746:12;24739:19;;24398:366;;;:::o;24770:419::-;24936:4;24974:2;24963:9;24959:18;24951:26;;25023:9;25017:4;25013:20;25009:1;24998:9;24994:17;24987:47;25051:131;25177:4;25051:131;:::i;:::-;25043:139;;24770:419;;;:::o;25195:172::-;25335:24;25331:1;25323:6;25319:14;25312:48;25195:172;:::o;25373:366::-;25515:3;25536:67;25600:2;25595:3;25536:67;:::i;:::-;25529:74;;25612:93;25701:3;25612:93;:::i;:::-;25730:2;25725:3;25721:12;25714:19;;25373:366;;;:::o;25745:419::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:156::-;26310:8;26306:1;26298:6;26294:14;26287:32;26170:156;:::o;26332:365::-;26474:3;26495:66;26559:1;26554:3;26495:66;:::i;:::-;26488:73;;26570:93;26659:3;26570:93;:::i;:::-;26688:2;26683:3;26679:12;26672:19;;26332:365;;;:::o;26703:419::-;26869:4;26907:2;26896:9;26892:18;26884:26;;26956:9;26950:4;26946:20;26942:1;26931:9;26927:17;26920:47;26984:131;27110:4;26984:131;:::i;:::-;26976:139;;26703:419;;;:::o;27128:410::-;27168:7;27191:20;27209:1;27191:20;:::i;:::-;27186:25;;27225:20;27243:1;27225:20;:::i;:::-;27220:25;;27280:1;27277;27273:9;27302:30;27320:11;27302:30;:::i;:::-;27291:41;;27481:1;27472:7;27468:15;27465:1;27462:22;27442:1;27435:9;27415:83;27392:139;;27511:18;;:::i;:::-;27392:139;27176:362;27128:410;;;;:::o;27544:180::-;27592:77;27589:1;27582:88;27689:4;27686:1;27679:15;27713:4;27710:1;27703:15;27730:185;27770:1;27787:20;27805:1;27787:20;:::i;:::-;27782:25;;27821:20;27839:1;27821:20;:::i;:::-;27816:25;;27860:1;27850:35;;27865:18;;:::i;:::-;27850:35;27907:1;27904;27900:9;27895:14;;27730:185;;;;:::o;27921:194::-;27961:4;27981:20;27999:1;27981:20;:::i;:::-;27976:25;;28015:20;28033:1;28015:20;:::i;:::-;28010:25;;28059:1;28056;28052:9;28044:17;;28083:1;28077:4;28074:11;28071:37;;;28088:18;;:::i;:::-;28071:37;27921:194;;;;:::o;28121:220::-;28261:34;28257:1;28249:6;28245:14;28238:58;28330:3;28325:2;28317:6;28313:15;28306:28;28121:220;:::o;28347:366::-;28489:3;28510:67;28574:2;28569:3;28510:67;:::i;:::-;28503:74;;28586:93;28675:3;28586:93;:::i;:::-;28704:2;28699:3;28695:12;28688:19;;28347:366;;;:::o;28719:419::-;28885:4;28923:2;28912:9;28908:18;28900:26;;28972:9;28966:4;28962:20;28958:1;28947:9;28943:17;28936:47;29000:131;29126:4;29000:131;:::i;:::-;28992:139;;28719:419;;;:::o;29144:221::-;29284:34;29280:1;29272:6;29268:14;29261:58;29353:4;29348:2;29340:6;29336:15;29329:29;29144:221;:::o;29371:366::-;29513:3;29534:67;29598:2;29593:3;29534:67;:::i;:::-;29527:74;;29610:93;29699:3;29610:93;:::i;:::-;29728:2;29723:3;29719:12;29712:19;;29371:366;;;:::o;29743:419::-;29909:4;29947:2;29936:9;29932:18;29924:26;;29996:9;29990:4;29986:20;29982:1;29971:9;29967:17;29960:47;30024:131;30150:4;30024:131;:::i;:::-;30016:139;;29743:419;;;:::o;30168:143::-;30225:5;30256:6;30250:13;30241:22;;30272:33;30299:5;30272:33;:::i;:::-;30168:143;;;;:::o;30317:351::-;30387:6;30436:2;30424:9;30415:7;30411:23;30407:32;30404:119;;;30442:79;;:::i;:::-;30404:119;30562:1;30587:64;30643:7;30634:6;30623:9;30619:22;30587:64;:::i;:::-;30577:74;;30533:128;30317:351;;;;:::o;30674:85::-;30719:7;30748:5;30737:16;;30674:85;;;:::o;30765:158::-;30823:9;30856:61;30874:42;30883:32;30909:5;30883:32;:::i;:::-;30874:42;:::i;:::-;30856:61;:::i;:::-;30843:74;;30765:158;;;:::o;30929:147::-;31024:45;31063:5;31024:45;:::i;:::-;31019:3;31012:58;30929:147;;:::o;31082:114::-;31149:6;31183:5;31177:12;31167:22;;31082:114;;;:::o;31202:184::-;31301:11;31335:6;31330:3;31323:19;31375:4;31370:3;31366:14;31351:29;;31202:184;;;;:::o;31392:132::-;31459:4;31482:3;31474:11;;31512:4;31507:3;31503:14;31495:22;;31392:132;;;:::o;31530:108::-;31607:24;31625:5;31607:24;:::i;:::-;31602:3;31595:37;31530:108;;:::o;31644:179::-;31713:10;31734:46;31776:3;31768:6;31734:46;:::i;:::-;31812:4;31807:3;31803:14;31789:28;;31644:179;;;;:::o;31829:113::-;31899:4;31931;31926:3;31922:14;31914:22;;31829:113;;;:::o;31978:732::-;32097:3;32126:54;32174:5;32126:54;:::i;:::-;32196:86;32275:6;32270:3;32196:86;:::i;:::-;32189:93;;32306:56;32356:5;32306:56;:::i;:::-;32385:7;32416:1;32401:284;32426:6;32423:1;32420:13;32401:284;;;32502:6;32496:13;32529:63;32588:3;32573:13;32529:63;:::i;:::-;32522:70;;32615:60;32668:6;32615:60;:::i;:::-;32605:70;;32461:224;32448:1;32445;32441:9;32436:14;;32401:284;;;32405:14;32701:3;32694:10;;32102:608;;;31978:732;;;;:::o;32716:831::-;32979:4;33017:3;33006:9;33002:19;32994:27;;33031:71;33099:1;33088:9;33084:17;33075:6;33031:71;:::i;:::-;33112:80;33188:2;33177:9;33173:18;33164:6;33112:80;:::i;:::-;33239:9;33233:4;33229:20;33224:2;33213:9;33209:18;33202:48;33267:108;33370:4;33361:6;33267:108;:::i;:::-;33259:116;;33385:72;33453:2;33442:9;33438:18;33429:6;33385:72;:::i;:::-;33467:73;33535:3;33524:9;33520:19;33511:6;33467:73;:::i;:::-;32716:831;;;;;;;;:::o;33553:225::-;33693:34;33689:1;33681:6;33677:14;33670:58;33762:8;33757:2;33749:6;33745:15;33738:33;33553:225;:::o;33784:366::-;33926:3;33947:67;34011:2;34006:3;33947:67;:::i;:::-;33940:74;;34023:93;34112:3;34023:93;:::i;:::-;34141:2;34136:3;34132:12;34125:19;;33784:366;;;:::o;34156:419::-;34322:4;34360:2;34349:9;34345:18;34337:26;;34409:9;34403:4;34399:20;34395:1;34384:9;34380:17;34373:47;34437:131;34563:4;34437:131;:::i;:::-;34429:139;;34156:419;;;:::o

Swarm Source

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