ETH Price: $2,237.87 (-6.45%)
Gas: 1.04 Gwei

Token

⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣦⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀... (🐼)
 

Overview

Max Total Supply

1,000,000 🐼

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,200 🐼

Value
$0.00
0x6f5ef01e4aa79a79cb87c108b152b2321782747d
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:
PANDA

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-01
*/

/*



⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣦⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢿⣿⠟⠋⠉⠀⠀⠀⠀⠉⠑⠢⣄⡀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢠⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣦⡀
⠀⣀⠀⠀⢀⡏⠀⢀⣴⣶⣶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⠇
⣾⣿⣿⣦⣼⡀⠀⢺⣿⣿⡿⠃⠀⠀⠀⠀⣠⣤⣄⠀⠀⠈⡿⠋⠀
⢿⣿⣿⣿⣿⣇⠀⠤⠌⠁⠀⡀⢲⡶⠄⢸⣏⣿⣿⠀⠀⠀⡇⠀⠀
⠈⢿⣿⣿⣿⣿⣷⣄⡀⠀⠀⠈⠉⠓⠂⠀⠙⠛⠛⠠⠀⡸⠁⠀⠀
⠀⠀⠻⣿⣿⣿⣿⣿⣿⣷⣦⣄⣀⠀⠀⠀⠀⠑⠀⣠⠞⠁⠀⠀⠀
⠀⠀⠀⢸⡏⠉⠛⠛⠛⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀
⠀⠀⠀⠸⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⢿⣿⣿⣿⣿⡄⠀⠀⠀⠀
⠀⠀⠀⢷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣿⣿⣿⡀⠀⠀⠀
⠀⠀⠀⢸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀
⠀⠀⠀⢸⣿⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⡟⠻⠿⠟⠀⠀⠀⠀
⠀⠀⠀⠀⣿⣿⣿⣿⣶⠶⠤⠤⢤⣶⣾⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠹⣿⣿⣿⠏⠀⠀⠀⠈⢿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀




你好!我的名字是熊猫!

让我满月


*/

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin 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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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


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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract PANDA is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

    bool private swapping;

    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;


    event ExcludeFromFees(address indexed account, bool isExcluded);

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20(unicode"\n⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣦⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⢿⣿⠟⠋⠉⠀⠀⠀⠀⠉⠑⠢⣄⡀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⢠⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣦⡀\n⠀⣀⠀⠀⢀⡏⠀⢀⣴⣶⣶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⠇\n⣾⣿⣿⣦⣼⡀⠀⢺⣿⣿⡿⠃⠀⠀⠀⠀⣠⣤⣄⠀⠀⠈⡿⠋⠀\n⢿⣿⣿⣿⣿⣇⠀⠤⠌⠁⠀⡀⢲⡶⠄⢸⣏⣿⣿⠀⠀⠀⡇⠀⠀\n⠈⢿⣿⣿⣿⣿⣷⣄⡀⠀⠀⠈⠉⠓⠂⠀⠙⠛⠛⠠⠀⡸⠁⠀⠀\n⠀⠀⠻⣿⣿⣿⣿⣿⣿⣷⣦⣄⣀⠀⠀⠀⠀⠑⠀⣠⠞⠁⠀⠀⠀\n⠀⠀⠀⢸⡏⠉⠛⠛⠛⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀\n⠀⠀⠀⠸⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⢿⣿⣿⣿⣿⡄⠀⠀⠀⠀\n⠀⠀⠀⢷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣿⣿⣿⡀⠀⠀⠀\n⠀⠀⠀⢸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀\n⠀⠀⠀⢸⣿⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⡟⠻⠿⠟⠀⠀⠀⠀\n⠀⠀⠀⠀⣿⣿⣿⣿⣶⠶⠤⠤⢤⣶⣾⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠹⣿⣿⣿⠏⠀⠀⠀⠈⢿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀\n", unicode"🐼") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), USDC);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);


        uint256 _buyDevFee = 20;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellDevFee = 20;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 2 / 100; // 2% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyDevFee = _buyDevFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;

        sellDevFee = _sellDevFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;

        devWallet = address(0xe950248F2FDfe7B0aacEd4b6e8f49033476dEafa); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        _transfer(msg.sender, address(this), totalSupply() * 8 / 100);
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function editBuyFee(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function editSellFee(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateDevWallet(address newDevWallet)
        external
        onlyOwner
    {
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }


    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    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");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                //when buy
                if (
                    from == uniswapV2Pair &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            to == uniswapV2Pair &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        uint256 tokensForLiquidity = 0;
        uint256 tokensForDev = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev = (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; 
                tokensForDev = (fees * buyDevFee) / buyTotalFees;
            }

            if (fees> 0) {
                super._transfer(from, address(this), fees);
            }
            if (tokensForLiquidity > 0) {
                super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForUSDC(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USDC;

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of USDC
            path,
            devWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        swapTokensForUSDC(contractBalance);
    }

}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"editBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"editSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055503480156100b2575f80fd5b5060405180610540016040528061050d8152602001614ab961050d91396040518060400160405280600481526020017ff09f90bc0000000000000000000000000000000000000000000000000000000081525081600390816101149190610b48565b5080600490816101249190610b48565b5050506101436101386104a160201b60201c565b6104a860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061016c81600161056b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020d9190610c75565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610268929190610caf565b6020604051808303815f875af1158015610284573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102a89190610c75565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506102ee60a051600161056b60201b60201c565b5f601490505f80601490505f8069d3c21bcecceda1000000905060646002826103179190610d03565b6103219190610d71565b60088190555060646002826103369190610d03565b6103409190610d71565b600a819055506127106005826103569190610d03565b6103609190610d71565b60098190555084600d8190555083600e81905550600e54600d546103849190610da1565b600c8190555082601081905550816011819055506011546010546103a89190610da1565b600f8190555073e950248f2fdfe7b0aaced4b6e8f49033476deafa60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061042061041361064b60201b60201c565b600161067360201b60201c565b61043130600161067360201b60201c565b61044461dead600161067360201b60201c565b61046261045561064b60201b60201c565b600161056b60201b60201c565b61047330600161056b60201b60201c565b61048661dead600161056b60201b60201c565b61049633826107a160201b60201c565b505050505050610f0f565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6105796104a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661059d61064b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146105f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea90610e2e565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106816104a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106a561064b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f290610e2e565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107959190610e66565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361080f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080690610ec9565b60405180910390fd5b6108205f838361090460201b60201c565b8060025f8282546108319190610da1565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108839190610da1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108e79190610ef6565b60405180910390a36109005f838361090960201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061098957607f821691505b60208210810361099c5761099b610945565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026109fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109c3565b610a0886836109c3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a4c610a47610a4284610a20565b610a29565b610a20565b9050919050565b5f819050919050565b610a6583610a32565b610a79610a7182610a53565b8484546109cf565b825550505050565b5f90565b610a8d610a81565b610a98818484610a5c565b505050565b5b81811015610abb57610ab05f82610a85565b600181019050610a9e565b5050565b601f821115610b0057610ad1816109a2565b610ada846109b4565b81016020851015610ae9578190505b610afd610af5856109b4565b830182610a9d565b50505b505050565b5f82821c905092915050565b5f610b205f1984600802610b05565b1980831691505092915050565b5f610b388383610b11565b9150826002028217905092915050565b610b518261090e565b67ffffffffffffffff811115610b6a57610b69610918565b5b610b748254610972565b610b7f828285610abf565b5f60209050601f831160018114610bb0575f8415610b9e578287015190505b610ba88582610b2d565b865550610c0f565b601f198416610bbe866109a2565b5f5b82811015610be557848901518255600182019150602085019450602081019050610bc0565b86831015610c025784890151610bfe601f891682610b11565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c4482610c1b565b9050919050565b610c5481610c3a565b8114610c5e575f80fd5b50565b5f81519050610c6f81610c4b565b92915050565b5f60208284031215610c8a57610c89610c17565b5b5f610c9784828501610c61565b91505092915050565b610ca981610c3a565b82525050565b5f604082019050610cc25f830185610ca0565b610ccf6020830184610ca0565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d0d82610a20565b9150610d1883610a20565b9250828202610d2681610a20565b91508282048414831517610d3d57610d3c610cd6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610d7b82610a20565b9150610d8683610a20565b925082610d9657610d95610d44565b5b828204905092915050565b5f610dab82610a20565b9150610db683610a20565b9250828201905080821115610dce57610dcd610cd6565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610e18602083610dd4565b9150610e2382610de4565b602082019050919050565b5f6020820190508181035f830152610e4581610e0c565b9050919050565b5f8115159050919050565b610e6081610e4c565b82525050565b5f602082019050610e795f830184610e57565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610eb3601f83610dd4565b9150610ebe82610e7f565b602082019050919050565b5f6020820190508181035f830152610ee081610ea7565b9050919050565b610ef081610a20565b82525050565b5f602082019050610f095f830184610ee7565b92915050565b60805160a051613b58610f615f395f8181610ec401528181611f2801528181612169015281816123630152818161242d015261251401525f8181610a6501528181612a2b0152612a520152613b585ff3fe608060405260043610610254575f3560e01c80638a8c523c11610138578063c18bc195116100b5578063e2f4560511610079578063e2f45605146108a1578063f11a24d3146108cb578063f2fde38b146108f5578063f58639221461091d578063f637434214610945578063f8b45b051461096f5761025b565b8063c18bc195146107ad578063c8c8ebe4146107d5578063d257b34f146107ff578063d85ba0631461083b578063dd62ed3e146108655761025b565b80639c3b4fdc116100fc5780639c3b4fdc146106cb578063a0d82dc5146106f5578063a9059cbb1461071f578063bbc0c7421461075b578063c0246668146107855761025b565b80638a8c523c1461060f5780638da5cb5b146106255780638ea5220f1461064f578063924de9b71461067957806395d89b41146106a15761025b565b8063313ce567116101d15780636ddd1713116101955780636ddd17131461051757806370a0823114610541578063715018a61461057d578063751039fc146105935780637571336a146105bd57806389a30271146105e55761025b565b8063313ce5671461043357806349bd5a5e1461045d5780634a62bb65146104875780634fbee193146104b15780636a486a8e146104ed5761025b565b80631816467f116102185780631816467f14610355578063203e727e1461037d57806323b872dd146103a557806327c8f835146103e157806328ec94741461040b5761025b565b806306fdde031461025f578063095ea7b31461028957806310d5de53146102c55780631694505e1461030157806318160ddd1461032b5761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610273610999565b6040516102809190612b73565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa9190612c24565b610a29565b6040516102bc9190612c7c565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e69190612c95565b610a46565b6040516102f89190612c7c565b60405180910390f35b34801561030c575f80fd5b50610315610a63565b6040516103229190612d1b565b60405180910390f35b348015610336575f80fd5b5061033f610a87565b60405161034c9190612d43565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190612c95565b610a90565b005b348015610388575f80fd5b506103a3600480360381019061039e9190612d5c565b610bca565b005b3480156103b0575f80fd5b506103cb60048036038101906103c69190612d87565b610cd9565b6040516103d89190612c7c565b60405180910390f35b3480156103ec575f80fd5b506103f5610dcb565b6040516104029190612de6565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c9190612dff565b610dd1565b005b34801561043e575f80fd5b50610447610eba565b6040516104549190612e58565b60405180910390f35b348015610468575f80fd5b50610471610ec2565b60405161047e9190612de6565b60405180910390f35b348015610492575f80fd5b5061049b610ee6565b6040516104a89190612c7c565b60405180910390f35b3480156104bc575f80fd5b506104d760048036038101906104d29190612c95565b610ef8565b6040516104e49190612c7c565b60405180910390f35b3480156104f8575f80fd5b50610501610f4a565b60405161050e9190612d43565b60405180910390f35b348015610522575f80fd5b5061052b610f50565b6040516105389190612c7c565b60405180910390f35b34801561054c575f80fd5b5061056760048036038101906105629190612c95565b610f63565b6040516105749190612d43565b60405180910390f35b348015610588575f80fd5b50610591610fa8565b005b34801561059e575f80fd5b506105a761102f565b6040516105b49190612c7c565b60405180910390f35b3480156105c8575f80fd5b506105e360048036038101906105de9190612e9b565b6110cc565b005b3480156105f0575f80fd5b506105f96111a0565b6040516106069190612de6565b60405180910390f35b34801561061a575f80fd5b506106236111c5565b005b348015610630575f80fd5b506106396112a3565b6040516106469190612de6565b60405180910390f35b34801561065a575f80fd5b506106636112cb565b6040516106709190612de6565b60405180910390f35b348015610684575f80fd5b5061069f600480360381019061069a9190612ed9565b6112f0565b005b3480156106ac575f80fd5b506106b5611389565b6040516106c29190612b73565b60405180910390f35b3480156106d6575f80fd5b506106df611419565b6040516106ec9190612d43565b60405180910390f35b348015610700575f80fd5b5061070961141f565b6040516107169190612d43565b60405180910390f35b34801561072a575f80fd5b5061074560048036038101906107409190612c24565b611425565b6040516107529190612c7c565b60405180910390f35b348015610766575f80fd5b5061076f611442565b60405161077c9190612c7c565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a69190612e9b565b611455565b005b3480156107b8575f80fd5b506107d360048036038101906107ce9190612d5c565b611577565b005b3480156107e0575f80fd5b506107e9611686565b6040516107f69190612d43565b60405180910390f35b34801561080a575f80fd5b5061082560048036038101906108209190612d5c565b61168c565b6040516108329190612c7c565b60405180910390f35b348015610846575f80fd5b5061084f6117e0565b60405161085c9190612d43565b60405180910390f35b348015610870575f80fd5b5061088b60048036038101906108869190612f04565b6117e6565b6040516108989190612d43565b60405180910390f35b3480156108ac575f80fd5b506108b5611868565b6040516108c29190612d43565b60405180910390f35b3480156108d6575f80fd5b506108df61186e565b6040516108ec9190612d43565b60405180910390f35b348015610900575f80fd5b5061091b60048036038101906109169190612c95565b611874565b005b348015610928575f80fd5b50610943600480360381019061093e9190612dff565b61196a565b005b348015610950575f80fd5b50610959611a54565b6040516109669190612d43565b60405180910390f35b34801561097a575f80fd5b50610983611a5a565b6040516109909190612d43565b60405180910390f35b6060600380546109a890612f6f565b80601f01602080910402602001604051908101604052809291908181526020018280546109d490612f6f565b8015610a1f5780601f106109f657610100808354040283529160200191610a1f565b820191905f5260205f20905b815481529060010190602001808311610a0257829003601f168201915b5050505050905090565b5f610a3c610a35611a60565b8484611a67565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610a98611a60565b73ffffffffffffffffffffffffffffffffffffffff16610ab66112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0390612fe9565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bd2611a60565b73ffffffffffffffffffffffffffffffffffffffff16610bf06112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90612fe9565b60405180910390fd5b670de0b6b3a76400006103e86001610c5c610a87565b610c669190613034565b610c7091906130a2565b610c7a91906130a2565b811015610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390613142565b60405180910390fd5b670de0b6b3a764000081610cd09190613034565b60088190555050565b5f610ce5848484611c2a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d2c611a60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906131d0565b60405180910390fd5b610dbf85610db7611a60565b858403611a67565b60019150509392505050565b61dead81565b610dd9611a60565b73ffffffffffffffffffffffffffffffffffffffff16610df76112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490612fe9565b60405180910390fd5b8160108190555080601181905550601154601054610e6b91906131ee565b600f81905550600f80541115610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061326b565b60405180910390fd5b5050565b5f6012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fb0611a60565b73ffffffffffffffffffffffffffffffffffffffff16610fce6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90612fe9565b60405180910390fd5b61102d5f612560565b565b5f611038611a60565b73ffffffffffffffffffffffffffffffffffffffff166110566112a3565b73ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390612fe9565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6110d4611a60565b73ffffffffffffffffffffffffffffffffffffffff166110f26112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90612fe9565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111cd611a60565b73ffffffffffffffffffffffffffffffffffffffff166111eb6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890612fe9565b60405180910390fd5b61126b333060646008611252610a87565b61125c9190613034565b61126691906130a2565b611c2a565b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f8611a60565b73ffffffffffffffffffffffffffffffffffffffff166113166112a3565b73ffffffffffffffffffffffffffffffffffffffff161461136c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390612fe9565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461139890612f6f565b80601f01602080910402602001604051908101604052809291908181526020018280546113c490612f6f565b801561140f5780601f106113e65761010080835404028352916020019161140f565b820191905f5260205f20905b8154815290600101906020018083116113f257829003601f168201915b5050505050905090565b600d5481565b60105481565b5f611438611431611a60565b8484611c2a565b6001905092915050565b600b60019054906101000a900460ff1681565b61145d611a60565b73ffffffffffffffffffffffffffffffffffffffff1661147b6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c890612fe9565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161156b9190612c7c565b60405180910390a25050565b61157f611a60565b73ffffffffffffffffffffffffffffffffffffffff1661159d6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90612fe9565b60405180910390fd5b670de0b6b3a76400006103e86005611609610a87565b6116139190613034565b61161d91906130a2565b61162791906130a2565b811015611669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611660906132f9565b60405180910390fd5b670de0b6b3a76400008161167d9190613034565b600a8190555050565b60085481565b5f611695611a60565b73ffffffffffffffffffffffffffffffffffffffff166116b36112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090612fe9565b60405180910390fd5b620186a06001611717610a87565b6117219190613034565b61172b91906130a2565b82101561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490613387565b60405180910390fd5b6103e8600561177a610a87565b6117849190613034565b61178e91906130a2565b8211156117d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c790613415565b60405180910390fd5b8160098190555060019050919050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600e5481565b61187c611a60565b73ffffffffffffffffffffffffffffffffffffffff1661189a6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790612fe9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611955906134a3565b60405180910390fd5b61196781612560565b50565b611972611a60565b73ffffffffffffffffffffffffffffffffffffffff166119906112a3565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90612fe9565b60405180910390fd5b81600d8190555080600e81905550600e54600d54611a0491906131ee565b600c81905550600a600c541115611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a479061350b565b60405180910390fd5b5050565b60115481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90613599565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90613627565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c1d9190612d43565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f906136b5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90613743565b60405180910390fd5b5f8103611d1d57611d1883835f612623565b61255b565b600b5f9054906101000a900460ff161561211957611d396112a3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611da75750611d776112a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ddf57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e19575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e325750600660149054906101000a900460ff16155b1561211857600b60019054906101000a900460ff16611f265760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ee6575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906137ab565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611fc8575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561206f57600854811115612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990613839565b60405180910390fd5b600a5461201e83610f63565b8261202991906131ee565b111561206a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612061906138a1565b60405180910390fd5b612117565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661211657600a546120c983610f63565b826120d491906131ee565b1115612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906138a1565b60405180910390fd5b5b5b5b5b5f61212330610f63565b90505f60095482101590508080156121475750600b60029054906101000a900460ff165b80156121605750600660149054906101000a900460ff16155b80156121b757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561220a575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561225d575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122a0576001600660146101000a81548160ff021916908315150217905550612285612898565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061234f575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612358575f90505b5f805f8315612549577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156123bd57505f600f54115b1561242b576123ea60646123dc600f548a6128e690919063ffffffff16565b6128fb90919063ffffffff16565b9250600f54601154846123fd9190613034565b61240791906130a2565b9150600f546010548461241a9190613034565b61242491906130a2565b90506124f2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561248757505f600c54115b156124f1576124b460646124a6600c548a6128e690919063ffffffff16565b6128fb90919063ffffffff16565b9250600c54600e54846124c79190613034565b6124d191906130a2565b9150600c54600d54846124e49190613034565b6124ee91906130a2565b90505b5b5f83111561250657612505893085612623565b5b5f82111561253a57612539307f000000000000000000000000000000000000000000000000000000000000000084612623565b5b828761254691906138bf565b96505b612554898989612623565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906136b5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690613743565b60405180910390fd5b61270a838383612910565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490613962565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461281b91906131ee565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161287f9190612d43565b60405180910390a3612892848484612915565b50505050565b5f6128a230610f63565b90505f81036128b157506128e4565b60146009546128c09190613034565b8111156128d95760146009546128d69190613034565b90505b6128e28161291a565b505b565b5f81836128f39190613034565b905092915050565b5f818361290891906130a2565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561293657612935613980565b5b6040519080825280602002602001820160405280156129645781602001602082028036833780820191505090505b50905030815f8151811061297b5761297a6139ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129eb576129ea6139ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a50307f000000000000000000000000000000000000000000000000000000000000000084611a67565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612ad2959493929190613aca565b5f604051808303815f87803b158015612ae9575f80fd5b505af1158015612afb573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b4582612b03565b612b4f8185612b0d565b9350612b5f818560208601612b1d565b612b6881612b2b565b840191505092915050565b5f6020820190508181035f830152612b8b8184612b3b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612bc082612b97565b9050919050565b612bd081612bb6565b8114612bda575f80fd5b50565b5f81359050612beb81612bc7565b92915050565b5f819050919050565b612c0381612bf1565b8114612c0d575f80fd5b50565b5f81359050612c1e81612bfa565b92915050565b5f8060408385031215612c3a57612c39612b93565b5b5f612c4785828601612bdd565b9250506020612c5885828601612c10565b9150509250929050565b5f8115159050919050565b612c7681612c62565b82525050565b5f602082019050612c8f5f830184612c6d565b92915050565b5f60208284031215612caa57612ca9612b93565b5b5f612cb784828501612bdd565b91505092915050565b5f819050919050565b5f612ce3612cde612cd984612b97565b612cc0565b612b97565b9050919050565b5f612cf482612cc9565b9050919050565b5f612d0582612cea565b9050919050565b612d1581612cfb565b82525050565b5f602082019050612d2e5f830184612d0c565b92915050565b612d3d81612bf1565b82525050565b5f602082019050612d565f830184612d34565b92915050565b5f60208284031215612d7157612d70612b93565b5b5f612d7e84828501612c10565b91505092915050565b5f805f60608486031215612d9e57612d9d612b93565b5b5f612dab86828701612bdd565b9350506020612dbc86828701612bdd565b9250506040612dcd86828701612c10565b9150509250925092565b612de081612bb6565b82525050565b5f602082019050612df95f830184612dd7565b92915050565b5f8060408385031215612e1557612e14612b93565b5b5f612e2285828601612c10565b9250506020612e3385828601612c10565b9150509250929050565b5f60ff82169050919050565b612e5281612e3d565b82525050565b5f602082019050612e6b5f830184612e49565b92915050565b612e7a81612c62565b8114612e84575f80fd5b50565b5f81359050612e9581612e71565b92915050565b5f8060408385031215612eb157612eb0612b93565b5b5f612ebe85828601612bdd565b9250506020612ecf85828601612e87565b9150509250929050565b5f60208284031215612eee57612eed612b93565b5b5f612efb84828501612e87565b91505092915050565b5f8060408385031215612f1a57612f19612b93565b5b5f612f2785828601612bdd565b9250506020612f3885828601612bdd565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f8657607f821691505b602082108103612f9957612f98612f42565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fd3602083612b0d565b9150612fde82612f9f565b602082019050919050565b5f6020820190508181035f83015261300081612fc7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61303e82612bf1565b915061304983612bf1565b925082820261305781612bf1565b9150828204841483151761306e5761306d613007565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6130ac82612bf1565b91506130b783612bf1565b9250826130c7576130c6613075565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f61312c602f83612b0d565b9150613137826130d2565b604082019050919050565b5f6020820190508181035f83015261315981613120565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6131ba602883612b0d565b91506131c582613160565b604082019050919050565b5f6020820190508181035f8301526131e7816131ae565b9050919050565b5f6131f882612bf1565b915061320383612bf1565b925082820190508082111561321b5761321a613007565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c6573730000005f82015250565b5f613255601d83612b0d565b915061326082613221565b602082019050919050565b5f6020820190508181035f83015261328281613249565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6132e3602483612b0d565b91506132ee82613289565b604082019050919050565b5f6020820190508181035f830152613310816132d7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613371603583612b0d565b915061337c82613317565b604082019050919050565b5f6020820190508181035f83015261339e81613365565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6133ff603483612b0d565b915061340a826133a5565b604082019050919050565b5f6020820190508181035f83015261342c816133f3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61348d602683612b0d565b915061349882613433565b604082019050919050565b5f6020820190508181035f8301526134ba81613481565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f6134f5601d83612b0d565b9150613500826134c1565b602082019050919050565b5f6020820190508181035f830152613522816134e9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613583602483612b0d565b915061358e82613529565b604082019050919050565b5f6020820190508181035f8301526135b081613577565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613611602283612b0d565b915061361c826135b7565b604082019050919050565b5f6020820190508181035f83015261363e81613605565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61369f602583612b0d565b91506136aa82613645565b604082019050919050565b5f6020820190508181035f8301526136cc81613693565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61372d602383612b0d565b9150613738826136d3565b604082019050919050565b5f6020820190508181035f83015261375a81613721565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613795601683612b0d565b91506137a082613761565b602082019050919050565b5f6020820190508181035f8301526137c281613789565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613823603583612b0d565b915061382e826137c9565b604082019050919050565b5f6020820190508181035f83015261385081613817565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61388b601383612b0d565b915061389682613857565b602082019050919050565b5f6020820190508181035f8301526138b88161387f565b9050919050565b5f6138c982612bf1565b91506138d483612bf1565b92508282039050818111156138ec576138eb613007565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61394c602683612b0d565b9150613957826138f2565b604082019050919050565b5f6020820190508181035f83015261397981613940565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6139fd6139f86139f3846139da565b612cc0565b612bf1565b9050919050565b613a0d816139e3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a4581612bb6565b82525050565b5f613a568383613a3c565b60208301905092915050565b5f602082019050919050565b5f613a7882613a13565b613a828185613a1d565b9350613a8d83613a2d565b805f5b83811015613abd578151613aa48882613a4b565b9750613aaf83613a62565b925050600181019050613a90565b5085935050505092915050565b5f60a082019050613add5f830188612d34565b613aea6020830187613a04565b8181036040830152613afc8186613a6e565b9050613b0b6060830185612dd7565b613b186080830184612d34565b969550505050505056fea2646970667358221220ede6fe96b31ca43343e5d29d10f094a7b292caf8c500853f82077ed0ced1810c64736f6c634300081a00330ae2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a380e2a380e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a080e2a080e2a3b0e2a3bfe2a3bfe2a3bfe2a3bfe2a3a6e2a380e2a380e2a380e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a080e2a080e2a2bfe2a3bfe2a09fe2a08be2a089e2a080e2a080e2a080e2a080e2a089e2a091e2a0a2e2a384e2a180e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a080e2a2a0e2a09ee2a081e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a099e2a2bfe2a3bfe2a3bfe2a3a6e2a1800ae2a080e2a380e2a080e2a080e2a280e2a18fe2a080e2a280e2a3b4e2a3b6e2a3b6e2a184e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a2bbe2a3bfe2a3bfe2a0870ae2a3bee2a3bfe2a3bfe2a3a6e2a3bce2a180e2a080e2a2bae2a3bfe2a3bfe2a1bfe2a083e2a080e2a080e2a080e2a080e2a3a0e2a3a4e2a384e2a080e2a080e2a088e2a1bfe2a08be2a0800ae2a2bfe2a3bfe2a3bfe2a3bfe2a3bfe2a387e2a080e2a0a4e2a08ce2a081e2a080e2a180e2a2b2e2a1b6e2a084e2a2b8e2a38fe2a3bfe2a3bfe2a080e2a080e2a080e2a187e2a080e2a0800ae2a088e2a2bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3b7e2a384e2a180e2a080e2a080e2a088e2a089e2a093e2a082e2a080e2a099e2a09be2a09be2a0a0e2a080e2a1b8e2a081e2a080e2a0800ae2a080e2a080e2a0bbe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3b7e2a3a6e2a384e2a380e2a080e2a080e2a080e2a080e2a091e2a080e2a3a0e2a09ee2a081e2a080e2a080e2a0800ae2a080e2a080e2a080e2a2b8e2a18fe2a089e2a09be2a09be2a09be2a0bfe2a0bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a184e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a0b8e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a088e2a089e2a09be2a2bfe2a3bfe2a3bfe2a3bfe2a3bfe2a184e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a2b7e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a088e2a2bbe2a3bfe2a3bfe2a3bfe2a3bfe2a180e2a080e2a080e2a0800ae2a080e2a080e2a080e2a2b8e2a386e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a3bfe2a3bfe2a3bfe2a3bfe2a187e2a080e2a080e2a0800ae2a080e2a080e2a080e2a2b8e2a3bfe2a3a6e2a380e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a280e2a3bce2a19fe2a0bbe2a0bfe2a09fe2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a3bfe2a3bfe2a3bfe2a3bfe2a3b6e2a0b6e2a0a4e2a0a4e2a2a4e2a3b6e2a3bee2a3bfe2a3bfe2a187e2a080e2a080e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a0b9e2a3bfe2a3bfe2a3bfe2a08fe2a080e2a080e2a080e2a088e2a2bfe2a3bfe2a3bfe2a1bfe2a081e2a080e2a080e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a080e2a088e2a089e2a089e2a080e2a080e2a080e2a080e2a080e2a080e2a089e2a089e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a0800a

Deployed Bytecode

0x608060405260043610610254575f3560e01c80638a8c523c11610138578063c18bc195116100b5578063e2f4560511610079578063e2f45605146108a1578063f11a24d3146108cb578063f2fde38b146108f5578063f58639221461091d578063f637434214610945578063f8b45b051461096f5761025b565b8063c18bc195146107ad578063c8c8ebe4146107d5578063d257b34f146107ff578063d85ba0631461083b578063dd62ed3e146108655761025b565b80639c3b4fdc116100fc5780639c3b4fdc146106cb578063a0d82dc5146106f5578063a9059cbb1461071f578063bbc0c7421461075b578063c0246668146107855761025b565b80638a8c523c1461060f5780638da5cb5b146106255780638ea5220f1461064f578063924de9b71461067957806395d89b41146106a15761025b565b8063313ce567116101d15780636ddd1713116101955780636ddd17131461051757806370a0823114610541578063715018a61461057d578063751039fc146105935780637571336a146105bd57806389a30271146105e55761025b565b8063313ce5671461043357806349bd5a5e1461045d5780634a62bb65146104875780634fbee193146104b15780636a486a8e146104ed5761025b565b80631816467f116102185780631816467f14610355578063203e727e1461037d57806323b872dd146103a557806327c8f835146103e157806328ec94741461040b5761025b565b806306fdde031461025f578063095ea7b31461028957806310d5de53146102c55780631694505e1461030157806318160ddd1461032b5761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610273610999565b6040516102809190612b73565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa9190612c24565b610a29565b6040516102bc9190612c7c565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e69190612c95565b610a46565b6040516102f89190612c7c565b60405180910390f35b34801561030c575f80fd5b50610315610a63565b6040516103229190612d1b565b60405180910390f35b348015610336575f80fd5b5061033f610a87565b60405161034c9190612d43565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190612c95565b610a90565b005b348015610388575f80fd5b506103a3600480360381019061039e9190612d5c565b610bca565b005b3480156103b0575f80fd5b506103cb60048036038101906103c69190612d87565b610cd9565b6040516103d89190612c7c565b60405180910390f35b3480156103ec575f80fd5b506103f5610dcb565b6040516104029190612de6565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c9190612dff565b610dd1565b005b34801561043e575f80fd5b50610447610eba565b6040516104549190612e58565b60405180910390f35b348015610468575f80fd5b50610471610ec2565b60405161047e9190612de6565b60405180910390f35b348015610492575f80fd5b5061049b610ee6565b6040516104a89190612c7c565b60405180910390f35b3480156104bc575f80fd5b506104d760048036038101906104d29190612c95565b610ef8565b6040516104e49190612c7c565b60405180910390f35b3480156104f8575f80fd5b50610501610f4a565b60405161050e9190612d43565b60405180910390f35b348015610522575f80fd5b5061052b610f50565b6040516105389190612c7c565b60405180910390f35b34801561054c575f80fd5b5061056760048036038101906105629190612c95565b610f63565b6040516105749190612d43565b60405180910390f35b348015610588575f80fd5b50610591610fa8565b005b34801561059e575f80fd5b506105a761102f565b6040516105b49190612c7c565b60405180910390f35b3480156105c8575f80fd5b506105e360048036038101906105de9190612e9b565b6110cc565b005b3480156105f0575f80fd5b506105f96111a0565b6040516106069190612de6565b60405180910390f35b34801561061a575f80fd5b506106236111c5565b005b348015610630575f80fd5b506106396112a3565b6040516106469190612de6565b60405180910390f35b34801561065a575f80fd5b506106636112cb565b6040516106709190612de6565b60405180910390f35b348015610684575f80fd5b5061069f600480360381019061069a9190612ed9565b6112f0565b005b3480156106ac575f80fd5b506106b5611389565b6040516106c29190612b73565b60405180910390f35b3480156106d6575f80fd5b506106df611419565b6040516106ec9190612d43565b60405180910390f35b348015610700575f80fd5b5061070961141f565b6040516107169190612d43565b60405180910390f35b34801561072a575f80fd5b5061074560048036038101906107409190612c24565b611425565b6040516107529190612c7c565b60405180910390f35b348015610766575f80fd5b5061076f611442565b60405161077c9190612c7c565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a69190612e9b565b611455565b005b3480156107b8575f80fd5b506107d360048036038101906107ce9190612d5c565b611577565b005b3480156107e0575f80fd5b506107e9611686565b6040516107f69190612d43565b60405180910390f35b34801561080a575f80fd5b5061082560048036038101906108209190612d5c565b61168c565b6040516108329190612c7c565b60405180910390f35b348015610846575f80fd5b5061084f6117e0565b60405161085c9190612d43565b60405180910390f35b348015610870575f80fd5b5061088b60048036038101906108869190612f04565b6117e6565b6040516108989190612d43565b60405180910390f35b3480156108ac575f80fd5b506108b5611868565b6040516108c29190612d43565b60405180910390f35b3480156108d6575f80fd5b506108df61186e565b6040516108ec9190612d43565b60405180910390f35b348015610900575f80fd5b5061091b60048036038101906109169190612c95565b611874565b005b348015610928575f80fd5b50610943600480360381019061093e9190612dff565b61196a565b005b348015610950575f80fd5b50610959611a54565b6040516109669190612d43565b60405180910390f35b34801561097a575f80fd5b50610983611a5a565b6040516109909190612d43565b60405180910390f35b6060600380546109a890612f6f565b80601f01602080910402602001604051908101604052809291908181526020018280546109d490612f6f565b8015610a1f5780601f106109f657610100808354040283529160200191610a1f565b820191905f5260205f20905b815481529060010190602001808311610a0257829003601f168201915b5050505050905090565b5f610a3c610a35611a60565b8484611a67565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610a98611a60565b73ffffffffffffffffffffffffffffffffffffffff16610ab66112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0390612fe9565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bd2611a60565b73ffffffffffffffffffffffffffffffffffffffff16610bf06112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90612fe9565b60405180910390fd5b670de0b6b3a76400006103e86001610c5c610a87565b610c669190613034565b610c7091906130a2565b610c7a91906130a2565b811015610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390613142565b60405180910390fd5b670de0b6b3a764000081610cd09190613034565b60088190555050565b5f610ce5848484611c2a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d2c611a60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906131d0565b60405180910390fd5b610dbf85610db7611a60565b858403611a67565b60019150509392505050565b61dead81565b610dd9611a60565b73ffffffffffffffffffffffffffffffffffffffff16610df76112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490612fe9565b60405180910390fd5b8160108190555080601181905550601154601054610e6b91906131ee565b600f81905550600f80541115610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061326b565b60405180910390fd5b5050565b5f6012905090565b7f000000000000000000000000d795bb7da290eb5a47405c6ff2c7c067082d631581565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fb0611a60565b73ffffffffffffffffffffffffffffffffffffffff16610fce6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90612fe9565b60405180910390fd5b61102d5f612560565b565b5f611038611a60565b73ffffffffffffffffffffffffffffffffffffffff166110566112a3565b73ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390612fe9565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6110d4611a60565b73ffffffffffffffffffffffffffffffffffffffff166110f26112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90612fe9565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111cd611a60565b73ffffffffffffffffffffffffffffffffffffffff166111eb6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890612fe9565b60405180910390fd5b61126b333060646008611252610a87565b61125c9190613034565b61126691906130a2565b611c2a565b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f8611a60565b73ffffffffffffffffffffffffffffffffffffffff166113166112a3565b73ffffffffffffffffffffffffffffffffffffffff161461136c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390612fe9565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461139890612f6f565b80601f01602080910402602001604051908101604052809291908181526020018280546113c490612f6f565b801561140f5780601f106113e65761010080835404028352916020019161140f565b820191905f5260205f20905b8154815290600101906020018083116113f257829003601f168201915b5050505050905090565b600d5481565b60105481565b5f611438611431611a60565b8484611c2a565b6001905092915050565b600b60019054906101000a900460ff1681565b61145d611a60565b73ffffffffffffffffffffffffffffffffffffffff1661147b6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c890612fe9565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161156b9190612c7c565b60405180910390a25050565b61157f611a60565b73ffffffffffffffffffffffffffffffffffffffff1661159d6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90612fe9565b60405180910390fd5b670de0b6b3a76400006103e86005611609610a87565b6116139190613034565b61161d91906130a2565b61162791906130a2565b811015611669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611660906132f9565b60405180910390fd5b670de0b6b3a76400008161167d9190613034565b600a8190555050565b60085481565b5f611695611a60565b73ffffffffffffffffffffffffffffffffffffffff166116b36112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090612fe9565b60405180910390fd5b620186a06001611717610a87565b6117219190613034565b61172b91906130a2565b82101561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490613387565b60405180910390fd5b6103e8600561177a610a87565b6117849190613034565b61178e91906130a2565b8211156117d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c790613415565b60405180910390fd5b8160098190555060019050919050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600e5481565b61187c611a60565b73ffffffffffffffffffffffffffffffffffffffff1661189a6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790612fe9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611955906134a3565b60405180910390fd5b61196781612560565b50565b611972611a60565b73ffffffffffffffffffffffffffffffffffffffff166119906112a3565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90612fe9565b60405180910390fd5b81600d8190555080600e81905550600e54600d54611a0491906131ee565b600c81905550600a600c541115611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a479061350b565b60405180910390fd5b5050565b60115481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90613599565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90613627565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c1d9190612d43565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f906136b5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90613743565b60405180910390fd5b5f8103611d1d57611d1883835f612623565b61255b565b600b5f9054906101000a900460ff161561211957611d396112a3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611da75750611d776112a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ddf57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e19575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e325750600660149054906101000a900460ff16155b1561211857600b60019054906101000a900460ff16611f265760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ee6575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906137ab565b60405180910390fd5b5b7f000000000000000000000000d795bb7da290eb5a47405c6ff2c7c067082d631573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611fc8575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561206f57600854811115612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990613839565b60405180910390fd5b600a5461201e83610f63565b8261202991906131ee565b111561206a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612061906138a1565b60405180910390fd5b612117565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661211657600a546120c983610f63565b826120d491906131ee565b1115612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906138a1565b60405180910390fd5b5b5b5b5b5f61212330610f63565b90505f60095482101590508080156121475750600b60029054906101000a900460ff165b80156121605750600660149054906101000a900460ff16155b80156121b757507f000000000000000000000000d795bb7da290eb5a47405c6ff2c7c067082d631573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561220a575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561225d575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122a0576001600660146101000a81548160ff021916908315150217905550612285612898565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061234f575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612358575f90505b5f805f8315612549577f000000000000000000000000d795bb7da290eb5a47405c6ff2c7c067082d631573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156123bd57505f600f54115b1561242b576123ea60646123dc600f548a6128e690919063ffffffff16565b6128fb90919063ffffffff16565b9250600f54601154846123fd9190613034565b61240791906130a2565b9150600f546010548461241a9190613034565b61242491906130a2565b90506124f2565b7f000000000000000000000000d795bb7da290eb5a47405c6ff2c7c067082d631573ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561248757505f600c54115b156124f1576124b460646124a6600c548a6128e690919063ffffffff16565b6128fb90919063ffffffff16565b9250600c54600e54846124c79190613034565b6124d191906130a2565b9150600c54600d54846124e49190613034565b6124ee91906130a2565b90505b5b5f83111561250657612505893085612623565b5b5f82111561253a57612539307f000000000000000000000000d795bb7da290eb5a47405c6ff2c7c067082d631584612623565b5b828761254691906138bf565b96505b612554898989612623565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906136b5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690613743565b60405180910390fd5b61270a838383612910565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490613962565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461281b91906131ee565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161287f9190612d43565b60405180910390a3612892848484612915565b50505050565b5f6128a230610f63565b90505f81036128b157506128e4565b60146009546128c09190613034565b8111156128d95760146009546128d69190613034565b90505b6128e28161291a565b505b565b5f81836128f39190613034565b905092915050565b5f818361290891906130a2565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561293657612935613980565b5b6040519080825280602002602001820160405280156129645781602001602082028036833780820191505090505b50905030815f8151811061297b5761297a6139ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129eb576129ea6139ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a50307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a67565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612ad2959493929190613aca565b5f604051808303815f87803b158015612ae9575f80fd5b505af1158015612afb573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b4582612b03565b612b4f8185612b0d565b9350612b5f818560208601612b1d565b612b6881612b2b565b840191505092915050565b5f6020820190508181035f830152612b8b8184612b3b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612bc082612b97565b9050919050565b612bd081612bb6565b8114612bda575f80fd5b50565b5f81359050612beb81612bc7565b92915050565b5f819050919050565b612c0381612bf1565b8114612c0d575f80fd5b50565b5f81359050612c1e81612bfa565b92915050565b5f8060408385031215612c3a57612c39612b93565b5b5f612c4785828601612bdd565b9250506020612c5885828601612c10565b9150509250929050565b5f8115159050919050565b612c7681612c62565b82525050565b5f602082019050612c8f5f830184612c6d565b92915050565b5f60208284031215612caa57612ca9612b93565b5b5f612cb784828501612bdd565b91505092915050565b5f819050919050565b5f612ce3612cde612cd984612b97565b612cc0565b612b97565b9050919050565b5f612cf482612cc9565b9050919050565b5f612d0582612cea565b9050919050565b612d1581612cfb565b82525050565b5f602082019050612d2e5f830184612d0c565b92915050565b612d3d81612bf1565b82525050565b5f602082019050612d565f830184612d34565b92915050565b5f60208284031215612d7157612d70612b93565b5b5f612d7e84828501612c10565b91505092915050565b5f805f60608486031215612d9e57612d9d612b93565b5b5f612dab86828701612bdd565b9350506020612dbc86828701612bdd565b9250506040612dcd86828701612c10565b9150509250925092565b612de081612bb6565b82525050565b5f602082019050612df95f830184612dd7565b92915050565b5f8060408385031215612e1557612e14612b93565b5b5f612e2285828601612c10565b9250506020612e3385828601612c10565b9150509250929050565b5f60ff82169050919050565b612e5281612e3d565b82525050565b5f602082019050612e6b5f830184612e49565b92915050565b612e7a81612c62565b8114612e84575f80fd5b50565b5f81359050612e9581612e71565b92915050565b5f8060408385031215612eb157612eb0612b93565b5b5f612ebe85828601612bdd565b9250506020612ecf85828601612e87565b9150509250929050565b5f60208284031215612eee57612eed612b93565b5b5f612efb84828501612e87565b91505092915050565b5f8060408385031215612f1a57612f19612b93565b5b5f612f2785828601612bdd565b9250506020612f3885828601612bdd565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f8657607f821691505b602082108103612f9957612f98612f42565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fd3602083612b0d565b9150612fde82612f9f565b602082019050919050565b5f6020820190508181035f83015261300081612fc7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61303e82612bf1565b915061304983612bf1565b925082820261305781612bf1565b9150828204841483151761306e5761306d613007565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6130ac82612bf1565b91506130b783612bf1565b9250826130c7576130c6613075565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f61312c602f83612b0d565b9150613137826130d2565b604082019050919050565b5f6020820190508181035f83015261315981613120565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6131ba602883612b0d565b91506131c582613160565b604082019050919050565b5f6020820190508181035f8301526131e7816131ae565b9050919050565b5f6131f882612bf1565b915061320383612bf1565b925082820190508082111561321b5761321a613007565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c6573730000005f82015250565b5f613255601d83612b0d565b915061326082613221565b602082019050919050565b5f6020820190508181035f83015261328281613249565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6132e3602483612b0d565b91506132ee82613289565b604082019050919050565b5f6020820190508181035f830152613310816132d7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613371603583612b0d565b915061337c82613317565b604082019050919050565b5f6020820190508181035f83015261339e81613365565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6133ff603483612b0d565b915061340a826133a5565b604082019050919050565b5f6020820190508181035f83015261342c816133f3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61348d602683612b0d565b915061349882613433565b604082019050919050565b5f6020820190508181035f8301526134ba81613481565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f6134f5601d83612b0d565b9150613500826134c1565b602082019050919050565b5f6020820190508181035f830152613522816134e9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613583602483612b0d565b915061358e82613529565b604082019050919050565b5f6020820190508181035f8301526135b081613577565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613611602283612b0d565b915061361c826135b7565b604082019050919050565b5f6020820190508181035f83015261363e81613605565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61369f602583612b0d565b91506136aa82613645565b604082019050919050565b5f6020820190508181035f8301526136cc81613693565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61372d602383612b0d565b9150613738826136d3565b604082019050919050565b5f6020820190508181035f83015261375a81613721565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613795601683612b0d565b91506137a082613761565b602082019050919050565b5f6020820190508181035f8301526137c281613789565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613823603583612b0d565b915061382e826137c9565b604082019050919050565b5f6020820190508181035f83015261385081613817565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61388b601383612b0d565b915061389682613857565b602082019050919050565b5f6020820190508181035f8301526138b88161387f565b9050919050565b5f6138c982612bf1565b91506138d483612bf1565b92508282039050818111156138ec576138eb613007565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61394c602683612b0d565b9150613957826138f2565b604082019050919050565b5f6020820190508181035f83015261397981613940565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6139fd6139f86139f3846139da565b612cc0565b612bf1565b9050919050565b613a0d816139e3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a4581612bb6565b82525050565b5f613a568383613a3c565b60208301905092915050565b5f602082019050919050565b5f613a7882613a13565b613a828185613a1d565b9350613a8d83613a2d565b805f5b83811015613abd578151613aa48882613a4b565b9750613aaf83613a62565b925050600181019050613a90565b5085935050505092915050565b5f60a082019050613add5f830188612d34565b613aea6020830187613a04565b8181036040830152613afc8186613a6e565b9050613b0b6060830185612dd7565b613b186080830184612d34565b969550505050505056fea2646970667358221220ede6fe96b31ca43343e5d29d10f094a7b292caf8c500853f82077ed0ced1810c64736f6c634300081a0033

Deployed Bytecode Sourcemap

24609:12097:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9465:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11632:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25568:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24684:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10585:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31761:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30014:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12283:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24787:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31248:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10427:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24742:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25098:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31960:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25321:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25178:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10756:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2700:103;;;;;;;;;;;;;:::i;:::-;;29318:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30561:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24847:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29082:184;;;;;;;;;;;;;:::i;:::-;;2049:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24950:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30824:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9684:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25251:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25356:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11096:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25138:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31571:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30297:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24983:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29509:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25217:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11334:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25025:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25282:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2958:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30932:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25388:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25065:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9465:100;9519:13;9552:5;9545:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9465:100;:::o;11632:169::-;11715:4;11732:39;11741:12;:10;:12::i;:::-;11755:7;11764:6;11732:8;:39::i;:::-;11789:4;11782:11;;11632:169;;;;:::o;25568:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24684:51::-;;;:::o;10585:108::-;10646:7;10673:12;;10666:19;;10585:108;:::o;31761:189::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31897:9:::1;;;;;;;;;;;31866:41;;31883:12;31866:41;;;;;;;;;;;;31930:12;31918:9;;:24;;;;;;;;;;;;;;;;;;31761:189:::0;:::o;30014:275::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30151:4:::1;30143;30138:1;30122:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30121:26;;;;:::i;:::-;30120:35;;;;:::i;:::-;30110:6;:45;;30088:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30274:6;30264;:17;;;;:::i;:::-;30241:20;:40;;;;30014:275:::0;:::o;12283:492::-;12423:4;12440:36;12450:6;12458:9;12469:6;12440:9;:36::i;:::-;12489:24;12516:11;:19;12528:6;12516:19;;;;;;;;;;;;;;;:33;12536:12;:10;:12::i;:::-;12516:33;;;;;;;;;;;;;;;;12489:60;;12588:6;12568:16;:26;;12560:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12675:57;12684:6;12692:12;:10;:12::i;:::-;12725:6;12706:16;:25;12675:8;:57::i;:::-;12763:4;12756:11;;;12283:492;;;;;:::o;24787:53::-;24833:6;24787:53;:::o;31248:315::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31377:7:::1;31364:10;:20;;;;31414:13;31395:16;:32;;;;31467:16;;31454:10;;:29;;;;:::i;:::-;31438:13;:45;;;;31519:2;31502:13:::0;::::1;:19;;31494:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31248:315:::0;;:::o;10427:93::-;10485:5;10510:2;10503:9;;10427:93;:::o;24742:38::-;;;:::o;25098:33::-;;;;;;;;;;;;;:::o;31960:126::-;32026:4;32050:19;:28;32070:7;32050:28;;;;;;;;;;;;;;;;;;;;;;;;;32043:35;;31960:126;;;:::o;25321:28::-;;;;:::o;25178:30::-;;;;;;;;;;;;;:::o;10756:127::-;10830:7;10857:9;:18;10867:7;10857:18;;;;;;;;;;;;;;;;10850:25;;10756:127;;;:::o;2700:103::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2765:30:::1;2792:1;2765:18;:30::i;:::-;2700:103::o:0;29318:121::-;29370:4;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29404:5:::1;29387:14;;:22;;;;;;;;;;;;;;;;;;29427:4;29420:11;;29318:121:::0;:::o;30561:167::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30716:4:::1;30674:31;:39;30706:6;30674:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30561:167:::0;;:::o;24847:64::-;;;;;;;;;;;;;:::o;29082:184::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29137:61:::1;29147:10;29167:4;29194:3;29190:1;29174:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;29137:9;:61::i;:::-;29225:4;29209:13;;:20;;;;;;;;;;;;;;;;;;29254:4;29240:11;;:18;;;;;;;;;;;;;;;;;;29082:184::o:0;2049:87::-;2095:7;2122:6;;;;;;;;;;;2115:13;;2049:87;:::o;24950:24::-;;;;;;;;;;;;;:::o;30824:100::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30909:7:::1;30895:11;;:21;;;;;;;;;;;;;;;;;;30824:100:::0;:::o;9684:104::-;9740:13;9773:7;9766:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9684:104;:::o;25251:24::-;;;;:::o;25356:25::-;;;;:::o;11096:175::-;11182:4;11199:42;11209:12;:10;:12::i;:::-;11223:9;11234:6;11199:9;:42::i;:::-;11259:4;11252:11;;11096:175;;;;:::o;25138:33::-;;;;;;;;;;;;;:::o;31571:182::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31687:8:::1;31656:19;:28;31676:7;31656:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31727:7;31711:34;;;31736:8;31711:34;;;;;;:::i;:::-;;;;;;;;31571:182:::0;;:::o;30297:256::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30437:4:::1;30429;30424:1;30408:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30407:26;;;;:::i;:::-;30406:35;;;;:::i;:::-;30396:6;:45;;30374:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30538:6;30528;:17;;;;:::i;:::-;30516:9;:29;;;;30297:256:::0;:::o;24983:35::-;;;;:::o;29509:497::-;29617:4;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29696:6:::1;29691:1;29675:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29674:28;;;;:::i;:::-;29661:9;:41;;29639:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29851:4;29846:1;29830:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29829:26;;;;:::i;:::-;29816:9;:39;;29794:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29967:9;29946:18;:30;;;;29994:4;29987:11;;29509:497:::0;;;:::o;25217:27::-;;;;:::o;11334:151::-;11423:7;11450:11;:18;11462:5;11450:18;;;;;;;;;;;;;;;:27;11469:7;11450:27;;;;;;;;;;;;;;;;11443:34;;11334:151;;;;:::o;25025:33::-;;;;:::o;25282:30::-;;;;:::o;2958:201::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3067:1:::1;3047:22;;:8;:22;;::::0;3039:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3123:28;3142:8;3123:18;:28::i;:::-;2958:201:::0;:::o;30932:308::-;2280:12;:10;:12::i;:::-;2269:23;;:7;:5;:7::i;:::-;:23;;;2261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31059:7:::1;31047:9;:19;;;;31095:13;31077:15;:31;;;;31146:15;;31134:9;;:27;;;;:::i;:::-;31119:12;:42;;;;31196:2;31180:12;;:18;;31172:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30932:308:::0;;:::o;25388:31::-;;;;:::o;25065:24::-;;;;:::o;1421:98::-;1474:7;1501:10;1494:17;;1421:98;:::o;15124:380::-;15277:1;15260:19;;:5;:19;;;15252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15358:1;15339:21;;:7;:21;;;15331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15442:6;15412:11;:18;15424:5;15412:18;;;;;;;;;;;;;;;:27;15431:7;15412:27;;;;;;;;;;;;;;;:36;;;;15480:7;15464:32;;15473:5;15464:32;;;15489:6;15464:32;;;;;;:::i;:::-;;;;;;;;15124:380;;;:::o;32094:3679::-;32242:1;32226:18;;:4;:18;;;32218:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32319:1;32305:16;;:2;:16;;;32297:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32388:1;32378:6;:11;32374:93;;32406:28;32422:4;32428:2;32432:1;32406:15;:28::i;:::-;32449:7;;32374:93;32483:14;;;;;;;;;;;32479:1430;;;32544:7;:5;:7::i;:::-;32536:15;;:4;:15;;;;:49;;;;;32578:7;:5;:7::i;:::-;32572:13;;:2;:13;;;;32536:49;:86;;;;;32620:1;32606:16;;:2;:16;;;;32536:86;:128;;;;;32657:6;32643:21;;:2;:21;;;;32536:128;:158;;;;;32686:8;;;;;;;;;;;32685:9;32536:158;32514:1384;;;32734:13;;;;;;;;;;;32729:223;;32806:19;:25;32826:4;32806:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32835:19;:23;32855:2;32835:23;;;;;;;;;;;;;;;;;;;;;;;;;32806:52;32772:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;32729:223;33166:13;33158:21;;:4;:21;;;:82;;;;;33205:31;:35;33237:2;33205:35;;;;;;;;;;;;;;;;;;;;;;;;;33204:36;33158:82;33132:751;;;33327:20;;33317:6;:30;;33283:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33535:9;;33518:13;33528:2;33518:9;:13::i;:::-;33509:6;:22;;;;:::i;:::-;:35;;33475:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33132:751;;;33663:31;:35;33695:2;33663:35;;;;;;;;;;;;;;;;;;;;;;;;;33658:225;;33783:9;;33766:13;33776:2;33766:9;:13::i;:::-;33757:6;:22;;;;:::i;:::-;:35;;33723:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33658:225;33132:751;32514:1384;32479:1430;33921:28;33952:24;33970:4;33952:9;:24::i;:::-;33921:55;;33989:12;34028:18;;34004:20;:42;;33989:57;;34077:7;:35;;;;;34101:11;;;;;;;;;;;34077:35;:61;;;;;34130:8;;;;;;;;;;;34129:9;34077:61;:97;;;;;34161:13;34155:19;;:2;:19;;;34077:97;:140;;;;;34192:19;:25;34212:4;34192:25;;;;;;;;;;;;;;;;;;;;;;;;;34191:26;34077:140;:181;;;;;34235:19;:23;34255:2;34235:23;;;;;;;;;;;;;;;;;;;;;;;;;34234:24;34077:181;34059:313;;;34296:4;34285:8;;:15;;;;;;;;;;;;;;;;;;34317:10;:8;:10::i;:::-;34355:5;34344:8;;:16;;;;;;;;;;;;;;;;;;34059:313;34384:12;34400:8;;;;;;;;;;;34399:9;34384:24;;34510:19;:25;34530:4;34510:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34539:19;:23;34559:2;34539:23;;;;;;;;;;;;;;;;;;;;;;;;;34510:52;34506:100;;;34589:5;34579:15;;34506:100;34618:12;34645:26;34686:20;34799:7;34795:925;;;34857:13;34851:19;;:2;:19;;;:40;;;;;34890:1;34874:13;;:17;34851:40;34847:583;;;34919:34;34949:3;34919:25;34930:13;;34919:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;34912:41;;35021:13;;35001:16;;34994:4;:23;;;;:::i;:::-;34993:41;;;;:::i;:::-;34972:62;;35090:13;;35076:10;;35069:4;:17;;;;:::i;:::-;35068:35;;;;:::i;:::-;35053:50;;34847:583;;;35173:13;35165:21;;:4;:21;;;:41;;;;;35205:1;35190:12;;:16;35165:41;35161:269;;;35234:33;35263:3;35234:24;35245:12;;35234:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35227:40;;35334:12;;35315:15;;35308:4;:22;;;;:::i;:::-;35307:39;;;;:::i;:::-;35286:60;;35402:12;;35389:9;;35382:4;:16;;;;:::i;:::-;35381:33;;;;:::i;:::-;35366:48;;35161:269;34847:583;35456:1;35450:4;:7;35446:90;;;35478:42;35494:4;35508;35515;35478:15;:42::i;:::-;35446:90;35575:1;35554:18;:22;35550:128;;;35597:65;35621:4;35628:13;35643:18;35597:15;:65::i;:::-;35550:128;35704:4;35694:14;;;;;:::i;:::-;;;34795:925;35732:33;35748:4;35754:2;35758:6;35732:15;:33::i;:::-;32207:3566;;;;;;32094:3679;;;;:::o;3319:191::-;3393:16;3412:6;;;;;;;;;;;3393:25;;3438:8;3429:6;;:17;;;;;;;;;;;;;;;;;;3493:8;3462:40;;3483:8;3462:40;;;;;;;;;;;;3382:128;3319:191;:::o;13265:733::-;13423:1;13405:20;;:6;:20;;;13397:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13507:1;13486:23;;:9;:23;;;13478:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13562:47;13583:6;13591:9;13602:6;13562:20;:47::i;:::-;13622:21;13646:9;:17;13656:6;13646:17;;;;;;;;;;;;;;;;13622:41;;13699:6;13682:13;:23;;13674:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13820:6;13804:13;:22;13784:9;:17;13794:6;13784:17;;;;;;;;;;;;;;;:42;;;;13872:6;13848:9;:20;13858:9;13848:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13913:9;13896:35;;13905:6;13896:35;;;13924:6;13896:35;;;;;;:::i;:::-;;;;;;;;13944:46;13964:6;13972:9;13983:6;13944:19;:46::i;:::-;13386:612;13265:733;;;:::o;36361:340::-;36400:23;36426:24;36444:4;36426:9;:24::i;:::-;36400:50;;36484:1;36465:15;:20;36461:59;;36502:7;;;36461:59;36575:2;36554:18;;:23;;;;:::i;:::-;36536:15;:41;36532:115;;;36633:2;36612:18;;:23;;;;:::i;:::-;36594:41;;36532:115;36659:34;36677:15;36659:17;:34::i;:::-;36389:312;36361:340;:::o;20577:98::-;20635:7;20666:1;20662;:5;;;;:::i;:::-;20655:12;;20577:98;;;;:::o;20976:::-;21034:7;21065:1;21061;:5;;;;:::i;:::-;21054:12;;20976:98;;;;:::o;16104:125::-;;;;:::o;16833:124::-;;;;:::o;35781:572::-;35908:21;35946:1;35932:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35908:40;;35977:4;35959;35964:1;35959:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36003:4;;;;;;;;;;;35993;35998:1;35993:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;36020:62;36037:4;36052:15;36070:11;36020:8;:62::i;:::-;36121:15;:69;;;36205:11;36231:1;36276:4;36295:9;;;;;;;;;;;36319:15;36121:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35837:516;35781:572;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:60::-;3702:3;3723:5;3716:12;;3674:60;;;:::o;3740:142::-;3790:9;3823:53;3841:34;3850:24;3868:5;3850:24;:::i;:::-;3841:34;:::i;:::-;3823:53;:::i;:::-;3810:66;;3740:142;;;:::o;3888:126::-;3938:9;3971:37;4002:5;3971:37;:::i;:::-;3958:50;;3888:126;;;:::o;4020:152::-;4096:9;4129:37;4160:5;4129:37;:::i;:::-;4116:50;;4020:152;;;:::o;4178:183::-;4291:63;4348:5;4291:63;:::i;:::-;4286:3;4279:76;4178:183;;:::o;4367:274::-;4486:4;4524:2;4513:9;4509:18;4501:26;;4537:97;4631:1;4620:9;4616:17;4607:6;4537:97;:::i;:::-;4367:274;;;;:::o;4647:118::-;4734:24;4752:5;4734:24;:::i;:::-;4729:3;4722:37;4647:118;;:::o;4771:222::-;4864:4;4902:2;4891:9;4887:18;4879:26;;4915:71;4983:1;4972:9;4968:17;4959:6;4915:71;:::i;:::-;4771:222;;;;:::o;4999:329::-;5058:6;5107:2;5095:9;5086:7;5082:23;5078:32;5075:119;;;5113:79;;:::i;:::-;5075:119;5233:1;5258:53;5303:7;5294:6;5283:9;5279:22;5258:53;:::i;:::-;5248:63;;5204:117;4999:329;;;;:::o;5334:619::-;5411:6;5419;5427;5476:2;5464:9;5455:7;5451:23;5447:32;5444:119;;;5482:79;;:::i;:::-;5444:119;5602:1;5627:53;5672:7;5663:6;5652:9;5648:22;5627:53;:::i;:::-;5617:63;;5573:117;5729:2;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5700:118;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;5334:619;;;;;:::o;5959:118::-;6046:24;6064:5;6046:24;:::i;:::-;6041:3;6034:37;5959:118;;:::o;6083:222::-;6176:4;6214:2;6203:9;6199:18;6191:26;;6227:71;6295:1;6284:9;6280:17;6271:6;6227:71;:::i;:::-;6083:222;;;;:::o;6311:474::-;6379:6;6387;6436:2;6424:9;6415:7;6411:23;6407:32;6404:119;;;6442:79;;:::i;:::-;6404:119;6562:1;6587:53;6632:7;6623:6;6612:9;6608:22;6587:53;:::i;:::-;6577:63;;6533:117;6689:2;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6660:118;6311:474;;;;;:::o;6791:86::-;6826:7;6866:4;6859:5;6855:16;6844:27;;6791:86;;;:::o;6883:112::-;6966:22;6982:5;6966:22;:::i;:::-;6961:3;6954:35;6883:112;;:::o;7001:214::-;7090:4;7128:2;7117:9;7113:18;7105:26;;7141:67;7205:1;7194:9;7190:17;7181:6;7141:67;:::i;:::-;7001:214;;;;:::o;7221:116::-;7291:21;7306:5;7291:21;:::i;:::-;7284:5;7281:32;7271:60;;7327:1;7324;7317:12;7271:60;7221:116;:::o;7343:133::-;7386:5;7424:6;7411:20;7402:29;;7440:30;7464:5;7440:30;:::i;:::-;7343:133;;;;:::o;7482:468::-;7547:6;7555;7604:2;7592:9;7583:7;7579:23;7575:32;7572:119;;;7610:79;;:::i;:::-;7572:119;7730:1;7755:53;7800:7;7791:6;7780:9;7776:22;7755:53;:::i;:::-;7745:63;;7701:117;7857:2;7883:50;7925:7;7916:6;7905:9;7901:22;7883:50;:::i;:::-;7873:60;;7828:115;7482:468;;;;;:::o;7956:323::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:50;8254:7;8245:6;8234:9;8230:22;8212:50;:::i;:::-;8202:60;;8158:114;7956:323;;;;:::o;8285:474::-;8353:6;8361;8410:2;8398:9;8389:7;8385:23;8381:32;8378:119;;;8416:79;;:::i;:::-;8378:119;8536:1;8561:53;8606:7;8597:6;8586:9;8582:22;8561:53;:::i;:::-;8551:63;;8507:117;8663:2;8689:53;8734:7;8725:6;8714:9;8710:22;8689:53;:::i;:::-;8679:63;;8634:118;8285:474;;;;;:::o;8765:180::-;8813:77;8810:1;8803:88;8910:4;8907:1;8900:15;8934:4;8931:1;8924:15;8951:320;8995:6;9032:1;9026:4;9022:12;9012:22;;9079:1;9073:4;9069:12;9100:18;9090:81;;9156:4;9148:6;9144:17;9134:27;;9090:81;9218:2;9210:6;9207:14;9187:18;9184:38;9181:84;;9237:18;;:::i;:::-;9181:84;9002:269;8951:320;;;:::o;9277:182::-;9417:34;9413:1;9405:6;9401:14;9394:58;9277:182;:::o;9465:366::-;9607:3;9628:67;9692:2;9687:3;9628:67;:::i;:::-;9621:74;;9704:93;9793:3;9704:93;:::i;:::-;9822:2;9817:3;9813:12;9806:19;;9465:366;;;:::o;9837:419::-;10003:4;10041:2;10030:9;10026:18;10018:26;;10090:9;10084:4;10080:20;10076:1;10065:9;10061:17;10054:47;10118:131;10244:4;10118:131;:::i;:::-;10110:139;;9837:419;;;:::o;10262:180::-;10310:77;10307:1;10300:88;10407:4;10404:1;10397:15;10431:4;10428:1;10421:15;10448:410;10488:7;10511:20;10529:1;10511:20;:::i;:::-;10506:25;;10545:20;10563:1;10545:20;:::i;:::-;10540:25;;10600:1;10597;10593:9;10622:30;10640:11;10622:30;:::i;:::-;10611:41;;10801:1;10792:7;10788:15;10785:1;10782:22;10762:1;10755:9;10735:83;10712:139;;10831:18;;:::i;:::-;10712:139;10496:362;10448:410;;;;:::o;10864:180::-;10912:77;10909:1;10902:88;11009:4;11006:1;10999:15;11033:4;11030:1;11023:15;11050:185;11090:1;11107:20;11125:1;11107:20;:::i;:::-;11102:25;;11141:20;11159:1;11141:20;:::i;:::-;11136:25;;11180:1;11170:35;;11185:18;;:::i;:::-;11170:35;11227:1;11224;11220:9;11215:14;;11050:185;;;;:::o;11241:234::-;11381:34;11377:1;11369:6;11365:14;11358:58;11450:17;11445:2;11437:6;11433:15;11426:42;11241:234;:::o;11481:366::-;11623:3;11644:67;11708:2;11703:3;11644:67;:::i;:::-;11637:74;;11720:93;11809:3;11720:93;:::i;:::-;11838:2;11833:3;11829:12;11822:19;;11481:366;;;:::o;11853:419::-;12019:4;12057:2;12046:9;12042:18;12034:26;;12106:9;12100:4;12096:20;12092:1;12081:9;12077:17;12070:47;12134:131;12260:4;12134:131;:::i;:::-;12126:139;;11853:419;;;:::o;12278:227::-;12418:34;12414:1;12406:6;12402:14;12395:58;12487:10;12482:2;12474:6;12470:15;12463:35;12278:227;:::o;12511:366::-;12653:3;12674:67;12738:2;12733:3;12674:67;:::i;:::-;12667:74;;12750:93;12839:3;12750:93;:::i;:::-;12868:2;12863:3;12859:12;12852:19;;12511:366;;;:::o;12883:419::-;13049:4;13087:2;13076:9;13072:18;13064:26;;13136:9;13130:4;13126:20;13122:1;13111:9;13107:17;13100:47;13164:131;13290:4;13164:131;:::i;:::-;13156:139;;12883:419;;;:::o;13308:191::-;13348:3;13367:20;13385:1;13367:20;:::i;:::-;13362:25;;13401:20;13419:1;13401:20;:::i;:::-;13396:25;;13444:1;13441;13437:9;13430:16;;13465:3;13462:1;13459:10;13456:36;;;13472:18;;:::i;:::-;13456:36;13308:191;;;;:::o;13505:179::-;13645:31;13641:1;13633:6;13629:14;13622:55;13505:179;:::o;13690:366::-;13832:3;13853:67;13917:2;13912:3;13853:67;:::i;:::-;13846:74;;13929:93;14018:3;13929:93;:::i;:::-;14047:2;14042:3;14038:12;14031:19;;13690:366;;;:::o;14062:419::-;14228:4;14266:2;14255:9;14251:18;14243:26;;14315:9;14309:4;14305:20;14301:1;14290:9;14286:17;14279:47;14343:131;14469:4;14343:131;:::i;:::-;14335:139;;14062:419;;;:::o;14487:223::-;14627:34;14623:1;14615:6;14611:14;14604:58;14696:6;14691:2;14683:6;14679:15;14672:31;14487:223;:::o;14716:366::-;14858:3;14879:67;14943:2;14938:3;14879:67;:::i;:::-;14872:74;;14955:93;15044:3;14955:93;:::i;:::-;15073:2;15068:3;15064:12;15057:19;;14716:366;;;:::o;15088:419::-;15254:4;15292:2;15281:9;15277:18;15269:26;;15341:9;15335:4;15331:20;15327:1;15316:9;15312:17;15305:47;15369:131;15495:4;15369:131;:::i;:::-;15361:139;;15088:419;;;:::o;15513:240::-;15653:34;15649:1;15641:6;15637:14;15630:58;15722:23;15717:2;15709:6;15705:15;15698:48;15513:240;:::o;15759:366::-;15901:3;15922:67;15986:2;15981:3;15922:67;:::i;:::-;15915:74;;15998:93;16087:3;15998:93;:::i;:::-;16116:2;16111:3;16107:12;16100:19;;15759:366;;;:::o;16131:419::-;16297:4;16335:2;16324:9;16320:18;16312:26;;16384:9;16378:4;16374:20;16370:1;16359:9;16355:17;16348:47;16412:131;16538:4;16412:131;:::i;:::-;16404:139;;16131:419;;;:::o;16556:239::-;16696:34;16692:1;16684:6;16680:14;16673:58;16765:22;16760:2;16752:6;16748:15;16741:47;16556:239;:::o;16801:366::-;16943:3;16964:67;17028:2;17023:3;16964:67;:::i;:::-;16957:74;;17040:93;17129:3;17040:93;:::i;:::-;17158:2;17153:3;17149:12;17142:19;;16801:366;;;:::o;17173:419::-;17339:4;17377:2;17366:9;17362:18;17354:26;;17426:9;17420:4;17416:20;17412:1;17401:9;17397:17;17390:47;17454:131;17580:4;17454:131;:::i;:::-;17446:139;;17173:419;;;:::o;17598:225::-;17738:34;17734:1;17726:6;17722:14;17715:58;17807:8;17802:2;17794:6;17790:15;17783:33;17598:225;:::o;17829:366::-;17971:3;17992:67;18056:2;18051:3;17992:67;:::i;:::-;17985:74;;18068:93;18157:3;18068:93;:::i;:::-;18186:2;18181:3;18177:12;18170:19;;17829:366;;;:::o;18201:419::-;18367:4;18405:2;18394:9;18390:18;18382:26;;18454:9;18448:4;18444:20;18440:1;18429:9;18425:17;18418:47;18482:131;18608:4;18482:131;:::i;:::-;18474:139;;18201:419;;;:::o;18626:179::-;18766:31;18762:1;18754:6;18750:14;18743:55;18626:179;:::o;18811:366::-;18953:3;18974:67;19038:2;19033:3;18974:67;:::i;:::-;18967:74;;19050:93;19139:3;19050:93;:::i;:::-;19168:2;19163:3;19159:12;19152:19;;18811:366;;;:::o;19183:419::-;19349:4;19387:2;19376:9;19372:18;19364:26;;19436:9;19430:4;19426:20;19422:1;19411:9;19407:17;19400:47;19464:131;19590:4;19464:131;:::i;:::-;19456:139;;19183:419;;;:::o;19608:223::-;19748:34;19744:1;19736:6;19732:14;19725:58;19817:6;19812:2;19804:6;19800:15;19793:31;19608:223;:::o;19837:366::-;19979:3;20000:67;20064:2;20059:3;20000:67;:::i;:::-;19993:74;;20076:93;20165:3;20076:93;:::i;:::-;20194:2;20189:3;20185:12;20178:19;;19837:366;;;:::o;20209:419::-;20375:4;20413:2;20402:9;20398:18;20390:26;;20462:9;20456:4;20452:20;20448:1;20437:9;20433:17;20426:47;20490:131;20616:4;20490:131;:::i;:::-;20482:139;;20209:419;;;:::o;20634:221::-;20774:34;20770:1;20762:6;20758:14;20751:58;20843:4;20838:2;20830:6;20826:15;20819:29;20634:221;:::o;20861:366::-;21003:3;21024:67;21088:2;21083:3;21024:67;:::i;:::-;21017:74;;21100:93;21189:3;21100:93;:::i;:::-;21218:2;21213:3;21209:12;21202:19;;20861:366;;;:::o;21233:419::-;21399:4;21437:2;21426:9;21422:18;21414:26;;21486:9;21480:4;21476:20;21472:1;21461:9;21457:17;21450:47;21514:131;21640:4;21514:131;:::i;:::-;21506:139;;21233:419;;;:::o;21658:224::-;21798:34;21794:1;21786:6;21782:14;21775:58;21867:7;21862:2;21854:6;21850:15;21843:32;21658:224;:::o;21888:366::-;22030:3;22051:67;22115:2;22110:3;22051:67;:::i;:::-;22044:74;;22127:93;22216:3;22127:93;:::i;:::-;22245:2;22240:3;22236:12;22229:19;;21888:366;;;:::o;22260:419::-;22426:4;22464:2;22453:9;22449:18;22441:26;;22513:9;22507:4;22503:20;22499:1;22488:9;22484:17;22477:47;22541:131;22667:4;22541:131;:::i;:::-;22533:139;;22260:419;;;:::o;22685:222::-;22825:34;22821:1;22813:6;22809:14;22802:58;22894:5;22889:2;22881:6;22877:15;22870:30;22685:222;:::o;22913:366::-;23055:3;23076:67;23140:2;23135:3;23076:67;:::i;:::-;23069:74;;23152:93;23241:3;23152:93;:::i;:::-;23270:2;23265:3;23261:12;23254:19;;22913:366;;;:::o;23285:419::-;23451:4;23489:2;23478:9;23474:18;23466:26;;23538:9;23532:4;23528:20;23524:1;23513:9;23509:17;23502:47;23566:131;23692:4;23566:131;:::i;:::-;23558:139;;23285:419;;;:::o;23710:172::-;23850:24;23846:1;23838:6;23834:14;23827:48;23710:172;:::o;23888:366::-;24030:3;24051:67;24115:2;24110:3;24051:67;:::i;:::-;24044:74;;24127:93;24216:3;24127:93;:::i;:::-;24245:2;24240:3;24236:12;24229:19;;23888:366;;;:::o;24260:419::-;24426:4;24464:2;24453:9;24449:18;24441:26;;24513:9;24507:4;24503:20;24499:1;24488:9;24484:17;24477:47;24541:131;24667:4;24541:131;:::i;:::-;24533:139;;24260:419;;;:::o;24685:240::-;24825:34;24821:1;24813:6;24809:14;24802:58;24894:23;24889:2;24881:6;24877:15;24870:48;24685:240;:::o;24931:366::-;25073:3;25094:67;25158:2;25153:3;25094:67;:::i;:::-;25087:74;;25170:93;25259:3;25170:93;:::i;:::-;25288:2;25283:3;25279:12;25272:19;;24931:366;;;:::o;25303:419::-;25469:4;25507:2;25496:9;25492:18;25484:26;;25556:9;25550:4;25546:20;25542:1;25531:9;25527:17;25520:47;25584:131;25710:4;25584:131;:::i;:::-;25576:139;;25303:419;;;:::o;25728:169::-;25868:21;25864:1;25856:6;25852:14;25845:45;25728:169;:::o;25903:366::-;26045:3;26066:67;26130:2;26125:3;26066:67;:::i;:::-;26059:74;;26142:93;26231:3;26142:93;:::i;:::-;26260:2;26255:3;26251:12;26244:19;;25903:366;;;:::o;26275:419::-;26441:4;26479:2;26468:9;26464:18;26456:26;;26528:9;26522:4;26518:20;26514:1;26503:9;26499:17;26492:47;26556:131;26682:4;26556:131;:::i;:::-;26548:139;;26275:419;;;:::o;26700:194::-;26740:4;26760:20;26778:1;26760:20;:::i;:::-;26755:25;;26794:20;26812:1;26794:20;:::i;:::-;26789:25;;26838:1;26835;26831:9;26823:17;;26862:1;26856:4;26853:11;26850:37;;;26867:18;;:::i;:::-;26850:37;26700:194;;;;:::o;26900:225::-;27040:34;27036:1;27028:6;27024:14;27017:58;27109:8;27104:2;27096:6;27092:15;27085:33;26900:225;:::o;27131:366::-;27273:3;27294:67;27358:2;27353:3;27294:67;:::i;:::-;27287:74;;27370:93;27459:3;27370:93;:::i;:::-;27488:2;27483:3;27479:12;27472:19;;27131:366;;;:::o;27503:419::-;27669:4;27707:2;27696:9;27692:18;27684:26;;27756:9;27750:4;27746:20;27742:1;27731:9;27727:17;27720:47;27784:131;27910:4;27784:131;:::i;:::-;27776:139;;27503:419;;;:::o;27928:180::-;27976:77;27973:1;27966:88;28073:4;28070:1;28063:15;28097:4;28094:1;28087:15;28114:180;28162:77;28159:1;28152:88;28259:4;28256:1;28249:15;28283:4;28280:1;28273:15;28300:85;28345:7;28374:5;28363:16;;28300:85;;;:::o;28391:158::-;28449:9;28482:61;28500:42;28509:32;28535:5;28509:32;:::i;:::-;28500:42;:::i;:::-;28482:61;:::i;:::-;28469:74;;28391:158;;;:::o;28555:147::-;28650:45;28689:5;28650:45;:::i;:::-;28645:3;28638:58;28555:147;;:::o;28708:114::-;28775:6;28809:5;28803:12;28793:22;;28708:114;;;:::o;28828:184::-;28927:11;28961:6;28956:3;28949:19;29001:4;28996:3;28992:14;28977:29;;28828:184;;;;:::o;29018:132::-;29085:4;29108:3;29100:11;;29138:4;29133:3;29129:14;29121:22;;29018:132;;;:::o;29156:108::-;29233:24;29251:5;29233:24;:::i;:::-;29228:3;29221:37;29156:108;;:::o;29270:179::-;29339:10;29360:46;29402:3;29394:6;29360:46;:::i;:::-;29438:4;29433:3;29429:14;29415:28;;29270:179;;;;:::o;29455:113::-;29525:4;29557;29552:3;29548:14;29540:22;;29455:113;;;:::o;29604:732::-;29723:3;29752:54;29800:5;29752:54;:::i;:::-;29822:86;29901:6;29896:3;29822:86;:::i;:::-;29815:93;;29932:56;29982:5;29932:56;:::i;:::-;30011:7;30042:1;30027:284;30052:6;30049:1;30046:13;30027:284;;;30128:6;30122:13;30155:63;30214:3;30199:13;30155:63;:::i;:::-;30148:70;;30241:60;30294:6;30241:60;:::i;:::-;30231:70;;30087:224;30074:1;30071;30067:9;30062:14;;30027:284;;;30031:14;30327:3;30320:10;;29728:608;;;29604:732;;;;:::o;30342:831::-;30605:4;30643:3;30632:9;30628:19;30620:27;;30657:71;30725:1;30714:9;30710:17;30701:6;30657:71;:::i;:::-;30738:80;30814:2;30803:9;30799:18;30790:6;30738:80;:::i;:::-;30865:9;30859:4;30855:20;30850:2;30839:9;30835:18;30828:48;30893:108;30996:4;30987:6;30893:108;:::i;:::-;30885:116;;31011:72;31079:2;31068:9;31064:18;31055:6;31011:72;:::i;:::-;31093:73;31161:3;31150:9;31146:19;31137:6;31093:73;:::i;:::-;30342:831;;;;;;;;:::o

Swarm Source

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