ETH Price: $2,940.27 (-4.15%)
Gas: 1 Gwei

Token

Mcdeez Coin (MCDEEZ)
 

Overview

Max Total Supply

420,690,000,000,000 MCDEEZ

Holders

734

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bawsaq.eth
Balance
21,554,665,523.221101306148817213 MCDEEZ

Value
$0.00
0x9065fa0ad9a094be452562904ab12e4ef61e5d79
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:
McdeezCoin

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-18
*/

/**
 *Submitted for verification at Etherscan.io on 2023-07-06
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

/*
                   .,cd$$$$$$$bec.
                ,e$$$$$$$$$$$$$$$$$bc
             ,e$$P""    "3$$$$""  "??$c
           .d$"          .$$$$        "?c
          e$$F   .,ce$$$$$$$$$$ecc,.    $b.
        .d$$$$$$P""""""?$$$$$$P????$$e..$$b.
       .$$$$$$F,="""""""^$$$$"====,,`"$$$$$$.
      .$$$$$$$ e$$$$$$$$ $$$P.e$$be."=`$$$$$$
     z$$$$$$$$<$$F  "$$$.$$$ $P"`?$$$e.$$$$$$b              z$$b. ..
    d$$$$$$$$$c"$b__z$P'd$$$b"   .$$$F,$$$$$$$c            .$$$$$.$$$c
   d$$$$$$$$$$$$e,`"`,e$$$$$$$c,,`",,e$$$$$$$$$       .$$$e,?$$$$F$$$$ b.
  .$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$b      4$$$$$c"$$$$$$$$%$$.
 .$$$$$$$$$P"e$$$$$$$$$$?????$$$$$$$$$$P$$$$$$$$.     4$$$$$$ed$$$$$$$$$$P
 d$$$$$$$Ezebd""????""        `"?$$$$$$F"?$$$$$$$.     $$$$$$$$$$$$$$$$$$%
z$$$$$$$$$$$$$$e.                `""" .zee3$$$$$$$     `$$$$$$$$$$$$$$$$$r
$$$$$$$$$$$$$$$$$$c. ;:;:,,;;;;     z$$$$$$$$$$$$$b     J$$$$$$$$$$$$$$$$F
$$$$$$$$$$$$$$$$$$$$$bc,""''"",cce$$$$$$$$$$$$$$$$$c    $$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$P"??$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$c .,$$$$$$$$$$$$$$$$"
$$$$$$$$$$$$$$P".d$$b`$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.?$$$$$$$$$$$$$$$$"
$$$$$$$$$P???"z$$$$$P.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$$$$$$$$$$$$?L
$$$$$$$$'d$b,$$$$$F'z$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$b $$$$$$$$$$$$b$%
$$$$$$$'$$$d$$$$$,,??$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$e"$$$$$$$$$$$$"
$$$$$$'$$$$$$$$$$$$$c"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$c"$$$$$$$$$P"
$$$$$'J$$$$$$$$$$$$$$>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$c3$$$$$$P"

    __                                   __                               
  _|  \_                                |  \                              
 /   $$ \  ______ ____    _______   ____| $$  ______    ______   ________ 
|  $$$$$$\|      \    \  /       \ /      $$ /      \  /      \ |        \
| $$___\$$| $$$$$$\$$$$\|  $$$$$$$|  $$$$$$$|  $$$$$$\|  $$$$$$\ \$$$$$$$$
 \$$    \ | $$ | $$ | $$| $$      | $$  | $$| $$    $$| $$    $$  /    $$ 
 _\$$$$$$\| $$ | $$ | $$| $$_____ | $$__| $$| $$$$$$$$| $$$$$$$$ /  $$$$_ 
|  \__/ $$| $$ | $$ | $$ \$$     \ \$$    $$ \$$     \ \$$     \|  $$    \
 \$$    $$ \$$  \$$  \$$  \$$$$$$$  \$$$$$$$  \$$$$$$$  \$$$$$$$ \$$$$$$$$
  \$$$$$$                                                                 
    \$$                                                                   
                                                                          
https://www.mcdeez.xyz/
https://twitter.com/mcdeezcoin
http://t.me/mcdeezcoin 

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/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);
    }
}

// File: yeyozerookay.sol





 
pragma solidity ^0.8.0;
 
contract McdeezCoin is Ownable, ERC20 {
    IUniswapV2Router02 public uniswapV2Router;
    bool public limited;
    bool taxesEnabled;
    uint256 public maxHoldingAmount;
    uint256 public buyTaxPercent = 1;
    uint256 public sellTaxPercent = 1;
    uint256 minAmountToSwapTaxes = (totalSupply() * 1) / 1000;
 
    bool inSwapAndLiq;
    bool paused = true;
 
    address public marketingWallet;
    address public uniswapV2Pair;
    mapping(address => bool) public blacklists;
    mapping(address => bool) public _isExcludedFromFees;
 
    modifier lockTheSwap() {
        inSwapAndLiq = true;
        _;
        inSwapAndLiq = false;
    }
 
    constructor() ERC20("Mcdeez Coin", "MCDEEZ") {
        _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[marketingWallet] = true;
        _isExcludedFromFees[uniswapV2Pair] = true;
        _isExcludedFromFees[address(this)] = true;
 
        marketingWallet = 0xB71649C08D4e8C1073E6AcC26E10003D0e26131b;
    }
 
    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),
                "Trading not active yet"
            );
        }
 
        require(!blacklists[to] && !blacklists[from], "Blacklisted");
 
        if (limited && from == uniswapV2Pair) {
            require(balanceOf(to) + amount <= maxHoldingAmount, "Forbid");
        }
 
        uint256 taxAmount;
        if (taxesEnabled) {
            //Buy
            if (from == uniswapV2Pair && buyTaxPercent != 0) {
                if (!_isExcludedFromFees[to]) {
                    taxAmount = (amount * buyTaxPercent) / 100;
                }
            }
            // Sell
            if (to == uniswapV2Pair && sellTaxPercent != 0) {
                if (!_isExcludedFromFees[from]) {
                    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,
            marketingWallet,
            block.timestamp
        );
    }
 
    function changeMarketingWallet(
        address _newMarketingWallet
    ) external onlyOwner {
        marketingWallet = _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;
    }
 
    function toggleLimited() external onlyOwner {
        limited = !limited;
    }
 
    function blacklist(
        address _address,
        bool _isBlacklisting
    ) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }
 
    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":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"changeMarketingWallet","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":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","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":"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"}]

6080604052600160085560016009556103e86001620000236200053e60201b60201c565b6200002f9190620007c5565b6200003b91906200083f565b600a556001600b60016101000a81548160ff0219169083151502179055503480156200006657600080fd5b506040518060400160405280600b81526020017f4d636465657a20436f696e0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d434445455a0000000000000000000000000000000000000000000000000000815250620000f3620000e76200054860201b60201c565b6200055060201b60201c565b816004908162000104919062000ae7565b50806005908162000116919062000ae7565b50505062000139336d14bddab3e51a57cff87a500000006200061460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c6919062000c38565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000254919062000c38565b6040518363ffffffff1660e01b81526004016200027392919062000c7b565b6020604051808303816000875af115801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b9919062000c38565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073b71649c08d4e8c1073e6acc26e10003d0e26131b600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000d94565b6000600354905090565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000686576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067d9062000d09565b60405180910390fd5b6200069a600083836200078260201b60201c565b8060036000828254620006ae919062000d2b565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000762919062000d77565b60405180910390a36200077e600083836200078760201b60201c565b5050565b505050565b505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007d2826200078c565b9150620007df836200078c565b9250828202620007ef816200078c565b9150828204841483151762000809576200080862000796565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200084c826200078c565b915062000859836200078c565b9250826200086c576200086b62000810565b5b828204905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008f957607f821691505b6020821081036200090f576200090e620008b1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009797fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200093a565b6200098586836200093a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009c8620009c2620009bc846200078c565b6200099d565b6200078c565b9050919050565b6000819050919050565b620009e483620009a7565b620009fc620009f382620009cf565b84845462000947565b825550505050565b600090565b62000a1362000a04565b62000a20818484620009d9565b505050565b5b8181101562000a485762000a3c60008262000a09565b60018101905062000a26565b5050565b601f82111562000a975762000a618162000915565b62000a6c846200092a565b8101602085101562000a7c578190505b62000a9462000a8b856200092a565b83018262000a25565b50505b505050565b600082821c905092915050565b600062000abc6000198460080262000a9c565b1980831691505092915050565b600062000ad7838362000aa9565b9150826002028217905092915050565b62000af28262000877565b67ffffffffffffffff81111562000b0e5762000b0d62000882565b5b62000b1a8254620008e0565b62000b2782828562000a4c565b600060209050601f83116001811462000b5f576000841562000b4a578287015190505b62000b56858262000ac9565b86555062000bc6565b601f19841662000b6f8662000915565b60005b8281101562000b995784890151825560018201915060208501945060208101905062000b72565b8683101562000bb9578489015162000bb5601f89168262000aa9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c008262000bd3565b9050919050565b62000c128162000bf3565b811462000c1e57600080fd5b50565b60008151905062000c328162000c07565b92915050565b60006020828403121562000c515762000c5062000bce565b5b600062000c618482850162000c21565b91505092915050565b62000c758162000bf3565b82525050565b600060408201905062000c92600083018562000c6a565b62000ca1602083018462000c6a565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cf1601f8362000ca8565b915062000cfe8262000cb9565b602082019050919050565b6000602082019050818103600083015262000d248162000ce2565b9050919050565b600062000d38826200078c565b915062000d45836200078c565b925082820190508082111562000d605762000d5f62000796565b5b92915050565b62000d71816200078c565b82525050565b600060208201905062000d8e600083018462000d66565b92915050565b6132608062000da46000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a57806397f92e95116100ad578063c02466681161007c578063c0246668146105a5578063d21079e6146105c1578063dd62ed3e146105dd578063e0bf7fd11461060d578063f2fde38b1461063d57610206565b806397f92e951461050d578063a457c2d714610529578063a9059cbb14610559578063bb85c6d11461058957610206565b8063860a32ec116100e9578063860a32ec1461049557806389f9a1d3146104b35780638da5cb5b146104d157806395d89b41146104ef57610206565b806370a082311461041f578063715018a61461044f57806375f0a874146104595780637df405a41461047757610206565b8063302757441161019d578063404e51291161016c578063404e51291461038f57806342966c68146103ab57806349bd5a5e146103c757806367243482146103e55780636fb1896c1461040157610206565b80633027574414610309578063313ce5671461032557806339509351146103435780633d5369f61461037357610206565b80631694505e116101d95780631694505e1461026d57806316c021291461028b57806318160ddd146102bb57806323b872dd146102d957610206565b806303417ed51461020b57806306fdde0314610215578063095ea7b3146102335780630f15f4c014610263575b600080fd5b610213610659565b005b61021d61068d565b60405161022a9190611f7b565b60405180910390f35b61024d60048036038101906102489190612045565b61071f565b60405161025a91906120a0565b60405180910390f35b61026b610742565b005b610275610776565b604051610282919061211a565b60405180910390f35b6102a560048036038101906102a09190612135565b61079c565b6040516102b291906120a0565b60405180910390f35b6102c36107bc565b6040516102d09190612171565b60405180910390f35b6102f360048036038101906102ee919061218c565b6107c6565b60405161030091906120a0565b60405180910390f35b610323600480360381019061031e919061220b565b6107f5565b005b61032d61081a565b60405161033a9190612254565b60405180910390f35b61035d60048036038101906103589190612045565b610823565b60405161036a91906120a0565b60405180910390f35b61038d6004803603810190610388919061226f565b61085a565b005b6103a960048036038101906103a4919061229c565b6108af565b005b6103c560048036038101906103c0919061226f565b610912565b005b6103cf61091f565b6040516103dc91906122eb565b60405180910390f35b6103ff60048036038101906103fa9190612511565b610945565b005b610409610a05565b6040516104169190612171565b60405180910390f35b61043960048036038101906104349190612135565b610a0b565b6040516104469190612171565b60405180910390f35b610457610a54565b005b610461610a68565b60405161046e91906122eb565b60405180910390f35b61047f610a8e565b60405161048c9190612171565b60405180910390f35b61049d610a94565b6040516104aa91906120a0565b60405180910390f35b6104bb610aa7565b6040516104c89190612171565b60405180910390f35b6104d9610aad565b6040516104e691906122eb565b60405180910390f35b6104f7610ad6565b6040516105049190611f7b565b60405180910390f35b61052760048036038101906105229190612589565b610b68565b005b610543600480360381019061053e9190612045565b610b82565b60405161055091906120a0565b60405180910390f35b610573600480360381019061056e9190612045565b610bf9565b60405161058091906120a0565b60405180910390f35b6105a3600480360381019061059e9190612135565b610c1c565b005b6105bf60048036038101906105ba919061229c565b610c68565b005b6105db60048036038101906105d691906125c9565b610ccb565b005b6105f760048036038101906105f29190612609565b610cf8565b6040516106049190612171565b60405180910390f35b61062760048036038101906106229190612135565b610d7f565b60405161063491906120a0565b60405180910390f35b61065760048036038101906106529190612135565b610d9f565b005b610661610e22565b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b60606004805461069c90612678565b80601f01602080910402602001604051908101604052809291908181526020018280546106c890612678565b80156107155780601f106106ea57610100808354040283529160200191610715565b820191906000526020600020905b8154815290600101906020018083116106f857829003601f168201915b5050505050905090565b60008061072a610ea0565b9050610737818585610ea8565b600191505092915050565b61074a610e22565b600b60019054906101000a900460ff1615600b60016101000a81548160ff021916908315150217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600354905090565b6000806107d1610ea0565b90506107de858285611071565b6107e98585856110fd565b60019150509392505050565b6107fd610e22565b80600660156101000a81548160ff02191690831515021790555050565b60006012905090565b60008061082e610ea0565b905061084f8185856108408589610cf8565b61084a91906126d8565b610ea8565b600191505092915050565b610862610e22565b600081116108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90612758565b60405180910390fd5b80600a8190555050565b6108b7610e22565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61091c338261172b565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61094d610e22565b6000805b83518110156109955782818151811061096d5761096c612778565b5b60200260200101518261098091906126d8565b9150808061098d906127a7565b915050610951565b506109a13330836110fd565b60005b83518110156109ff576109ec308583815181106109c4576109c3612778565b5b60200260200101518584815181106109df576109de612778565b5b60200260200101516110fd565b80806109f7906127a7565b9150506109a4565b50505050565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a5c610e22565b610a6660006118fa565b565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b600660149054906101000a900460ff1681565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610ae590612678565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1190612678565b8015610b5e5780601f10610b3357610100808354040283529160200191610b5e565b820191906000526020600020905b815481529060010190602001808311610b4157829003601f168201915b5050505050905090565b610b70610e22565b81600881905550806009819055505050565b600080610b8d610ea0565b90506000610b9b8286610cf8565b905083811015610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790612861565b60405180910390fd5b610bed8286868403610ea8565b60019250505092915050565b600080610c04610ea0565b9050610c118185856110fd565b600191505092915050565b610c24610e22565b80600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c70610e22565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610cd3610e22565b81600660146101000a81548160ff021916908315150217905550806007819055505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e6020528060005260406000206000915054906101000a900460ff1681565b610da7610e22565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d906128f3565b60405180910390fd5b610e1f816118fa565b50565b610e2a610ea0565b73ffffffffffffffffffffffffffffffffffffffff16610e48610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061295f565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e906129f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90612a83565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110649190612171565b60405180910390a3505050565b600061107d8484610cf8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110f757818110156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090612aef565b60405180910390fd5b6110f68484848403610ea8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390612b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290612c13565b60405180910390fd5b6000811161121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590612ca5565b60405180910390fd5b600b60019054906101000a900460ff16156112df5761123b610aad565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061129f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590612d11565b60405180910390fd5b5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113835750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612d7d565b60405180910390fd5b600660149054906101000a900460ff16801561142b5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611489576007548161143d84610a0b565b61144791906126d8565b1115611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147f90612de9565b60405180910390fd5b5b6000600660159054906101000a900460ff16156116e457600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156115005750600060085414155b1561157457600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611573576064600854836115669190612e09565b6115709190612e7a565b90505b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156115d45750600060095414155b1561164857600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116475760646009548361163a9190612e09565b6116449190612e7a565b90505b5b600061165330610a0b565b90506000600a5482101590508080156116795750600b60009054906101000a900460ff16155b80156116d35750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b156116e1576116e06119be565b5b50505b600081111561171957600081836116fb9190612eab565b9050611708853084611c68565b611713858583611c68565b50611725565b611724848484611c68565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190612f51565b60405180910390fd5b6117a682600083611ee1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182490612fe3565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118e19190612171565b60405180910390a36118f583600084611ee6565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600b60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156119f6576119f561230b565b5b604051908082528060200260200182016040528015611a245781602001602082028036833780820191505090505b5090503081600081518110611a3c57611a3b612778565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613018565b81600181518110611b1b57611b1a612778565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b8a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b8530610a0b565b610ea8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947611bd130610a0b565b600084600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611c1895949392919061313e565b600060405180830381600087803b158015611c3257600080fd5b505af1158015611c46573d6000803e3d6000fd5b50505050506000600b60006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90612b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90612c13565b60405180910390fd5b611d51838383611ee1565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf9061320a565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ec89190612171565b60405180910390a3611edb848484611ee6565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f25578082015181840152602081019050611f0a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f4d82611eeb565b611f578185611ef6565b9350611f67818560208601611f07565b611f7081611f31565b840191505092915050565b60006020820190508181036000830152611f958184611f42565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fdc82611fb1565b9050919050565b611fec81611fd1565b8114611ff757600080fd5b50565b60008135905061200981611fe3565b92915050565b6000819050919050565b6120228161200f565b811461202d57600080fd5b50565b60008135905061203f81612019565b92915050565b6000806040838503121561205c5761205b611fa7565b5b600061206a85828601611ffa565b925050602061207b85828601612030565b9150509250929050565b60008115159050919050565b61209a81612085565b82525050565b60006020820190506120b56000830184612091565b92915050565b6000819050919050565b60006120e06120db6120d684611fb1565b6120bb565b611fb1565b9050919050565b60006120f2826120c5565b9050919050565b6000612104826120e7565b9050919050565b612114816120f9565b82525050565b600060208201905061212f600083018461210b565b92915050565b60006020828403121561214b5761214a611fa7565b5b600061215984828501611ffa565b91505092915050565b61216b8161200f565b82525050565b60006020820190506121866000830184612162565b92915050565b6000806000606084860312156121a5576121a4611fa7565b5b60006121b386828701611ffa565b93505060206121c486828701611ffa565b92505060406121d586828701612030565b9150509250925092565b6121e881612085565b81146121f357600080fd5b50565b600081359050612205816121df565b92915050565b60006020828403121561222157612220611fa7565b5b600061222f848285016121f6565b91505092915050565b600060ff82169050919050565b61224e81612238565b82525050565b60006020820190506122696000830184612245565b92915050565b60006020828403121561228557612284611fa7565b5b600061229384828501612030565b91505092915050565b600080604083850312156122b3576122b2611fa7565b5b60006122c185828601611ffa565b92505060206122d2858286016121f6565b9150509250929050565b6122e581611fd1565b82525050565b600060208201905061230060008301846122dc565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61234382611f31565b810181811067ffffffffffffffff821117156123625761236161230b565b5b80604052505050565b6000612375611f9d565b9050612381828261233a565b919050565b600067ffffffffffffffff8211156123a1576123a061230b565b5b602082029050602081019050919050565b600080fd5b60006123ca6123c584612386565b61236b565b905080838252602082019050602084028301858111156123ed576123ec6123b2565b5b835b8181101561241657806124028882611ffa565b8452602084019350506020810190506123ef565b5050509392505050565b600082601f83011261243557612434612306565b5b81356124458482602086016123b7565b91505092915050565b600067ffffffffffffffff8211156124695761246861230b565b5b602082029050602081019050919050565b600061248d6124888461244e565b61236b565b905080838252602082019050602084028301858111156124b0576124af6123b2565b5b835b818110156124d957806124c58882612030565b8452602084019350506020810190506124b2565b5050509392505050565b600082601f8301126124f8576124f7612306565b5b813561250884826020860161247a565b91505092915050565b6000806040838503121561252857612527611fa7565b5b600083013567ffffffffffffffff81111561254657612545611fac565b5b61255285828601612420565b925050602083013567ffffffffffffffff81111561257357612572611fac565b5b61257f858286016124e3565b9150509250929050565b600080604083850312156125a05761259f611fa7565b5b60006125ae85828601612030565b92505060206125bf85828601612030565b9150509250929050565b600080604083850312156125e0576125df611fa7565b5b60006125ee858286016121f6565b92505060206125ff85828601612030565b9150509250929050565b600080604083850312156126205761261f611fa7565b5b600061262e85828601611ffa565b925050602061263f85828601611ffa565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061269057607f821691505b6020821081036126a3576126a2612649565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126e38261200f565b91506126ee8361200f565b9250828201905080821115612706576127056126a9565b5b92915050565b7f43616e6e6f742073657420746f207a65726f0000000000000000000000000000600082015250565b6000612742601283611ef6565b915061274d8261270c565b602082019050919050565b6000602082019050818103600083015261277181612735565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006127b28261200f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127e4576127e36126a9565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061284b602583611ef6565b9150612856826127ef565b604082019050919050565b6000602082019050818103600083015261287a8161283e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006128dd602683611ef6565b91506128e882612881565b604082019050919050565b6000602082019050818103600083015261290c816128d0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612949602083611ef6565b915061295482612913565b602082019050919050565b600060208201905081810360008301526129788161293c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129db602483611ef6565b91506129e68261297f565b604082019050919050565b60006020820190508181036000830152612a0a816129ce565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a6d602283611ef6565b9150612a7882612a11565b604082019050919050565b60006020820190508181036000830152612a9c81612a60565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ad9601d83611ef6565b9150612ae482612aa3565b602082019050919050565b60006020820190508181036000830152612b0881612acc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b6b602583611ef6565b9150612b7682612b0f565b604082019050919050565b60006020820190508181036000830152612b9a81612b5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612bfd602383611ef6565b9150612c0882612ba1565b604082019050919050565b60006020820190508181036000830152612c2c81612bf0565b9050919050565b7f45524332303a207472616e73666572206d75737420626520677265617465722060008201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b6000612c8f602683611ef6565b9150612c9a82612c33565b604082019050919050565b60006020820190508181036000830152612cbe81612c82565b9050919050565b7f54726164696e67206e6f74206163746976652079657400000000000000000000600082015250565b6000612cfb601683611ef6565b9150612d0682612cc5565b602082019050919050565b60006020820190508181036000830152612d2a81612cee565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000612d67600b83611ef6565b9150612d7282612d31565b602082019050919050565b60006020820190508181036000830152612d9681612d5a565b9050919050565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b6000612dd3600683611ef6565b9150612dde82612d9d565b602082019050919050565b60006020820190508181036000830152612e0281612dc6565b9050919050565b6000612e148261200f565b9150612e1f8361200f565b9250828202612e2d8161200f565b91508282048414831517612e4457612e436126a9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e858261200f565b9150612e908361200f565b925082612ea057612e9f612e4b565b5b828204905092915050565b6000612eb68261200f565b9150612ec18361200f565b9250828203905081811115612ed957612ed86126a9565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f3b602183611ef6565b9150612f4682612edf565b604082019050919050565b60006020820190508181036000830152612f6a81612f2e565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fcd602283611ef6565b9150612fd882612f71565b604082019050919050565b60006020820190508181036000830152612ffc81612fc0565b9050919050565b60008151905061301281611fe3565b92915050565b60006020828403121561302e5761302d611fa7565b5b600061303c84828501613003565b91505092915050565b6000819050919050565b600061306a61306561306084613045565b6120bb565b61200f565b9050919050565b61307a8161304f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130b581611fd1565b82525050565b60006130c783836130ac565b60208301905092915050565b6000602082019050919050565b60006130eb82613080565b6130f5818561308b565b93506131008361309c565b8060005b8381101561313157815161311888826130bb565b9750613123836130d3565b925050600181019050613104565b5085935050505092915050565b600060a0820190506131536000830188612162565b6131606020830187613071565b818103604083015261317281866130e0565b905061318160608301856122dc565b61318e6080830184612162565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006131f4602683611ef6565b91506131ff82613198565b604082019050919050565b60006020820190508181036000830152613223816131e7565b905091905056fea26469706673582212202b35b2f87f3166f827be62536773900c3efcc6f46b8d5efa9f15f801f728deec64736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a57806397f92e95116100ad578063c02466681161007c578063c0246668146105a5578063d21079e6146105c1578063dd62ed3e146105dd578063e0bf7fd11461060d578063f2fde38b1461063d57610206565b806397f92e951461050d578063a457c2d714610529578063a9059cbb14610559578063bb85c6d11461058957610206565b8063860a32ec116100e9578063860a32ec1461049557806389f9a1d3146104b35780638da5cb5b146104d157806395d89b41146104ef57610206565b806370a082311461041f578063715018a61461044f57806375f0a874146104595780637df405a41461047757610206565b8063302757441161019d578063404e51291161016c578063404e51291461038f57806342966c68146103ab57806349bd5a5e146103c757806367243482146103e55780636fb1896c1461040157610206565b80633027574414610309578063313ce5671461032557806339509351146103435780633d5369f61461037357610206565b80631694505e116101d95780631694505e1461026d57806316c021291461028b57806318160ddd146102bb57806323b872dd146102d957610206565b806303417ed51461020b57806306fdde0314610215578063095ea7b3146102335780630f15f4c014610263575b600080fd5b610213610659565b005b61021d61068d565b60405161022a9190611f7b565b60405180910390f35b61024d60048036038101906102489190612045565b61071f565b60405161025a91906120a0565b60405180910390f35b61026b610742565b005b610275610776565b604051610282919061211a565b60405180910390f35b6102a560048036038101906102a09190612135565b61079c565b6040516102b291906120a0565b60405180910390f35b6102c36107bc565b6040516102d09190612171565b60405180910390f35b6102f360048036038101906102ee919061218c565b6107c6565b60405161030091906120a0565b60405180910390f35b610323600480360381019061031e919061220b565b6107f5565b005b61032d61081a565b60405161033a9190612254565b60405180910390f35b61035d60048036038101906103589190612045565b610823565b60405161036a91906120a0565b60405180910390f35b61038d6004803603810190610388919061226f565b61085a565b005b6103a960048036038101906103a4919061229c565b6108af565b005b6103c560048036038101906103c0919061226f565b610912565b005b6103cf61091f565b6040516103dc91906122eb565b60405180910390f35b6103ff60048036038101906103fa9190612511565b610945565b005b610409610a05565b6040516104169190612171565b60405180910390f35b61043960048036038101906104349190612135565b610a0b565b6040516104469190612171565b60405180910390f35b610457610a54565b005b610461610a68565b60405161046e91906122eb565b60405180910390f35b61047f610a8e565b60405161048c9190612171565b60405180910390f35b61049d610a94565b6040516104aa91906120a0565b60405180910390f35b6104bb610aa7565b6040516104c89190612171565b60405180910390f35b6104d9610aad565b6040516104e691906122eb565b60405180910390f35b6104f7610ad6565b6040516105049190611f7b565b60405180910390f35b61052760048036038101906105229190612589565b610b68565b005b610543600480360381019061053e9190612045565b610b82565b60405161055091906120a0565b60405180910390f35b610573600480360381019061056e9190612045565b610bf9565b60405161058091906120a0565b60405180910390f35b6105a3600480360381019061059e9190612135565b610c1c565b005b6105bf60048036038101906105ba919061229c565b610c68565b005b6105db60048036038101906105d691906125c9565b610ccb565b005b6105f760048036038101906105f29190612609565b610cf8565b6040516106049190612171565b60405180910390f35b61062760048036038101906106229190612135565b610d7f565b60405161063491906120a0565b60405180910390f35b61065760048036038101906106529190612135565b610d9f565b005b610661610e22565b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b60606004805461069c90612678565b80601f01602080910402602001604051908101604052809291908181526020018280546106c890612678565b80156107155780601f106106ea57610100808354040283529160200191610715565b820191906000526020600020905b8154815290600101906020018083116106f857829003601f168201915b5050505050905090565b60008061072a610ea0565b9050610737818585610ea8565b600191505092915050565b61074a610e22565b600b60019054906101000a900460ff1615600b60016101000a81548160ff021916908315150217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600354905090565b6000806107d1610ea0565b90506107de858285611071565b6107e98585856110fd565b60019150509392505050565b6107fd610e22565b80600660156101000a81548160ff02191690831515021790555050565b60006012905090565b60008061082e610ea0565b905061084f8185856108408589610cf8565b61084a91906126d8565b610ea8565b600191505092915050565b610862610e22565b600081116108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90612758565b60405180910390fd5b80600a8190555050565b6108b7610e22565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61091c338261172b565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61094d610e22565b6000805b83518110156109955782818151811061096d5761096c612778565b5b60200260200101518261098091906126d8565b9150808061098d906127a7565b915050610951565b506109a13330836110fd565b60005b83518110156109ff576109ec308583815181106109c4576109c3612778565b5b60200260200101518584815181106109df576109de612778565b5b60200260200101516110fd565b80806109f7906127a7565b9150506109a4565b50505050565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a5c610e22565b610a6660006118fa565b565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b600660149054906101000a900460ff1681565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610ae590612678565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1190612678565b8015610b5e5780601f10610b3357610100808354040283529160200191610b5e565b820191906000526020600020905b815481529060010190602001808311610b4157829003601f168201915b5050505050905090565b610b70610e22565b81600881905550806009819055505050565b600080610b8d610ea0565b90506000610b9b8286610cf8565b905083811015610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790612861565b60405180910390fd5b610bed8286868403610ea8565b60019250505092915050565b600080610c04610ea0565b9050610c118185856110fd565b600191505092915050565b610c24610e22565b80600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c70610e22565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610cd3610e22565b81600660146101000a81548160ff021916908315150217905550806007819055505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e6020528060005260406000206000915054906101000a900460ff1681565b610da7610e22565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d906128f3565b60405180910390fd5b610e1f816118fa565b50565b610e2a610ea0565b73ffffffffffffffffffffffffffffffffffffffff16610e48610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061295f565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e906129f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90612a83565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110649190612171565b60405180910390a3505050565b600061107d8484610cf8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110f757818110156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090612aef565b60405180910390fd5b6110f68484848403610ea8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390612b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290612c13565b60405180910390fd5b6000811161121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590612ca5565b60405180910390fd5b600b60019054906101000a900460ff16156112df5761123b610aad565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061129f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590612d11565b60405180910390fd5b5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113835750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612d7d565b60405180910390fd5b600660149054906101000a900460ff16801561142b5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611489576007548161143d84610a0b565b61144791906126d8565b1115611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147f90612de9565b60405180910390fd5b5b6000600660159054906101000a900460ff16156116e457600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156115005750600060085414155b1561157457600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611573576064600854836115669190612e09565b6115709190612e7a565b90505b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156115d45750600060095414155b1561164857600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116475760646009548361163a9190612e09565b6116449190612e7a565b90505b5b600061165330610a0b565b90506000600a5482101590508080156116795750600b60009054906101000a900460ff16155b80156116d35750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b156116e1576116e06119be565b5b50505b600081111561171957600081836116fb9190612eab565b9050611708853084611c68565b611713858583611c68565b50611725565b611724848484611c68565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190612f51565b60405180910390fd5b6117a682600083611ee1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182490612fe3565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118e19190612171565b60405180910390a36118f583600084611ee6565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600b60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156119f6576119f561230b565b5b604051908082528060200260200182016040528015611a245781602001602082028036833780820191505090505b5090503081600081518110611a3c57611a3b612778565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613018565b81600181518110611b1b57611b1a612778565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b8a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b8530610a0b565b610ea8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947611bd130610a0b565b600084600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611c1895949392919061313e565b600060405180830381600087803b158015611c3257600080fd5b505af1158015611c46573d6000803e3d6000fd5b50505050506000600b60006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90612b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90612c13565b60405180910390fd5b611d51838383611ee1565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf9061320a565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ec89190612171565b60405180910390a3611edb848484611ee6565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f25578082015181840152602081019050611f0a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f4d82611eeb565b611f578185611ef6565b9350611f67818560208601611f07565b611f7081611f31565b840191505092915050565b60006020820190508181036000830152611f958184611f42565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fdc82611fb1565b9050919050565b611fec81611fd1565b8114611ff757600080fd5b50565b60008135905061200981611fe3565b92915050565b6000819050919050565b6120228161200f565b811461202d57600080fd5b50565b60008135905061203f81612019565b92915050565b6000806040838503121561205c5761205b611fa7565b5b600061206a85828601611ffa565b925050602061207b85828601612030565b9150509250929050565b60008115159050919050565b61209a81612085565b82525050565b60006020820190506120b56000830184612091565b92915050565b6000819050919050565b60006120e06120db6120d684611fb1565b6120bb565b611fb1565b9050919050565b60006120f2826120c5565b9050919050565b6000612104826120e7565b9050919050565b612114816120f9565b82525050565b600060208201905061212f600083018461210b565b92915050565b60006020828403121561214b5761214a611fa7565b5b600061215984828501611ffa565b91505092915050565b61216b8161200f565b82525050565b60006020820190506121866000830184612162565b92915050565b6000806000606084860312156121a5576121a4611fa7565b5b60006121b386828701611ffa565b93505060206121c486828701611ffa565b92505060406121d586828701612030565b9150509250925092565b6121e881612085565b81146121f357600080fd5b50565b600081359050612205816121df565b92915050565b60006020828403121561222157612220611fa7565b5b600061222f848285016121f6565b91505092915050565b600060ff82169050919050565b61224e81612238565b82525050565b60006020820190506122696000830184612245565b92915050565b60006020828403121561228557612284611fa7565b5b600061229384828501612030565b91505092915050565b600080604083850312156122b3576122b2611fa7565b5b60006122c185828601611ffa565b92505060206122d2858286016121f6565b9150509250929050565b6122e581611fd1565b82525050565b600060208201905061230060008301846122dc565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61234382611f31565b810181811067ffffffffffffffff821117156123625761236161230b565b5b80604052505050565b6000612375611f9d565b9050612381828261233a565b919050565b600067ffffffffffffffff8211156123a1576123a061230b565b5b602082029050602081019050919050565b600080fd5b60006123ca6123c584612386565b61236b565b905080838252602082019050602084028301858111156123ed576123ec6123b2565b5b835b8181101561241657806124028882611ffa565b8452602084019350506020810190506123ef565b5050509392505050565b600082601f83011261243557612434612306565b5b81356124458482602086016123b7565b91505092915050565b600067ffffffffffffffff8211156124695761246861230b565b5b602082029050602081019050919050565b600061248d6124888461244e565b61236b565b905080838252602082019050602084028301858111156124b0576124af6123b2565b5b835b818110156124d957806124c58882612030565b8452602084019350506020810190506124b2565b5050509392505050565b600082601f8301126124f8576124f7612306565b5b813561250884826020860161247a565b91505092915050565b6000806040838503121561252857612527611fa7565b5b600083013567ffffffffffffffff81111561254657612545611fac565b5b61255285828601612420565b925050602083013567ffffffffffffffff81111561257357612572611fac565b5b61257f858286016124e3565b9150509250929050565b600080604083850312156125a05761259f611fa7565b5b60006125ae85828601612030565b92505060206125bf85828601612030565b9150509250929050565b600080604083850312156125e0576125df611fa7565b5b60006125ee858286016121f6565b92505060206125ff85828601612030565b9150509250929050565b600080604083850312156126205761261f611fa7565b5b600061262e85828601611ffa565b925050602061263f85828601611ffa565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061269057607f821691505b6020821081036126a3576126a2612649565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126e38261200f565b91506126ee8361200f565b9250828201905080821115612706576127056126a9565b5b92915050565b7f43616e6e6f742073657420746f207a65726f0000000000000000000000000000600082015250565b6000612742601283611ef6565b915061274d8261270c565b602082019050919050565b6000602082019050818103600083015261277181612735565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006127b28261200f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127e4576127e36126a9565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061284b602583611ef6565b9150612856826127ef565b604082019050919050565b6000602082019050818103600083015261287a8161283e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006128dd602683611ef6565b91506128e882612881565b604082019050919050565b6000602082019050818103600083015261290c816128d0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612949602083611ef6565b915061295482612913565b602082019050919050565b600060208201905081810360008301526129788161293c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129db602483611ef6565b91506129e68261297f565b604082019050919050565b60006020820190508181036000830152612a0a816129ce565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a6d602283611ef6565b9150612a7882612a11565b604082019050919050565b60006020820190508181036000830152612a9c81612a60565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ad9601d83611ef6565b9150612ae482612aa3565b602082019050919050565b60006020820190508181036000830152612b0881612acc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b6b602583611ef6565b9150612b7682612b0f565b604082019050919050565b60006020820190508181036000830152612b9a81612b5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612bfd602383611ef6565b9150612c0882612ba1565b604082019050919050565b60006020820190508181036000830152612c2c81612bf0565b9050919050565b7f45524332303a207472616e73666572206d75737420626520677265617465722060008201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b6000612c8f602683611ef6565b9150612c9a82612c33565b604082019050919050565b60006020820190508181036000830152612cbe81612c82565b9050919050565b7f54726164696e67206e6f74206163746976652079657400000000000000000000600082015250565b6000612cfb601683611ef6565b9150612d0682612cc5565b602082019050919050565b60006020820190508181036000830152612d2a81612cee565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000612d67600b83611ef6565b9150612d7282612d31565b602082019050919050565b60006020820190508181036000830152612d9681612d5a565b9050919050565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b6000612dd3600683611ef6565b9150612dde82612d9d565b602082019050919050565b60006020820190508181036000830152612e0281612dc6565b9050919050565b6000612e148261200f565b9150612e1f8361200f565b9250828202612e2d8161200f565b91508282048414831517612e4457612e436126a9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e858261200f565b9150612e908361200f565b925082612ea057612e9f612e4b565b5b828204905092915050565b6000612eb68261200f565b9150612ec18361200f565b9250828203905081811115612ed957612ed86126a9565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f3b602183611ef6565b9150612f4682612edf565b604082019050919050565b60006020820190508181036000830152612f6a81612f2e565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fcd602283611ef6565b9150612fd882612f71565b604082019050919050565b60006020820190508181036000830152612ffc81612fc0565b9050919050565b60008151905061301281611fe3565b92915050565b60006020828403121561302e5761302d611fa7565b5b600061303c84828501613003565b91505092915050565b6000819050919050565b600061306a61306561306084613045565b6120bb565b61200f565b9050919050565b61307a8161304f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130b581611fd1565b82525050565b60006130c783836130ac565b60208301905092915050565b6000602082019050919050565b60006130eb82613080565b6130f5818561308b565b93506131008361309c565b8060005b8381101561313157815161311888826130bb565b9750613123836130d3565b925050600181019050613104565b5085935050505092915050565b600060a0820190506131536000830188612162565b6131606020830187613071565b818103604083015261317281866130e0565b905061318160608301856122dc565b61318e6080830184612162565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006131f4602683611ef6565b91506131ff82613198565b604082019050919050565b60006020820190508181036000830152613223816131e7565b905091905056fea26469706673582212202b35b2f87f3166f827be62536773900c3efcc6f46b8d5efa9f15f801f728deec64736f6c63430008120033

Deployed Bytecode Sourcemap

24137:5921:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29197:81;;;:::i;:::-;;9219:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11579:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29114:74;;;:::i;:::-;;24182:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24588:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10348:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12360:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29010:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10190:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13030:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28706:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29287:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28920:81;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24553:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29652:403;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24357:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10519:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23252:103;;;:::i;:::-;;24516:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24318:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24230:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24280:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22611:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9438:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28298:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13771:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10852:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28138:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28530:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29456:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11108:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24637:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23510:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29197:81;22497:13;:11;:13::i;:::-;29263:7:::1;;;;;;;;;;;29262:8;29252:7;;:18;;;;;;;;;;;;;;;;;;29197:81::o:0;9219:100::-;9273:13;9306:5;9299:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9219:100;:::o;11579:201::-;11662:4;11679:13;11695:12;:10;:12::i;:::-;11679:28;;11718:32;11727:5;11734:7;11743:6;11718:8;:32::i;:::-;11768:4;11761:11;;;11579:201;;;;:::o;29114:74::-;22497:13;:11;:13::i;:::-;29174:6:::1;;;;;;;;;;;29173:7;29164:6;;:16;;;;;;;;;;;;;;;;;;29114:74::o:0;24182:41::-;;;;;;;;;;;;;:::o;24588:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;10348:108::-;10409:7;10436:12;;10429:19;;10348:108;:::o;12360:261::-;12457:4;12474:15;12492:12;:10;:12::i;:::-;12474:30;;12515:38;12531:4;12537:7;12546:6;12515:15;:38::i;:::-;12564:27;12574:4;12580:2;12584:6;12564:9;:27::i;:::-;12609:4;12602:11;;;12360:261;;;;;:::o;29010:95::-;22497:13;:11;:13::i;:::-;29090:7:::1;29075:12;;:22;;;;;;;;;;;;;;;;;;29010:95:::0;:::o;10190:93::-;10248:5;10273:2;10266:9;;10190:93;:::o;13030:238::-;13118:4;13135:13;13151:12;:10;:12::i;:::-;13135:28;;13174:64;13183:5;13190:7;13227:10;13199:25;13209:5;13216:7;13199:9;:25::i;:::-;:38;;;;:::i;:::-;13174:8;:64::i;:::-;13256:4;13249:11;;;13030:238;;;;:::o;28706:205::-;22497:13;:11;:13::i;:::-;28833:1:::1;28818:12;:16;28810:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;28891:12;28868:20;:35;;;;28706:205:::0;:::o;29287:160::-;22497:13;:11;:13::i;:::-;29424:15:::1;29401:10;:20;29412:8;29401:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;29287:160:::0;;:::o;28920:81::-;28969:24;28975:10;28987:5;28969;:24::i;:::-;28920:81;:::o;24553:28::-;;;;;;;;;;;;;:::o;29652:403::-;22497:13;:11;:13::i;:::-;29775::::1;29808:9:::0;29803:62:::1;29823:10;:17;29819:1;:21;29803:62;;;29856:6;29863:1;29856:9;;;;;;;;:::i;:::-;;;;;;;;29847:18;;;;;:::i;:::-;;;29842:3;;;;;:::i;:::-;;;;29803:62;;;;29876:43;29886:10;29906:4;29913:5;29876:9;:43::i;:::-;29935:6;29930:118;29947:10;:17;29943:1;:21;29930:118;;;29986:50;30004:4;30011:10;30022:1;30011:13;;;;;;;;:::i;:::-;;;;;;;;30026:6;30033:1;30026:9;;;;;;;;:::i;:::-;;;;;;;;29986;:50::i;:::-;29966:3;;;;;:::i;:::-;;;;29930:118;;;;29764:291;29652:403:::0;;:::o;24357:33::-;;;;:::o;10519:127::-;10593:7;10620:9;:18;10630:7;10620:18;;;;;;;;;;;;;;;;10613:25;;10519:127;;;:::o;23252:103::-;22497:13;:11;:13::i;:::-;23317:30:::1;23344:1;23317:18;:30::i;:::-;23252:103::o:0;24516:30::-;;;;;;;;;;;;;:::o;24318:32::-;;;;:::o;24230:19::-;;;;;;;;;;;;;:::o;24280:31::-;;;;:::o;22611:87::-;22657:7;22684:6;;;;;;;;;;;22677:13;;22611:87;:::o;9438:104::-;9494:13;9527:7;9520:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9438:104;:::o;28298:223::-;22497:13;:11;:13::i;:::-;28450:17:::1;28434:13;:33;;;;28495:18;28478:14;:35;;;;28298:223:::0;;:::o;13771:436::-;13864:4;13881:13;13897:12;:10;:12::i;:::-;13881:28;;13920:24;13947:25;13957:5;13964:7;13947:9;:25::i;:::-;13920:52;;14011:15;13991:16;:35;;13983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14104:60;14113:5;14120:7;14148:15;14129:16;:34;14104:8;:60::i;:::-;14195:4;14188:11;;;;13771:436;;;;:::o;10852:193::-;10931:4;10948:13;10964:12;:10;:12::i;:::-;10948:28;;10987;10997:5;11004:2;11008:6;10987:9;:28::i;:::-;11033:4;11026:11;;;10852:193;;;;:::o;28138:151::-;22497:13;:11;:13::i;:::-;28262:19:::1;28244:15;;:37;;;;;;;;;;;;;;;;;;28138:151:::0;:::o;28530:167::-;22497:13;:11;:13::i;:::-;28678:11:::1;28646:19;:29;28666:8;28646:29;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;28530:167:::0;;:::o;29456:187::-;22497:13;:11;:13::i;:::-;29580:8:::1;29570:7;;:18;;;;;;;;;;;;;;;;;;29618:17;29599:16;:36;;;;29456:187:::0;;:::o;11108:151::-;11197:7;11224:11;:18;11236:5;11224:18;;;;;;;;;;;;;;;:27;11243:7;11224:27;;;;;;;;;;;;;;;;11217:34;;11108:151;;;;:::o;24637:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;23510:201::-;22497:13;:11;:13::i;:::-;23619:1:::1;23599:22;;:8;:22;;::::0;23591:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23675:28;23694:8;23675:18;:28::i;:::-;23510:201:::0;:::o;22776:132::-;22851:12;:10;:12::i;:::-;22840:23;;:7;:5;:7::i;:::-;:23;;;22832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22776:132::o;6857:98::-;6910:7;6937:10;6930:17;;6857:98;:::o;17764:346::-;17883:1;17866:19;;:5;:19;;;17858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17964:1;17945:21;;:7;:21;;;17937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18048:6;18018:11;:18;18030:5;18018:18;;;;;;;;;;;;;;;:27;18037:7;18018:27;;;;;;;;;;;;;;;:36;;;;18086:7;18070:32;;18079:5;18070:32;;;18095:6;18070:32;;;;;;:::i;:::-;;;;;;;;17764:346;;;:::o;18401:419::-;18502:24;18529:25;18539:5;18546:7;18529:9;:25::i;:::-;18502:52;;18589:17;18569:16;:37;18565:248;;18651:6;18631:16;:26;;18623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18735:51;18744:5;18751:7;18779:6;18760:16;:25;18735:8;:51::i;:::-;18565:248;18491:329;18401:419;;;:::o;25590:1874::-;25738:1;25722:18;;:4;:18;;;25714:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25815:1;25801:16;;:2;:16;;;25793:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25885:1;25876:6;:10;25868:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25947:6;;;;;;;;;;;25943:163;;;26004:7;:5;:7::i;:::-;25996:15;;:4;:15;;;:40;;;;26031:4;26015:21;;:4;:21;;;25996:40;25970:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;25943:163;26128:10;:14;26139:2;26128:14;;;;;;;;;;;;;;;;;;;;;;;;;26127:15;:36;;;;;26147:10;:16;26158:4;26147:16;;;;;;;;;;;;;;;;;;;;;;;;;26146:17;26127:36;26119:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26197:7;;;;;;;;;;;:32;;;;;26216:13;;;;;;;;;;;26208:21;;:4;:21;;;26197:32;26193:126;;;26280:16;;26270:6;26254:13;26264:2;26254:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;26246:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26193:126;26332:17;26364:12;;;;;;;;;;;26360:802;;;26424:13;;;;;;;;;;;26416:21;;:4;:21;;;:43;;;;;26458:1;26441:13;;:18;;26416:43;26412:198;;;26485:19;:23;26505:2;26485:23;;;;;;;;;;;;;;;;;;;;;;;;;26480:115;;26572:3;26555:13;;26546:6;:22;;;;:::i;:::-;26545:30;;;;:::i;:::-;26533:42;;26480:115;26412:198;26655:13;;;;;;;;;;;26649:19;;:2;:19;;;:42;;;;;26690:1;26672:14;;:19;;26649:42;26645:200;;;26717:19;:25;26737:4;26717:25;;;;;;;;;;;;;;;;;;;;;;;;;26712:118;;26807:3;26789:14;;26780:6;:23;;;;:::i;:::-;26779:31;;;;:::i;:::-;26767:43;;26712:118;26645:200;26862:28;26893:24;26911:4;26893:9;:24::i;:::-;26862:55;;26932:24;27000:20;;26959;:61;;26932:88;;27042:19;:36;;;;;27066:12;;;;;;;;;;;27065:13;27042:36;:61;;;;;27090:13;;;;;;;;;;;27082:21;;:4;:21;;;;27042:61;27038:113;;;27124:11;:9;:11::i;:::-;27038:113;26378:784;;26360:802;27208:1;27196:9;:13;27192:265;;;27226:18;27256:9;27247:6;:18;;;;:::i;:::-;27226:39;;27280:47;27296:4;27310;27317:9;27280:15;:47::i;:::-;27342:37;27358:4;27364:2;27368:10;27342:15;:37::i;:::-;27211:180;27192:265;;;27412:33;27428:4;27434:2;27438:6;27412:15;:33::i;:::-;27192:265;25703:1761;25590:1874;;;:::o;16651:675::-;16754:1;16735:21;;:7;:21;;;16727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16807:49;16828:7;16845:1;16849:6;16807:20;:49::i;:::-;16869:22;16894:9;:18;16904:7;16894:18;;;;;;;;;;;;;;;;16869:43;;16949:6;16931:14;:24;;16923:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17068:6;17051:14;:23;17030:9;:18;17040:7;17030:18;;;;;;;;;;;;;;;:44;;;;17185:6;17169:12;;:22;;;;;;;;;;;17246:1;17220:37;;17229:7;17220:37;;;17250:6;17220:37;;;;;;:::i;:::-;;;;;;;;17270:48;17290:7;17307:1;17311:6;17270:19;:48::i;:::-;16716:610;16651:675;;:::o;23871:191::-;23945:16;23964:6;;;;;;;;;;;23945:25;;23990:8;23981:6;;:17;;;;;;;;;;;;;;;;;;24045:8;24014:40;;24035:8;24014:40;;;;;;;;;;;;23934:128;23871:191;:::o;27473:656::-;24747:4;24732:12;;:19;;;;;;;;;;;;;;;;;;27586:21:::1;27624:1;27610:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27586:40;;27655:4;27637;27642:1;27637:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;27681:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27671:4;27676:1;27671:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;27717:125;27748:4;27776:15;;;;;;;;;;;27807:24;27825:4;27807:9;:24::i;:::-;27717:8;:125::i;:::-;27882:15;;;;;;;;;;;:66;;;27963:24;27981:4;27963:9;:24::i;:::-;28002:1;28046:4;28065:15;;;;;;;;;;;28095;27882:239;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27515:614;24789:5:::0;24774:12;;:20;;;;;;;;;;;;;;;;;;27473:656::o;14677:806::-;14790:1;14774:18;;:4;:18;;;14766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14867:1;14853:16;;:2;:16;;;14845:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14922:38;14943:4;14949:2;14953:6;14922:20;:38::i;:::-;14973:19;14995:9;:15;15005:4;14995:15;;;;;;;;;;;;;;;;14973:37;;15044:6;15029:11;:21;;15021:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15161:6;15147:11;:20;15129:9;:15;15139:4;15129:15;;;;;;;;;;;;;;;:38;;;;15364:6;15347:9;:13;15357:2;15347:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15414:2;15399:26;;15408:4;15399:26;;;15418:6;15399:26;;;;;;:::i;:::-;;;;;;;;15438:37;15458:4;15464:2;15468:6;15438:19;:37::i;:::-;14755:728;14677:806;;;:::o;19420:91::-;;;;:::o;20115: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:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:329::-;4483:6;4532:2;4520:9;4511:7;4507:23;4503:32;4500:119;;;4538:79;;:::i;:::-;4500:119;4658:1;4683:53;4728:7;4719:6;4708:9;4704:22;4683:53;:::i;:::-;4673:63;;4629:117;4424:329;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:116::-;5806:21;5821:5;5806:21;:::i;:::-;5799:5;5796:32;5786:60;;5842:1;5839;5832:12;5786:60;5736:116;:::o;5858:133::-;5901:5;5939:6;5926:20;5917:29;;5955:30;5979:5;5955:30;:::i;:::-;5858:133;;;;:::o;5997:323::-;6053:6;6102:2;6090:9;6081:7;6077:23;6073:32;6070:119;;;6108:79;;:::i;:::-;6070:119;6228:1;6253:50;6295:7;6286:6;6275:9;6271:22;6253:50;:::i;:::-;6243:60;;6199:114;5997:323;;;;:::o;6326:86::-;6361:7;6401:4;6394:5;6390:16;6379:27;;6326:86;;;:::o;6418:112::-;6501:22;6517:5;6501:22;:::i;:::-;6496:3;6489:35;6418:112;;:::o;6536:214::-;6625:4;6663:2;6652:9;6648:18;6640:26;;6676:67;6740:1;6729:9;6725:17;6716:6;6676:67;:::i;:::-;6536:214;;;;:::o;6756:329::-;6815:6;6864:2;6852:9;6843:7;6839:23;6835:32;6832:119;;;6870:79;;:::i;:::-;6832:119;6990:1;7015:53;7060:7;7051:6;7040:9;7036:22;7015:53;:::i;:::-;7005:63;;6961:117;6756:329;;;;:::o;7091:468::-;7156:6;7164;7213:2;7201:9;7192:7;7188:23;7184:32;7181:119;;;7219:79;;:::i;:::-;7181:119;7339:1;7364:53;7409:7;7400:6;7389:9;7385:22;7364:53;:::i;:::-;7354:63;;7310:117;7466:2;7492:50;7534:7;7525:6;7514:9;7510:22;7492:50;:::i;:::-;7482:60;;7437:115;7091:468;;;;;:::o;7565:118::-;7652:24;7670:5;7652:24;:::i;:::-;7647:3;7640:37;7565:118;;:::o;7689:222::-;7782:4;7820:2;7809:9;7805:18;7797:26;;7833:71;7901:1;7890:9;7886:17;7877:6;7833:71;:::i;:::-;7689:222;;;;:::o;7917:117::-;8026:1;8023;8016:12;8040:180;8088:77;8085:1;8078:88;8185:4;8182:1;8175:15;8209:4;8206:1;8199:15;8226:281;8309:27;8331:4;8309:27;:::i;:::-;8301:6;8297:40;8439:6;8427:10;8424:22;8403:18;8391:10;8388:34;8385:62;8382:88;;;8450:18;;:::i;:::-;8382:88;8490:10;8486:2;8479:22;8269:238;8226:281;;:::o;8513:129::-;8547:6;8574:20;;:::i;:::-;8564:30;;8603:33;8631:4;8623:6;8603:33;:::i;:::-;8513:129;;;:::o;8648:311::-;8725:4;8815:18;8807:6;8804:30;8801:56;;;8837:18;;:::i;:::-;8801:56;8887:4;8879:6;8875:17;8867:25;;8947:4;8941;8937:15;8929:23;;8648:311;;;:::o;8965:117::-;9074:1;9071;9064:12;9105:710;9201:5;9226:81;9242:64;9299:6;9242:64;:::i;:::-;9226:81;:::i;:::-;9217:90;;9327:5;9356:6;9349:5;9342:21;9390:4;9383:5;9379:16;9372:23;;9443:4;9435:6;9431:17;9423:6;9419:30;9472:3;9464:6;9461:15;9458:122;;;9491:79;;:::i;:::-;9458:122;9606:6;9589:220;9623:6;9618:3;9615:15;9589:220;;;9698:3;9727:37;9760:3;9748:10;9727:37;:::i;:::-;9722:3;9715:50;9794:4;9789:3;9785:14;9778:21;;9665:144;9649:4;9644:3;9640:14;9633:21;;9589:220;;;9593:21;9207:608;;9105:710;;;;;:::o;9838:370::-;9909:5;9958:3;9951:4;9943:6;9939:17;9935:27;9925:122;;9966:79;;:::i;:::-;9925:122;10083:6;10070:20;10108:94;10198:3;10190:6;10183:4;10175:6;10171:17;10108:94;:::i;:::-;10099:103;;9915:293;9838:370;;;;:::o;10214:311::-;10291:4;10381:18;10373:6;10370:30;10367:56;;;10403:18;;:::i;:::-;10367:56;10453:4;10445:6;10441:17;10433:25;;10513:4;10507;10503:15;10495:23;;10214:311;;;:::o;10548:710::-;10644:5;10669:81;10685:64;10742:6;10685:64;:::i;:::-;10669:81;:::i;:::-;10660:90;;10770:5;10799:6;10792:5;10785:21;10833:4;10826:5;10822:16;10815:23;;10886:4;10878:6;10874:17;10866:6;10862:30;10915:3;10907:6;10904:15;10901:122;;;10934:79;;:::i;:::-;10901:122;11049:6;11032:220;11066:6;11061:3;11058:15;11032:220;;;11141:3;11170:37;11203:3;11191:10;11170:37;:::i;:::-;11165:3;11158:50;11237:4;11232:3;11228:14;11221:21;;11108:144;11092:4;11087:3;11083:14;11076:21;;11032:220;;;11036:21;10650:608;;10548:710;;;;;:::o;11281:370::-;11352:5;11401:3;11394:4;11386:6;11382:17;11378:27;11368:122;;11409:79;;:::i;:::-;11368:122;11526:6;11513:20;11551:94;11641:3;11633:6;11626:4;11618:6;11614:17;11551:94;:::i;:::-;11542:103;;11358:293;11281:370;;;;:::o;11657:894::-;11775:6;11783;11832:2;11820:9;11811:7;11807:23;11803:32;11800:119;;;11838:79;;:::i;:::-;11800:119;11986:1;11975:9;11971:17;11958:31;12016:18;12008:6;12005:30;12002:117;;;12038:79;;:::i;:::-;12002:117;12143:78;12213:7;12204:6;12193:9;12189:22;12143:78;:::i;:::-;12133:88;;11929:302;12298:2;12287:9;12283:18;12270:32;12329:18;12321:6;12318:30;12315:117;;;12351:79;;:::i;:::-;12315:117;12456:78;12526:7;12517:6;12506:9;12502:22;12456:78;:::i;:::-;12446:88;;12241:303;11657:894;;;;;:::o;12557:474::-;12625:6;12633;12682:2;12670:9;12661:7;12657:23;12653:32;12650:119;;;12688:79;;:::i;:::-;12650:119;12808:1;12833:53;12878:7;12869:6;12858:9;12854:22;12833:53;:::i;:::-;12823:63;;12779:117;12935:2;12961:53;13006:7;12997:6;12986:9;12982:22;12961:53;:::i;:::-;12951:63;;12906:118;12557:474;;;;;:::o;13037:468::-;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:233;16082:3;16105:24;16123:5;16105:24;:::i;:::-;16096:33;;16151:66;16144:5;16141:77;16138:103;;16221:18;;:::i;:::-;16138:103;16268:1;16261:5;16257:13;16250:20;;16043:233;;;:::o;16282:224::-;16422:34;16418:1;16410:6;16406:14;16399:58;16491:7;16486:2;16478:6;16474:15;16467:32;16282:224;:::o;16512:366::-;16654:3;16675:67;16739:2;16734:3;16675:67;:::i;:::-;16668:74;;16751:93;16840:3;16751:93;:::i;:::-;16869:2;16864:3;16860:12;16853:19;;16512:366;;;:::o;16884:419::-;17050:4;17088:2;17077:9;17073:18;17065:26;;17137:9;17131:4;17127:20;17123:1;17112:9;17108:17;17101:47;17165:131;17291:4;17165:131;:::i;:::-;17157:139;;16884:419;;;:::o;17309:225::-;17449:34;17445:1;17437:6;17433:14;17426:58;17518:8;17513:2;17505:6;17501:15;17494:33;17309:225;:::o;17540:366::-;17682:3;17703:67;17767:2;17762:3;17703:67;:::i;:::-;17696:74;;17779:93;17868:3;17779:93;:::i;:::-;17897:2;17892:3;17888:12;17881:19;;17540:366;;;:::o;17912:419::-;18078:4;18116:2;18105:9;18101:18;18093:26;;18165:9;18159:4;18155:20;18151:1;18140:9;18136:17;18129:47;18193:131;18319:4;18193:131;:::i;:::-;18185:139;;17912:419;;;:::o;18337:182::-;18477:34;18473:1;18465:6;18461:14;18454:58;18337:182;:::o;18525:366::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:419::-;19063:4;19101:2;19090:9;19086:18;19078:26;;19150:9;19144:4;19140:20;19136:1;19125:9;19121:17;19114:47;19178:131;19304:4;19178:131;:::i;:::-;19170:139;;18897:419;;;:::o;19322:223::-;19462:34;19458:1;19450:6;19446:14;19439:58;19531:6;19526:2;19518:6;19514:15;19507:31;19322:223;:::o;19551:366::-;19693:3;19714:67;19778:2;19773:3;19714:67;:::i;:::-;19707:74;;19790:93;19879:3;19790:93;:::i;:::-;19908:2;19903:3;19899:12;19892:19;;19551:366;;;:::o;19923:419::-;20089:4;20127:2;20116:9;20112:18;20104:26;;20176:9;20170:4;20166:20;20162:1;20151:9;20147:17;20140:47;20204:131;20330:4;20204:131;:::i;:::-;20196:139;;19923:419;;;:::o;20348:221::-;20488:34;20484:1;20476:6;20472:14;20465:58;20557:4;20552:2;20544:6;20540:15;20533:29;20348:221;:::o;20575:366::-;20717:3;20738:67;20802:2;20797:3;20738:67;:::i;:::-;20731:74;;20814:93;20903:3;20814:93;:::i;:::-;20932:2;20927:3;20923:12;20916:19;;20575:366;;;:::o;20947:419::-;21113:4;21151:2;21140:9;21136:18;21128:26;;21200:9;21194:4;21190:20;21186:1;21175:9;21171:17;21164:47;21228:131;21354:4;21228:131;:::i;:::-;21220:139;;20947:419;;;:::o;21372:179::-;21512:31;21508:1;21500:6;21496:14;21489:55;21372:179;:::o;21557:366::-;21699:3;21720:67;21784:2;21779:3;21720:67;:::i;:::-;21713:74;;21796:93;21885:3;21796:93;:::i;:::-;21914:2;21909:3;21905:12;21898:19;;21557:366;;;:::o;21929:419::-;22095:4;22133:2;22122:9;22118:18;22110:26;;22182:9;22176:4;22172:20;22168:1;22157:9;22153:17;22146:47;22210:131;22336:4;22210:131;:::i;:::-;22202:139;;21929:419;;;:::o;22354:224::-;22494:34;22490:1;22482:6;22478:14;22471:58;22563:7;22558:2;22550:6;22546:15;22539:32;22354:224;:::o;22584:366::-;22726:3;22747:67;22811:2;22806:3;22747:67;:::i;:::-;22740:74;;22823:93;22912:3;22823:93;:::i;:::-;22941:2;22936:3;22932:12;22925:19;;22584:366;;;:::o;22956:419::-;23122:4;23160:2;23149:9;23145:18;23137:26;;23209:9;23203:4;23199:20;23195:1;23184:9;23180:17;23173:47;23237:131;23363:4;23237:131;:::i;:::-;23229:139;;22956:419;;;:::o;23381:222::-;23521:34;23517:1;23509:6;23505:14;23498:58;23590:5;23585:2;23577:6;23573:15;23566:30;23381:222;:::o;23609:366::-;23751:3;23772:67;23836:2;23831:3;23772:67;:::i;:::-;23765:74;;23848:93;23937:3;23848:93;:::i;:::-;23966:2;23961:3;23957:12;23950:19;;23609:366;;;:::o;23981:419::-;24147:4;24185:2;24174:9;24170:18;24162:26;;24234:9;24228:4;24224:20;24220:1;24209:9;24205:17;24198:47;24262:131;24388:4;24262:131;:::i;:::-;24254:139;;23981:419;;;:::o;24406:225::-;24546:34;24542:1;24534:6;24530:14;24523:58;24615:8;24610:2;24602:6;24598:15;24591:33;24406:225;:::o;24637:366::-;24779:3;24800:67;24864:2;24859:3;24800:67;:::i;:::-;24793:74;;24876:93;24965:3;24876:93;:::i;:::-;24994:2;24989:3;24985:12;24978:19;;24637:366;;;:::o;25009:419::-;25175:4;25213:2;25202:9;25198:18;25190:26;;25262:9;25256:4;25252:20;25248:1;25237:9;25233:17;25226:47;25290:131;25416:4;25290:131;:::i;:::-;25282:139;;25009:419;;;:::o;25434:172::-;25574:24;25570:1;25562:6;25558:14;25551:48;25434:172;:::o;25612:366::-;25754:3;25775:67;25839:2;25834:3;25775:67;:::i;:::-;25768:74;;25851:93;25940:3;25851:93;:::i;:::-;25969:2;25964:3;25960:12;25953:19;;25612:366;;;:::o;25984:419::-;26150:4;26188:2;26177:9;26173:18;26165:26;;26237:9;26231:4;26227:20;26223:1;26212:9;26208:17;26201:47;26265:131;26391:4;26265:131;:::i;:::-;26257:139;;25984:419;;;:::o;26409:161::-;26549:13;26545:1;26537:6;26533:14;26526:37;26409:161;:::o;26576:366::-;26718:3;26739:67;26803:2;26798:3;26739:67;:::i;:::-;26732:74;;26815:93;26904:3;26815:93;:::i;:::-;26933:2;26928:3;26924:12;26917:19;;26576:366;;;:::o;26948:419::-;27114:4;27152:2;27141:9;27137:18;27129:26;;27201:9;27195:4;27191:20;27187:1;27176:9;27172:17;27165:47;27229:131;27355:4;27229:131;:::i;:::-;27221:139;;26948:419;;;:::o;27373:156::-;27513:8;27509:1;27501:6;27497:14;27490:32;27373:156;:::o;27535:365::-;27677:3;27698:66;27762:1;27757:3;27698:66;:::i;:::-;27691:73;;27773:93;27862:3;27773:93;:::i;:::-;27891:2;27886:3;27882:12;27875:19;;27535:365;;;:::o;27906:419::-;28072:4;28110:2;28099:9;28095:18;28087:26;;28159:9;28153:4;28149:20;28145:1;28134:9;28130:17;28123:47;28187:131;28313:4;28187:131;:::i;:::-;28179:139;;27906:419;;;:::o;28331:410::-;28371:7;28394:20;28412:1;28394:20;:::i;:::-;28389:25;;28428:20;28446:1;28428:20;:::i;:::-;28423:25;;28483:1;28480;28476:9;28505:30;28523:11;28505:30;:::i;:::-;28494:41;;28684:1;28675:7;28671:15;28668:1;28665:22;28645:1;28638:9;28618:83;28595:139;;28714:18;;:::i;:::-;28595:139;28379:362;28331:410;;;;:::o;28747:180::-;28795:77;28792:1;28785:88;28892:4;28889:1;28882:15;28916:4;28913:1;28906:15;28933:185;28973:1;28990:20;29008:1;28990:20;:::i;:::-;28985:25;;29024:20;29042:1;29024:20;:::i;:::-;29019:25;;29063:1;29053:35;;29068:18;;:::i;:::-;29053:35;29110:1;29107;29103:9;29098:14;;28933:185;;;;:::o;29124:194::-;29164:4;29184:20;29202:1;29184:20;:::i;:::-;29179:25;;29218:20;29236:1;29218:20;:::i;:::-;29213:25;;29262:1;29259;29255:9;29247:17;;29286:1;29280:4;29277:11;29274:37;;;29291:18;;:::i;:::-;29274:37;29124:194;;;;:::o;29324:220::-;29464:34;29460:1;29452:6;29448:14;29441:58;29533:3;29528:2;29520:6;29516:15;29509:28;29324:220;:::o;29550:366::-;29692:3;29713:67;29777:2;29772:3;29713:67;:::i;:::-;29706:74;;29789:93;29878:3;29789:93;:::i;:::-;29907:2;29902:3;29898:12;29891:19;;29550:366;;;:::o;29922:419::-;30088:4;30126:2;30115:9;30111:18;30103:26;;30175:9;30169:4;30165:20;30161:1;30150:9;30146:17;30139:47;30203:131;30329:4;30203:131;:::i;:::-;30195:139;;29922:419;;;:::o;30347:221::-;30487:34;30483:1;30475:6;30471:14;30464:58;30556:4;30551:2;30543:6;30539:15;30532:29;30347:221;:::o;30574:366::-;30716:3;30737:67;30801:2;30796:3;30737:67;:::i;:::-;30730:74;;30813:93;30902:3;30813:93;:::i;:::-;30931:2;30926:3;30922:12;30915:19;;30574:366;;;:::o;30946:419::-;31112:4;31150:2;31139:9;31135:18;31127:26;;31199:9;31193:4;31189:20;31185:1;31174:9;31170:17;31163:47;31227:131;31353:4;31227:131;:::i;:::-;31219:139;;30946:419;;;:::o;31371:143::-;31428:5;31459:6;31453:13;31444:22;;31475:33;31502:5;31475:33;:::i;:::-;31371:143;;;;:::o;31520:351::-;31590:6;31639:2;31627:9;31618:7;31614:23;31610:32;31607:119;;;31645:79;;:::i;:::-;31607:119;31765:1;31790:64;31846:7;31837:6;31826:9;31822:22;31790:64;:::i;:::-;31780:74;;31736:128;31520:351;;;;:::o;31877:85::-;31922:7;31951:5;31940:16;;31877:85;;;:::o;31968:158::-;32026:9;32059:61;32077:42;32086:32;32112:5;32086:32;:::i;:::-;32077:42;:::i;:::-;32059:61;:::i;:::-;32046:74;;31968:158;;;:::o;32132:147::-;32227:45;32266:5;32227:45;:::i;:::-;32222:3;32215:58;32132:147;;:::o;32285:114::-;32352:6;32386:5;32380:12;32370:22;;32285:114;;;:::o;32405:184::-;32504:11;32538:6;32533:3;32526:19;32578:4;32573:3;32569:14;32554:29;;32405:184;;;;:::o;32595:132::-;32662:4;32685:3;32677:11;;32715:4;32710:3;32706:14;32698:22;;32595:132;;;:::o;32733:108::-;32810:24;32828:5;32810:24;:::i;:::-;32805:3;32798:37;32733:108;;:::o;32847:179::-;32916:10;32937:46;32979:3;32971:6;32937:46;:::i;:::-;33015:4;33010:3;33006:14;32992:28;;32847:179;;;;:::o;33032:113::-;33102:4;33134;33129:3;33125:14;33117:22;;33032:113;;;:::o;33181:732::-;33300:3;33329:54;33377:5;33329:54;:::i;:::-;33399:86;33478:6;33473:3;33399:86;:::i;:::-;33392:93;;33509:56;33559:5;33509:56;:::i;:::-;33588:7;33619:1;33604:284;33629:6;33626:1;33623:13;33604:284;;;33705:6;33699:13;33732:63;33791:3;33776:13;33732:63;:::i;:::-;33725:70;;33818:60;33871:6;33818:60;:::i;:::-;33808:70;;33664:224;33651:1;33648;33644:9;33639:14;;33604:284;;;33608:14;33904:3;33897:10;;33305:608;;;33181:732;;;;:::o;33919:831::-;34182:4;34220:3;34209:9;34205:19;34197:27;;34234:71;34302:1;34291:9;34287:17;34278:6;34234:71;:::i;:::-;34315:80;34391:2;34380:9;34376:18;34367:6;34315:80;:::i;:::-;34442:9;34436:4;34432:20;34427:2;34416:9;34412:18;34405:48;34470:108;34573:4;34564:6;34470:108;:::i;:::-;34462:116;;34588:72;34656:2;34645:9;34641:18;34632:6;34588:72;:::i;:::-;34670:73;34738:3;34727:9;34723:19;34714:6;34670:73;:::i;:::-;33919:831;;;;;;;;:::o;34756:225::-;34896:34;34892:1;34884:6;34880:14;34873:58;34965:8;34960:2;34952:6;34948:15;34941:33;34756:225;:::o;34987:366::-;35129:3;35150:67;35214:2;35209:3;35150:67;:::i;:::-;35143:74;;35226:93;35315:3;35226:93;:::i;:::-;35344:2;35339:3;35335:12;35328:19;;34987:366;;;:::o;35359:419::-;35525:4;35563:2;35552:9;35548:18;35540:26;;35612:9;35606:4;35602:20;35598:1;35587:9;35583:17;35576:47;35640:131;35766:4;35640:131;:::i;:::-;35632:139;;35359:419;;;:::o

Swarm Source

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