ETH Price: $3,460.60 (+1.35%)
Gas: 18 Gwei

Token

UpTiSm (MESSI)
 

Overview

Max Total Supply

1,000,000,000 MESSI

Holders

268

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000073040238 MESSI

Value
$0.00
0x82606beb4dd0a018575611B4c4f23D4B71DB0340
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:
UpTiSm

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-02
*/

/**
 * UpTiSm (MESSI)
 *
 * PRICE GOES UP, UP THEN MOAR UP.
 * JOIN THE UPTISTIC REVOLUTION TO TURN EVERY PLEB INTO A BIG WALLET SWINGING CHAD.
 *
 * https://twitter.com/UpTiSm_ErC20
 * https://t.me/UpTiSmPortal
 */

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

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

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

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

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

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

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

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

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

/**
 * @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 feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
    external
    view
    returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
    external
    view
    returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
    external
    view
    returns (
        uint112 reserve0,
        uint112 reserve1,
        uint32 blockTimestampLast
    );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
    external
    returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
    external
    returns (
        uint256 amountA,
        uint256 amountB,
        uint256 liquidity
    );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokenThreshold;
    uint256 public maxWallet;

    uint256 public basisPointsForLPBurn = 500; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 69 minutes;
    uint256 public lastManualLpBurnTime;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

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

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("UpTiSm", "MESSI") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        setExcludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 10;
        uint256 _buyDevFee = 10;

        uint256 _sellMarketingFee = 10;
        uint256 _sellLiquidityFee = 10;
        uint256 _sellDevFee = 10;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 10_000_000 * 1e18; // 1% from total supply maxTransactionAmountTxn
//        maxWallet = 1_000_000_000 * 1e18; // 1% from total supply maxWallet
        maxWallet = 5_000_000 * 1e18; // 1% from total supply maxWallet
        swapTokenThreshold = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        marketingWallet = address(0x347b25117FB2a68bF8213f6B3559558A7b16891e);
        devWallet = address(0x347b25117FB2a68bF8213f6B3559558A7b16891e);

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

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

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

    receive() external payable {}

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        addLiquidity(balanceOf(address(this)), address(this).balance);
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokenThreshold(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."
        );
        swapTokenThreshold = newAmount;
        return true;
    }

    function updateMaxTransactionAmount(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 setExcludeFromMaxTransaction(address updAds, bool isExcluded)
    public
    onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
    }

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

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

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

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

    function setAutomatedMarketMakerPair(address pair, bool value)
    public
    onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
    external
    onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

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

    event BoughtEarly(address indexed sniper);

    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.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                            block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                    //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokenThreshold;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
        automatedMarketMakerPairs[to] &&
        lpBurnEnabled &&
        block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
        !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) public {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
                    tokensForMarketing +
                    tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
                    totalTokensToSwap /
                    2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
                value: address(this).balance
            }("");
    }

    function updateAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot burn LP more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "LP burn percent must be between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        basisPointsForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(basisPointsForLPBurn).div(
            10000
        );

        // pull tokens from pair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLPTokens(uint256 percent)
    external
    onlyOwner
    returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "Cannot nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basisPointsForLPBurn","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":"buyMarketingFee","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLPTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"openTrading","outputs":[],"stateMutability":"nonpayable","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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokenThreshold","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"updateAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokenThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526101f4600b556001600c5f6101000a81548160ff021916908315150217905550610258600d5561102c600f55600160115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff0219169083151502179055505f601160026101000a81548160ff021916908315150217905550600160135f6101000a81548160ff021916908315150217905550348015620000a4575f80fd5b506040518060400160405280600681526020017f55705469536d00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d45535349000000000000000000000000000000000000000000000000000000815250816003908162000122919062000d47565b50806004908162000134919062000d47565b505050620001576200014b620005bb60201b60201c565b620005c260201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001828160016200068560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000200573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000226919062000e90565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002b2919062000e90565b6040518363ffffffff1660e01b8152600401620002d192919062000ed1565b6020604051808303815f875af1158015620002ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000314919062000e90565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200035c60a05160016200068560201b60201c565b6200037160a05160016200076c60201b60201c565b5f600a90505f600a90505f600a90505f600a90505f600a90505f600a90505f6b033b2e3c9fd0803ce800000090506a084595161401484a0000006008819055506a0422ca8b0a00a425000000600a81905550612710600582620003d5919062000f29565b620003e1919062000fa0565b60098190555086601581905550856016819055508460178190555060175460165460155462000411919062000fd7565b6200041d919062000fd7565b6014819055508360198190555082601a8190555081601b81905550601b54601a546019546200044d919062000fd7565b62000459919062000fd7565b60188190555073347b25117fb2a68bf8213f6b3559558a7b16891e60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073347b25117fb2a68bf8213f6b3559558a7b16891e60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005296200051b6200080a60201b60201c565b60016200083260201b60201c565b6200053c3060016200083260201b60201c565b6200055161dead60016200083260201b60201c565b62000573620005656200080a60201b60201c565b60016200068560201b60201c565b620005863060016200068560201b60201c565b6200059b61dead60016200068560201b60201c565b620005ad30826200096960201b60201c565b505050505050505062001160565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000695620005bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006bb6200080a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000714576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070b906200106f565b60405180910390fd5b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000842620005bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008686200080a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b8906200106f565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200095d9190620010ab565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d19062001114565b60405180910390fd5b620009ed5f838362000ad960201b60201c565b8060025f82825462000a00919062000fd7565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a54919062000fd7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aba919062001145565b60405180910390a362000ad55f838362000ade60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b5f57607f821691505b60208210810362000b755762000b7462000b1a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000bd97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b9c565b62000be5868362000b9c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c2f62000c2962000c238462000bfd565b62000c06565b62000bfd565b9050919050565b5f819050919050565b62000c4a8362000c0f565b62000c6262000c598262000c36565b84845462000ba8565b825550505050565b5f90565b62000c7862000c6a565b62000c8581848462000c3f565b505050565b5b8181101562000cac5762000ca05f8262000c6e565b60018101905062000c8b565b5050565b601f82111562000cfb5762000cc58162000b7b565b62000cd08462000b8d565b8101602085101562000ce0578190505b62000cf862000cef8562000b8d565b83018262000c8a565b50505b505050565b5f82821c905092915050565b5f62000d1d5f198460080262000d00565b1980831691505092915050565b5f62000d37838362000d0c565b9150826002028217905092915050565b62000d528262000ae3565b67ffffffffffffffff81111562000d6e5762000d6d62000aed565b5b62000d7a825462000b47565b62000d8782828562000cb0565b5f60209050601f83116001811462000dbd575f841562000da8578287015190505b62000db4858262000d2a565b86555062000e23565b601f19841662000dcd8662000b7b565b5f5b8281101562000df65784890151825560018201915060208501945060208101905062000dcf565b8683101562000e16578489015162000e12601f89168262000d0c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e5a8262000e2f565b9050919050565b62000e6c8162000e4e565b811462000e77575f80fd5b50565b5f8151905062000e8a8162000e61565b92915050565b5f6020828403121562000ea85762000ea762000e2b565b5b5f62000eb78482850162000e7a565b91505092915050565b62000ecb8162000e4e565b82525050565b5f60408201905062000ee65f83018562000ec0565b62000ef5602083018462000ec0565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f358262000bfd565b915062000f428362000bfd565b925082820262000f528162000bfd565b9150828204841483151762000f6c5762000f6b62000efc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000fac8262000bfd565b915062000fb98362000bfd565b92508262000fcc5762000fcb62000f73565b5b828204905092915050565b5f62000fe38262000bfd565b915062000ff08362000bfd565b92508282019050808211156200100b576200100a62000efc565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200105760208362001011565b9150620010648262001021565b602082019050919050565b5f6020820190508181035f830152620010888162001049565b9050919050565b5f8115159050919050565b620010a5816200108f565b82525050565b5f602082019050620010c05f8301846200109a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010fc601f8362001011565b91506200110982620010c6565b602082019050919050565b5f6020820190508181035f8301526200112d81620010ee565b9050919050565b6200113f8162000bfd565b82525050565b5f6020820190506200115a5f83018462001134565b92915050565b60805160a051615a7f620011e45f395f81816112b501528181611aa101528181611b5401528181611b8001528181611cb201528181612ee001528181613f780152818161402d015261405901525f8181610f7d01528181611d5801528181611d7f01528181612e88015281816141c7015281816142a601526142cd0152615a7f5ff3fe6080604052600436106103bb575f3560e01c80638ea5220f116101f1578063bbc0c7421161010c578063db9855e81161009f578063f11a24d31161006e578063f11a24d314610e0c578063f2fde38b14610e36578063f637434214610e5e578063f8b45b0514610e88576103c2565b8063db9855e814610d56578063dd62ed3e14610d7e578063e01af92c14610dba578063e884f26014610de2576103c2565b8063c876d0b9116100db578063c876d0b914610cc2578063c8c8ebe414610cec578063c9567bf914610d16578063d85ba06314610d2c576103c2565b8063bbc0c74214610c20578063c024666814610c4a578063c17b5b8c14610c72578063c18bc19514610c9a576103c2565b80639fccce3211610184578063a9059cbb11610153578063a9059cbb14610b58578063aa49802314610b94578063aacebbe314610bbc578063b62496f514610be4576103c2565b80639fccce3214610a9e578063a0d82dc514610ac8578063a457c2d714610af2578063a4c82a0014610b2e576103c2565b80639a7a23d6116101c05780639a7a23d6146109fa5780639c3b4fdc14610a225780639cd441da14610a4c5780639ec22c0e14610a74576103c2565b80638ea5220f14610940578063921369131461096a57806395d89b411461099457806398d7e721146109be576103c2565b806349bd5a5e116102e15780636ddd17131161027457806375f0a8741161024357806375f0a8741461089a5780637bce5a04146108c45780638095d564146108ee5780638da5cb5b14610916576103c2565b80636ddd1713146107f457806370a082311461081e578063715018a61461085a578063751039fc14610870576103c2565b80635a3a96f3116102b05780635a3a96f31461073c578063632af960146107665780636440f719146107a25780636a486a8e146107ca576103c2565b806349bd5a5e146106825780634a62bb65146106ac5780634fbee193146106d6578063501a535414610712576103c2565b80631a8145bb116103595780632c3e486c116103285780632c3e486c146105c85780632e82f1a0146105f2578063313ce5671461061c5780633950935114610646576103c2565b80631a8145bb1461050e5780631f3fed8f1461053857806323b872dd1461056257806327c8f8351461059e576103c2565b80631694505e116103955780631694505e1461046857806318160ddd146104925780631816467f146104bc578063184c16c5146104e4576103c2565b806306fdde03146103c6578063095ea7b3146103f057806310d5de531461042c576103c2565b366103c257005b5f80fd5b3480156103d1575f80fd5b506103da610eb2565b6040516103e791906143e7565b60405180910390f35b3480156103fb575f80fd5b5061041660048036038101906104119190614498565b610f42565b60405161042391906144f0565b60405180910390f35b348015610437575f80fd5b50610452600480360381019061044d9190614509565b610f5f565b60405161045f91906144f0565b60405180910390f35b348015610473575f80fd5b5061047c610f7b565b604051610489919061458f565b60405180910390f35b34801561049d575f80fd5b506104a6610f9f565b6040516104b391906145b7565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd9190614509565b610fa8565b005b3480156104ef575f80fd5b506104f86110e2565b60405161050591906145b7565b60405180910390f35b348015610519575f80fd5b506105226110e8565b60405161052f91906145b7565b60405180910390f35b348015610543575f80fd5b5061054c6110ee565b60405161055991906145b7565b60405180910390f35b34801561056d575f80fd5b50610588600480360381019061058391906145d0565b6110f4565b60405161059591906144f0565b60405180910390f35b3480156105a9575f80fd5b506105b26111e6565b6040516105bf919061462f565b60405180910390f35b3480156105d3575f80fd5b506105dc6111ec565b6040516105e991906145b7565b60405180910390f35b3480156105fd575f80fd5b506106066111f2565b60405161061391906144f0565b60405180910390f35b348015610627575f80fd5b50610630611204565b60405161063d9190614663565b60405180910390f35b348015610651575f80fd5b5061066c60048036038101906106679190614498565b61120c565b60405161067991906144f0565b60405180910390f35b34801561068d575f80fd5b506106966112b3565b6040516106a3919061462f565b60405180910390f35b3480156106b7575f80fd5b506106c06112d7565b6040516106cd91906144f0565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190614509565b6112e9565b60405161070991906144f0565b60405180910390f35b34801561071d575f80fd5b5061072661133b565b60405161073391906145b7565b60405180910390f35b348015610747575f80fd5b50610750611341565b60405161075d91906145b7565b60405180910390f35b348015610771575f80fd5b5061078c6004803603810190610787919061467c565b611347565b60405161079991906144f0565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c391906146d1565b61149b565b005b3480156107d5575f80fd5b506107de6115d9565b6040516107eb91906145b7565b60405180910390f35b3480156107ff575f80fd5b506108086115df565b60405161081591906144f0565b60405180910390f35b348015610829575f80fd5b50610844600480360381019061083f9190614509565b6115f2565b60405161085191906145b7565b60405180910390f35b348015610865575f80fd5b5061086e611637565b005b34801561087b575f80fd5b506108846116be565b60405161089191906144f0565b60405180910390f35b3480156108a5575f80fd5b506108ae61175b565b6040516108bb919061462f565b60405180910390f35b3480156108cf575f80fd5b506108d8611780565b6040516108e591906145b7565b60405180910390f35b3480156108f9575f80fd5b50610914600480360381019061090f9190614721565b611786565b005b348015610921575f80fd5b5061092a611885565b604051610937919061462f565b60405180910390f35b34801561094b575f80fd5b506109546118ad565b604051610961919061462f565b60405180910390f35b348015610975575f80fd5b5061097e6118d2565b60405161098b91906145b7565b60405180910390f35b34801561099f575f80fd5b506109a86118d8565b6040516109b591906143e7565b60405180910390f35b3480156109c9575f80fd5b506109e460048036038101906109df919061467c565b611968565b6040516109f191906144f0565b60405180910390f35b348015610a05575f80fd5b50610a206004803603810190610a1b9190614771565b611c34565b005b348015610a2d575f80fd5b50610a36611d4c565b604051610a4391906145b7565b60405180910390f35b348015610a57575f80fd5b50610a726004803603810190610a6d91906147af565b611d52565b005b348015610a7f575f80fd5b50610a88611e2b565b604051610a9591906145b7565b60405180910390f35b348015610aa9575f80fd5b50610ab2611e31565b604051610abf91906145b7565b60405180910390f35b348015610ad3575f80fd5b50610adc611e37565b604051610ae991906145b7565b60405180910390f35b348015610afd575f80fd5b50610b186004803603810190610b139190614498565b611e3d565b604051610b2591906144f0565b60405180910390f35b348015610b39575f80fd5b50610b42611f23565b604051610b4f91906145b7565b60405180910390f35b348015610b63575f80fd5b50610b7e6004803603810190610b799190614498565b611f29565b604051610b8b91906144f0565b60405180910390f35b348015610b9f575f80fd5b50610bba6004803603810190610bb5919061467c565b611f46565b005b348015610bc7575f80fd5b50610be26004803603810190610bdd9190614509565b612055565b005b348015610bef575f80fd5b50610c0a6004803603810190610c059190614509565b61218f565b604051610c1791906144f0565b60405180910390f35b348015610c2b575f80fd5b50610c346121ac565b604051610c4191906144f0565b60405180910390f35b348015610c55575f80fd5b50610c706004803603810190610c6b9190614771565b6121bf565b005b348015610c7d575f80fd5b50610c986004803603810190610c939190614721565b6122e1565b005b348015610ca5575f80fd5b50610cc06004803603810190610cbb919061467c565b6123e0565b005b348015610ccd575f80fd5b50610cd66124ef565b604051610ce391906144f0565b60405180910390f35b348015610cf7575f80fd5b50610d00612501565b604051610d0d91906145b7565b60405180910390f35b348015610d21575f80fd5b50610d2a612507565b005b348015610d37575f80fd5b50610d406125d4565b604051610d4d91906145b7565b60405180910390f35b348015610d61575f80fd5b50610d7c6004803603810190610d779190614771565b6125da565b005b348015610d89575f80fd5b50610da46004803603810190610d9f91906147ed565b6126ae565b604051610db191906145b7565b60405180910390f35b348015610dc5575f80fd5b50610de06004803603810190610ddb919061482b565b612730565b005b348015610ded575f80fd5b50610df66127c9565b604051610e0391906144f0565b60405180910390f35b348015610e17575f80fd5b50610e20612866565b604051610e2d91906145b7565b60405180910390f35b348015610e41575f80fd5b50610e5c6004803603810190610e579190614509565b61286c565b005b348015610e69575f80fd5b50610e72612962565b604051610e7f91906145b7565b60405180910390f35b348015610e93575f80fd5b50610e9c612968565b604051610ea991906145b7565b60405180910390f35b606060038054610ec190614883565b80601f0160208091040260200160405190810160405280929190818152602001828054610eed90614883565b8015610f385780601f10610f0f57610100808354040283529160200191610f38565b820191905f5260205f20905b815481529060010190602001808311610f1b57829003601f168201915b5050505050905090565b5f610f55610f4e61296e565b8484612975565b6001905092915050565b60208052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610fb061296e565b73ffffffffffffffffffffffffffffffffffffffff16610fce611885565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b906148fd565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b601d5481565b601c5481565b5f611100848484612b38565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61114761296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd9061498b565b60405180910390fd5b6111da856111d261296e565b858403612975565b60019150509392505050565b61dead81565b600d5481565b600c5f9054906101000a900460ff1681565b5f6012905090565b5f6112a961121861296e565b848460015f61122561296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112a491906149d6565b612975565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60115f9054906101000a900460ff1681565b5f601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60095481565b600b5481565b5f61135061296e565b73ffffffffffffffffffffffffffffffffffffffff1661136e611885565b73ffffffffffffffffffffffffffffffffffffffff16146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906148fd565b60405180910390fd5b620186a060016113d2610f9f565b6113dc9190614a09565b6113e69190614a77565b821015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614b17565b60405180910390fd5b6103e86005611435610f9f565b61143f9190614a09565b6114499190614a77565b82111561148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290614ba5565b60405180910390fd5b8160098190555060019050919050565b6114a361296e565b73ffffffffffffffffffffffffffffffffffffffff166114c1611885565b73ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e906148fd565b60405180910390fd5b61025883101561155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390614c33565b60405180910390fd5b6103e8821115801561156e57505f8210155b6115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490614cc1565b60405180910390fd5b82600d8190555081600b8190555080600c5f6101000a81548160ff021916908315150217905550505050565b60185481565b601160029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61163f61296e565b73ffffffffffffffffffffffffffffffffffffffff1661165d611885565b73ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa906148fd565b60405180910390fd5b6116bc5f613882565b565b5f6116c761296e565b73ffffffffffffffffffffffffffffffffffffffff166116e5611885565b73ffffffffffffffffffffffffffffffffffffffff161461173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906148fd565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61178e61296e565b73ffffffffffffffffffffffffffffffffffffffff166117ac611885565b73ffffffffffffffffffffffffffffffffffffffff1614611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f9906148fd565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461182a91906149d6565b61183491906149d6565b601481905550600a6014541115611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790614d29565b60405180910390fd5b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6060600480546118e790614883565b80601f016020809104026020016040519081016040528092919081815260200182805461191390614883565b801561195e5780601f106119355761010080835404028352916020019161195e565b820191905f5260205f20905b81548152906001019060200180831161194157829003601f168201915b5050505050905090565b5f61197161296e565b73ffffffffffffffffffffffffffffffffffffffff1661198f611885565b73ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc906148fd565b60405180910390fd5b600f546010546119f591906149d6565b4211611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614d91565b60405180910390fd5b6103e8821115611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290614e1f565b60405180910390fd5b426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611adc919061462f565b602060405180830381865afa158015611af7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190614e51565b90505f611b45612710611b37868561394590919063ffffffff16565b61395a90919063ffffffff16565b90505f811115611b7d57611b7c7f000000000000000000000000000000000000000000000000000000000000000061dead8361396f565b5b5f7f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611be6575f80fd5b505af1158015611bf8573d5f803e3d5ffd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b611c3c61296e565b73ffffffffffffffffffffffffffffffffffffffff16611c5a611885565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca7906148fd565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590614eec565b60405180910390fd5b611d488282613be4565b5050565b60175481565b611d7d307f000000000000000000000000000000000000000000000000000000000000000084612975565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b8152600401611de396959493929190614f43565b60606040518083038185885af1158015611dff573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e249190614fa2565b5050505050565b60105481565b601e5481565b601b5481565b5f8060015f611e4a61296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90615062565b60405180910390fd5b611f18611f0f61296e565b85858403612975565b600191505092915050565b600e5481565b5f611f3c611f3561296e565b8484612b38565b6001905092915050565b611f4e61296e565b73ffffffffffffffffffffffffffffffffffffffff16611f6c611885565b73ffffffffffffffffffffffffffffffffffffffff1614611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb9906148fd565b60405180910390fd5b670de0b6b3a76400006103e86001611fd8610f9f565b611fe29190614a09565b611fec9190614a77565b611ff69190614a77565b811015612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f906150f0565b60405180910390fd5b670de0b6b3a76400008161204c9190614a09565b60088190555050565b61205d61296e565b73ffffffffffffffffffffffffffffffffffffffff1661207b611885565b73ffffffffffffffffffffffffffffffffffffffff16146120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c8906148fd565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6021602052805f5260405f205f915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6121c761296e565b73ffffffffffffffffffffffffffffffffffffffff166121e5611885565b73ffffffffffffffffffffffffffffffffffffffff161461223b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612232906148fd565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122d591906144f0565b60405180910390a25050565b6122e961296e565b73ffffffffffffffffffffffffffffffffffffffff16612307611885565b73ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612354906148fd565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a5460195461238591906149d6565b61238f91906149d6565b601881905550601460185411156123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290615158565b60405180910390fd5b505050565b6123e861296e565b73ffffffffffffffffffffffffffffffffffffffff16612406611885565b73ffffffffffffffffffffffffffffffffffffffff161461245c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612453906148fd565b60405180910390fd5b670de0b6b3a76400006103e86005612472610f9f565b61247c9190614a09565b6124869190614a77565b6124909190614a77565b8110156124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c9906151e6565b60405180910390fd5b670de0b6b3a7640000816124e69190614a09565b600a8190555050565b60135f9054906101000a900460ff1681565b60085481565b61250f61296e565b73ffffffffffffffffffffffffffffffffffffffff1661252d611885565b73ffffffffffffffffffffffffffffffffffffffff1614612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a906148fd565b60405180910390fd5b61259561258f306115f2565b47611d52565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60145481565b6125e261296e565b73ffffffffffffffffffffffffffffffffffffffff16612600611885565b73ffffffffffffffffffffffffffffffffffffffff1614612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d906148fd565b60405180910390fd5b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61273861296e565b73ffffffffffffffffffffffffffffffffffffffff16612756611885565b73ffffffffffffffffffffffffffffffffffffffff16146127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a3906148fd565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b5f6127d261296e565b73ffffffffffffffffffffffffffffffffffffffff166127f0611885565b73ffffffffffffffffffffffffffffffffffffffff1614612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906148fd565b60405180910390fd5b5f60135f6101000a81548160ff0219169083151502179055506001905090565b60165481565b61287461296e565b73ffffffffffffffffffffffffffffffffffffffff16612892611885565b73ffffffffffffffffffffffffffffffffffffffff16146128e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128df906148fd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90615274565b60405180910390fd5b61295f81613882565b50565b601a5481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90615302565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4890615390565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b2b91906145b7565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9d9061541e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906154ac565b60405180910390fd5b5f8103612c2b57612c2683835f61396f565b61387d565b60115f9054906101000a900460ff16156132d257612c47611885565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cb55750612c85611885565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ced57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d27575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d405750600560149054906101000a900460ff16155b156132d157601160019054906101000a900460ff16612e3457601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612df45750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2a90615514565b60405180910390fd5b5b60135f9054906101000a900460ff1615612ff757612e50611885565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ed757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f2f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ff6574360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906155c8565b60405180910390fd5b4360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613094575060205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561313b576008548111156130de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d590615656565b60405180910390fd5b600a546130ea836115f2565b826130f591906149d6565b1115613136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312d906156be565b60405180910390fd5b6132d0565b60215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131d8575060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561322757600854811115613222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132199061574c565b60405180910390fd5b6132cf565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166132ce57600a54613281836115f2565b8261328c91906149d6565b11156132cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c4906156be565b60405180910390fd5b5b5b5b5b5b5f6132dc306115f2565b90505f60095482101590508080156133005750601160029054906101000a900460ff165b80156133195750600560149054906101000a900460ff16155b801561336c575060215f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156133bf5750601f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134125750601f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613455576001600560146101000a81548160ff02191690831515021790555061343a613c82565b5f600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134b8575060215f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156134cf5750600c5f9054906101000a900460ff165b80156134ea5750600d54600e546134e691906149d6565b4210155b801561353d5750601f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561354c5761354a613f51565b505b5f600560149054906101000a900460ff16159050601f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806135fb5750601f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613604575f90505b5f811561386d5760215f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561366257505f601854115b1561372c5761368f60646136816018548861394590919063ffffffff16565b61395a90919063ffffffff16565b9050601854601a54826136a29190614a09565b6136ac9190614a77565b601d5f8282546136bc91906149d6565b92505081905550601854601b54826136d49190614a09565b6136de9190614a77565b601e5f8282546136ee91906149d6565b92505081905550601854601954826137069190614a09565b6137109190614a77565b601c5f82825461372091906149d6565b9250508190555061384a565b60215f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561378357505f601454115b15613849576137b060646137a26014548861394590919063ffffffff16565b61395a90919063ffffffff16565b9050601454601654826137c39190614a09565b6137cd9190614a77565b601d5f8282546137dd91906149d6565b92505081905550601454601754826137f59190614a09565b6137ff9190614a77565b601e5f82825461380f91906149d6565b92505081905550601454601554826138279190614a09565b6138319190614a77565b601c5f82825461384191906149d6565b925050819055505b5b5f81111561385e5761385d87308361396f565b5b808561386a919061576a565b94505b61387887878761396f565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81836139529190614a09565b905092915050565b5f81836139679190614a77565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d49061541e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a42906154ac565b60405180910390fd5b613a5683838361410b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad09061580d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613b6791906149d6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613bcb91906145b7565b60405180910390a3613bde848484614110565b50505050565b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f613c8c306115f2565b90505f601e54601c54601d54613ca291906149d6565b613cac91906149d6565b90505f80831480613cbc57505f82145b15613cc957505050613f4f565b6014600954613cd89190614a09565b831115613cf1576014600954613cee9190614a09565b92505b5f600283601d5486613d039190614a09565b613d0d9190614a77565b613d179190614a77565b90505f613d2d828661411590919063ffffffff16565b90505f479050613d3c8261412a565b5f613d50824761411590919063ffffffff16565b90505f613d7a87613d6c601c548561394590919063ffffffff16565b61395a90919063ffffffff16565b90505f613da488613d96601e548661394590919063ffffffff16565b61395a90919063ffffffff16565b90505f818385613db4919061576a565b613dbe919061576a565b90505f601d819055505f601c819055505f601e8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e1a90615858565b5f6040518083038185875af1925050503d805f8114613e54576040519150601f19603f3d011682016040523d82523d5f602084013e613e59565b606091505b5050809850505f87118015613e6d57505f81115b15613eba57613e7c8782611d52565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613eb19392919061586c565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613eff90615858565b5f6040518083038185875af1925050503d805f8114613f39576040519150601f19603f3d011682016040523d82523d5f602084013e613f3e565b606091505b505080985050505050505050505050505b565b5f42600e819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613fb3919061462f565b602060405180830381865afa158015613fce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ff29190614e51565b90505f61401e612710614010600b548561394590919063ffffffff16565b61395a90919063ffffffff16565b90505f811115614056576140557f000000000000000000000000000000000000000000000000000000000000000061dead8361396f565b5b5f7f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156140bf575f80fd5b505af11580156140d1573d5f803e3d5ffd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b5f8183614122919061576a565b905092915050565b5f600267ffffffffffffffff811115614146576141456158a1565b5b6040519080825280602002602001820160405280156141745781602001602082028036833780820191505090505b50905030815f8151811061418b5761418a6158ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561422e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614252919061590f565b81600181518110614266576142656158ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142cb307f000000000000000000000000000000000000000000000000000000000000000084612975565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161432c9594939291906159f1565b5f604051808303815f87803b158015614343575f80fd5b505af1158015614355573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614394578082015181840152602081019050614379565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6143b98261435d565b6143c38185614367565b93506143d3818560208601614377565b6143dc8161439f565b840191505092915050565b5f6020820190508181035f8301526143ff81846143af565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6144348261440b565b9050919050565b6144448161442a565b811461444e575f80fd5b50565b5f8135905061445f8161443b565b92915050565b5f819050919050565b61447781614465565b8114614481575f80fd5b50565b5f813590506144928161446e565b92915050565b5f80604083850312156144ae576144ad614407565b5b5f6144bb85828601614451565b92505060206144cc85828601614484565b9150509250929050565b5f8115159050919050565b6144ea816144d6565b82525050565b5f6020820190506145035f8301846144e1565b92915050565b5f6020828403121561451e5761451d614407565b5b5f61452b84828501614451565b91505092915050565b5f819050919050565b5f61455761455261454d8461440b565b614534565b61440b565b9050919050565b5f6145688261453d565b9050919050565b5f6145798261455e565b9050919050565b6145898161456f565b82525050565b5f6020820190506145a25f830184614580565b92915050565b6145b181614465565b82525050565b5f6020820190506145ca5f8301846145a8565b92915050565b5f805f606084860312156145e7576145e6614407565b5b5f6145f486828701614451565b935050602061460586828701614451565b925050604061461686828701614484565b9150509250925092565b6146298161442a565b82525050565b5f6020820190506146425f830184614620565b92915050565b5f60ff82169050919050565b61465d81614648565b82525050565b5f6020820190506146765f830184614654565b92915050565b5f6020828403121561469157614690614407565b5b5f61469e84828501614484565b91505092915050565b6146b0816144d6565b81146146ba575f80fd5b50565b5f813590506146cb816146a7565b92915050565b5f805f606084860312156146e8576146e7614407565b5b5f6146f586828701614484565b935050602061470686828701614484565b9250506040614717868287016146bd565b9150509250925092565b5f805f6060848603121561473857614737614407565b5b5f61474586828701614484565b935050602061475686828701614484565b925050604061476786828701614484565b9150509250925092565b5f806040838503121561478757614786614407565b5b5f61479485828601614451565b92505060206147a5858286016146bd565b9150509250929050565b5f80604083850312156147c5576147c4614407565b5b5f6147d285828601614484565b92505060206147e385828601614484565b9150509250929050565b5f806040838503121561480357614802614407565b5b5f61481085828601614451565b925050602061482185828601614451565b9150509250929050565b5f602082840312156148405761483f614407565b5b5f61484d848285016146bd565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061489a57607f821691505b6020821081036148ad576148ac614856565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6148e7602083614367565b91506148f2826148b3565b602082019050919050565b5f6020820190508181035f830152614914816148db565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614975602883614367565b91506149808261491b565b604082019050919050565b5f6020820190508181035f8301526149a281614969565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6149e082614465565b91506149eb83614465565b9250828201905080821115614a0357614a026149a9565b5b92915050565b5f614a1382614465565b9150614a1e83614465565b9250828202614a2c81614465565b91508282048414831517614a4357614a426149a9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614a8182614465565b9150614a8c83614465565b925082614a9c57614a9b614a4a565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614b01603583614367565b9150614b0c82614aa7565b604082019050919050565b5f6020820190508181035f830152614b2e81614af5565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614b8f603483614367565b9150614b9a82614b35565b604082019050919050565b5f6020820190508181035f830152614bbc81614b83565b9050919050565b7f63616e6e6f74206275726e204c50206d6f7265206f6674656e207468616e20655f8201527f76657279203130206d696e757465730000000000000000000000000000000000602082015250565b5f614c1d602f83614367565b9150614c2882614bc3565b604082019050919050565b5f6020820190508181035f830152614c4a81614c11565b9050919050565b7f4c50206275726e2070657263656e74206d757374206265206265747765656e205f8201527f302520616e642031302500000000000000000000000000000000000000000000602082015250565b5f614cab602a83614367565b9150614cb682614c51565b604082019050919050565b5f6020820190508181035f830152614cd881614c9f565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f614d13601d83614367565b9150614d1e82614cdf565b602082019050919050565b5f6020820190508181035f830152614d4081614d07565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973685f82015250565b5f614d7b602083614367565b9150614d8682614d47565b602082019050919050565b5f6020820190508181035f830152614da881614d6f565b9050919050565b7f43616e6e6f74206e756b65206d6f7265207468616e20313025206f6620746f6b5f8201527f656e7320696e204c500000000000000000000000000000000000000000000000602082015250565b5f614e09602983614367565b9150614e1482614daf565b604082019050919050565b5f6020820190508181035f830152614e3681614dfd565b9050919050565b5f81519050614e4b8161446e565b92915050565b5f60208284031215614e6657614e65614407565b5b5f614e7384828501614e3d565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614ed6603983614367565b9150614ee182614e7c565b604082019050919050565b5f6020820190508181035f830152614f0381614eca565b9050919050565b5f819050919050565b5f614f2d614f28614f2384614f0a565b614534565b614465565b9050919050565b614f3d81614f13565b82525050565b5f60c082019050614f565f830189614620565b614f6360208301886145a8565b614f706040830187614f34565b614f7d6060830186614f34565b614f8a6080830185614620565b614f9760a08301846145a8565b979650505050505050565b5f805f60608486031215614fb957614fb8614407565b5b5f614fc686828701614e3d565b9350506020614fd786828701614e3d565b9250506040614fe886828701614e3d565b9150509250925092565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61504c602583614367565b915061505782614ff2565b604082019050919050565b5f6020820190508181035f83015261507981615040565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6150da602f83614367565b91506150e582615080565b604082019050919050565b5f6020820190508181035f830152615107816150ce565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f615142601d83614367565b915061514d8261510e565b602082019050919050565b5f6020820190508181035f83015261516f81615136565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6151d0602483614367565b91506151db82615176565b604082019050919050565b5f6020820190508181035f8301526151fd816151c4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61525e602683614367565b915061526982615204565b604082019050919050565b5f6020820190508181035f83015261528b81615252565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6152ec602483614367565b91506152f782615292565b604082019050919050565b5f6020820190508181035f830152615319816152e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61537a602283614367565b915061538582615320565b604082019050919050565b5f6020820190508181035f8301526153a78161536e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f615408602583614367565b9150615413826153ae565b604082019050919050565b5f6020820190508181035f830152615435816153fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615496602383614367565b91506154a18261543c565b604082019050919050565b5f6020820190508181035f8301526154c38161548a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6154fe601683614367565b9150615509826154ca565b602082019050919050565b5f6020820190508181035f83015261552b816154f2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6155b2604983614367565b91506155bd82615532565b606082019050919050565b5f6020820190508181035f8301526155df816155a6565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f615640603583614367565b915061564b826155e6565b604082019050919050565b5f6020820190508181035f83015261566d81615634565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6156a8601383614367565b91506156b382615674565b602082019050919050565b5f6020820190508181035f8301526156d58161569c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615736603683614367565b9150615741826156dc565b604082019050919050565b5f6020820190508181035f8301526157638161572a565b9050919050565b5f61577482614465565b915061577f83614465565b9250828203905081811115615797576157966149a9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6157f7602683614367565b91506158028261579d565b604082019050919050565b5f6020820190508181035f830152615824816157eb565b9050919050565b5f81905092915050565b50565b5f6158435f8361582b565b915061584e82615835565b5f82019050919050565b5f61586282615838565b9150819050919050565b5f60608201905061587f5f8301866145a8565b61588c60208301856145a8565b61589960408301846145a8565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506159098161443b565b92915050565b5f6020828403121561592457615923614407565b5b5f615931848285016158fb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61596c8161442a565b82525050565b5f61597d8383615963565b60208301905092915050565b5f602082019050919050565b5f61599f8261593a565b6159a98185615944565b93506159b483615954565b805f5b838110156159e45781516159cb8882615972565b97506159d683615989565b9250506001810190506159b7565b5085935050505092915050565b5f60a082019050615a045f8301886145a8565b615a116020830187614f34565b8181036040830152615a238186615995565b9050615a326060830185614620565b615a3f60808301846145a8565b969550505050505056fea26469706673582212204f5b204b6a59b79a49d60fdf4a2c1df9067b915ff86e59d39c3ed183306fa4e864736f6c63430008160033

Deployed Bytecode

0x6080604052600436106103bb575f3560e01c80638ea5220f116101f1578063bbc0c7421161010c578063db9855e81161009f578063f11a24d31161006e578063f11a24d314610e0c578063f2fde38b14610e36578063f637434214610e5e578063f8b45b0514610e88576103c2565b8063db9855e814610d56578063dd62ed3e14610d7e578063e01af92c14610dba578063e884f26014610de2576103c2565b8063c876d0b9116100db578063c876d0b914610cc2578063c8c8ebe414610cec578063c9567bf914610d16578063d85ba06314610d2c576103c2565b8063bbc0c74214610c20578063c024666814610c4a578063c17b5b8c14610c72578063c18bc19514610c9a576103c2565b80639fccce3211610184578063a9059cbb11610153578063a9059cbb14610b58578063aa49802314610b94578063aacebbe314610bbc578063b62496f514610be4576103c2565b80639fccce3214610a9e578063a0d82dc514610ac8578063a457c2d714610af2578063a4c82a0014610b2e576103c2565b80639a7a23d6116101c05780639a7a23d6146109fa5780639c3b4fdc14610a225780639cd441da14610a4c5780639ec22c0e14610a74576103c2565b80638ea5220f14610940578063921369131461096a57806395d89b411461099457806398d7e721146109be576103c2565b806349bd5a5e116102e15780636ddd17131161027457806375f0a8741161024357806375f0a8741461089a5780637bce5a04146108c45780638095d564146108ee5780638da5cb5b14610916576103c2565b80636ddd1713146107f457806370a082311461081e578063715018a61461085a578063751039fc14610870576103c2565b80635a3a96f3116102b05780635a3a96f31461073c578063632af960146107665780636440f719146107a25780636a486a8e146107ca576103c2565b806349bd5a5e146106825780634a62bb65146106ac5780634fbee193146106d6578063501a535414610712576103c2565b80631a8145bb116103595780632c3e486c116103285780632c3e486c146105c85780632e82f1a0146105f2578063313ce5671461061c5780633950935114610646576103c2565b80631a8145bb1461050e5780631f3fed8f1461053857806323b872dd1461056257806327c8f8351461059e576103c2565b80631694505e116103955780631694505e1461046857806318160ddd146104925780631816467f146104bc578063184c16c5146104e4576103c2565b806306fdde03146103c6578063095ea7b3146103f057806310d5de531461042c576103c2565b366103c257005b5f80fd5b3480156103d1575f80fd5b506103da610eb2565b6040516103e791906143e7565b60405180910390f35b3480156103fb575f80fd5b5061041660048036038101906104119190614498565b610f42565b60405161042391906144f0565b60405180910390f35b348015610437575f80fd5b50610452600480360381019061044d9190614509565b610f5f565b60405161045f91906144f0565b60405180910390f35b348015610473575f80fd5b5061047c610f7b565b604051610489919061458f565b60405180910390f35b34801561049d575f80fd5b506104a6610f9f565b6040516104b391906145b7565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd9190614509565b610fa8565b005b3480156104ef575f80fd5b506104f86110e2565b60405161050591906145b7565b60405180910390f35b348015610519575f80fd5b506105226110e8565b60405161052f91906145b7565b60405180910390f35b348015610543575f80fd5b5061054c6110ee565b60405161055991906145b7565b60405180910390f35b34801561056d575f80fd5b50610588600480360381019061058391906145d0565b6110f4565b60405161059591906144f0565b60405180910390f35b3480156105a9575f80fd5b506105b26111e6565b6040516105bf919061462f565b60405180910390f35b3480156105d3575f80fd5b506105dc6111ec565b6040516105e991906145b7565b60405180910390f35b3480156105fd575f80fd5b506106066111f2565b60405161061391906144f0565b60405180910390f35b348015610627575f80fd5b50610630611204565b60405161063d9190614663565b60405180910390f35b348015610651575f80fd5b5061066c60048036038101906106679190614498565b61120c565b60405161067991906144f0565b60405180910390f35b34801561068d575f80fd5b506106966112b3565b6040516106a3919061462f565b60405180910390f35b3480156106b7575f80fd5b506106c06112d7565b6040516106cd91906144f0565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190614509565b6112e9565b60405161070991906144f0565b60405180910390f35b34801561071d575f80fd5b5061072661133b565b60405161073391906145b7565b60405180910390f35b348015610747575f80fd5b50610750611341565b60405161075d91906145b7565b60405180910390f35b348015610771575f80fd5b5061078c6004803603810190610787919061467c565b611347565b60405161079991906144f0565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c391906146d1565b61149b565b005b3480156107d5575f80fd5b506107de6115d9565b6040516107eb91906145b7565b60405180910390f35b3480156107ff575f80fd5b506108086115df565b60405161081591906144f0565b60405180910390f35b348015610829575f80fd5b50610844600480360381019061083f9190614509565b6115f2565b60405161085191906145b7565b60405180910390f35b348015610865575f80fd5b5061086e611637565b005b34801561087b575f80fd5b506108846116be565b60405161089191906144f0565b60405180910390f35b3480156108a5575f80fd5b506108ae61175b565b6040516108bb919061462f565b60405180910390f35b3480156108cf575f80fd5b506108d8611780565b6040516108e591906145b7565b60405180910390f35b3480156108f9575f80fd5b50610914600480360381019061090f9190614721565b611786565b005b348015610921575f80fd5b5061092a611885565b604051610937919061462f565b60405180910390f35b34801561094b575f80fd5b506109546118ad565b604051610961919061462f565b60405180910390f35b348015610975575f80fd5b5061097e6118d2565b60405161098b91906145b7565b60405180910390f35b34801561099f575f80fd5b506109a86118d8565b6040516109b591906143e7565b60405180910390f35b3480156109c9575f80fd5b506109e460048036038101906109df919061467c565b611968565b6040516109f191906144f0565b60405180910390f35b348015610a05575f80fd5b50610a206004803603810190610a1b9190614771565b611c34565b005b348015610a2d575f80fd5b50610a36611d4c565b604051610a4391906145b7565b60405180910390f35b348015610a57575f80fd5b50610a726004803603810190610a6d91906147af565b611d52565b005b348015610a7f575f80fd5b50610a88611e2b565b604051610a9591906145b7565b60405180910390f35b348015610aa9575f80fd5b50610ab2611e31565b604051610abf91906145b7565b60405180910390f35b348015610ad3575f80fd5b50610adc611e37565b604051610ae991906145b7565b60405180910390f35b348015610afd575f80fd5b50610b186004803603810190610b139190614498565b611e3d565b604051610b2591906144f0565b60405180910390f35b348015610b39575f80fd5b50610b42611f23565b604051610b4f91906145b7565b60405180910390f35b348015610b63575f80fd5b50610b7e6004803603810190610b799190614498565b611f29565b604051610b8b91906144f0565b60405180910390f35b348015610b9f575f80fd5b50610bba6004803603810190610bb5919061467c565b611f46565b005b348015610bc7575f80fd5b50610be26004803603810190610bdd9190614509565b612055565b005b348015610bef575f80fd5b50610c0a6004803603810190610c059190614509565b61218f565b604051610c1791906144f0565b60405180910390f35b348015610c2b575f80fd5b50610c346121ac565b604051610c4191906144f0565b60405180910390f35b348015610c55575f80fd5b50610c706004803603810190610c6b9190614771565b6121bf565b005b348015610c7d575f80fd5b50610c986004803603810190610c939190614721565b6122e1565b005b348015610ca5575f80fd5b50610cc06004803603810190610cbb919061467c565b6123e0565b005b348015610ccd575f80fd5b50610cd66124ef565b604051610ce391906144f0565b60405180910390f35b348015610cf7575f80fd5b50610d00612501565b604051610d0d91906145b7565b60405180910390f35b348015610d21575f80fd5b50610d2a612507565b005b348015610d37575f80fd5b50610d406125d4565b604051610d4d91906145b7565b60405180910390f35b348015610d61575f80fd5b50610d7c6004803603810190610d779190614771565b6125da565b005b348015610d89575f80fd5b50610da46004803603810190610d9f91906147ed565b6126ae565b604051610db191906145b7565b60405180910390f35b348015610dc5575f80fd5b50610de06004803603810190610ddb919061482b565b612730565b005b348015610ded575f80fd5b50610df66127c9565b604051610e0391906144f0565b60405180910390f35b348015610e17575f80fd5b50610e20612866565b604051610e2d91906145b7565b60405180910390f35b348015610e41575f80fd5b50610e5c6004803603810190610e579190614509565b61286c565b005b348015610e69575f80fd5b50610e72612962565b604051610e7f91906145b7565b60405180910390f35b348015610e93575f80fd5b50610e9c612968565b604051610ea991906145b7565b60405180910390f35b606060038054610ec190614883565b80601f0160208091040260200160405190810160405280929190818152602001828054610eed90614883565b8015610f385780601f10610f0f57610100808354040283529160200191610f38565b820191905f5260205f20905b815481529060010190602001808311610f1b57829003601f168201915b5050505050905090565b5f610f55610f4e61296e565b8484612975565b6001905092915050565b60208052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610fb061296e565b73ffffffffffffffffffffffffffffffffffffffff16610fce611885565b73ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b906148fd565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b601d5481565b601c5481565b5f611100848484612b38565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61114761296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd9061498b565b60405180910390fd5b6111da856111d261296e565b858403612975565b60019150509392505050565b61dead81565b600d5481565b600c5f9054906101000a900460ff1681565b5f6012905090565b5f6112a961121861296e565b848460015f61122561296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112a491906149d6565b612975565b6001905092915050565b7f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e581565b60115f9054906101000a900460ff1681565b5f601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60095481565b600b5481565b5f61135061296e565b73ffffffffffffffffffffffffffffffffffffffff1661136e611885565b73ffffffffffffffffffffffffffffffffffffffff16146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906148fd565b60405180910390fd5b620186a060016113d2610f9f565b6113dc9190614a09565b6113e69190614a77565b821015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614b17565b60405180910390fd5b6103e86005611435610f9f565b61143f9190614a09565b6114499190614a77565b82111561148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290614ba5565b60405180910390fd5b8160098190555060019050919050565b6114a361296e565b73ffffffffffffffffffffffffffffffffffffffff166114c1611885565b73ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e906148fd565b60405180910390fd5b61025883101561155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390614c33565b60405180910390fd5b6103e8821115801561156e57505f8210155b6115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490614cc1565b60405180910390fd5b82600d8190555081600b8190555080600c5f6101000a81548160ff021916908315150217905550505050565b60185481565b601160029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61163f61296e565b73ffffffffffffffffffffffffffffffffffffffff1661165d611885565b73ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa906148fd565b60405180910390fd5b6116bc5f613882565b565b5f6116c761296e565b73ffffffffffffffffffffffffffffffffffffffff166116e5611885565b73ffffffffffffffffffffffffffffffffffffffff161461173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906148fd565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61178e61296e565b73ffffffffffffffffffffffffffffffffffffffff166117ac611885565b73ffffffffffffffffffffffffffffffffffffffff1614611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f9906148fd565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461182a91906149d6565b61183491906149d6565b601481905550600a6014541115611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790614d29565b60405180910390fd5b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6060600480546118e790614883565b80601f016020809104026020016040519081016040528092919081815260200182805461191390614883565b801561195e5780601f106119355761010080835404028352916020019161195e565b820191905f5260205f20905b81548152906001019060200180831161194157829003601f168201915b5050505050905090565b5f61197161296e565b73ffffffffffffffffffffffffffffffffffffffff1661198f611885565b73ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc906148fd565b60405180910390fd5b600f546010546119f591906149d6565b4211611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614d91565b60405180910390fd5b6103e8821115611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290614e1f565b60405180910390fd5b426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e56040518263ffffffff1660e01b8152600401611adc919061462f565b602060405180830381865afa158015611af7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190614e51565b90505f611b45612710611b37868561394590919063ffffffff16565b61395a90919063ffffffff16565b90505f811115611b7d57611b7c7f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e561dead8361396f565b5b5f7f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e590508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611be6575f80fd5b505af1158015611bf8573d5f803e3d5ffd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b611c3c61296e565b73ffffffffffffffffffffffffffffffffffffffff16611c5a611885565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca7906148fd565b60405180910390fd5b7f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590614eec565b60405180910390fd5b611d488282613be4565b5050565b60175481565b611d7d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612975565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b8152600401611de396959493929190614f43565b60606040518083038185885af1158015611dff573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e249190614fa2565b5050505050565b60105481565b601e5481565b601b5481565b5f8060015f611e4a61296e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90615062565b60405180910390fd5b611f18611f0f61296e565b85858403612975565b600191505092915050565b600e5481565b5f611f3c611f3561296e565b8484612b38565b6001905092915050565b611f4e61296e565b73ffffffffffffffffffffffffffffffffffffffff16611f6c611885565b73ffffffffffffffffffffffffffffffffffffffff1614611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb9906148fd565b60405180910390fd5b670de0b6b3a76400006103e86001611fd8610f9f565b611fe29190614a09565b611fec9190614a77565b611ff69190614a77565b811015612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f906150f0565b60405180910390fd5b670de0b6b3a76400008161204c9190614a09565b60088190555050565b61205d61296e565b73ffffffffffffffffffffffffffffffffffffffff1661207b611885565b73ffffffffffffffffffffffffffffffffffffffff16146120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c8906148fd565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6021602052805f5260405f205f915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6121c761296e565b73ffffffffffffffffffffffffffffffffffffffff166121e5611885565b73ffffffffffffffffffffffffffffffffffffffff161461223b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612232906148fd565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122d591906144f0565b60405180910390a25050565b6122e961296e565b73ffffffffffffffffffffffffffffffffffffffff16612307611885565b73ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612354906148fd565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a5460195461238591906149d6565b61238f91906149d6565b601881905550601460185411156123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290615158565b60405180910390fd5b505050565b6123e861296e565b73ffffffffffffffffffffffffffffffffffffffff16612406611885565b73ffffffffffffffffffffffffffffffffffffffff161461245c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612453906148fd565b60405180910390fd5b670de0b6b3a76400006103e86005612472610f9f565b61247c9190614a09565b6124869190614a77565b6124909190614a77565b8110156124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c9906151e6565b60405180910390fd5b670de0b6b3a7640000816124e69190614a09565b600a8190555050565b60135f9054906101000a900460ff1681565b60085481565b61250f61296e565b73ffffffffffffffffffffffffffffffffffffffff1661252d611885565b73ffffffffffffffffffffffffffffffffffffffff1614612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a906148fd565b60405180910390fd5b61259561258f306115f2565b47611d52565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60145481565b6125e261296e565b73ffffffffffffffffffffffffffffffffffffffff16612600611885565b73ffffffffffffffffffffffffffffffffffffffff1614612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d906148fd565b60405180910390fd5b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61273861296e565b73ffffffffffffffffffffffffffffffffffffffff16612756611885565b73ffffffffffffffffffffffffffffffffffffffff16146127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a3906148fd565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b5f6127d261296e565b73ffffffffffffffffffffffffffffffffffffffff166127f0611885565b73ffffffffffffffffffffffffffffffffffffffff1614612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906148fd565b60405180910390fd5b5f60135f6101000a81548160ff0219169083151502179055506001905090565b60165481565b61287461296e565b73ffffffffffffffffffffffffffffffffffffffff16612892611885565b73ffffffffffffffffffffffffffffffffffffffff16146128e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128df906148fd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90615274565b60405180910390fd5b61295f81613882565b50565b601a5481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90615302565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4890615390565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b2b91906145b7565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9d9061541e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906154ac565b60405180910390fd5b5f8103612c2b57612c2683835f61396f565b61387d565b60115f9054906101000a900460ff16156132d257612c47611885565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cb55750612c85611885565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ced57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d27575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d405750600560149054906101000a900460ff16155b156132d157601160019054906101000a900460ff16612e3457601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612df45750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2a90615514565b60405180910390fd5b5b60135f9054906101000a900460ff1615612ff757612e50611885565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ed757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f2f57507f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ff6574360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906155c8565b60405180910390fd5b4360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613094575060205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561313b576008548111156130de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d590615656565b60405180910390fd5b600a546130ea836115f2565b826130f591906149d6565b1115613136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312d906156be565b60405180910390fd5b6132d0565b60215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131d8575060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561322757600854811115613222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132199061574c565b60405180910390fd5b6132cf565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166132ce57600a54613281836115f2565b8261328c91906149d6565b11156132cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c4906156be565b60405180910390fd5b5b5b5b5b5b5f6132dc306115f2565b90505f60095482101590508080156133005750601160029054906101000a900460ff165b80156133195750600560149054906101000a900460ff16155b801561336c575060215f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156133bf5750601f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134125750601f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613455576001600560146101000a81548160ff02191690831515021790555061343a613c82565b5f600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134b8575060215f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156134cf5750600c5f9054906101000a900460ff165b80156134ea5750600d54600e546134e691906149d6565b4210155b801561353d5750601f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561354c5761354a613f51565b505b5f600560149054906101000a900460ff16159050601f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806135fb5750601f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613604575f90505b5f811561386d5760215f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561366257505f601854115b1561372c5761368f60646136816018548861394590919063ffffffff16565b61395a90919063ffffffff16565b9050601854601a54826136a29190614a09565b6136ac9190614a77565b601d5f8282546136bc91906149d6565b92505081905550601854601b54826136d49190614a09565b6136de9190614a77565b601e5f8282546136ee91906149d6565b92505081905550601854601954826137069190614a09565b6137109190614a77565b601c5f82825461372091906149d6565b9250508190555061384a565b60215f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561378357505f601454115b15613849576137b060646137a26014548861394590919063ffffffff16565b61395a90919063ffffffff16565b9050601454601654826137c39190614a09565b6137cd9190614a77565b601d5f8282546137dd91906149d6565b92505081905550601454601754826137f59190614a09565b6137ff9190614a77565b601e5f82825461380f91906149d6565b92505081905550601454601554826138279190614a09565b6138319190614a77565b601c5f82825461384191906149d6565b925050819055505b5b5f81111561385e5761385d87308361396f565b5b808561386a919061576a565b94505b61387887878761396f565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81836139529190614a09565b905092915050565b5f81836139679190614a77565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d49061541e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a42906154ac565b60405180910390fd5b613a5683838361410b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad09061580d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613b6791906149d6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613bcb91906145b7565b60405180910390a3613bde848484614110565b50505050565b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f613c8c306115f2565b90505f601e54601c54601d54613ca291906149d6565b613cac91906149d6565b90505f80831480613cbc57505f82145b15613cc957505050613f4f565b6014600954613cd89190614a09565b831115613cf1576014600954613cee9190614a09565b92505b5f600283601d5486613d039190614a09565b613d0d9190614a77565b613d179190614a77565b90505f613d2d828661411590919063ffffffff16565b90505f479050613d3c8261412a565b5f613d50824761411590919063ffffffff16565b90505f613d7a87613d6c601c548561394590919063ffffffff16565b61395a90919063ffffffff16565b90505f613da488613d96601e548661394590919063ffffffff16565b61395a90919063ffffffff16565b90505f818385613db4919061576a565b613dbe919061576a565b90505f601d819055505f601c819055505f601e8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e1a90615858565b5f6040518083038185875af1925050503d805f8114613e54576040519150601f19603f3d011682016040523d82523d5f602084013e613e59565b606091505b5050809850505f87118015613e6d57505f81115b15613eba57613e7c8782611d52565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613eb19392919061586c565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613eff90615858565b5f6040518083038185875af1925050503d805f8114613f39576040519150601f19603f3d011682016040523d82523d5f602084013e613f3e565b606091505b505080985050505050505050505050505b565b5f42600e819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e56040518263ffffffff1660e01b8152600401613fb3919061462f565b602060405180830381865afa158015613fce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ff29190614e51565b90505f61401e612710614010600b548561394590919063ffffffff16565b61395a90919063ffffffff16565b90505f811115614056576140557f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e561dead8361396f565b5b5f7f000000000000000000000000edc1eb59b6d432f83dda5760521ede9477d307e590508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156140bf575f80fd5b505af11580156140d1573d5f803e3d5ffd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b5f8183614122919061576a565b905092915050565b5f600267ffffffffffffffff811115614146576141456158a1565b5b6040519080825280602002602001820160405280156141745781602001602082028036833780820191505090505b50905030815f8151811061418b5761418a6158ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561422e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614252919061590f565b81600181518110614266576142656158ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142cb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612975565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161432c9594939291906159f1565b5f604051808303815f87803b158015614343575f80fd5b505af1158015614355573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614394578082015181840152602081019050614379565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6143b98261435d565b6143c38185614367565b93506143d3818560208601614377565b6143dc8161439f565b840191505092915050565b5f6020820190508181035f8301526143ff81846143af565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6144348261440b565b9050919050565b6144448161442a565b811461444e575f80fd5b50565b5f8135905061445f8161443b565b92915050565b5f819050919050565b61447781614465565b8114614481575f80fd5b50565b5f813590506144928161446e565b92915050565b5f80604083850312156144ae576144ad614407565b5b5f6144bb85828601614451565b92505060206144cc85828601614484565b9150509250929050565b5f8115159050919050565b6144ea816144d6565b82525050565b5f6020820190506145035f8301846144e1565b92915050565b5f6020828403121561451e5761451d614407565b5b5f61452b84828501614451565b91505092915050565b5f819050919050565b5f61455761455261454d8461440b565b614534565b61440b565b9050919050565b5f6145688261453d565b9050919050565b5f6145798261455e565b9050919050565b6145898161456f565b82525050565b5f6020820190506145a25f830184614580565b92915050565b6145b181614465565b82525050565b5f6020820190506145ca5f8301846145a8565b92915050565b5f805f606084860312156145e7576145e6614407565b5b5f6145f486828701614451565b935050602061460586828701614451565b925050604061461686828701614484565b9150509250925092565b6146298161442a565b82525050565b5f6020820190506146425f830184614620565b92915050565b5f60ff82169050919050565b61465d81614648565b82525050565b5f6020820190506146765f830184614654565b92915050565b5f6020828403121561469157614690614407565b5b5f61469e84828501614484565b91505092915050565b6146b0816144d6565b81146146ba575f80fd5b50565b5f813590506146cb816146a7565b92915050565b5f805f606084860312156146e8576146e7614407565b5b5f6146f586828701614484565b935050602061470686828701614484565b9250506040614717868287016146bd565b9150509250925092565b5f805f6060848603121561473857614737614407565b5b5f61474586828701614484565b935050602061475686828701614484565b925050604061476786828701614484565b9150509250925092565b5f806040838503121561478757614786614407565b5b5f61479485828601614451565b92505060206147a5858286016146bd565b9150509250929050565b5f80604083850312156147c5576147c4614407565b5b5f6147d285828601614484565b92505060206147e385828601614484565b9150509250929050565b5f806040838503121561480357614802614407565b5b5f61481085828601614451565b925050602061482185828601614451565b9150509250929050565b5f602082840312156148405761483f614407565b5b5f61484d848285016146bd565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061489a57607f821691505b6020821081036148ad576148ac614856565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6148e7602083614367565b91506148f2826148b3565b602082019050919050565b5f6020820190508181035f830152614914816148db565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614975602883614367565b91506149808261491b565b604082019050919050565b5f6020820190508181035f8301526149a281614969565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6149e082614465565b91506149eb83614465565b9250828201905080821115614a0357614a026149a9565b5b92915050565b5f614a1382614465565b9150614a1e83614465565b9250828202614a2c81614465565b91508282048414831517614a4357614a426149a9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614a8182614465565b9150614a8c83614465565b925082614a9c57614a9b614a4a565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614b01603583614367565b9150614b0c82614aa7565b604082019050919050565b5f6020820190508181035f830152614b2e81614af5565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614b8f603483614367565b9150614b9a82614b35565b604082019050919050565b5f6020820190508181035f830152614bbc81614b83565b9050919050565b7f63616e6e6f74206275726e204c50206d6f7265206f6674656e207468616e20655f8201527f76657279203130206d696e757465730000000000000000000000000000000000602082015250565b5f614c1d602f83614367565b9150614c2882614bc3565b604082019050919050565b5f6020820190508181035f830152614c4a81614c11565b9050919050565b7f4c50206275726e2070657263656e74206d757374206265206265747765656e205f8201527f302520616e642031302500000000000000000000000000000000000000000000602082015250565b5f614cab602a83614367565b9150614cb682614c51565b604082019050919050565b5f6020820190508181035f830152614cd881614c9f565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f614d13601d83614367565b9150614d1e82614cdf565b602082019050919050565b5f6020820190508181035f830152614d4081614d07565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973685f82015250565b5f614d7b602083614367565b9150614d8682614d47565b602082019050919050565b5f6020820190508181035f830152614da881614d6f565b9050919050565b7f43616e6e6f74206e756b65206d6f7265207468616e20313025206f6620746f6b5f8201527f656e7320696e204c500000000000000000000000000000000000000000000000602082015250565b5f614e09602983614367565b9150614e1482614daf565b604082019050919050565b5f6020820190508181035f830152614e3681614dfd565b9050919050565b5f81519050614e4b8161446e565b92915050565b5f60208284031215614e6657614e65614407565b5b5f614e7384828501614e3d565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614ed6603983614367565b9150614ee182614e7c565b604082019050919050565b5f6020820190508181035f830152614f0381614eca565b9050919050565b5f819050919050565b5f614f2d614f28614f2384614f0a565b614534565b614465565b9050919050565b614f3d81614f13565b82525050565b5f60c082019050614f565f830189614620565b614f6360208301886145a8565b614f706040830187614f34565b614f7d6060830186614f34565b614f8a6080830185614620565b614f9760a08301846145a8565b979650505050505050565b5f805f60608486031215614fb957614fb8614407565b5b5f614fc686828701614e3d565b9350506020614fd786828701614e3d565b9250506040614fe886828701614e3d565b9150509250925092565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61504c602583614367565b915061505782614ff2565b604082019050919050565b5f6020820190508181035f83015261507981615040565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6150da602f83614367565b91506150e582615080565b604082019050919050565b5f6020820190508181035f830152615107816150ce565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f615142601d83614367565b915061514d8261510e565b602082019050919050565b5f6020820190508181035f83015261516f81615136565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6151d0602483614367565b91506151db82615176565b604082019050919050565b5f6020820190508181035f8301526151fd816151c4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61525e602683614367565b915061526982615204565b604082019050919050565b5f6020820190508181035f83015261528b81615252565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6152ec602483614367565b91506152f782615292565b604082019050919050565b5f6020820190508181035f830152615319816152e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61537a602283614367565b915061538582615320565b604082019050919050565b5f6020820190508181035f8301526153a78161536e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f615408602583614367565b9150615413826153ae565b604082019050919050565b5f6020820190508181035f830152615435816153fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615496602383614367565b91506154a18261543c565b604082019050919050565b5f6020820190508181035f8301526154c38161548a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6154fe601683614367565b9150615509826154ca565b602082019050919050565b5f6020820190508181035f83015261552b816154f2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6155b2604983614367565b91506155bd82615532565b606082019050919050565b5f6020820190508181035f8301526155df816155a6565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f615640603583614367565b915061564b826155e6565b604082019050919050565b5f6020820190508181035f83015261566d81615634565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6156a8601383614367565b91506156b382615674565b602082019050919050565b5f6020820190508181035f8301526156d58161569c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615736603683614367565b9150615741826156dc565b604082019050919050565b5f6020820190508181035f8301526157638161572a565b9050919050565b5f61577482614465565b915061577f83614465565b9250828203905081811115615797576157966149a9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6157f7602683614367565b91506158028261579d565b604082019050919050565b5f6020820190508181035f830152615824816157eb565b9050919050565b5f81905092915050565b50565b5f6158435f8361582b565b915061584e82615835565b5f82019050919050565b5f61586282615838565b9150819050919050565b5f60608201905061587f5f8301866145a8565b61588c60208301856145a8565b61589960408301846145a8565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506159098161443b565b92915050565b5f6020828403121561592457615923614407565b5b5f615931848285016158fb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61596c8161442a565b82525050565b5f61597d8383615963565b60208301905092915050565b5f602082019050919050565b5f61599f8261593a565b6159a98185615944565b93506159b483615954565b805f5b838110156159e45781516159cb8882615972565b97506159d683615989565b9250506001810190506159b7565b5085935050505092915050565b5f60a082019050615a045f8301886145a8565b615a116020830187614f34565b8181036040830152615a238186615995565b9050615a326060830185614620565b615a3f60808301846145a8565b969550505050505056fea26469706673582212204f5b204b6a59b79a49d60fdf4a2c1df9067b915ff86e59d39c3ed183306fa4e864736f6c63430008160033

Deployed Bytecode Sourcemap

30504:19542:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8700:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10867:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32135:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30580:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9820:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39384:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31149:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31919:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31879;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11518:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30683:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31060:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31021:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9662:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12419:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30638:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31247:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39549:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30887:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30960:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36209:485;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47665:552;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31734:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31327:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9991:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2612:103;;;;;;;;;;;;;:::i;:::-;;35822:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30775:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31627;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37632:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1961:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30812:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31769:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8919:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49018:1025;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38653:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31701:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45337:516;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31203:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31959:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31845:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13137:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31111:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10331:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36702:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39153:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32356:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31287:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38463:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38043:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36993:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31545:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30845:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35545:225;;;;;;;;;;;;;:::i;:::-;;31593:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37257:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10569:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37527:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36004:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31664:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2870:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31807:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30927:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8700:100;8754:13;8787:5;8780:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8700:100;:::o;10867:169::-;10950:4;10967:39;10976:12;:10;:12::i;:::-;10990:7;10999:6;10967:8;:39::i;:::-;11024:4;11017:11;;10867:169;;;;:::o;32135:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;30580:51::-;;;:::o;9820:108::-;9881:7;9908:12;;9901:19;;9820:108;:::o;39384:157::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39491:9:::1;;;;;;;;;;;39463:38;;39480:9;39463:38;;;;;;;;;;;;39524:9;39512;;:21;;;;;;;;;;;;;;;;;;39384:157:::0;:::o;31149:47::-;;;;:::o;31919:33::-;;;;:::o;31879:::-;;;;:::o;11518:492::-;11658:4;11675:36;11685:6;11693:9;11704:6;11675:9;:36::i;:::-;11724:24;11751:11;:19;11763:6;11751:19;;;;;;;;;;;;;;;:33;11771:12;:10;:12::i;:::-;11751:33;;;;;;;;;;;;;;;;11724:60;;11823:6;11803:16;:26;;11795:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11910:57;11919:6;11927:12;:10;:12::i;:::-;11960:6;11941:16;:25;11910:8;:57::i;:::-;11998:4;11991:11;;;11518:492;;;;;:::o;30683:53::-;30729:6;30683:53;:::o;31060:44::-;;;;:::o;31021:32::-;;;;;;;;;;;;;:::o;9662:93::-;9720:5;9745:2;9738:9;;9662:93;:::o;12419:215::-;12507:4;12524:80;12533:12;:10;:12::i;:::-;12547:7;12593:10;12556:11;:25;12568:12;:10;:12::i;:::-;12556:25;;;;;;;;;;;;;;;:34;12582:7;12556:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12524:8;:80::i;:::-;12622:4;12615:11;;12419:215;;;;:::o;30638:38::-;;;:::o;31247:33::-;;;;;;;;;;;;;:::o;39549:126::-;39615:4;39639:19;:28;39659:7;39639:28;;;;;;;;;;;;;;;;;;;;;;;;;39632:35;;39549:126;;;:::o;30887:33::-;;;;:::o;30960:41::-;;;;:::o;36209:485::-;36305:4;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36384:6:::1;36379:1;36363:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36362:28;;;;:::i;:::-;36349:9;:41;;36327:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;36539:4;36534:1;36518:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36517:26;;;;:::i;:::-;36504:9;:39;;36482:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;36655:9;36634:18;:30;;;;36682:4;36675:11;;36209:485:::0;;;:::o;47665:552::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47870:3:::1;47847:19;:26;;47825:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;47993:4;47981:8;:16;;:33;;;;;48013:1;48001:8;:13;;47981:33;47959:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;48113:19;48095:15;:37;;;;48166:8;48143:20;:31;;;;48201:8;48185:13;;:24;;;;;;;;;;;;;;;;;;47665:552:::0;;;:::o;31734:28::-;;;;:::o;31327:31::-;;;;;;;;;;;;;:::o;9991:127::-;10065:7;10092:9;:18;10102:7;10092:18;;;;;;;;;;;;;;;;10085:25;;9991:127;;;:::o;2612:103::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2677:30:::1;2704:1;2677:18;:30::i;:::-;2612:103::o:0;35822:121::-;35874:4;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35908:5:::1;35891:14;;:22;;;;;;;;;;;;;;;;;;35931:4;35924:11;;35822:121:::0;:::o;30775:30::-;;;;;;;;;;;;;:::o;31627:::-;;;;:::o;37632:403::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37800:13:::1;37782:15;:31;;;;37842:13;37824:15;:31;;;;37878:7;37866:9;:19;;;;37947:9;;37929:15;;37911;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;37896:12;:60;;;;37991:2;37975:12;;:18;;37967:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37632:403:::0;;;:::o;1961:87::-;2007:7;2034:6;;;;;;;;;;;2027:13;;1961:87;:::o;30812:24::-;;;;;;;;;;;;;:::o;31769:31::-;;;;:::o;8919:104::-;8975:13;9008:7;9001:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8919:104;:::o;49018:1025::-;49106:4;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49191:19:::1;;49168:20;;:42;;;;:::i;:::-;49150:15;:60;49128:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;49300:4;49289:7;:15;;49281:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;49384:15;49361:20;:38;;;;49454:28;49485:4;:14;;;49500:13;49485:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49454:60;;49564:20;49587:44;49625:5;49587:33;49612:7;49587:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;49564:67;;49744:1;49729:12;:16;49725:110;;;49762:61;49778:13;49801:6;49810:12;49762:15;:61::i;:::-;49725:110;49910:19;49947:13;49910:51;;49972:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49999:14;;;;;;;;;;50031:4;50024:11;;;;;49018:1025:::0;;;:::o;38653:296::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38789:13:::1;38781:21;;:4;:21;;::::0;38759:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38900:41;38929:4;38935:5;38900:28;:41::i;:::-;38653:296:::0;;:::o;31701:24::-;;;;:::o;45337:516::-;45484:62;45501:4;45516:15;45534:11;45484:8;:62::i;:::-;45589:15;:31;;;45628:9;45661:4;45681:11;45707:1;45750;30729:6;45819:15;45589:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45337:516;;:::o;31203:35::-;;;;:::o;31959:27::-;;;;:::o;31845:25::-;;;;:::o;13137:413::-;13230:4;13247:24;13274:11;:25;13286:12;:10;:12::i;:::-;13274:25;;;;;;;;;;;;;;;:34;13300:7;13274:34;;;;;;;;;;;;;;;;13247:61;;13347:15;13327:16;:35;;13319:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13440:67;13449:12;:10;:12::i;:::-;13463:7;13491:15;13472:16;:34;13440:8;:67::i;:::-;13538:4;13531:11;;;13137:413;;;;:::o;31111:29::-;;;;:::o;10331:175::-;10417:4;10434:42;10444:12;:10;:12::i;:::-;10458:9;10469:6;10434:9;:42::i;:::-;10494:4;10487:11;;10331:175;;;;:::o;36702:283::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36847:4:::1;36839;36834:1;36818:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36817:26;;;;:::i;:::-;36816:35;;;;:::i;:::-;36806:6;:45;;36784:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;36970:6;36960;:17;;;;:::i;:::-;36937:20;:40;;;;36702:283:::0;:::o;39153:223::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39305:15:::1;;;;;;;;;;;39262:59;;39285:18;39262:59;;;;;;;;;;;;39350:18;39332:15;;:36;;;;;;;;;;;;;;;;;;39153:223:::0;:::o;32356:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31287:33::-;;;;;;;;;;;;;:::o;38463:182::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38579:8:::1;38548:19;:28;38568:7;38548:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38619:7;38603:34;;;38628:8;38603:34;;;;;;:::i;:::-;;;;;;;;38463:182:::0;;:::o;38043:412::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38213:13:::1;38194:16;:32;;;;38256:13;38237:16;:32;;;;38293:7;38280:10;:20;;;;38365:10;;38346:16;;38327;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;38311:13;:64;;;;38411:2;38394:13;;:19;;38386:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38043:412:::0;;;:::o;36993:256::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37133:4:::1;37125;37120:1;37104:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37103:26;;;;:::i;:::-;37102:35;;;;:::i;:::-;37092:6;:45;;37070:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;37234:6;37224;:17;;;;:::i;:::-;37212:9;:29;;;;36993:256:::0;:::o;31545:39::-;;;;;;;;;;;;;:::o;30845:35::-;;;;:::o;35545:225::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35598:61:::1;35611:24;35629:4;35611:9;:24::i;:::-;35637:21;35598:12;:61::i;:::-;35686:4;35670:13;;:20;;;;;;;;;;;;;;;;;;35715:4;35701:11;;:18;;;;;;;;;;;;;;;;;;35747:15;35730:14;:32;;;;35545:225::o:0;31593:27::-;;;;:::o;37257:174::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37413:10:::1;37371:31;:39;37403:6;37371:39;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;37257:174:::0;;:::o;10569:151::-;10658:7;10685:11;:18;10697:5;10685:18;;;;;;;;;;;;;;;:27;10704:7;10685:27;;;;;;;;;;;;;;;;10678:34;;10569:151;;;;:::o;37527:97::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37609:7:::1;37595:11;;:21;;;;;;;;;;;;;;;;;;37527:97:::0;:::o;36004:135::-;36064:4;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36104:5:::1;36081:20;;:28;;;;;;;;;;;;;;;;;;36127:4;36120:11;;36004:135:::0;:::o;31664:30::-;;;;:::o;2870:201::-;2192:12;:10;:12::i;:::-;2181:23;;:7;:5;:7::i;:::-;:23;;;2173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2979:1:::1;2959:22;;:8;:22;;::::0;2951:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3035:28;3054:8;3035:18;:28::i;:::-;2870:201:::0;:::o;31807:31::-;;;;:::o;30927:24::-;;;;:::o;828:98::-;881:7;908:10;901:17;;828:98;:::o;16821:380::-;16974:1;16957:19;;:5;:19;;;16949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17055:1;17036:21;;:7;:21;;;17028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17139:6;17109:11;:18;17121:5;17109:18;;;;;;;;;;;;;;;:27;17128:7;17109:27;;;;;;;;;;;;;;;:36;;;;17177:7;17161:32;;17170:5;17161:32;;;17186:6;17161:32;;;;;;:::i;:::-;;;;;;;;16821:380;;;:::o;39733:4999::-;39881:1;39865:18;;:4;:18;;;39857:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39958:1;39944:16;;:2;:16;;;39936:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40027:1;40017:6;:11;40013:93;;40045:28;40061:4;40067:2;40071:1;40045:15;:28::i;:::-;40088:7;;40013:93;40122:14;;;;;;;;;;;40118:2487;;;40183:7;:5;:7::i;:::-;40175:15;;:4;:15;;;;:49;;;;;40217:7;:5;:7::i;:::-;40211:13;;:2;:13;;;;40175:49;:86;;;;;40259:1;40245:16;;:2;:16;;;;40175:86;:128;;;;;40296:6;40282:21;;:2;:21;;;;40175:128;:158;;;;;40325:8;;;;;;;;;;;40324:9;40175:158;40153:2441;;;40373:13;;;;;;;;;;;40368:223;;40445:19;:25;40465:4;40445:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40474:19;:23;40494:2;40474:23;;;;;;;;;;;;;;;;;;;;;;;;;40445:52;40411:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;40368:223;40747:20;;;;;;;;;;;40743:637;;;40828:7;:5;:7::i;:::-;40822:13;;:2;:13;;;;:72;;;;;40878:15;40864:30;;:2;:30;;;;40822:72;:129;;;;;40937:13;40923:28;;:2;:28;;;;40822:129;40792:569;;;41111:12;41040:28;:39;41069:9;41040:39;;;;;;;;;;;;;;;;:83;41002:254;;;;;;;;;;;;:::i;:::-;;;;;;;;;41325:12;41283:28;:39;41312:9;41283:39;;;;;;;;;;;;;;;:54;;;;40792:569;40743:637;41454:25;:31;41480:4;41454:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41511:31;:35;41543:2;41511:35;;;;;;;;;;;;;;;;;;;;;;;;;41510:36;41454:92;41428:1151;;;41633:20;;41623:6;:30;;41589:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;41841:9;;41824:13;41834:2;41824:9;:13::i;:::-;41815:6;:22;;;;:::i;:::-;:35;;41781:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41428:1151;;;42023:25;:29;42049:2;42023:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42078:31;:37;42110:4;42078:37;;;;;;;;;;;;;;;;;;;;;;;;;42077:38;42023:92;41997:582;;;42202:20;;42192:6;:30;;42158:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;41997:582;;;42359:31;:35;42391:2;42359:35;;;;;;;;;;;;;;;;;;;;;;;;;42354:225;;42479:9;;42462:13;42472:2;42462:9;:13::i;:::-;42453:6;:22;;;;:::i;:::-;:35;;42419:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42354:225;41997:582;41428:1151;40153:2441;40118:2487;42617:28;42648:24;42666:4;42648:9;:24::i;:::-;42617:55;;42685:12;42724:18;;42700:20;:42;;42685:57;;42773:7;:35;;;;;42797:11;;;;;;;;;;;42773:35;:61;;;;;42826:8;;;;;;;;;;;42825:9;42773:61;:110;;;;;42852:25;:31;42878:4;42852:31;;;;;;;;;;;;;;;;;;;;;;;;;42851:32;42773:110;:153;;;;;42901:19;:25;42921:4;42901:25;;;;;;;;;;;;;;;;;;;;;;;;;42900:26;42773:153;:194;;;;;42944:19;:23;42964:2;42944:23;;;;;;;;;;;;;;;;;;;;;;;;;42943:24;42773:194;42755:326;;;43005:4;42994:8;;:15;;;;;;;;;;;;;;;;;;43026:10;:8;:10::i;:::-;43064:5;43053:8;;:16;;;;;;;;;;;;;;;;;;42755:326;43112:8;;;;;;;;;;;43111:9;:51;;;;;43133:25;:29;43159:2;43133:29;;;;;;;;;;;;;;;;;;;;;;;;;43111:51;:77;;;;;43175:13;;;;;;;;;;;43111:77;:141;;;;;43237:15;;43220:14;;:32;;;;:::i;:::-;43201:15;:51;;43111:141;:180;;;;;43266:19;:25;43286:4;43266:25;;;;;;;;;;;;;;;;;;;;;;;;;43265:26;43111:180;43093:266;;;43318:29;:27;:29::i;:::-;;43093:266;43371:12;43387:8;;;;;;;;;;;43386:9;43371:24;;43497:19;:25;43517:4;43497:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43526:19;:23;43546:2;43526:23;;;;;;;;;;;;;;;;;;;;;;;;;43497:52;43493:100;;;43576:5;43566:15;;43493:100;43605:12;43710:7;43706:973;;;43762:25;:29;43788:2;43762:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43811:1;43795:13;;:17;43762:50;43758:772;;;43840:34;43870:3;43840:25;43851:13;;43840:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43833:41;;43943:13;;43923:16;;43916:4;:23;;;;:::i;:::-;43915:41;;;;:::i;:::-;43893:18;;:63;;;;;;;:::i;:::-;;;;;;;;44013:13;;43999:10;;43992:4;:17;;;;:::i;:::-;43991:35;;;;:::i;:::-;43975:12;;:51;;;;;;;:::i;:::-;;;;;;;;44095:13;;44075:16;;44068:4;:23;;;;:::i;:::-;44067:41;;;;:::i;:::-;44045:18;;:63;;;;;;;:::i;:::-;;;;;;;;43758:772;;;44174:25;:31;44200:4;44174:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;44224:1;44209:12;;:16;44174:51;44170:360;;;44253:33;44282:3;44253:24;44264:12;;44253:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44246:40;;44354:12;;44335:15;;44328:4;:22;;;;:::i;:::-;44327:39;;;;:::i;:::-;44305:18;;:61;;;;;;;:::i;:::-;;;;;;;;44422:12;;44409:9;;44402:4;:16;;;;:::i;:::-;44401:33;;;;:::i;:::-;44385:12;;:49;;;;;;;:::i;:::-;;;;;;;;44502:12;;44483:15;;44476:4;:22;;;;:::i;:::-;44475:39;;;;:::i;:::-;44453:18;;:61;;;;;;;:::i;:::-;;;;;;;;44170:360;43758:772;44557:1;44550:4;:8;44546:91;;;44579:42;44595:4;44609;44616;44579:15;:42::i;:::-;44546:91;44663:4;44653:14;;;;;:::i;:::-;;;43706:973;44691:33;44707:4;44713:2;44717:6;44691:15;:33::i;:::-;39846:4886;;;;39733:4999;;;;:::o;3231:191::-;3305:16;3324:6;;;;;;;;;;;3305:25;;3350:8;3341:6;;:17;;;;;;;;;;;;;;;;;;3405:8;3374:40;;3395:8;3374:40;;;;;;;;;;;;3294:128;3231:191;:::o;21941:98::-;21999:7;22030:1;22026;:5;;;;:::i;:::-;22019:12;;21941:98;;;;:::o;22340:::-;22398:7;22429:1;22425;:5;;;;:::i;:::-;22418:12;;22340:98;;;;:::o;14040:733::-;14198:1;14180:20;;:6;:20;;;14172:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14282:1;14261:23;;:9;:23;;;14253:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14337:47;14358:6;14366:9;14377:6;14337:20;:47::i;:::-;14397:21;14421:9;:17;14431:6;14421:17;;;;;;;;;;;;;;;;14397:41;;14474:6;14457:13;:23;;14449:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14595:6;14579:13;:22;14559:9;:17;14569:6;14559:17;;;;;;;;;;;;;;;:42;;;;14647:6;14623:9;:20;14633:9;14623:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14688:9;14671:35;;14680:6;14671:35;;;14699:6;14671:35;;;;;;:::i;:::-;;;;;;;;14719:46;14739:6;14747:9;14758:6;14719:19;:46::i;:::-;14161:612;14040:733;;;:::o;38957:188::-;39074:5;39040:25;:31;39066:4;39040:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39131:5;39097:40;;39125:4;39097:40;;;;;;;;;;;;38957:188;;:::o;45861:1796::-;45900:23;45926:24;45944:4;45926:9;:24::i;:::-;45900:50;;45961:25;46073:12;;46031:18;;45989;;:60;;;;:::i;:::-;:96;;;;:::i;:::-;45961:124;;46096:12;46144:1;46125:15;:20;:46;;;;46170:1;46149:17;:22;46125:46;46121:85;;;46188:7;;;;;46121:85;46261:2;46240:18;;:23;;;;:::i;:::-;46222:15;:41;46218:115;;;46319:2;46298:18;;:23;;;;:::i;:::-;46280:41;;46218:115;46394:23;46523:1;46482:17;46439:18;;46421:15;:36;;;;:::i;:::-;46420:79;;;;:::i;:::-;:104;;;;:::i;:::-;46394:130;;46535:26;46564:36;46584:15;46564;:19;;:36;;;;:::i;:::-;46535:65;;46613:25;46641:21;46613:49;;46675:36;46692:18;46675:16;:36::i;:::-;46724:18;46745:44;46771:17;46745:21;:25;;:44;;;;:::i;:::-;46724:65;;46802:23;46828:81;46881:17;46828:34;46843:18;;46828:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;46802:107;;46920:17;46940:51;46973:17;46940:28;46955:12;;46940:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;46920:71;;47004:23;47061:9;47043:15;47030:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;47004:66;;47104:1;47083:18;:22;;;;47137:1;47116:18;:22;;;;47164:1;47149:12;:16;;;;47200:9;;;;;;;;;;;47192:23;;47223:9;47192:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47178:59;;;;;47272:1;47254:15;:19;:42;;;;;47295:1;47277:15;:19;47254:42;47250:278;;;47313:46;47326:15;47343;47313:12;:46::i;:::-;47379:137;47412:18;47449:15;47483:18;;47379:137;;;;;;;;:::i;:::-;;;;;;;;47250:278;47562:15;;;;;;;;;;;47554:29;;47609:21;47554:95;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47540:109;;;;;45889:1768;;;;;;;;;;45861:1796;:::o;48225:785::-;48282:4;48316:15;48299:14;:32;;;;48386:28;48417:4;:14;;;48432:13;48417:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48386:60;;48496:20;48519:81;48584:5;48519:46;48544:20;;48519;:24;;:46;;;;:::i;:::-;:50;;:81;;;;:::i;:::-;48496:104;;48713:1;48698:12;:16;48694:110;;;48731:61;48747:13;48770:6;48779:12;48731:15;:61::i;:::-;48694:110;48879:19;48916:13;48879:51;;48941:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48968:12;;;;;;;;;;48998:4;48991:11;;;;;48225:785;:::o;17801:125::-;;;;:::o;18530:124::-;;;;:::o;21584:98::-;21642:7;21673:1;21669;:5;;;;:::i;:::-;21662:12;;21584:98;;;;:::o;44740:589::-;44866:21;44904:1;44890:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44866:40;;44935:4;44917;44922:1;44917:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44961:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44951:4;44956:1;44951:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44996:62;45013:4;45028:15;45046:11;44996:8;:62::i;:::-;45097:15;:66;;;45178:11;45204:1;45248:4;45275;45295:15;45097:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44795:534;44740:589;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:118::-;5823:24;5841:5;5823:24;:::i;:::-;5818:3;5811:37;5736:118;;:::o;5860:222::-;5953:4;5991:2;5980:9;5976:18;5968:26;;6004:71;6072:1;6061:9;6057:17;6048:6;6004:71;:::i;:::-;5860:222;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:329::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:613::-;7188:6;7196;7204;7253:2;7241:9;7232:7;7228:23;7224:32;7221:119;;;7259:79;;:::i;:::-;7221:119;7379:1;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7350:117;7506:2;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7477:118;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7114:613;;;;;:::o;7733:619::-;7810:6;7818;7826;7875:2;7863:9;7854:7;7850:23;7846:32;7843:119;;;7881:79;;:::i;:::-;7843:119;8001:1;8026:53;8071:7;8062:6;8051:9;8047:22;8026:53;:::i;:::-;8016:63;;7972:117;8128:2;8154:53;8199:7;8190:6;8179:9;8175:22;8154:53;:::i;:::-;8144:63;;8099:118;8256:2;8282:53;8327:7;8318:6;8307:9;8303:22;8282:53;:::i;:::-;8272:63;;8227:118;7733:619;;;;;:::o;8358:468::-;8423:6;8431;8480:2;8468:9;8459:7;8455:23;8451:32;8448:119;;;8486:79;;:::i;:::-;8448:119;8606:1;8631:53;8676:7;8667:6;8656:9;8652:22;8631:53;:::i;:::-;8621:63;;8577:117;8733:2;8759:50;8801:7;8792:6;8781:9;8777:22;8759:50;:::i;:::-;8749:60;;8704:115;8358:468;;;;;:::o;8832:474::-;8900:6;8908;8957:2;8945:9;8936:7;8932:23;8928:32;8925:119;;;8963:79;;:::i;:::-;8925:119;9083:1;9108:53;9153:7;9144:6;9133:9;9129:22;9108:53;:::i;:::-;9098:63;;9054:117;9210:2;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9181:118;8832:474;;;;;:::o;9312:::-;9380:6;9388;9437:2;9425:9;9416:7;9412:23;9408:32;9405:119;;;9443:79;;:::i;:::-;9405:119;9563:1;9588:53;9633:7;9624:6;9613:9;9609:22;9588:53;:::i;:::-;9578:63;;9534:117;9690:2;9716:53;9761:7;9752:6;9741:9;9737:22;9716:53;:::i;:::-;9706:63;;9661:118;9312:474;;;;;:::o;9792:323::-;9848:6;9897:2;9885:9;9876:7;9872:23;9868:32;9865:119;;;9903:79;;:::i;:::-;9865:119;10023:1;10048:50;10090:7;10081:6;10070:9;10066:22;10048:50;:::i;:::-;10038:60;;9994:114;9792:323;;;;:::o;10121:180::-;10169:77;10166:1;10159:88;10266:4;10263:1;10256:15;10290:4;10287:1;10280:15;10307:320;10351:6;10388:1;10382:4;10378:12;10368:22;;10435:1;10429:4;10425:12;10456:18;10446:81;;10512:4;10504:6;10500:17;10490:27;;10446:81;10574:2;10566:6;10563:14;10543:18;10540:38;10537:84;;10593:18;;:::i;:::-;10537:84;10358:269;10307:320;;;:::o;10633:182::-;10773:34;10769:1;10761:6;10757:14;10750:58;10633:182;:::o;10821:366::-;10963:3;10984:67;11048:2;11043:3;10984:67;:::i;:::-;10977:74;;11060:93;11149:3;11060:93;:::i;:::-;11178:2;11173:3;11169:12;11162:19;;10821:366;;;:::o;11193:419::-;11359:4;11397:2;11386:9;11382:18;11374:26;;11446:9;11440:4;11436:20;11432:1;11421:9;11417:17;11410:47;11474:131;11600:4;11474:131;:::i;:::-;11466:139;;11193:419;;;:::o;11618:227::-;11758:34;11754:1;11746:6;11742:14;11735:58;11827:10;11822:2;11814:6;11810:15;11803:35;11618:227;:::o;11851:366::-;11993:3;12014:67;12078:2;12073:3;12014:67;:::i;:::-;12007:74;;12090:93;12179:3;12090:93;:::i;:::-;12208:2;12203:3;12199:12;12192:19;;11851:366;;;:::o;12223:419::-;12389:4;12427:2;12416:9;12412:18;12404:26;;12476:9;12470:4;12466:20;12462:1;12451:9;12447:17;12440:47;12504:131;12630:4;12504:131;:::i;:::-;12496:139;;12223:419;;;:::o;12648:180::-;12696:77;12693:1;12686:88;12793:4;12790:1;12783:15;12817:4;12814:1;12807:15;12834:191;12874:3;12893:20;12911:1;12893:20;:::i;:::-;12888:25;;12927:20;12945:1;12927:20;:::i;:::-;12922:25;;12970:1;12967;12963:9;12956:16;;12991:3;12988:1;12985:10;12982:36;;;12998:18;;:::i;:::-;12982:36;12834:191;;;;:::o;13031:410::-;13071:7;13094:20;13112:1;13094:20;:::i;:::-;13089:25;;13128:20;13146:1;13128:20;:::i;:::-;13123:25;;13183:1;13180;13176:9;13205:30;13223:11;13205:30;:::i;:::-;13194:41;;13384:1;13375:7;13371:15;13368:1;13365:22;13345:1;13338:9;13318:83;13295:139;;13414:18;;:::i;:::-;13295:139;13079:362;13031:410;;;;:::o;13447:180::-;13495:77;13492:1;13485:88;13592:4;13589:1;13582:15;13616:4;13613:1;13606:15;13633:185;13673:1;13690:20;13708:1;13690:20;:::i;:::-;13685:25;;13724:20;13742:1;13724:20;:::i;:::-;13719:25;;13763:1;13753:35;;13768:18;;:::i;:::-;13753:35;13810:1;13807;13803:9;13798:14;;13633:185;;;;:::o;13824:240::-;13964:34;13960:1;13952:6;13948:14;13941:58;14033:23;14028:2;14020:6;14016:15;14009:48;13824:240;:::o;14070:366::-;14212:3;14233:67;14297:2;14292:3;14233:67;:::i;:::-;14226:74;;14309:93;14398:3;14309:93;:::i;:::-;14427:2;14422:3;14418:12;14411:19;;14070:366;;;:::o;14442:419::-;14608:4;14646:2;14635:9;14631:18;14623:26;;14695:9;14689:4;14685:20;14681:1;14670:9;14666:17;14659:47;14723:131;14849:4;14723:131;:::i;:::-;14715:139;;14442:419;;;:::o;14867:239::-;15007:34;15003:1;14995:6;14991:14;14984:58;15076:22;15071:2;15063:6;15059:15;15052:47;14867:239;:::o;15112:366::-;15254:3;15275:67;15339:2;15334:3;15275:67;:::i;:::-;15268:74;;15351:93;15440:3;15351:93;:::i;:::-;15469:2;15464:3;15460:12;15453:19;;15112:366;;;:::o;15484:419::-;15650:4;15688:2;15677:9;15673:18;15665:26;;15737:9;15731:4;15727:20;15723:1;15712:9;15708:17;15701:47;15765:131;15891:4;15765:131;:::i;:::-;15757:139;;15484:419;;;:::o;15909:234::-;16049:34;16045:1;16037:6;16033:14;16026:58;16118:17;16113:2;16105:6;16101:15;16094:42;15909:234;:::o;16149:366::-;16291:3;16312:67;16376:2;16371:3;16312:67;:::i;:::-;16305:74;;16388:93;16477:3;16388:93;:::i;:::-;16506:2;16501:3;16497:12;16490:19;;16149:366;;;:::o;16521:419::-;16687:4;16725:2;16714:9;16710:18;16702:26;;16774:9;16768:4;16764:20;16760:1;16749:9;16745:17;16738:47;16802:131;16928:4;16802:131;:::i;:::-;16794:139;;16521:419;;;:::o;16946:229::-;17086:34;17082:1;17074:6;17070:14;17063:58;17155:12;17150:2;17142:6;17138:15;17131:37;16946:229;:::o;17181:366::-;17323:3;17344:67;17408:2;17403:3;17344:67;:::i;:::-;17337:74;;17420:93;17509:3;17420:93;:::i;:::-;17538:2;17533:3;17529:12;17522:19;;17181:366;;;:::o;17553:419::-;17719:4;17757:2;17746:9;17742:18;17734:26;;17806:9;17800:4;17796:20;17792:1;17781:9;17777:17;17770:47;17834:131;17960:4;17834:131;:::i;:::-;17826:139;;17553:419;;;:::o;17978:179::-;18118:31;18114:1;18106:6;18102:14;18095:55;17978:179;:::o;18163:366::-;18305:3;18326:67;18390:2;18385:3;18326:67;:::i;:::-;18319:74;;18402:93;18491:3;18402:93;:::i;:::-;18520:2;18515:3;18511:12;18504:19;;18163:366;;;:::o;18535:419::-;18701:4;18739:2;18728:9;18724:18;18716:26;;18788:9;18782:4;18778:20;18774:1;18763:9;18759:17;18752:47;18816:131;18942:4;18816:131;:::i;:::-;18808:139;;18535:419;;;:::o;18960:182::-;19100:34;19096:1;19088:6;19084:14;19077:58;18960:182;:::o;19148:366::-;19290:3;19311:67;19375:2;19370:3;19311:67;:::i;:::-;19304:74;;19387:93;19476:3;19387:93;:::i;:::-;19505:2;19500:3;19496:12;19489:19;;19148:366;;;:::o;19520:419::-;19686:4;19724:2;19713:9;19709:18;19701:26;;19773:9;19767:4;19763:20;19759:1;19748:9;19744:17;19737:47;19801:131;19927:4;19801:131;:::i;:::-;19793:139;;19520:419;;;:::o;19945:228::-;20085:34;20081:1;20073:6;20069:14;20062:58;20154:11;20149:2;20141:6;20137:15;20130:36;19945:228;:::o;20179:366::-;20321:3;20342:67;20406:2;20401:3;20342:67;:::i;:::-;20335:74;;20418:93;20507:3;20418:93;:::i;:::-;20536:2;20531:3;20527:12;20520:19;;20179:366;;;:::o;20551:419::-;20717:4;20755:2;20744:9;20740:18;20732:26;;20804:9;20798:4;20794:20;20790:1;20779:9;20775:17;20768:47;20832:131;20958:4;20832:131;:::i;:::-;20824:139;;20551:419;;;:::o;20976:143::-;21033:5;21064:6;21058:13;21049:22;;21080:33;21107:5;21080:33;:::i;:::-;20976:143;;;;:::o;21125:351::-;21195:6;21244:2;21232:9;21223:7;21219:23;21215:32;21212:119;;;21250:79;;:::i;:::-;21212:119;21370:1;21395:64;21451:7;21442:6;21431:9;21427:22;21395:64;:::i;:::-;21385:74;;21341:128;21125:351;;;;:::o;21482:244::-;21622:34;21618:1;21610:6;21606:14;21599:58;21691:27;21686:2;21678:6;21674:15;21667:52;21482:244;:::o;21732:366::-;21874:3;21895:67;21959:2;21954:3;21895:67;:::i;:::-;21888:74;;21971:93;22060:3;21971:93;:::i;:::-;22089:2;22084:3;22080:12;22073:19;;21732:366;;;:::o;22104:419::-;22270:4;22308:2;22297:9;22293:18;22285:26;;22357:9;22351:4;22347:20;22343:1;22332:9;22328:17;22321:47;22385:131;22511:4;22385:131;:::i;:::-;22377:139;;22104:419;;;:::o;22529:85::-;22574:7;22603:5;22592:16;;22529:85;;;:::o;22620:158::-;22678:9;22711:61;22729:42;22738:32;22764:5;22738:32;:::i;:::-;22729:42;:::i;:::-;22711:61;:::i;:::-;22698:74;;22620:158;;;:::o;22784:147::-;22879:45;22918:5;22879:45;:::i;:::-;22874:3;22867:58;22784:147;;:::o;22937:807::-;23186:4;23224:3;23213:9;23209:19;23201:27;;23238:71;23306:1;23295:9;23291:17;23282:6;23238:71;:::i;:::-;23319:72;23387:2;23376:9;23372:18;23363:6;23319:72;:::i;:::-;23401:80;23477:2;23466:9;23462:18;23453:6;23401:80;:::i;:::-;23491;23567:2;23556:9;23552:18;23543:6;23491:80;:::i;:::-;23581:73;23649:3;23638:9;23634:19;23625:6;23581:73;:::i;:::-;23664;23732:3;23721:9;23717:19;23708:6;23664:73;:::i;:::-;22937:807;;;;;;;;;:::o;23750:663::-;23838:6;23846;23854;23903:2;23891:9;23882:7;23878:23;23874:32;23871:119;;;23909:79;;:::i;:::-;23871:119;24029:1;24054:64;24110:7;24101:6;24090:9;24086:22;24054:64;:::i;:::-;24044:74;;24000:128;24167:2;24193:64;24249:7;24240:6;24229:9;24225:22;24193:64;:::i;:::-;24183:74;;24138:129;24306:2;24332:64;24388:7;24379:6;24368:9;24364:22;24332:64;:::i;:::-;24322:74;;24277:129;23750:663;;;;;:::o;24419:224::-;24559:34;24555:1;24547:6;24543:14;24536:58;24628:7;24623:2;24615:6;24611:15;24604:32;24419:224;:::o;24649:366::-;24791:3;24812:67;24876:2;24871:3;24812:67;:::i;:::-;24805:74;;24888:93;24977:3;24888:93;:::i;:::-;25006:2;25001:3;24997:12;24990:19;;24649:366;;;:::o;25021:419::-;25187:4;25225:2;25214:9;25210:18;25202:26;;25274:9;25268:4;25264:20;25260:1;25249:9;25245:17;25238:47;25302:131;25428:4;25302:131;:::i;:::-;25294:139;;25021:419;;;:::o;25446:234::-;25586:34;25582:1;25574:6;25570:14;25563:58;25655:17;25650:2;25642:6;25638:15;25631:42;25446:234;:::o;25686:366::-;25828:3;25849:67;25913:2;25908:3;25849:67;:::i;:::-;25842:74;;25925:93;26014:3;25925:93;:::i;:::-;26043:2;26038:3;26034:12;26027:19;;25686:366;;;:::o;26058:419::-;26224:4;26262:2;26251:9;26247:18;26239:26;;26311:9;26305:4;26301:20;26297:1;26286:9;26282:17;26275:47;26339:131;26465:4;26339:131;:::i;:::-;26331:139;;26058:419;;;:::o;26483:179::-;26623:31;26619:1;26611:6;26607:14;26600:55;26483:179;:::o;26668:366::-;26810:3;26831:67;26895:2;26890:3;26831:67;:::i;:::-;26824:74;;26907:93;26996:3;26907:93;:::i;:::-;27025:2;27020:3;27016:12;27009:19;;26668:366;;;:::o;27040:419::-;27206:4;27244:2;27233:9;27229:18;27221:26;;27293:9;27287:4;27283:20;27279:1;27268:9;27264:17;27257:47;27321:131;27447:4;27321:131;:::i;:::-;27313:139;;27040:419;;;:::o;27465:223::-;27605:34;27601:1;27593:6;27589:14;27582:58;27674:6;27669:2;27661:6;27657:15;27650:31;27465:223;:::o;27694:366::-;27836:3;27857:67;27921:2;27916:3;27857:67;:::i;:::-;27850:74;;27933:93;28022:3;27933:93;:::i;:::-;28051:2;28046:3;28042:12;28035:19;;27694:366;;;:::o;28066:419::-;28232:4;28270:2;28259:9;28255:18;28247:26;;28319:9;28313:4;28309:20;28305:1;28294:9;28290:17;28283:47;28347:131;28473:4;28347:131;:::i;:::-;28339:139;;28066:419;;;:::o;28491:225::-;28631:34;28627:1;28619:6;28615:14;28608:58;28700:8;28695:2;28687:6;28683:15;28676:33;28491:225;:::o;28722:366::-;28864:3;28885:67;28949:2;28944:3;28885:67;:::i;:::-;28878:74;;28961:93;29050:3;28961:93;:::i;:::-;29079:2;29074:3;29070:12;29063:19;;28722:366;;;:::o;29094:419::-;29260:4;29298:2;29287:9;29283:18;29275:26;;29347:9;29341:4;29337:20;29333:1;29322:9;29318:17;29311:47;29375:131;29501:4;29375:131;:::i;:::-;29367:139;;29094:419;;;:::o;29519:223::-;29659:34;29655:1;29647:6;29643:14;29636:58;29728:6;29723:2;29715:6;29711:15;29704:31;29519:223;:::o;29748:366::-;29890:3;29911:67;29975:2;29970:3;29911:67;:::i;:::-;29904:74;;29987:93;30076:3;29987:93;:::i;:::-;30105:2;30100:3;30096:12;30089:19;;29748:366;;;:::o;30120:419::-;30286:4;30324:2;30313:9;30309:18;30301:26;;30373:9;30367:4;30363:20;30359:1;30348:9;30344:17;30337:47;30401:131;30527:4;30401:131;:::i;:::-;30393:139;;30120:419;;;:::o;30545:221::-;30685:34;30681:1;30673:6;30669:14;30662:58;30754:4;30749:2;30741:6;30737:15;30730:29;30545:221;:::o;30772:366::-;30914:3;30935:67;30999:2;30994:3;30935:67;:::i;:::-;30928:74;;31011:93;31100:3;31011:93;:::i;:::-;31129:2;31124:3;31120:12;31113:19;;30772:366;;;:::o;31144:419::-;31310:4;31348:2;31337:9;31333:18;31325:26;;31397:9;31391:4;31387:20;31383:1;31372:9;31368:17;31361:47;31425:131;31551:4;31425:131;:::i;:::-;31417:139;;31144:419;;;:::o;31569:224::-;31709:34;31705:1;31697:6;31693:14;31686:58;31778:7;31773:2;31765:6;31761:15;31754:32;31569:224;:::o;31799:366::-;31941:3;31962:67;32026:2;32021:3;31962:67;:::i;:::-;31955:74;;32038:93;32127:3;32038:93;:::i;:::-;32156:2;32151:3;32147:12;32140:19;;31799:366;;;:::o;32171:419::-;32337:4;32375:2;32364:9;32360:18;32352:26;;32424:9;32418:4;32414:20;32410:1;32399:9;32395:17;32388:47;32452:131;32578:4;32452:131;:::i;:::-;32444:139;;32171:419;;;:::o;32596:222::-;32736:34;32732:1;32724:6;32720:14;32713:58;32805:5;32800:2;32792:6;32788:15;32781:30;32596:222;:::o;32824:366::-;32966:3;32987:67;33051:2;33046:3;32987:67;:::i;:::-;32980:74;;33063:93;33152:3;33063:93;:::i;:::-;33181:2;33176:3;33172:12;33165:19;;32824:366;;;:::o;33196:419::-;33362:4;33400:2;33389:9;33385:18;33377:26;;33449:9;33443:4;33439:20;33435:1;33424:9;33420:17;33413:47;33477:131;33603:4;33477:131;:::i;:::-;33469:139;;33196:419;;;:::o;33621:172::-;33761:24;33757:1;33749:6;33745:14;33738:48;33621:172;:::o;33799:366::-;33941:3;33962:67;34026:2;34021:3;33962:67;:::i;:::-;33955:74;;34038:93;34127:3;34038:93;:::i;:::-;34156:2;34151:3;34147:12;34140:19;;33799:366;;;:::o;34171:419::-;34337:4;34375:2;34364:9;34360:18;34352:26;;34424:9;34418:4;34414:20;34410:1;34399:9;34395:17;34388:47;34452:131;34578:4;34452:131;:::i;:::-;34444:139;;34171:419;;;:::o;34596:297::-;34736:34;34732:1;34724:6;34720:14;34713:58;34805:34;34800:2;34792:6;34788:15;34781:59;34874:11;34869:2;34861:6;34857:15;34850:36;34596:297;:::o;34899:366::-;35041:3;35062:67;35126:2;35121:3;35062:67;:::i;:::-;35055:74;;35138:93;35227:3;35138:93;:::i;:::-;35256:2;35251:3;35247:12;35240:19;;34899:366;;;:::o;35271:419::-;35437:4;35475:2;35464:9;35460:18;35452:26;;35524:9;35518:4;35514:20;35510:1;35499:9;35495:17;35488:47;35552:131;35678:4;35552:131;:::i;:::-;35544:139;;35271:419;;;:::o;35696:240::-;35836:34;35832:1;35824:6;35820:14;35813:58;35905:23;35900:2;35892:6;35888:15;35881:48;35696:240;:::o;35942:366::-;36084:3;36105:67;36169:2;36164:3;36105:67;:::i;:::-;36098:74;;36181:93;36270:3;36181:93;:::i;:::-;36299:2;36294:3;36290:12;36283:19;;35942:366;;;:::o;36314:419::-;36480:4;36518:2;36507:9;36503:18;36495:26;;36567:9;36561:4;36557:20;36553:1;36542:9;36538:17;36531:47;36595:131;36721:4;36595:131;:::i;:::-;36587:139;;36314:419;;;:::o;36739:169::-;36879:21;36875:1;36867:6;36863:14;36856:45;36739:169;:::o;36914:366::-;37056:3;37077:67;37141:2;37136:3;37077:67;:::i;:::-;37070:74;;37153:93;37242:3;37153:93;:::i;:::-;37271:2;37266:3;37262:12;37255:19;;36914:366;;;:::o;37286:419::-;37452:4;37490:2;37479:9;37475:18;37467:26;;37539:9;37533:4;37529:20;37525:1;37514:9;37510:17;37503:47;37567:131;37693:4;37567:131;:::i;:::-;37559:139;;37286:419;;;:::o;37711:241::-;37851:34;37847:1;37839:6;37835:14;37828:58;37920:24;37915:2;37907:6;37903:15;37896:49;37711:241;:::o;37958:366::-;38100:3;38121:67;38185:2;38180:3;38121:67;:::i;:::-;38114:74;;38197:93;38286:3;38197:93;:::i;:::-;38315:2;38310:3;38306:12;38299:19;;37958:366;;;:::o;38330:419::-;38496:4;38534:2;38523:9;38519:18;38511:26;;38583:9;38577:4;38573:20;38569:1;38558:9;38554:17;38547:47;38611:131;38737:4;38611:131;:::i;:::-;38603:139;;38330:419;;;:::o;38755:194::-;38795:4;38815:20;38833:1;38815:20;:::i;:::-;38810:25;;38849:20;38867:1;38849:20;:::i;:::-;38844:25;;38893:1;38890;38886:9;38878:17;;38917:1;38911:4;38908:11;38905:37;;;38922:18;;:::i;:::-;38905:37;38755:194;;;;:::o;38955:225::-;39095:34;39091:1;39083:6;39079:14;39072:58;39164:8;39159:2;39151:6;39147:15;39140:33;38955:225;:::o;39186:366::-;39328:3;39349:67;39413:2;39408:3;39349:67;:::i;:::-;39342:74;;39425:93;39514:3;39425:93;:::i;:::-;39543:2;39538:3;39534:12;39527:19;;39186:366;;;:::o;39558:419::-;39724:4;39762:2;39751:9;39747:18;39739:26;;39811:9;39805:4;39801:20;39797:1;39786:9;39782:17;39775:47;39839:131;39965:4;39839:131;:::i;:::-;39831:139;;39558:419;;;:::o;39983:147::-;40084:11;40121:3;40106:18;;39983:147;;;;:::o;40136:114::-;;:::o;40256:398::-;40415:3;40436:83;40517:1;40512:3;40436:83;:::i;:::-;40429:90;;40528:93;40617:3;40528:93;:::i;:::-;40646:1;40641:3;40637:11;40630:18;;40256:398;;;:::o;40660:379::-;40844:3;40866:147;41009:3;40866:147;:::i;:::-;40859:154;;41030:3;41023:10;;40660:379;;;:::o;41045:442::-;41194:4;41232:2;41221:9;41217:18;41209:26;;41245:71;41313:1;41302:9;41298:17;41289:6;41245:71;:::i;:::-;41326:72;41394:2;41383:9;41379:18;41370:6;41326:72;:::i;:::-;41408;41476:2;41465:9;41461:18;41452:6;41408:72;:::i;:::-;41045:442;;;;;;:::o;41493:180::-;41541:77;41538:1;41531:88;41638:4;41635:1;41628:15;41662:4;41659:1;41652:15;41679:180;41727:77;41724:1;41717:88;41824:4;41821:1;41814:15;41848:4;41845:1;41838:15;41865:143;41922:5;41953:6;41947:13;41938:22;;41969:33;41996:5;41969:33;:::i;:::-;41865:143;;;;:::o;42014:351::-;42084:6;42133:2;42121:9;42112:7;42108:23;42104:32;42101:119;;;42139:79;;:::i;:::-;42101:119;42259:1;42284:64;42340:7;42331:6;42320:9;42316:22;42284:64;:::i;:::-;42274:74;;42230:128;42014:351;;;;:::o;42371:114::-;42438:6;42472:5;42466:12;42456:22;;42371:114;;;:::o;42491:184::-;42590:11;42624:6;42619:3;42612:19;42664:4;42659:3;42655:14;42640:29;;42491:184;;;;:::o;42681:132::-;42748:4;42771:3;42763:11;;42801:4;42796:3;42792:14;42784:22;;42681:132;;;:::o;42819:108::-;42896:24;42914:5;42896:24;:::i;:::-;42891:3;42884:37;42819:108;;:::o;42933:179::-;43002:10;43023:46;43065:3;43057:6;43023:46;:::i;:::-;43101:4;43096:3;43092:14;43078:28;;42933:179;;;;:::o;43118:113::-;43188:4;43220;43215:3;43211:14;43203:22;;43118:113;;;:::o;43267:732::-;43386:3;43415:54;43463:5;43415:54;:::i;:::-;43485:86;43564:6;43559:3;43485:86;:::i;:::-;43478:93;;43595:56;43645:5;43595:56;:::i;:::-;43674:7;43705:1;43690:284;43715:6;43712:1;43709:13;43690:284;;;43791:6;43785:13;43818:63;43877:3;43862:13;43818:63;:::i;:::-;43811:70;;43904:60;43957:6;43904:60;:::i;:::-;43894:70;;43750:224;43737:1;43734;43730:9;43725:14;;43690:284;;;43694:14;43990:3;43983:10;;43391:608;;;43267:732;;;;:::o;44005:831::-;44268:4;44306:3;44295:9;44291:19;44283:27;;44320:71;44388:1;44377:9;44373:17;44364:6;44320:71;:::i;:::-;44401:80;44477:2;44466:9;44462:18;44453:6;44401:80;:::i;:::-;44528:9;44522:4;44518:20;44513:2;44502:9;44498:18;44491:48;44556:108;44659:4;44650:6;44556:108;:::i;:::-;44548:116;;44674:72;44742:2;44731:9;44727:18;44718:6;44674:72;:::i;:::-;44756:73;44824:3;44813:9;44809:19;44800:6;44756:73;:::i;:::-;44005:831;;;;;;;;:::o

Swarm Source

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