ETH Price: $2,420.53 (+2.75%)

Token

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

Overview

Max Total Supply

4,444,444,444 🐼

Holders

37

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 🐼

Value
$0.00
0xDe64A183ff3abcd5f59a30d3ec6300F2496dF6AB
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, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-09
*/

pragma solidity ^0.8.26;





/**


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

JUST A PANDA ON THE BLOCKCHAIN

只是区块链上的一只熊猫

*/



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 USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;

    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⠀⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀", unicode"🐼") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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


        uint256 _buyDevFee = 20;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellDevFee = 35;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 4_444_444_444 * 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(0x44443108690023f77D3144E00869Be160AE3333E); 

        // 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 {
        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 swapTokensForUSDT(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USDT;

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

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

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

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

        swapTokensForUSDT(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":"USDT","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"}]

60c060405273dac17f958d2ee523a2206206994597c13d831ec760065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055503480156100b2575f80fd5b5060405180610540016040528061050b8152602001614a9161050b91396040518060400160405280600481526020017ff09f90bc0000000000000000000000000000000000000000000000000000000081525081600390816101149190610b4a565b5080600490816101249190610b4a565b5050506101436101386104a360201b60201c565b6104aa60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061016c81600161056d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020d9190610c77565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610268929190610cb1565b6020604051808303815f875af1158015610284573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102a89190610c77565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506102ee60a051600161056d60201b60201c565b5f601490505f80602390505f806b0e5c5bb81573afdb4af00000905060646002826103199190610d05565b6103239190610d73565b60088190555060646002826103389190610d05565b6103429190610d73565b600a819055506127106005826103589190610d05565b6103629190610d73565b60098190555084600d8190555083600e81905550600e54600d546103869190610da3565b600c8190555082601081905550816011819055506011546010546103aa9190610da3565b600f819055507344443108690023f77d3144e00869be160ae3333e60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061042261041561064d60201b60201c565b600161067560201b60201c565b61043330600161067560201b60201c565b61044661dead600161067560201b60201c565b61046461045761064d60201b60201c565b600161056d60201b60201c565b61047530600161056d60201b60201c565b61048861dead600161056d60201b60201c565b61049833826107a360201b60201c565b505050505050610f11565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61057b6104a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661059f61064d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146105f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ec90610e30565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106836104a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106a761064d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f490610e30565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107979190610e68565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080890610ecb565b60405180910390fd5b6108225f838361090660201b60201c565b8060025f8282546108339190610da3565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108859190610da3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108e99190610ef8565b60405180910390a36109025f838361090b60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061098b57607f821691505b60208210810361099e5761099d610947565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109c5565b610a0a86836109c5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a4e610a49610a4484610a22565b610a2b565b610a22565b9050919050565b5f819050919050565b610a6783610a34565b610a7b610a7382610a55565b8484546109d1565b825550505050565b5f90565b610a8f610a83565b610a9a818484610a5e565b505050565b5b81811015610abd57610ab25f82610a87565b600181019050610aa0565b5050565b601f821115610b0257610ad3816109a4565b610adc846109b6565b81016020851015610aeb578190505b610aff610af7856109b6565b830182610a9f565b50505b505050565b5f82821c905092915050565b5f610b225f1984600802610b07565b1980831691505092915050565b5f610b3a8383610b13565b9150826002028217905092915050565b610b5382610910565b67ffffffffffffffff811115610b6c57610b6b61091a565b5b610b768254610974565b610b81828285610ac1565b5f60209050601f831160018114610bb2575f8415610ba0578287015190505b610baa8582610b2f565b865550610c11565b601f198416610bc0866109a4565b5f5b82811015610be757848901518255600182019150602085019450602081019050610bc2565b86831015610c045784890151610c00601f891682610b13565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c4682610c1d565b9050919050565b610c5681610c3c565b8114610c60575f80fd5b50565b5f81519050610c7181610c4d565b92915050565b5f60208284031215610c8c57610c8b610c19565b5b5f610c9984828501610c63565b91505092915050565b610cab81610c3c565b82525050565b5f604082019050610cc45f830185610ca2565b610cd16020830184610ca2565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d0f82610a22565b9150610d1a83610a22565b9250828202610d2881610a22565b91508282048414831517610d3f57610d3e610cd8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610d7d82610a22565b9150610d8883610a22565b925082610d9857610d97610d46565b5b828204905092915050565b5f610dad82610a22565b9150610db883610a22565b9250828201905080821115610dd057610dcf610cd8565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610e1a602083610dd6565b9150610e2582610de6565b602082019050919050565b5f6020820190508181035f830152610e4781610e0e565b9050919050565b5f8115159050919050565b610e6281610e4e565b82525050565b5f602082019050610e7b5f830184610e59565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610eb5601f83610dd6565b9150610ec082610e81565b602082019050919050565b5f6020820190508181035f830152610ee281610ea9565b9050919050565b610ef281610a22565b82525050565b5f602082019050610f0b5f830184610ee9565b92915050565b60805160a051613b2e610f635f395f8181610ec401528181611efe0152818161213f015281816123390152818161240301526124ea01525f8181610a6501528181612a010152612a280152613b2e5ff3fe608060405260043610610254575f3560e01c80638da5cb5b11610138578063c54e44eb116100b5578063e2f4560511610079578063e2f45605146108a1578063f11a24d3146108cb578063f2fde38b146108f5578063f58639221461091d578063f637434214610945578063f8b45b051461096f5761025b565b8063c54e44eb146107ab578063c8c8ebe4146107d5578063d257b34f146107ff578063d85ba0631461083b578063dd62ed3e146108655761025b565b8063a0d82dc5116100fc578063a0d82dc5146106cb578063a9059cbb146106f5578063bbc0c74214610731578063c02466681461075b578063c18bc195146107835761025b565b80638da5cb5b146105fb5780638ea5220f14610625578063924de9b71461064f57806395d89b41146106775780639c3b4fdc146106a15761025b565b8063313ce567116101d15780636ddd1713116101955780636ddd17131461051757806370a0823114610541578063715018a61461057d578063751039fc146105935780637571336a146105bd5780638a8c523c146105e55761025b565b8063313ce5671461043357806349bd5a5e1461045d5780634a62bb65146104875780634fbee193146104b15780636a486a8e146104ed5761025b565b80631816467f116102185780631816467f14610355578063203e727e1461037d57806323b872dd146103a557806327c8f835146103e157806328ec94741461040b5761025b565b806306fdde031461025f578063095ea7b31461028957806310d5de53146102c55780631694505e1461030157806318160ddd1461032b5761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610273610999565b6040516102809190612b49565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa9190612bfa565b610a29565b6040516102bc9190612c52565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e69190612c6b565b610a46565b6040516102f89190612c52565b60405180910390f35b34801561030c575f80fd5b50610315610a63565b6040516103229190612cf1565b60405180910390f35b348015610336575f80fd5b5061033f610a87565b60405161034c9190612d19565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190612c6b565b610a90565b005b348015610388575f80fd5b506103a3600480360381019061039e9190612d32565b610bca565b005b3480156103b0575f80fd5b506103cb60048036038101906103c69190612d5d565b610cd9565b6040516103d89190612c52565b60405180910390f35b3480156103ec575f80fd5b506103f5610dcb565b6040516104029190612dbc565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c9190612dd5565b610dd1565b005b34801561043e575f80fd5b50610447610eba565b6040516104549190612e2e565b60405180910390f35b348015610468575f80fd5b50610471610ec2565b60405161047e9190612dbc565b60405180910390f35b348015610492575f80fd5b5061049b610ee6565b6040516104a89190612c52565b60405180910390f35b3480156104bc575f80fd5b506104d760048036038101906104d29190612c6b565b610ef8565b6040516104e49190612c52565b60405180910390f35b3480156104f8575f80fd5b50610501610f4a565b60405161050e9190612d19565b60405180910390f35b348015610522575f80fd5b5061052b610f50565b6040516105389190612c52565b60405180910390f35b34801561054c575f80fd5b5061056760048036038101906105629190612c6b565b610f63565b6040516105749190612d19565b60405180910390f35b348015610588575f80fd5b50610591610fa8565b005b34801561059e575f80fd5b506105a761102f565b6040516105b49190612c52565b60405180910390f35b3480156105c8575f80fd5b506105e360048036038101906105de9190612e71565b6110cc565b005b3480156105f0575f80fd5b506105f96111a0565b005b348015610606575f80fd5b5061060f611254565b60405161061c9190612dbc565b60405180910390f35b348015610630575f80fd5b5061063961127c565b6040516106469190612dbc565b60405180910390f35b34801561065a575f80fd5b5061067560048036038101906106709190612eaf565b6112a1565b005b348015610682575f80fd5b5061068b61133a565b6040516106989190612b49565b60405180910390f35b3480156106ac575f80fd5b506106b56113ca565b6040516106c29190612d19565b60405180910390f35b3480156106d6575f80fd5b506106df6113d0565b6040516106ec9190612d19565b60405180910390f35b348015610700575f80fd5b5061071b60048036038101906107169190612bfa565b6113d6565b6040516107289190612c52565b60405180910390f35b34801561073c575f80fd5b506107456113f3565b6040516107529190612c52565b60405180910390f35b348015610766575f80fd5b50610781600480360381019061077c9190612e71565b611406565b005b34801561078e575f80fd5b506107a960048036038101906107a49190612d32565b611528565b005b3480156107b6575f80fd5b506107bf611637565b6040516107cc9190612dbc565b60405180910390f35b3480156107e0575f80fd5b506107e961165c565b6040516107f69190612d19565b60405180910390f35b34801561080a575f80fd5b5061082560048036038101906108209190612d32565b611662565b6040516108329190612c52565b60405180910390f35b348015610846575f80fd5b5061084f6117b6565b60405161085c9190612d19565b60405180910390f35b348015610870575f80fd5b5061088b60048036038101906108869190612eda565b6117bc565b6040516108989190612d19565b60405180910390f35b3480156108ac575f80fd5b506108b561183e565b6040516108c29190612d19565b60405180910390f35b3480156108d6575f80fd5b506108df611844565b6040516108ec9190612d19565b60405180910390f35b348015610900575f80fd5b5061091b60048036038101906109169190612c6b565b61184a565b005b348015610928575f80fd5b50610943600480360381019061093e9190612dd5565b611940565b005b348015610950575f80fd5b50610959611a2a565b6040516109669190612d19565b60405180910390f35b34801561097a575f80fd5b50610983611a30565b6040516109909190612d19565b60405180910390f35b6060600380546109a890612f45565b80601f01602080910402602001604051908101604052809291908181526020018280546109d490612f45565b8015610a1f5780601f106109f657610100808354040283529160200191610a1f565b820191905f5260205f20905b815481529060010190602001808311610a0257829003601f168201915b5050505050905090565b5f610a3c610a35611a36565b8484611a3d565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610a98611a36565b73ffffffffffffffffffffffffffffffffffffffff16610ab6611254565b73ffffffffffffffffffffffffffffffffffffffff1614610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0390612fbf565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bd2611a36565b73ffffffffffffffffffffffffffffffffffffffff16610bf0611254565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90612fbf565b60405180910390fd5b670de0b6b3a76400006103e86001610c5c610a87565b610c66919061300a565b610c709190613078565b610c7a9190613078565b811015610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390613118565b60405180910390fd5b670de0b6b3a764000081610cd0919061300a565b60088190555050565b5f610ce5848484611c00565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d2c611a36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906131a6565b60405180910390fd5b610dbf85610db7611a36565b858403611a3d565b60019150509392505050565b61dead81565b610dd9611a36565b73ffffffffffffffffffffffffffffffffffffffff16610df7611254565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490612fbf565b60405180910390fd5b8160108190555080601181905550601154601054610e6b91906131c4565b600f81905550600f80541115610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90613241565b60405180910390fd5b5050565b5f6012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fb0611a36565b73ffffffffffffffffffffffffffffffffffffffff16610fce611254565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90612fbf565b60405180910390fd5b61102d5f612536565b565b5f611038611a36565b73ffffffffffffffffffffffffffffffffffffffff16611056611254565b73ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390612fbf565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6110d4611a36565b73ffffffffffffffffffffffffffffffffffffffff166110f2611254565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90612fbf565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6111a8611a36565b73ffffffffffffffffffffffffffffffffffffffff166111c6611254565b73ffffffffffffffffffffffffffffffffffffffff161461121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390612fbf565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112a9611a36565b73ffffffffffffffffffffffffffffffffffffffff166112c7611254565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490612fbf565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461134990612f45565b80601f016020809104026020016040519081016040528092919081815260200182805461137590612f45565b80156113c05780601f10611397576101008083540402835291602001916113c0565b820191905f5260205f20905b8154815290600101906020018083116113a357829003601f168201915b5050505050905090565b600d5481565b60105481565b5f6113e96113e2611a36565b8484611c00565b6001905092915050565b600b60019054906101000a900460ff1681565b61140e611a36565b73ffffffffffffffffffffffffffffffffffffffff1661142c611254565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990612fbf565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161151c9190612c52565b60405180910390a25050565b611530611a36565b73ffffffffffffffffffffffffffffffffffffffff1661154e611254565b73ffffffffffffffffffffffffffffffffffffffff16146115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b90612fbf565b60405180910390fd5b670de0b6b3a76400006103e860056115ba610a87565b6115c4919061300a565b6115ce9190613078565b6115d89190613078565b81101561161a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611611906132cf565b60405180910390fd5b670de0b6b3a76400008161162e919061300a565b600a8190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b5f61166b611a36565b73ffffffffffffffffffffffffffffffffffffffff16611689611254565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690612fbf565b60405180910390fd5b620186a060016116ed610a87565b6116f7919061300a565b6117019190613078565b821015611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061335d565b60405180910390fd5b6103e86005611750610a87565b61175a919061300a565b6117649190613078565b8211156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d906133eb565b60405180910390fd5b8160098190555060019050919050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600e5481565b611852611a36565b73ffffffffffffffffffffffffffffffffffffffff16611870611254565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90612fbf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b90613479565b60405180910390fd5b61193d81612536565b50565b611948611a36565b73ffffffffffffffffffffffffffffffffffffffff16611966611254565b73ffffffffffffffffffffffffffffffffffffffff16146119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390612fbf565b60405180910390fd5b81600d8190555080600e81905550600e54600d546119da91906131c4565b600c81905550600a600c541115611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d906134e1565b60405180910390fd5b5050565b60115481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa29061356f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b10906135fd565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bf39190612d19565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659061368b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd390613719565b60405180910390fd5b5f8103611cf357611cee83835f6125f9565b612531565b600b5f9054906101000a900460ff16156120ef57611d0f611254565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d7d5750611d4d611254565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611db557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611def575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e085750600660149054906101000a900460ff16155b156120ee57600b60019054906101000a900460ff16611efc5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ebc575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef290613781565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f9e575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561204557600854811115611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf9061380f565b60405180910390fd5b600a54611ff483610f63565b82611fff91906131c4565b1115612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790613877565b60405180910390fd5b6120ed565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120ec57600a5461209f83610f63565b826120aa91906131c4565b11156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290613877565b60405180910390fd5b5b5b5b5b5f6120f930610f63565b90505f600954821015905080801561211d5750600b60029054906101000a900460ff165b80156121365750600660149054906101000a900460ff16155b801561218d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121e0575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612233575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612276576001600660146101000a81548160ff02191690831515021790555061225b61286e565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612325575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561232e575f90505b5f805f831561251f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561239357505f600f54115b15612401576123c060646123b2600f548a6128bc90919063ffffffff16565b6128d190919063ffffffff16565b9250600f54601154846123d3919061300a565b6123dd9190613078565b9150600f54601054846123f0919061300a565b6123fa9190613078565b90506124c8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561245d57505f600c54115b156124c75761248a606461247c600c548a6128bc90919063ffffffff16565b6128d190919063ffffffff16565b9250600c54600e548461249d919061300a565b6124a79190613078565b9150600c54600d54846124ba919061300a565b6124c49190613078565b90505b5b5f8311156124dc576124db8930856125f9565b5b5f8211156125105761250f307f0000000000000000000000000000000000000000000000000000000000000000846125f9565b5b828761251c9190613895565b96505b61252a8989896125f9565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e9061368b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90613719565b60405180910390fd5b6126e08383836128e6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275a90613938565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127f191906131c4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128559190612d19565b60405180910390a36128688484846128eb565b50505050565b5f61287830610f63565b90505f810361288757506128ba565b6014600954612896919061300a565b8111156128af5760146009546128ac919061300a565b90505b6128b8816128f0565b505b565b5f81836128c9919061300a565b905092915050565b5f81836128de9190613078565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561290c5761290b613956565b5b60405190808252806020026020018201604052801561293a5781602001602082028036833780820191505090505b50905030815f8151811061295157612950613983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129c1576129c0613983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a26307f000000000000000000000000000000000000000000000000000000000000000084611a3d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612aa8959493929190613aa0565b5f604051808303815f87803b158015612abf575f80fd5b505af1158015612ad1573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b1b82612ad9565b612b258185612ae3565b9350612b35818560208601612af3565b612b3e81612b01565b840191505092915050565b5f6020820190508181035f830152612b618184612b11565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b9682612b6d565b9050919050565b612ba681612b8c565b8114612bb0575f80fd5b50565b5f81359050612bc181612b9d565b92915050565b5f819050919050565b612bd981612bc7565b8114612be3575f80fd5b50565b5f81359050612bf481612bd0565b92915050565b5f8060408385031215612c1057612c0f612b69565b5b5f612c1d85828601612bb3565b9250506020612c2e85828601612be6565b9150509250929050565b5f8115159050919050565b612c4c81612c38565b82525050565b5f602082019050612c655f830184612c43565b92915050565b5f60208284031215612c8057612c7f612b69565b5b5f612c8d84828501612bb3565b91505092915050565b5f819050919050565b5f612cb9612cb4612caf84612b6d565b612c96565b612b6d565b9050919050565b5f612cca82612c9f565b9050919050565b5f612cdb82612cc0565b9050919050565b612ceb81612cd1565b82525050565b5f602082019050612d045f830184612ce2565b92915050565b612d1381612bc7565b82525050565b5f602082019050612d2c5f830184612d0a565b92915050565b5f60208284031215612d4757612d46612b69565b5b5f612d5484828501612be6565b91505092915050565b5f805f60608486031215612d7457612d73612b69565b5b5f612d8186828701612bb3565b9350506020612d9286828701612bb3565b9250506040612da386828701612be6565b9150509250925092565b612db681612b8c565b82525050565b5f602082019050612dcf5f830184612dad565b92915050565b5f8060408385031215612deb57612dea612b69565b5b5f612df885828601612be6565b9250506020612e0985828601612be6565b9150509250929050565b5f60ff82169050919050565b612e2881612e13565b82525050565b5f602082019050612e415f830184612e1f565b92915050565b612e5081612c38565b8114612e5a575f80fd5b50565b5f81359050612e6b81612e47565b92915050565b5f8060408385031215612e8757612e86612b69565b5b5f612e9485828601612bb3565b9250506020612ea585828601612e5d565b9150509250929050565b5f60208284031215612ec457612ec3612b69565b5b5f612ed184828501612e5d565b91505092915050565b5f8060408385031215612ef057612eef612b69565b5b5f612efd85828601612bb3565b9250506020612f0e85828601612bb3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f5c57607f821691505b602082108103612f6f57612f6e612f18565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fa9602083612ae3565b9150612fb482612f75565b602082019050919050565b5f6020820190508181035f830152612fd681612f9d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61301482612bc7565b915061301f83612bc7565b925082820261302d81612bc7565b9150828204841483151761304457613043612fdd565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61308282612bc7565b915061308d83612bc7565b92508261309d5761309c61304b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613102602f83612ae3565b915061310d826130a8565b604082019050919050565b5f6020820190508181035f83015261312f816130f6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613190602883612ae3565b915061319b82613136565b604082019050919050565b5f6020820190508181035f8301526131bd81613184565b9050919050565b5f6131ce82612bc7565b91506131d983612bc7565b92508282019050808211156131f1576131f0612fdd565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c6573730000005f82015250565b5f61322b601d83612ae3565b9150613236826131f7565b602082019050919050565b5f6020820190508181035f8301526132588161321f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6132b9602483612ae3565b91506132c48261325f565b604082019050919050565b5f6020820190508181035f8301526132e6816132ad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613347603583612ae3565b9150613352826132ed565b604082019050919050565b5f6020820190508181035f8301526133748161333b565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6133d5603483612ae3565b91506133e08261337b565b604082019050919050565b5f6020820190508181035f830152613402816133c9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613463602683612ae3565b915061346e82613409565b604082019050919050565b5f6020820190508181035f83015261349081613457565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f6134cb601d83612ae3565b91506134d682613497565b602082019050919050565b5f6020820190508181035f8301526134f8816134bf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613559602483612ae3565b9150613564826134ff565b604082019050919050565b5f6020820190508181035f8301526135868161354d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135e7602283612ae3565b91506135f28261358d565b604082019050919050565b5f6020820190508181035f830152613614816135db565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613675602583612ae3565b91506136808261361b565b604082019050919050565b5f6020820190508181035f8301526136a281613669565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613703602383612ae3565b915061370e826136a9565b604082019050919050565b5f6020820190508181035f830152613730816136f7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61376b601683612ae3565b915061377682613737565b602082019050919050565b5f6020820190508181035f8301526137988161375f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6137f9603583612ae3565b91506138048261379f565b604082019050919050565b5f6020820190508181035f830152613826816137ed565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613861601383612ae3565b915061386c8261382d565b602082019050919050565b5f6020820190508181035f83015261388e81613855565b9050919050565b5f61389f82612bc7565b91506138aa83612bc7565b92508282039050818111156138c2576138c1612fdd565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613922602683612ae3565b915061392d826138c8565b604082019050919050565b5f6020820190508181035f83015261394f81613916565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6139d36139ce6139c9846139b0565b612c96565b612bc7565b9050919050565b6139e3816139b9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a1b81612b8c565b82525050565b5f613a2c8383613a12565b60208301905092915050565b5f602082019050919050565b5f613a4e826139e9565b613a5881856139f3565b9350613a6383613a03565b805f5b83811015613a93578151613a7a8882613a21565b9750613a8583613a38565b925050600181019050613a66565b5085935050505092915050565b5f60a082019050613ab35f830188612d0a565b613ac060208301876139da565b8181036040830152613ad28186613a44565b9050613ae16060830185612dad565b613aee6080830184612d0a565b969550505050505056fea2646970667358221220b91d4f947043ab16c9b585d201d37e7f25d6cf1246749d7d87c2e67bc560333b64736f6c634300081a0033e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a380e2a380e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a080e2a080e2a3b0e2a3bfe2a3bfe2a3bfe2a3bfe2a3a6e2a380e2a380e2a380e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a080e2a080e2a2bfe2a3bfe2a09fe2a08be2a089e2a080e2a080e2a080e2a080e2a089e2a091e2a0a2e2a384e2a180e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a080e2a2a0e2a09ee2a081e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a099e2a2bfe2a3bfe2a3bfe2a3a6e2a1800ae2a080e2a380e2a080e2a080e2a280e2a18fe2a080e2a280e2a3b4e2a3b6e2a3b6e2a184e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a2bbe2a3bfe2a3bfe2a0870ae2a3bee2a3bfe2a3bfe2a3a6e2a3bce2a180e2a080e2a2bae2a3bfe2a3bfe2a1bfe2a083e2a080e2a080e2a080e2a080e2a3a0e2a3a4e2a384e2a080e2a080e2a088e2a1bfe2a08be2a0800ae2a2bfe2a3bfe2a3bfe2a3bfe2a3bfe2a387e2a080e2a0a4e2a08ce2a081e2a080e2a180e2a2b2e2a1b6e2a084e2a2b8e2a38fe2a3bfe2a3bfe2a080e2a080e2a080e2a187e2a080e2a0800ae2a088e2a2bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3b7e2a384e2a180e2a080e2a080e2a088e2a089e2a093e2a082e2a080e2a099e2a09be2a09be2a0a0e2a080e2a1b8e2a081e2a080e2a0800ae2a080e2a080e2a0bbe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3b7e2a3a6e2a384e2a380e2a080e2a080e2a080e2a080e2a091e2a080e2a3a0e2a09ee2a081e2a080e2a080e2a0800ae2a080e2a080e2a080e2a2b8e2a18fe2a089e2a09be2a09be2a09be2a0bfe2a0bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a3bfe2a184e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a0b8e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a088e2a089e2a09be2a2bfe2a3bfe2a3bfe2a3bfe2a3bfe2a184e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a2b7e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a088e2a2bbe2a3bfe2a3bfe2a3bfe2a3bfe2a180e2a080e2a080e2a0800ae2a080e2a080e2a080e2a2b8e2a386e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a3bfe2a3bfe2a3bfe2a3bfe2a187e2a080e2a080e2a0800ae2a080e2a080e2a080e2a2b8e2a3bfe2a3a6e2a380e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a280e2a3bce2a19fe2a0bbe2a0bfe2a09fe2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a3bfe2a3bfe2a3bfe2a3bfe2a3b6e2a0b6e2a0a4e2a0a4e2a2a4e2a3b6e2a3bee2a3bfe2a3bfe2a187e2a080e2a080e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a0b9e2a3bfe2a3bfe2a3bfe2a08fe2a080e2a080e2a080e2a088e2a2bfe2a3bfe2a3bfe2a1bfe2a081e2a080e2a080e2a080e2a080e2a080e2a080e2a0800ae2a080e2a080e2a080e2a080e2a080e2a088e2a089e2a089e2a080e2a080e2a080e2a080e2a080e2a080e2a089e2a089e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080e2a080

Deployed Bytecode

0x608060405260043610610254575f3560e01c80638da5cb5b11610138578063c54e44eb116100b5578063e2f4560511610079578063e2f45605146108a1578063f11a24d3146108cb578063f2fde38b146108f5578063f58639221461091d578063f637434214610945578063f8b45b051461096f5761025b565b8063c54e44eb146107ab578063c8c8ebe4146107d5578063d257b34f146107ff578063d85ba0631461083b578063dd62ed3e146108655761025b565b8063a0d82dc5116100fc578063a0d82dc5146106cb578063a9059cbb146106f5578063bbc0c74214610731578063c02466681461075b578063c18bc195146107835761025b565b80638da5cb5b146105fb5780638ea5220f14610625578063924de9b71461064f57806395d89b41146106775780639c3b4fdc146106a15761025b565b8063313ce567116101d15780636ddd1713116101955780636ddd17131461051757806370a0823114610541578063715018a61461057d578063751039fc146105935780637571336a146105bd5780638a8c523c146105e55761025b565b8063313ce5671461043357806349bd5a5e1461045d5780634a62bb65146104875780634fbee193146104b15780636a486a8e146104ed5761025b565b80631816467f116102185780631816467f14610355578063203e727e1461037d57806323b872dd146103a557806327c8f835146103e157806328ec94741461040b5761025b565b806306fdde031461025f578063095ea7b31461028957806310d5de53146102c55780631694505e1461030157806318160ddd1461032b5761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610273610999565b6040516102809190612b49565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa9190612bfa565b610a29565b6040516102bc9190612c52565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e69190612c6b565b610a46565b6040516102f89190612c52565b60405180910390f35b34801561030c575f80fd5b50610315610a63565b6040516103229190612cf1565b60405180910390f35b348015610336575f80fd5b5061033f610a87565b60405161034c9190612d19565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190612c6b565b610a90565b005b348015610388575f80fd5b506103a3600480360381019061039e9190612d32565b610bca565b005b3480156103b0575f80fd5b506103cb60048036038101906103c69190612d5d565b610cd9565b6040516103d89190612c52565b60405180910390f35b3480156103ec575f80fd5b506103f5610dcb565b6040516104029190612dbc565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c9190612dd5565b610dd1565b005b34801561043e575f80fd5b50610447610eba565b6040516104549190612e2e565b60405180910390f35b348015610468575f80fd5b50610471610ec2565b60405161047e9190612dbc565b60405180910390f35b348015610492575f80fd5b5061049b610ee6565b6040516104a89190612c52565b60405180910390f35b3480156104bc575f80fd5b506104d760048036038101906104d29190612c6b565b610ef8565b6040516104e49190612c52565b60405180910390f35b3480156104f8575f80fd5b50610501610f4a565b60405161050e9190612d19565b60405180910390f35b348015610522575f80fd5b5061052b610f50565b6040516105389190612c52565b60405180910390f35b34801561054c575f80fd5b5061056760048036038101906105629190612c6b565b610f63565b6040516105749190612d19565b60405180910390f35b348015610588575f80fd5b50610591610fa8565b005b34801561059e575f80fd5b506105a761102f565b6040516105b49190612c52565b60405180910390f35b3480156105c8575f80fd5b506105e360048036038101906105de9190612e71565b6110cc565b005b3480156105f0575f80fd5b506105f96111a0565b005b348015610606575f80fd5b5061060f611254565b60405161061c9190612dbc565b60405180910390f35b348015610630575f80fd5b5061063961127c565b6040516106469190612dbc565b60405180910390f35b34801561065a575f80fd5b5061067560048036038101906106709190612eaf565b6112a1565b005b348015610682575f80fd5b5061068b61133a565b6040516106989190612b49565b60405180910390f35b3480156106ac575f80fd5b506106b56113ca565b6040516106c29190612d19565b60405180910390f35b3480156106d6575f80fd5b506106df6113d0565b6040516106ec9190612d19565b60405180910390f35b348015610700575f80fd5b5061071b60048036038101906107169190612bfa565b6113d6565b6040516107289190612c52565b60405180910390f35b34801561073c575f80fd5b506107456113f3565b6040516107529190612c52565b60405180910390f35b348015610766575f80fd5b50610781600480360381019061077c9190612e71565b611406565b005b34801561078e575f80fd5b506107a960048036038101906107a49190612d32565b611528565b005b3480156107b6575f80fd5b506107bf611637565b6040516107cc9190612dbc565b60405180910390f35b3480156107e0575f80fd5b506107e961165c565b6040516107f69190612d19565b60405180910390f35b34801561080a575f80fd5b5061082560048036038101906108209190612d32565b611662565b6040516108329190612c52565b60405180910390f35b348015610846575f80fd5b5061084f6117b6565b60405161085c9190612d19565b60405180910390f35b348015610870575f80fd5b5061088b60048036038101906108869190612eda565b6117bc565b6040516108989190612d19565b60405180910390f35b3480156108ac575f80fd5b506108b561183e565b6040516108c29190612d19565b60405180910390f35b3480156108d6575f80fd5b506108df611844565b6040516108ec9190612d19565b60405180910390f35b348015610900575f80fd5b5061091b60048036038101906109169190612c6b565b61184a565b005b348015610928575f80fd5b50610943600480360381019061093e9190612dd5565b611940565b005b348015610950575f80fd5b50610959611a2a565b6040516109669190612d19565b60405180910390f35b34801561097a575f80fd5b50610983611a30565b6040516109909190612d19565b60405180910390f35b6060600380546109a890612f45565b80601f01602080910402602001604051908101604052809291908181526020018280546109d490612f45565b8015610a1f5780601f106109f657610100808354040283529160200191610a1f565b820191905f5260205f20905b815481529060010190602001808311610a0257829003601f168201915b5050505050905090565b5f610a3c610a35611a36565b8484611a3d565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610a98611a36565b73ffffffffffffffffffffffffffffffffffffffff16610ab6611254565b73ffffffffffffffffffffffffffffffffffffffff1614610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0390612fbf565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bd2611a36565b73ffffffffffffffffffffffffffffffffffffffff16610bf0611254565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90612fbf565b60405180910390fd5b670de0b6b3a76400006103e86001610c5c610a87565b610c66919061300a565b610c709190613078565b610c7a9190613078565b811015610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390613118565b60405180910390fd5b670de0b6b3a764000081610cd0919061300a565b60088190555050565b5f610ce5848484611c00565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d2c611a36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906131a6565b60405180910390fd5b610dbf85610db7611a36565b858403611a3d565b60019150509392505050565b61dead81565b610dd9611a36565b73ffffffffffffffffffffffffffffffffffffffff16610df7611254565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490612fbf565b60405180910390fd5b8160108190555080601181905550601154601054610e6b91906131c4565b600f81905550600f80541115610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90613241565b60405180910390fd5b5050565b5f6012905090565b7f000000000000000000000000b5888eb022d0b0340076ca3b165cf52ef17092fc81565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fb0611a36565b73ffffffffffffffffffffffffffffffffffffffff16610fce611254565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90612fbf565b60405180910390fd5b61102d5f612536565b565b5f611038611a36565b73ffffffffffffffffffffffffffffffffffffffff16611056611254565b73ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390612fbf565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6110d4611a36565b73ffffffffffffffffffffffffffffffffffffffff166110f2611254565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90612fbf565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6111a8611a36565b73ffffffffffffffffffffffffffffffffffffffff166111c6611254565b73ffffffffffffffffffffffffffffffffffffffff161461121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390612fbf565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112a9611a36565b73ffffffffffffffffffffffffffffffffffffffff166112c7611254565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490612fbf565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461134990612f45565b80601f016020809104026020016040519081016040528092919081815260200182805461137590612f45565b80156113c05780601f10611397576101008083540402835291602001916113c0565b820191905f5260205f20905b8154815290600101906020018083116113a357829003601f168201915b5050505050905090565b600d5481565b60105481565b5f6113e96113e2611a36565b8484611c00565b6001905092915050565b600b60019054906101000a900460ff1681565b61140e611a36565b73ffffffffffffffffffffffffffffffffffffffff1661142c611254565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990612fbf565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161151c9190612c52565b60405180910390a25050565b611530611a36565b73ffffffffffffffffffffffffffffffffffffffff1661154e611254565b73ffffffffffffffffffffffffffffffffffffffff16146115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b90612fbf565b60405180910390fd5b670de0b6b3a76400006103e860056115ba610a87565b6115c4919061300a565b6115ce9190613078565b6115d89190613078565b81101561161a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611611906132cf565b60405180910390fd5b670de0b6b3a76400008161162e919061300a565b600a8190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b5f61166b611a36565b73ffffffffffffffffffffffffffffffffffffffff16611689611254565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690612fbf565b60405180910390fd5b620186a060016116ed610a87565b6116f7919061300a565b6117019190613078565b821015611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061335d565b60405180910390fd5b6103e86005611750610a87565b61175a919061300a565b6117649190613078565b8211156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d906133eb565b60405180910390fd5b8160098190555060019050919050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600e5481565b611852611a36565b73ffffffffffffffffffffffffffffffffffffffff16611870611254565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90612fbf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b90613479565b60405180910390fd5b61193d81612536565b50565b611948611a36565b73ffffffffffffffffffffffffffffffffffffffff16611966611254565b73ffffffffffffffffffffffffffffffffffffffff16146119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390612fbf565b60405180910390fd5b81600d8190555080600e81905550600e54600d546119da91906131c4565b600c81905550600a600c541115611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d906134e1565b60405180910390fd5b5050565b60115481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa29061356f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b10906135fd565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bf39190612d19565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659061368b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd390613719565b60405180910390fd5b5f8103611cf357611cee83835f6125f9565b612531565b600b5f9054906101000a900460ff16156120ef57611d0f611254565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d7d5750611d4d611254565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611db557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611def575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e085750600660149054906101000a900460ff16155b156120ee57600b60019054906101000a900460ff16611efc5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ebc575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef290613781565b60405180910390fd5b5b7f000000000000000000000000b5888eb022d0b0340076ca3b165cf52ef17092fc73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f9e575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561204557600854811115611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf9061380f565b60405180910390fd5b600a54611ff483610f63565b82611fff91906131c4565b1115612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790613877565b60405180910390fd5b6120ed565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120ec57600a5461209f83610f63565b826120aa91906131c4565b11156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290613877565b60405180910390fd5b5b5b5b5b5f6120f930610f63565b90505f600954821015905080801561211d5750600b60029054906101000a900460ff165b80156121365750600660149054906101000a900460ff16155b801561218d57507f000000000000000000000000b5888eb022d0b0340076ca3b165cf52ef17092fc73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121e0575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612233575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612276576001600660146101000a81548160ff02191690831515021790555061225b61286e565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612325575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561232e575f90505b5f805f831561251f577f000000000000000000000000b5888eb022d0b0340076ca3b165cf52ef17092fc73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561239357505f600f54115b15612401576123c060646123b2600f548a6128bc90919063ffffffff16565b6128d190919063ffffffff16565b9250600f54601154846123d3919061300a565b6123dd9190613078565b9150600f54601054846123f0919061300a565b6123fa9190613078565b90506124c8565b7f000000000000000000000000b5888eb022d0b0340076ca3b165cf52ef17092fc73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561245d57505f600c54115b156124c75761248a606461247c600c548a6128bc90919063ffffffff16565b6128d190919063ffffffff16565b9250600c54600e548461249d919061300a565b6124a79190613078565b9150600c54600d54846124ba919061300a565b6124c49190613078565b90505b5b5f8311156124dc576124db8930856125f9565b5b5f8211156125105761250f307f000000000000000000000000b5888eb022d0b0340076ca3b165cf52ef17092fc846125f9565b5b828761251c9190613895565b96505b61252a8989896125f9565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e9061368b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cc90613719565b60405180910390fd5b6126e08383836128e6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275a90613938565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127f191906131c4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128559190612d19565b60405180910390a36128688484846128eb565b50505050565b5f61287830610f63565b90505f810361288757506128ba565b6014600954612896919061300a565b8111156128af5760146009546128ac919061300a565b90505b6128b8816128f0565b505b565b5f81836128c9919061300a565b905092915050565b5f81836128de9190613078565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561290c5761290b613956565b5b60405190808252806020026020018201604052801561293a5781602001602082028036833780820191505090505b50905030815f8151811061295157612950613983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129c1576129c0613983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a26307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a3d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612aa8959493929190613aa0565b5f604051808303815f87803b158015612abf575f80fd5b505af1158015612ad1573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b1b82612ad9565b612b258185612ae3565b9350612b35818560208601612af3565b612b3e81612b01565b840191505092915050565b5f6020820190508181035f830152612b618184612b11565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b9682612b6d565b9050919050565b612ba681612b8c565b8114612bb0575f80fd5b50565b5f81359050612bc181612b9d565b92915050565b5f819050919050565b612bd981612bc7565b8114612be3575f80fd5b50565b5f81359050612bf481612bd0565b92915050565b5f8060408385031215612c1057612c0f612b69565b5b5f612c1d85828601612bb3565b9250506020612c2e85828601612be6565b9150509250929050565b5f8115159050919050565b612c4c81612c38565b82525050565b5f602082019050612c655f830184612c43565b92915050565b5f60208284031215612c8057612c7f612b69565b5b5f612c8d84828501612bb3565b91505092915050565b5f819050919050565b5f612cb9612cb4612caf84612b6d565b612c96565b612b6d565b9050919050565b5f612cca82612c9f565b9050919050565b5f612cdb82612cc0565b9050919050565b612ceb81612cd1565b82525050565b5f602082019050612d045f830184612ce2565b92915050565b612d1381612bc7565b82525050565b5f602082019050612d2c5f830184612d0a565b92915050565b5f60208284031215612d4757612d46612b69565b5b5f612d5484828501612be6565b91505092915050565b5f805f60608486031215612d7457612d73612b69565b5b5f612d8186828701612bb3565b9350506020612d9286828701612bb3565b9250506040612da386828701612be6565b9150509250925092565b612db681612b8c565b82525050565b5f602082019050612dcf5f830184612dad565b92915050565b5f8060408385031215612deb57612dea612b69565b5b5f612df885828601612be6565b9250506020612e0985828601612be6565b9150509250929050565b5f60ff82169050919050565b612e2881612e13565b82525050565b5f602082019050612e415f830184612e1f565b92915050565b612e5081612c38565b8114612e5a575f80fd5b50565b5f81359050612e6b81612e47565b92915050565b5f8060408385031215612e8757612e86612b69565b5b5f612e9485828601612bb3565b9250506020612ea585828601612e5d565b9150509250929050565b5f60208284031215612ec457612ec3612b69565b5b5f612ed184828501612e5d565b91505092915050565b5f8060408385031215612ef057612eef612b69565b5b5f612efd85828601612bb3565b9250506020612f0e85828601612bb3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f5c57607f821691505b602082108103612f6f57612f6e612f18565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fa9602083612ae3565b9150612fb482612f75565b602082019050919050565b5f6020820190508181035f830152612fd681612f9d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61301482612bc7565b915061301f83612bc7565b925082820261302d81612bc7565b9150828204841483151761304457613043612fdd565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61308282612bc7565b915061308d83612bc7565b92508261309d5761309c61304b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613102602f83612ae3565b915061310d826130a8565b604082019050919050565b5f6020820190508181035f83015261312f816130f6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613190602883612ae3565b915061319b82613136565b604082019050919050565b5f6020820190508181035f8301526131bd81613184565b9050919050565b5f6131ce82612bc7565b91506131d983612bc7565b92508282019050808211156131f1576131f0612fdd565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c6573730000005f82015250565b5f61322b601d83612ae3565b9150613236826131f7565b602082019050919050565b5f6020820190508181035f8301526132588161321f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6132b9602483612ae3565b91506132c48261325f565b604082019050919050565b5f6020820190508181035f8301526132e6816132ad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613347603583612ae3565b9150613352826132ed565b604082019050919050565b5f6020820190508181035f8301526133748161333b565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6133d5603483612ae3565b91506133e08261337b565b604082019050919050565b5f6020820190508181035f830152613402816133c9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613463602683612ae3565b915061346e82613409565b604082019050919050565b5f6020820190508181035f83015261349081613457565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f6134cb601d83612ae3565b91506134d682613497565b602082019050919050565b5f6020820190508181035f8301526134f8816134bf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613559602483612ae3565b9150613564826134ff565b604082019050919050565b5f6020820190508181035f8301526135868161354d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135e7602283612ae3565b91506135f28261358d565b604082019050919050565b5f6020820190508181035f830152613614816135db565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613675602583612ae3565b91506136808261361b565b604082019050919050565b5f6020820190508181035f8301526136a281613669565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613703602383612ae3565b915061370e826136a9565b604082019050919050565b5f6020820190508181035f830152613730816136f7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61376b601683612ae3565b915061377682613737565b602082019050919050565b5f6020820190508181035f8301526137988161375f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6137f9603583612ae3565b91506138048261379f565b604082019050919050565b5f6020820190508181035f830152613826816137ed565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613861601383612ae3565b915061386c8261382d565b602082019050919050565b5f6020820190508181035f83015261388e81613855565b9050919050565b5f61389f82612bc7565b91506138aa83612bc7565b92508282039050818111156138c2576138c1612fdd565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613922602683612ae3565b915061392d826138c8565b604082019050919050565b5f6020820190508181035f83015261394f81613916565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6139d36139ce6139c9846139b0565b612c96565b612bc7565b9050919050565b6139e3816139b9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a1b81612b8c565b82525050565b5f613a2c8383613a12565b60208301905092915050565b5f602082019050919050565b5f613a4e826139e9565b613a5881856139f3565b9350613a6383613a03565b805f5b83811015613a93578151613a7a8882613a21565b9750613a8583613a38565b925050600181019050613a66565b5085935050505092915050565b5f60a082019050613ab35f830188612d0a565b613ac060208301876139da565b8181036040830152613ad28186613a44565b9050613ae16060830185612dad565b613aee6080830184612d0a565b969550505050505056fea2646970667358221220b91d4f947043ab16c9b585d201d37e7f25d6cf1246749d7d87c2e67bc560333b64736f6c634300081a0033

Deployed Bytecode Sourcemap

24658:12025:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9514:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11681:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25617:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24733:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10634:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31738:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29991:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12332:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24836:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31225:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10476:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24791:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25147:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31937:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25370:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25227:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10805:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2749:103;;;;;;;;;;;;;:::i;:::-;;29295:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30538:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29131:112;;;;;;;;;;;;;:::i;:::-;;2098:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24999:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30801:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9733:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25300:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25405:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11145:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25187:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31548:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30274:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24896:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25032:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29486:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25266:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11383:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25074:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25331:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3007:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30909:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25437:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25114:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9514:100;9568:13;9601:5;9594:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9514:100;:::o;11681:169::-;11764:4;11781:39;11790:12;:10;:12::i;:::-;11804:7;11813:6;11781:8;:39::i;:::-;11838:4;11831:11;;11681:169;;;;:::o;25617:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24733:51::-;;;:::o;10634:108::-;10695:7;10722:12;;10715:19;;10634:108;:::o;31738:189::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31874:9:::1;;;;;;;;;;;31843:41;;31860:12;31843:41;;;;;;;;;;;;31907:12;31895:9;;:24;;;;;;;;;;;;;;;;;;31738:189:::0;:::o;29991:275::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30128:4:::1;30120;30115:1;30099:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30098:26;;;;:::i;:::-;30097:35;;;;:::i;:::-;30087:6;:45;;30065:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30251:6;30241;:17;;;;:::i;:::-;30218:20;:40;;;;29991:275:::0;:::o;12332:492::-;12472:4;12489:36;12499:6;12507:9;12518:6;12489:9;:36::i;:::-;12538:24;12565:11;:19;12577:6;12565:19;;;;;;;;;;;;;;;:33;12585:12;:10;:12::i;:::-;12565:33;;;;;;;;;;;;;;;;12538:60;;12637:6;12617:16;:26;;12609:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12724:57;12733:6;12741:12;:10;:12::i;:::-;12774:6;12755:16;:25;12724:8;:57::i;:::-;12812:4;12805:11;;;12332:492;;;;;:::o;24836:53::-;24882:6;24836:53;:::o;31225:315::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31354:7:::1;31341:10;:20;;;;31391:13;31372:16;:32;;;;31444:16;;31431:10;;:29;;;;:::i;:::-;31415:13;:45;;;;31496:2;31479:13:::0;::::1;:19;;31471:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31225:315:::0;;:::o;10476:93::-;10534:5;10559:2;10552:9;;10476:93;:::o;24791:38::-;;;:::o;25147:33::-;;;;;;;;;;;;;:::o;31937:126::-;32003:4;32027:19;:28;32047:7;32027:28;;;;;;;;;;;;;;;;;;;;;;;;;32020:35;;31937:126;;;:::o;25370:28::-;;;;:::o;25227:30::-;;;;;;;;;;;;;:::o;10805:127::-;10879:7;10906:9;:18;10916:7;10906:18;;;;;;;;;;;;;;;;10899:25;;10805:127;;;:::o;2749:103::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2814:30:::1;2841:1;2814:18;:30::i;:::-;2749:103::o:0;29295:121::-;29347:4;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29381:5:::1;29364:14;;:22;;;;;;;;;;;;;;;;;;29404:4;29397:11;;29295:121:::0;:::o;30538:167::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30693:4:::1;30651:31;:39;30683:6;30651:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30538:167:::0;;:::o;29131:112::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29202:4:::1;29186:13;;:20;;;;;;;;;;;;;;;;;;29231:4;29217:11;;:18;;;;;;;;;;;;;;;;;;29131:112::o:0;2098:87::-;2144:7;2171:6;;;;;;;;;;;2164:13;;2098:87;:::o;24999:24::-;;;;;;;;;;;;;:::o;30801:100::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30886:7:::1;30872:11;;:21;;;;;;;;;;;;;;;;;;30801:100:::0;:::o;9733:104::-;9789:13;9822:7;9815:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9733:104;:::o;25300:24::-;;;;:::o;25405:25::-;;;;:::o;11145:175::-;11231:4;11248:42;11258:12;:10;:12::i;:::-;11272:9;11283:6;11248:9;:42::i;:::-;11308:4;11301:11;;11145:175;;;;:::o;25187:33::-;;;;;;;;;;;;;:::o;31548:182::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31664:8:::1;31633:19;:28;31653:7;31633:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31704:7;31688:34;;;31713:8;31688:34;;;;;;:::i;:::-;;;;;;;;31548:182:::0;;:::o;30274:256::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30414:4:::1;30406;30401:1;30385:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30384:26;;;;:::i;:::-;30383:35;;;;:::i;:::-;30373:6;:45;;30351:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30515:6;30505;:17;;;;:::i;:::-;30493:9;:29;;;;30274:256:::0;:::o;24896:64::-;;;;;;;;;;;;;:::o;25032:35::-;;;;:::o;29486:497::-;29594:4;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29673:6:::1;29668:1;29652:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29651:28;;;;:::i;:::-;29638:9;:41;;29616:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29828:4;29823:1;29807:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29806:26;;;;:::i;:::-;29793:9;:39;;29771:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29944:9;29923:18;:30;;;;29971:4;29964:11;;29486:497:::0;;;:::o;25266:27::-;;;;:::o;11383:151::-;11472:7;11499:11;:18;11511:5;11499:18;;;;;;;;;;;;;;;:27;11518:7;11499:27;;;;;;;;;;;;;;;;11492:34;;11383:151;;;;:::o;25074:33::-;;;;:::o;25331:30::-;;;;:::o;3007:201::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3116:1:::1;3096:22;;:8;:22;;::::0;3088:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3172:28;3191:8;3172:18;:28::i;:::-;3007:201:::0;:::o;30909:308::-;2329:12;:10;:12::i;:::-;2318:23;;:7;:5;:7::i;:::-;:23;;;2310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31036:7:::1;31024:9;:19;;;;31072:13;31054:15;:31;;;;31123:15;;31111:9;;:27;;;;:::i;:::-;31096:12;:42;;;;31173:2;31157:12;;:18;;31149:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30909:308:::0;;:::o;25437:31::-;;;;:::o;25114:24::-;;;;:::o;1470:98::-;1523:7;1550:10;1543:17;;1470:98;:::o;15173:380::-;15326:1;15309:19;;:5;:19;;;15301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15407:1;15388:21;;:7;:21;;;15380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15491:6;15461:11;:18;15473:5;15461:18;;;;;;;;;;;;;;;:27;15480:7;15461:27;;;;;;;;;;;;;;;:36;;;;15529:7;15513:32;;15522:5;15513:32;;;15538:6;15513:32;;;;;;:::i;:::-;;;;;;;;15173:380;;;:::o;32071:3679::-;32219:1;32203:18;;:4;:18;;;32195:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32296:1;32282:16;;:2;:16;;;32274:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32365:1;32355:6;:11;32351:93;;32383:28;32399:4;32405:2;32409:1;32383:15;:28::i;:::-;32426:7;;32351:93;32460:14;;;;;;;;;;;32456:1430;;;32521:7;:5;:7::i;:::-;32513:15;;:4;:15;;;;:49;;;;;32555:7;:5;:7::i;:::-;32549:13;;:2;:13;;;;32513:49;:86;;;;;32597:1;32583:16;;:2;:16;;;;32513:86;:128;;;;;32634:6;32620:21;;:2;:21;;;;32513:128;:158;;;;;32663:8;;;;;;;;;;;32662:9;32513:158;32491:1384;;;32711:13;;;;;;;;;;;32706:223;;32783:19;:25;32803:4;32783:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32812:19;:23;32832:2;32812:23;;;;;;;;;;;;;;;;;;;;;;;;;32783:52;32749:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;32706:223;33143:13;33135:21;;:4;:21;;;:82;;;;;33182:31;:35;33214:2;33182:35;;;;;;;;;;;;;;;;;;;;;;;;;33181:36;33135:82;33109:751;;;33304:20;;33294:6;:30;;33260:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33512:9;;33495:13;33505:2;33495:9;:13::i;:::-;33486:6;:22;;;;:::i;:::-;:35;;33452:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33109:751;;;33640:31;:35;33672:2;33640:35;;;;;;;;;;;;;;;;;;;;;;;;;33635:225;;33760:9;;33743:13;33753:2;33743:9;:13::i;:::-;33734:6;:22;;;;:::i;:::-;:35;;33700:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33635:225;33109:751;32491:1384;32456:1430;33898:28;33929:24;33947:4;33929:9;:24::i;:::-;33898:55;;33966:12;34005:18;;33981:20;:42;;33966:57;;34054:7;:35;;;;;34078:11;;;;;;;;;;;34054:35;:61;;;;;34107:8;;;;;;;;;;;34106:9;34054:61;:97;;;;;34138:13;34132:19;;:2;:19;;;34054:97;:140;;;;;34169:19;:25;34189:4;34169:25;;;;;;;;;;;;;;;;;;;;;;;;;34168:26;34054:140;:181;;;;;34212:19;:23;34232:2;34212:23;;;;;;;;;;;;;;;;;;;;;;;;;34211:24;34054:181;34036:313;;;34273:4;34262:8;;:15;;;;;;;;;;;;;;;;;;34294:10;:8;:10::i;:::-;34332:5;34321:8;;:16;;;;;;;;;;;;;;;;;;34036:313;34361:12;34377:8;;;;;;;;;;;34376:9;34361:24;;34487:19;:25;34507:4;34487:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34516:19;:23;34536:2;34516:23;;;;;;;;;;;;;;;;;;;;;;;;;34487:52;34483:100;;;34566:5;34556:15;;34483:100;34595:12;34622:26;34663:20;34776:7;34772:925;;;34834:13;34828:19;;:2;:19;;;:40;;;;;34867:1;34851:13;;:17;34828:40;34824:583;;;34896:34;34926:3;34896:25;34907:13;;34896:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;34889:41;;34998:13;;34978:16;;34971:4;:23;;;;:::i;:::-;34970:41;;;;:::i;:::-;34949:62;;35067:13;;35053:10;;35046:4;:17;;;;:::i;:::-;35045:35;;;;:::i;:::-;35030:50;;34824:583;;;35150:13;35142:21;;:4;:21;;;:41;;;;;35182:1;35167:12;;:16;35142:41;35138:269;;;35211:33;35240:3;35211:24;35222:12;;35211:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35204:40;;35311:12;;35292:15;;35285:4;:22;;;;:::i;:::-;35284:39;;;;:::i;:::-;35263:60;;35379:12;;35366:9;;35359:4;:16;;;;:::i;:::-;35358:33;;;;:::i;:::-;35343:48;;35138:269;34824:583;35433:1;35427:4;:7;35423:90;;;35455:42;35471:4;35485;35492;35455:15;:42::i;:::-;35423:90;35552:1;35531:18;:22;35527:128;;;35574:65;35598:4;35605:13;35620:18;35574:15;:65::i;:::-;35527:128;35681:4;35671:14;;;;;:::i;:::-;;;34772:925;35709:33;35725:4;35731:2;35735:6;35709:15;:33::i;:::-;32184:3566;;;;;;32071:3679;;;;:::o;3368:191::-;3442:16;3461:6;;;;;;;;;;;3442:25;;3487:8;3478:6;;:17;;;;;;;;;;;;;;;;;;3542:8;3511:40;;3532:8;3511:40;;;;;;;;;;;;3431:128;3368:191;:::o;13314:733::-;13472:1;13454:20;;:6;:20;;;13446:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13556:1;13535:23;;:9;:23;;;13527:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13611:47;13632:6;13640:9;13651:6;13611:20;:47::i;:::-;13671:21;13695:9;:17;13705:6;13695:17;;;;;;;;;;;;;;;;13671:41;;13748:6;13731:13;:23;;13723:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13869:6;13853:13;:22;13833:9;:17;13843:6;13833:17;;;;;;;;;;;;;;;:42;;;;13921:6;13897:9;:20;13907:9;13897:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13962:9;13945:35;;13954:6;13945:35;;;13973:6;13945:35;;;;;;:::i;:::-;;;;;;;;13993:46;14013:6;14021:9;14032:6;13993:19;:46::i;:::-;13435:612;13314:733;;;:::o;36338:340::-;36377:23;36403:24;36421:4;36403:9;:24::i;:::-;36377:50;;36461:1;36442:15;:20;36438:59;;36479:7;;;36438:59;36552:2;36531:18;;:23;;;;:::i;:::-;36513:15;:41;36509:115;;;36610:2;36589:18;;:23;;;;:::i;:::-;36571:41;;36509:115;36636:34;36654:15;36636:17;:34::i;:::-;36366:312;36338:340;:::o;20626:98::-;20684:7;20715:1;20711;:5;;;;:::i;:::-;20704:12;;20626:98;;;;:::o;21025:::-;21083:7;21114:1;21110;:5;;;;:::i;:::-;21103:12;;21025:98;;;;:::o;16153:125::-;;;;:::o;16882:124::-;;;;:::o;35758:572::-;35885:21;35923:1;35909:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35885:40;;35954:4;35936;35941:1;35936:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35980:4;;;;;;;;;;;35970;35975:1;35970:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;35997:62;36014:4;36029:15;36047:11;35997:8;:62::i;:::-;36098:15;:69;;;36182:11;36208:1;36253:4;36272:9;;;;;;;;;;;36296:15;36098:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35814:516;35758: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://b91d4f947043ab16c9b585d201d37e7f25d6cf1246749d7d87c2e67bc560333b
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.