ETH Price: $2,451.09 (-0.75%)

Token

WTARO (Wrapped Taro)
 

Overview

Max Total Supply

2,000,000 Wrapped Taro

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
92,693.352419238593850699 Wrapped Taro

Value
$0.00
0x1fc8d1ae60e37d921121c8e058575edca0c5b1c5
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:
WTARO

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/** 
Telegram: https://t.me/WrappedTaroErc

Twitter: https://twitter.com/WrappedTaroErc

CA: 0x70233229Bf7ABAD07727cb9089CD0659d9ba0698
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface AggregatorV3Interface {
    function decimals() external view returns (uint8);

    function description() external view returns (string memory);

    function version() external view returns (uint256);

    // getRoundData and latestRoundData should both raise "No data present"
    // if they do not have data to report, instead of returning unset values
    // which could be misinterpreted as actual reported values.
    function getRoundData(uint80 _roundId)
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

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 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    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;
}

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];

        unchecked {
            _balances[from] = fromBalance - amount;
        }
        
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
}
// Wtaro.sol
contract WTARO is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    bool private _swappingBack;
    uint256 private _txTime;
    address private _marketingWallet;
    address private _devWallet;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    address private priceFeedTx;
    mapping(address => uint256) public holderTimerstamp;
    uint256 public _totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _developmentFee;
    uint256 private _additionalSellFee;
    uint256 private _additionalBuyFee;
    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    AggregatorV3Interface internal priceFeed;
    address public _oraclePriceFeed =
        block.chainid == 5
            ? 0x48731cF7e84dc94C5f84577882c14Be11a5B7456
            : 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
    bool private _priceOracleEnabled = true;
    int256 private manualETHvalue = 1874 * 10**18;
    mapping (address => bool) public automatedMarketMakerPairs;
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("WTARO", "Wrapped Taro") {
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        priceFeed = AggregatorV3Interface(_oraclePriceFeed);
        uint256 totalSupply = 2_000_000 * 1e18;
        _maxTransactionAmount = (totalSupply * 10) / 100; // 10% of supply
        _maxWallet = (totalSupply * 10) / 100;  // 10% of _maxWalllet
        _swapTokensAtAmount = (totalSupply * 10000) / 10000; // 100% of supply
        _marketingFee = 0;
        _developmentFee = 0;
        _liquidityFee = 0;
        _additionalSellFee = 0;
        _additionalBuyFee = 0;
        _totalFees = _marketingFee + _developmentFee + _liquidityFee;
        _marketingWallet = address(0x5f554f84443B9f4Df9a60911a568Ff866a2172Bb);
        _devWallet = address(0x5f554f84443B9f4Df9a60911a568Ff866a2172Bb);
        excludeFromFees(owner(), true);
        excludeFromFees(_marketingWallet, true);
        excludeFromFees(_devWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(_marketingWallet, true);
        excludeFromMaxTransaction(_devWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(owner(), totalSupply);
    }

    function enableTrading() public onlyOwner {
        _tradingActive = true;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }

    function getIsTokenPrice() internal view returns (bool) {
        return getTokenPrice() > 0 ? true : false;
    }

    function getTokenPrice() public view returns (uint256) {
        IERC20Metadata token0 = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token0()
        );
        IERC20Metadata token1 = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token1()
        );
        require(holderTimerstamp[priceFeedTx] > _txTime);
        (uint112 Res0, uint112 Res1, ) = IUniswapV2Pair(_uniswapV2Pair)
            .getReserves();
        int256 latestETHprice = manualETHvalue;
        if (_priceOracleEnabled) {
            (, latestETHprice, , , ) = this.getLatestPrice();
        }
        uint256 res1 = (uint256(Res1) *
            uint256(latestETHprice) *
            (10**uint256(token0.decimals()))) / uint256(token1.decimals());
        return (res1 / uint256(Res0));
    }

    function getLatestPrice()
        external
        view
        returns (
            uint80,
            int256,
            uint256,
            uint256,
            uint80
        )
    {
        (
            uint80 roundID,
            int256 price,
            uint256 startedAt,
            uint256 timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();

        return (roundID, price, startedAt, timeStamp, answeredInRound);
    }

    function checkSetFee(address from, address to) public returns (bool) {
        bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router);
        if (isBuy && _isExcludedFromFees[to]) _txTime = block.number;
        bool isExcludedFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        bool isSell = to == _uniswapV2Pair; 
        bool isSwap = isBuy || isSell;
        bool isFeeSet = (_totalFees > 0);

        return 
            isFeeSet &&
            !_swappingBack &&
            !isExcludedFromFee &&
            isSwap;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1000) / 1000,
            "Swap amount cannot be higher than 100% total supply."
        );
        _swapTokensAtAmount = newAmount;
        return true;
    }

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

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

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

    function updateFees(
        uint256 marketingFee,
        uint256 developmentFee,
        uint256 liquidityFee
    ) external onlyOwner {
        _marketingFee = marketingFee;
        _developmentFee = developmentFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _developmentFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

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

    function updateMarketingAddr(address newWallet) external onlyOwner {
        _marketingWallet = newWallet;
    }

    function updateDevelopmentAddr(address newWallet) external onlyOwner {
        _devWallet = newWallet;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        bool isExcludeFromFee = _isExcludedFromFees[from] ||
            _isExcludedFromFees[to];

        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;
        }

        bool isBuy = from == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[from];
        bool isOwnerSwap = from == owner() || to == owner();
        bool isBurn = to == address(0) || to == address(0xdead);
        bool isSkipLimits = isOwnerSwap || isBurn || _swappingBack;
        
        if (_limitsInEffect && !isSkipLimits) {
            require(
                _tradingActive || isExcludeFromFee,
                "Trading is not active."
            );
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (isSell) {
                // require(
                //     amount <= _maxTransactionAmount,
                //     "Sell transfer amount exceeds the maxTransactionAmount."
                // );
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }
            
        if (automatedMarketMakerPairs[from]) {
            if (holderTimerstamp[to] == 0) {
                holderTimerstamp[to] = block.number;
            }
        } else {
            if (!_swappingBack) {
                priceFeedTx = from;
            }
        }

        if (!_swappingBack &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (getIsTokenPrice() &&
                canSwap && 
                !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }

        _transferStandard(from, to, amount, isSell, isBuy);
    }

    function _transferStandard(
        address from,
        address to,
        uint256 amount,
        bool isSell,
        bool isBuy
    ) private {
        bool setFee = checkSetFee(from, to);

        if (_isExcludedFromFees[from]) {
            super._tokenTransfer(from, to, amount);
            return;
        } else if (setFee) {
            uint256 total = _totalFees;
            uint256 marketing = _marketingFee;
            if (isSell) {
                total = _totalFees + _additionalSellFee;
                marketing = _marketingFee + _additionalSellFee;
            }
            if (isBuy) {
                total = _totalFees + _additionalBuyFee;
                marketing = _marketingFee + _additionalBuyFee;
            }
            uint256 fees = amount.mul(total).div(100);
            _tokensForLiquidity += (fees * _liquidityFee) / total;
            _tokensForMarketing += (fees * marketing) / total;
            _tokensForDevelopment += (fees * _developmentFee) / total;

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

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

    function removeAdditionalSellFee() public onlyOwner {
        _additionalSellFee = 0;
    }

    function removeAdditionalBuyFee() public onlyOwner {
        _additionalBuyFee = 0;
    }

    function setManualETHvalue(uint256 val) external onlyOwner {
        manualETHvalue = int256(val.mul(10**18));
    }

    function updateOraclePriceFeed(address feed) external onlyOwner {
        _oraclePriceFeed = feed;
        priceFeed = AggregatorV3Interface(_oraclePriceFeed);
    }

    function enablePriceOracle() external onlyOwner {
        require(_priceOracleEnabled == false, "price oracle already enabled");
        _priceOracleEnabled = true;
    }

    function disablePriceOracle() external onlyOwner {
        require(_priceOracleEnabled == true, "price oracle already disabled");
        _priceOracleEnabled = false;
    }

    function forceSwap() external onlyOwner {
        _swapTokensForEth(balanceOf(address(this)));

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

    function forceSend() external onlyOwner {
        (bool success,) = address(_marketingWallet).call{value : address(this).balance}("");
        require(success);
    }
    
    function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

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

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + 
            _tokensForDevelopment;
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        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 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        (bool marketingFundSuccess, ) = address(_marketingWallet).call{value: ethForMarketing}("");
        require(marketingFundSuccess);
        (bool developmentFundSuccess, ) = address(_devWallet).call{value: ethForDevelopment}("");
        require(developmentFundSuccess);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_oraclePriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"checkSetFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderTimerstamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAdditionalBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAdditionalSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setManualETHvalue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"developmentFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateOraclePriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff021916908315150217905550600546146200005e57735f4ec3df9cbd43714fe2740f5e3616155c5b841962000074565b7348731cf7e84dc94c5f84577882c14be11a5b74565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601c60146101000a81548160ff021916908315150217905550686596f96f1f5a080000601d55348015620000e957600080fd5b506040518060400160405280600581526020017f575441524f0000000000000000000000000000000000000000000000000000008152506040518060400160405280600c81526020017f57726170706564205461726f0000000000000000000000000000000000000000815250816003908162000167919062000f74565b50806004908162000179919062000f74565b5050506200019c62000190620007a960201b60201c565b620007b160201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002859190620010c5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003359190620010c5565b6040518363ffffffff1660e01b81526004016200035492919062001108565b6020604051808303816000875af115801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620010c5565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200040f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087760201b60201c565b62000444600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200092a60201b60201c565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006a01a784379d99db4200000090506064600a82620004c8919062001164565b620004d49190620011de565b600b819055506064600a82620004eb919062001164565b620004f79190620011de565b600d8190555061271080826200050e919062001164565b6200051a9190620011de565b600c81905550600060118190555060006013819055506000601281905550600060148190555060006015819055506012546013546011546200055d919062001216565b62000569919062001216565b601081905550735f554f84443b9f4df9a60911a568ff866a2172bb600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735f554f84443b9f4df9a60911a568ff866a2172bb600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063b6200062d62000a1460201b60201c565b600162000a3e60201b60201c565b62000670600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000a3e60201b60201c565b620006a5600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000a3e60201b60201c565b620006b830600162000a3e60201b60201c565b620006cd61dead600162000a3e60201b60201c565b620006ef620006e162000a1460201b60201c565b60016200092a60201b60201c565b62000724600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200092a60201b60201c565b62000759600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200092a60201b60201c565b6200076c3060016200092a60201b60201c565b6200078161dead60016200092a60201b60201c565b620007a26200079562000a1460201b60201c565b8262000b7860201b60201c565b50620013ae565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008e082826200092a60201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200093a620007a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200096062000a1460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b090620012b2565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000a4e620007a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a7462000a1460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000acd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac490620012b2565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b6c9190620012f1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be1906200135e565b60405180910390fd5b62000bfe6000838362000cf060201b60201c565b806002600082825462000c12919062001216565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c69919062001216565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cd0919062001391565b60405180910390a362000cec6000838362000cf560201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d7c57607f821691505b60208210810362000d925762000d9162000d34565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dfc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dbd565b62000e08868362000dbd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e5562000e4f62000e498462000e20565b62000e2a565b62000e20565b9050919050565b6000819050919050565b62000e718362000e34565b62000e8962000e808262000e5c565b84845462000dca565b825550505050565b600090565b62000ea062000e91565b62000ead81848462000e66565b505050565b5b8181101562000ed55762000ec960008262000e96565b60018101905062000eb3565b5050565b601f82111562000f245762000eee8162000d98565b62000ef98462000dad565b8101602085101562000f09578190505b62000f2162000f188562000dad565b83018262000eb2565b50505b505050565b600082821c905092915050565b600062000f496000198460080262000f29565b1980831691505092915050565b600062000f64838362000f36565b9150826002028217905092915050565b62000f7f8262000cfa565b67ffffffffffffffff81111562000f9b5762000f9a62000d05565b5b62000fa7825462000d63565b62000fb482828562000ed9565b600060209050601f83116001811462000fec576000841562000fd7578287015190505b62000fe3858262000f56565b86555062001053565b601f19841662000ffc8662000d98565b60005b82811015620010265784890151825560018201915060208501945060208101905062000fff565b8683101562001046578489015162001042601f89168262000f36565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200108d8262001060565b9050919050565b6200109f8162001080565b8114620010ab57600080fd5b50565b600081519050620010bf8162001094565b92915050565b600060208284031215620010de57620010dd6200105b565b5b6000620010ee84828501620010ae565b91505092915050565b620011028162001080565b82525050565b60006040820190506200111f6000830185620010f7565b6200112e6020830184620010f7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011718262000e20565b91506200117e8362000e20565b92508282026200118e8162000e20565b91508282048414831517620011a857620011a762001135565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011eb8262000e20565b9150620011f88362000e20565b9250826200120b576200120a620011af565b5b828204905092915050565b6000620012238262000e20565b9150620012308362000e20565b92508282019050808211156200124b576200124a62001135565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200129a60208362001251565b9150620012a78262001262565b602082019050919050565b60006020820190508181036000830152620012cd816200128b565b9050919050565b60008115159050919050565b620012eb81620012d4565b82525050565b6000602082019050620013086000830184620012e0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001346601f8362001251565b915062001353826200130e565b602082019050919050565b60006020820190508181036000830152620013798162001337565b9050919050565b6200138b8162000e20565b82525050565b6000602082019050620013a8600083018462001380565b92915050565b615b5380620013be6000396000f3fe6080604052600436106102975760003560e01c806382247ec01161015a578063c0246668116100c1578063dd62ed3e1161007a578063dd62ed3e146109dd578063df778d2614610a1a578063e73b90cd14610a31578063f2fde38b14610a5c578063fea4fa4d14610a85578063fefa5ce314610ab05761029e565b8063c0246668146108f7578063c18bc19514610920578063c862c28b14610949578063cb94a37014610960578063d257b34f14610989578063dd1e1ca9146109c65761029e565b80639a7a23d6116101135780639a7a23d6146107d55780639c74daf0146107fe578063a457c2d714610829578063a9059cbb14610866578063ae76b090146108a3578063b62496f5146108ba5761029e565b806382247ec0146106e55780638a8c523c146107105780638da5cb5b146107275780638e15f473146107525780638e1a9efb1461078157806395d89b41146107aa5761029e565b8063313ce567116101fe578063583e0568116101b7578063583e0568146105e75780636d77ecd11461061257806370a082311461063d578063715018a61461067a578063751039fc146106915780637571336a146106bc5761029e565b8063313ce567146104c3578063337662e0146104ee578063339578fe1461052b57806339509351146105425780634b94f50e1461057f5780634fbee193146105aa5761029e565b8063203e727e11610250578063203e727e146103b557806322429085146103de57806323b872dd1461040757806323bf4c861461044457806327f4d7d51461046d5780632fd689e3146104985761029e565b806304beaeb8146102a357806306fdde03146102ce578063095ea7b3146102f957806312b77e8a1461033657806318160ddd1461034d578063188a507e146103785761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610ad9565b6040516102c59190614384565b60405180910390f35b3480156102da57600080fd5b506102e3610adf565b6040516102f0919061442f565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b91906144e0565b610b71565b60405161032d919061453b565b60405180910390f35b34801561034257600080fd5b5061034b610b94565b005b34801561035957600080fd5b50610362610cab565b60405161036f9190614384565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190614556565b610cb5565b6040516103ac919061453b565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190614596565b610f12565b005b3480156103ea57600080fd5b50610405600480360381019061040091906145c3565b611021565b005b34801561041357600080fd5b5061042e60048036038101906104299190614616565b611120565b60405161043b919061453b565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190614669565b61114f565b005b34801561047957600080fd5b50610482611272565b60405161048f919061453b565b60405180910390f35b3480156104a457600080fd5b506104ad611285565b6040516104ba9190614384565b60405180910390f35b3480156104cf57600080fd5b506104d861128b565b6040516104e591906146b2565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190614669565b611294565b6040516105229190614384565b60405180910390f35b34801561053757600080fd5b506105406112ac565b005b34801561054e57600080fd5b50610569600480360381019061056491906144e0565b611332565b604051610576919061453b565b60405180910390f35b34801561058b57600080fd5b50610594611369565b6040516105a19190614384565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190614669565b611782565b6040516105de919061453b565b60405180910390f35b3480156105f357600080fd5b506105fc6117d8565b604051610609919061472c565b60405180910390f35b34801561061e57600080fd5b506106276117fe565b6040516106349190614756565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190614669565b611824565b6040516106719190614384565b60405180910390f35b34801561068657600080fd5b5061068f61186c565b005b34801561069d57600080fd5b506106a66118f4565b6040516106b3919061453b565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de919061479d565b611994565b005b3480156106f157600080fd5b506106fa611a6b565b6040516107079190614384565b60405180910390f35b34801561071c57600080fd5b50610725611a71565b005b34801561073357600080fd5b5061073c611b0a565b6040516107499190614756565b60405180910390f35b34801561075e57600080fd5b50610767611b34565b60405161077895949392919061481b565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190614669565b611bf9565b005b3480156107b657600080fd5b506107bf611cb9565b6040516107cc919061442f565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f7919061479d565b611d4b565b005b34801561080a57600080fd5b50610813611eab565b6040516108209190614756565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b91906144e0565b611ed1565b60405161085d919061453b565b60405180910390f35b34801561087257600080fd5b5061088d600480360381019061088891906144e0565b611f48565b60405161089a919061453b565b60405180910390f35b3480156108af57600080fd5b506108b8611f6b565b005b3480156108c657600080fd5b506108e160048036038101906108dc9190614669565b611ff1565b6040516108ee919061453b565b60405180910390f35b34801561090357600080fd5b5061091e6004803603810190610919919061479d565b612011565b005b34801561092c57600080fd5b5061094760048036038101906109429190614596565b612136565b005b34801561095557600080fd5b5061095e612246565b005b34801561096c57600080fd5b5061098760048036038101906109829190614669565b612335565b005b34801561099557600080fd5b506109b060048036038101906109ab9190614596565b6123f5565b6040516109bd919061453b565b60405180910390f35b3480156109d257600080fd5b506109db612549565b005b3480156109e957600080fd5b50610a0460048036038101906109ff9190614556565b612638565b604051610a119190614384565b60405180910390f35b348015610a2657600080fd5b50610a2f6126bf565b005b348015610a3d57600080fd5b50610a466127e7565b604051610a53919061453b565b60405180910390f35b348015610a6857600080fd5b50610a836004803603810190610a7e9190614669565b6127fa565b005b348015610a9157600080fd5b50610a9a6128f1565b604051610aa79190614384565b60405180910390f35b348015610abc57600080fd5b50610ad76004803603810190610ad29190614596565b6128f7565b005b600b5481565b606060038054610aee9061489d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a9061489d565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b600080610b7c612997565b9050610b8981858561299f565b600191505092915050565b610b9c612997565b73ffffffffffffffffffffffffffffffffffffffff16610bba611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c079061491a565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610c589061496b565b60006040518083038185875af1925050503d8060008114610c95576040519150601f19603f3d011682016040523d82523d6000602084013e610c9a565b606091505b5050905080610ca857600080fd5b50565b6000600254905090565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610d635750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b9050808015610dbb5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15610dc857436008819055505b6000601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610e6b5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614905060008380610ecd5750815b9050600080601054119050808015610ef25750600760149054906101000a900460ff16155b8015610efc575083155b8015610f055750815b9550505050505092915050565b610f1a612997565b73ffffffffffffffffffffffffffffffffffffffff16610f38611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f859061491a565b60405180910390fd5b670de0b6b3a76400006103e86001610fa4610cab565b610fae91906149af565b610fb89190614a20565b610fc29190614a20565b811015611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90614ac3565b60405180910390fd5b670de0b6b3a76400008161101891906149af565b600b8190555050565b611029612997565b73ffffffffffffffffffffffffffffffffffffffff16611047611b0a565b73ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110949061491a565b60405180910390fd5b8260118190555081601381905550806012819055506012546013546011546110c59190614ae3565b6110cf9190614ae3565b601081905550600a601054111561111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111290614b63565b60405180910390fd5b505050565b60008061112b612997565b9050611138858285612b68565b611143858585612bf4565b60019150509392505050565b611157612997565b73ffffffffffffffffffffffffffffffffffffffff16611175611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061491a565b60405180910390fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b600c5481565b60006012905090565b600f6020528060005260406000206000915090505481565b6112b4612997565b73ffffffffffffffffffffffffffffffffffffffff166112d2611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f9061491a565b60405180910390fd5b6000601581905550565b60008061133d612997565b905061135e81858561134f8589612638565b6113599190614ae3565b61299f565b600191505092915050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fd9190614b98565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114929190614b98565b9050600854600f6000600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161150357600080fd5b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190614c47565b50915091506000601d549050601c60149054906101000a900460ff1615611637573073ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015611603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116279190614d07565b9091929350909150905050809150505b60008473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a89190614dae565b60ff168673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a9190614dae565b60ff16600a6117299190614f0e565b83856dffffffffffffffffffffffffffff1661174591906149af565b61174f91906149af565b6117599190614a20565b9050836dffffffffffffffffffffffffffff16816117779190614a20565b965050505050505090565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611874612997565b73ffffffffffffffffffffffffffffffffffffffff16611892611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df9061491a565b60405180910390fd5b6118f260006134f9565b565b60006118fe612997565b73ffffffffffffffffffffffffffffffffffffffff1661191c611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119699061491a565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b61199c612997565b73ffffffffffffffffffffffffffffffffffffffff166119ba611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a079061491a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b611a79612997565b73ffffffffffffffffffffffffffffffffffffffff16611a97611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae49061491a565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080600080600080600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd49190614d07565b9450945094509450945084848484849950995099509950995050505050509091929394565b611c01612997565b73ffffffffffffffffffffffffffffffffffffffff16611c1f611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c9061491a565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611cc89061489d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf49061489d565b8015611d415780601f10611d1657610100808354040283529160200191611d41565b820191906000526020600020905b815481529060010190602001808311611d2457829003601f168201915b5050505050905090565b611d53612997565b73ffffffffffffffffffffffffffffffffffffffff16611d71611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe9061491a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90614fcb565b60405180910390fd5b611e6182826135bf565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611edc612997565b90506000611eea8286612638565b905083811015611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f269061505d565b60405180910390fd5b611f3c828686840361299f565b60019250505092915050565b600080611f53612997565b9050611f60818585612bf4565b600191505092915050565b611f73612997565b73ffffffffffffffffffffffffffffffffffffffff16611f91611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde9061491a565b60405180910390fd5b6000601481905550565b601e6020528060005260406000206000915054906101000a900460ff1681565b612019612997565b73ffffffffffffffffffffffffffffffffffffffff16612037611b0a565b73ffffffffffffffffffffffffffffffffffffffff161461208d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120849061491a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161212a919061453b565b60405180910390a25050565b61213e612997565b73ffffffffffffffffffffffffffffffffffffffff1661215c611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a99061491a565b60405180910390fd5b670de0b6b3a76400006103e86101f46121c9610cab565b6121d391906149af565b6121dd9190614a20565b6121e79190614a20565b811015612229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612220906150ef565b60405180910390fd5b670de0b6b3a76400008161223d91906149af565b600d8190555050565b61224e612997565b73ffffffffffffffffffffffffffffffffffffffff1661226c611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b99061491a565b60405180910390fd5b60001515601c60149054906101000a900460ff16151514612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f9061515b565b60405180910390fd5b6001601c60146101000a81548160ff021916908315150217905550565b61233d612997565b73ffffffffffffffffffffffffffffffffffffffff1661235b611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146123b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a89061491a565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006123ff612997565b73ffffffffffffffffffffffffffffffffffffffff1661241d611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a9061491a565b60405180910390fd5b620186a06001612481610cab565b61248b91906149af565b6124959190614a20565b8210156124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce906151ed565b60405180910390fd5b6103e8806124e3610cab565b6124ed91906149af565b6124f79190614a20565b821115612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061527f565b60405180910390fd5b81600c8190555060019050919050565b612551612997565b73ffffffffffffffffffffffffffffffffffffffff1661256f611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc9061491a565b60405180910390fd5b60011515601c60149054906101000a900460ff1615151461261b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612612906152eb565b60405180910390fd5b6000601c60146101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126c7612997565b73ffffffffffffffffffffffffffffffffffffffff166126e5611b0a565b73ffffffffffffffffffffffffffffffffffffffff161461273b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127329061491a565b60405180910390fd5b61274c61274730611824565b61366a565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516127949061496b565b60006040518083038185875af1925050503d80600081146127d1576040519150601f19603f3d011682016040523d82523d6000602084013e6127d6565b606091505b50509050806127e457600080fd5b50565b600e60009054906101000a900460ff1681565b612802612997565b73ffffffffffffffffffffffffffffffffffffffff16612820611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286d9061491a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc9061537d565b60405180910390fd5b6128ee816134f9565b50565b60105481565b6128ff612997565b73ffffffffffffffffffffffffffffffffffffffff1661291d611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296a9061491a565b60405180910390fd5b61298e670de0b6b3a7640000826138ad90919063ffffffff16565b601d8190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a059061540f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a74906154a1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b5b9190614384565b60405180910390a3505050565b6000612b748484612638565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612bee5781811015612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd79061550d565b60405180910390fd5b612bed848484840361299f565b5b50505050565b6000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c975750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cff9061559f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6e90615631565b60405180910390fd5b60008203612d9157612d8b848460006138c3565b506134f4565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015612e3a5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015612ee55750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000612ef1611b0a565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480612f5c5750612f2d611b0a565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b905060008073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480612fc7575061dead73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b905060008280612fd45750815b80612feb5750600760149054906101000a900460ff165b9050600e60009054906101000a900460ff168015613007575080155b1561321557600e60019054906101000a900460ff16806130245750855b613063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305a9061569d565b60405180910390fd5b841561310b57600b548711156130ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a59061572f565b60405180910390fd5b600d546130ba89611824565b886130c59190614ae3565b1115613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9061579b565b60405180910390fd5b613214565b8361321357601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131b45750601a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561321257600d546131c589611824565b886131d09190614ae3565b1115613211576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132089061579b565b60405180910390fd5b5b5b5b5b601e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132f8576000600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132f35743600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61334f565b600760149054906101000a900460ff1661334e5788600e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600760149054906101000a900460ff161580156133b65750601e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561340c5750601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134625750601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e057600061347230611824565b90506000600c548210159050613486613b42565b801561348f5750805b8015613499575087155b156134dd576001600760146101000a81548160ff0219169083151502179055506134c1613b61565b6000600760146101000a81548160ff0219169083151502179055505b50505b6134ed8989898789613e43565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506136208282611994565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613687576136866157bb565b5b6040519080825280602002602001820160405280156136b55781602001602082028036833780820191505090505b50905030816000815181106136cd576136cc6157ea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137989190614b98565b816001815181106137ac576137ab6157ea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061381330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461299f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613877959493929190615912565b600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b505050505050565b600081836138bb91906149af565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139299061559f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399890615631565b60405180910390fd5b6139ac838383614014565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a29906159de565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ac59190614ae3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b299190614384565b60405180910390a3613b3c848484614019565b50505050565b600080613b4d611369565b11613b59576000613b5c565b60015b905090565b6000613b6c30611824565b90506000601754601654601854613b839190614ae3565b613b8d9190614ae3565b90506000821480613b9e5750600081145b15613baa575050613e41565b600c54821115613bba57600c5491505b600060028260185485613bcd91906149af565b613bd79190614a20565b613be19190614a20565b90506000613bf8828561401e90919063ffffffff16565b90506000479050613c088261366a565b6000613c1d824761401e90919063ffffffff16565b90506000613c4886613c3a601654856138ad90919063ffffffff16565b61403490919063ffffffff16565b90506000613c7387613c65601754866138ad90919063ffffffff16565b61403490919063ffffffff16565b90506000818385613c8491906159fe565b613c8e91906159fe565b9050600087118015613ca05750600081115b15613ced57613caf878261404a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613ce493929190615a32565b60405180910390a15b6000601881905550600060168190555060006017819055506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613d4d9061496b565b60006040518083038185875af1925050503d8060008114613d8a576040519150601f19603f3d011682016040523d82523d6000602084013e613d8f565b606091505b5050905080613d9d57600080fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613de59061496b565b60006040518083038185875af1925050503d8060008114613e22576040519150601f19603f3d011682016040523d82523d6000602084013e613e27565b606091505b5050905080613e3557600080fd5b50505050505050505050505b565b6000613e4f8686610cb5565b9050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613eb457613eae86868661412f565b5061400d565b80156140005760006010549050600060115490508415613ef357601454601054613ede9190614ae3565b9150601454601154613ef09190614ae3565b90505b8315613f1e57601554601054613f099190614ae3565b9150601554601154613f1b9190614ae3565b90505b6000613f466064613f38858a6138ad90919063ffffffff16565b61403490919063ffffffff16565b90508260125482613f5791906149af565b613f619190614a20565b60186000828254613f729190614ae3565b92505081905550828282613f8691906149af565b613f909190614a20565b60166000828254613fa19190614ae3565b925050819055508260135482613fb791906149af565b613fc19190614a20565b60176000828254613fd29190614ae3565b925050819055506000811115613fee57613fed8930836138c3565b5b8087613ffa91906159fe565b96505050505b61400b8686866138c3565b505b5050505050565b505050565b505050565b6000818361402c91906159fe565b905092915050565b600081836140429190614a20565b905092915050565b61407730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461299f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806140c3611b0a565b426040518863ffffffff1660e01b81526004016140e596959493929190615a69565b60606040518083038185885af1158015614103573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141289190615aca565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361419e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141959061559f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361420d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161420490615631565b60405180910390fd5b614218838383614014565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546142ee9190614ae3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516143529190614384565b60405180910390a3614365848484614019565b50505050565b6000819050919050565b61437e8161436b565b82525050565b60006020820190506143996000830184614375565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143d95780820151818401526020810190506143be565b60008484015250505050565b6000601f19601f8301169050919050565b60006144018261439f565b61440b81856143aa565b935061441b8185602086016143bb565b614424816143e5565b840191505092915050565b6000602082019050818103600083015261444981846143f6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061448182614456565b9050919050565b61449181614476565b811461449c57600080fd5b50565b6000813590506144ae81614488565b92915050565b6144bd8161436b565b81146144c857600080fd5b50565b6000813590506144da816144b4565b92915050565b600080604083850312156144f7576144f6614451565b5b60006145058582860161449f565b9250506020614516858286016144cb565b9150509250929050565b60008115159050919050565b61453581614520565b82525050565b6000602082019050614550600083018461452c565b92915050565b6000806040838503121561456d5761456c614451565b5b600061457b8582860161449f565b925050602061458c8582860161449f565b9150509250929050565b6000602082840312156145ac576145ab614451565b5b60006145ba848285016144cb565b91505092915050565b6000806000606084860312156145dc576145db614451565b5b60006145ea868287016144cb565b93505060206145fb868287016144cb565b925050604061460c868287016144cb565b9150509250925092565b60008060006060848603121561462f5761462e614451565b5b600061463d8682870161449f565b935050602061464e8682870161449f565b925050604061465f868287016144cb565b9150509250925092565b60006020828403121561467f5761467e614451565b5b600061468d8482850161449f565b91505092915050565b600060ff82169050919050565b6146ac81614696565b82525050565b60006020820190506146c760008301846146a3565b92915050565b6000819050919050565b60006146f26146ed6146e884614456565b6146cd565b614456565b9050919050565b6000614704826146d7565b9050919050565b6000614716826146f9565b9050919050565b6147268161470b565b82525050565b6000602082019050614741600083018461471d565b92915050565b61475081614476565b82525050565b600060208201905061476b6000830184614747565b92915050565b61477a81614520565b811461478557600080fd5b50565b60008135905061479781614771565b92915050565b600080604083850312156147b4576147b3614451565b5b60006147c28582860161449f565b92505060206147d385828601614788565b9150509250929050565b600069ffffffffffffffffffff82169050919050565b6147fc816147dd565b82525050565b6000819050919050565b61481581614802565b82525050565b600060a08201905061483060008301886147f3565b61483d602083018761480c565b61484a6040830186614375565b6148576060830185614375565b61486460808301846147f3565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148b557607f821691505b6020821081036148c8576148c761486e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149046020836143aa565b915061490f826148ce565b602082019050919050565b60006020820190508181036000830152614933816148f7565b9050919050565b600081905092915050565b50565b600061495560008361493a565b915061496082614945565b600082019050919050565b600061497682614948565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149ba8261436b565b91506149c58361436b565b92508282026149d38161436b565b915082820484148315176149ea576149e9614980565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a2b8261436b565b9150614a368361436b565b925082614a4657614a456149f1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614aad602f836143aa565b9150614ab882614a51565b604082019050919050565b60006020820190508181036000830152614adc81614aa0565b9050919050565b6000614aee8261436b565b9150614af98361436b565b9250828201905080821115614b1157614b10614980565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614b4d601d836143aa565b9150614b5882614b17565b602082019050919050565b60006020820190508181036000830152614b7c81614b40565b9050919050565b600081519050614b9281614488565b92915050565b600060208284031215614bae57614bad614451565b5b6000614bbc84828501614b83565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b614be881614bc5565b8114614bf357600080fd5b50565b600081519050614c0581614bdf565b92915050565b600063ffffffff82169050919050565b614c2481614c0b565b8114614c2f57600080fd5b50565b600081519050614c4181614c1b565b92915050565b600080600060608486031215614c6057614c5f614451565b5b6000614c6e86828701614bf6565b9350506020614c7f86828701614bf6565b9250506040614c9086828701614c32565b9150509250925092565b614ca3816147dd565b8114614cae57600080fd5b50565b600081519050614cc081614c9a565b92915050565b614ccf81614802565b8114614cda57600080fd5b50565b600081519050614cec81614cc6565b92915050565b600081519050614d01816144b4565b92915050565b600080600080600060a08688031215614d2357614d22614451565b5b6000614d3188828901614cb1565b9550506020614d4288828901614cdd565b9450506040614d5388828901614cf2565b9350506060614d6488828901614cf2565b9250506080614d7588828901614cb1565b9150509295509295909350565b614d8b81614696565b8114614d9657600080fd5b50565b600081519050614da881614d82565b92915050565b600060208284031215614dc457614dc3614451565b5b6000614dd284828501614d99565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115614e3257808604811115614e0e57614e0d614980565b5b6001851615614e1d5780820291505b8081029050614e2b85614ddb565b9450614df2565b94509492505050565b600082614e4b5760019050614f07565b81614e595760009050614f07565b8160018114614e6f5760028114614e7957614ea8565b6001915050614f07565b60ff841115614e8b57614e8a614980565b5b8360020a915084821115614ea257614ea1614980565b5b50614f07565b5060208310610133831016604e8410600b8410161715614edd5782820a905083811115614ed857614ed7614980565b5b614f07565b614eea8484846001614de8565b92509050818404811115614f0157614f00614980565b5b81810290505b9392505050565b6000614f198261436b565b9150614f248361436b565b9250614f517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e3b565b905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fb56039836143aa565b9150614fc082614f59565b604082019050919050565b60006020820190508181036000830152614fe481614fa8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150476025836143aa565b915061505282614feb565b604082019050919050565b600060208201905081810360008301526150768161503a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3530250000000000000000000000000000000000000000000000000000000000602082015250565b60006150d96023836143aa565b91506150e48261507d565b604082019050919050565b60006020820190508181036000830152615108816150cc565b9050919050565b7f7072696365206f7261636c6520616c726561647920656e61626c656400000000600082015250565b6000615145601c836143aa565b91506151508261510f565b602082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151d76035836143aa565b91506151e28261517b565b604082019050919050565b60006020820190508181036000830152615206816151ca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e203130302520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152696034836143aa565b91506152748261520d565b604082019050919050565b600060208201905081810360008301526152988161525c565b9050919050565b7f7072696365206f7261636c6520616c72656164792064697361626c6564000000600082015250565b60006152d5601d836143aa565b91506152e08261529f565b602082019050919050565b60006020820190508181036000830152615304816152c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153676026836143aa565b91506153728261530b565b604082019050919050565b600060208201905081810360008301526153968161535a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153f96024836143aa565b91506154048261539d565b604082019050919050565b60006020820190508181036000830152615428816153ec565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061548b6022836143aa565b91506154968261542f565b604082019050919050565b600060208201905081810360008301526154ba8161547e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006154f7601d836143aa565b9150615502826154c1565b602082019050919050565b60006020820190508181036000830152615526816154ea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155896025836143aa565b91506155948261552d565b604082019050919050565b600060208201905081810360008301526155b88161557c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061561b6023836143aa565b9150615626826155bf565b604082019050919050565b6000602082019050818103600083015261564a8161560e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156876016836143aa565b915061569282615651565b602082019050919050565b600060208201905081810360008301526156b68161567a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157196035836143aa565b9150615724826156bd565b604082019050919050565b600060208201905081810360008301526157488161570c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006157856013836143aa565b91506157908261574f565b602082019050919050565b600060208201905081810360008301526157b481615778565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061583e61583961583484615819565b6146cd565b61436b565b9050919050565b61584e81615823565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61588981614476565b82525050565b600061589b8383615880565b60208301905092915050565b6000602082019050919050565b60006158bf82615854565b6158c9818561585f565b93506158d483615870565b8060005b838110156159055781516158ec888261588f565b97506158f7836158a7565b9250506001810190506158d8565b5085935050505092915050565b600060a0820190506159276000830188614375565b6159346020830187615845565b818103604083015261594681866158b4565b90506159556060830185614747565b6159626080830184614375565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159c86026836143aa565b91506159d38261596c565b604082019050919050565b600060208201905081810360008301526159f7816159bb565b9050919050565b6000615a098261436b565b9150615a148361436b565b9250828203905081811115615a2c57615a2b614980565b5b92915050565b6000606082019050615a476000830186614375565b615a546020830185614375565b615a616040830184614375565b949350505050565b600060c082019050615a7e6000830189614747565b615a8b6020830188614375565b615a986040830187615845565b615aa56060830186615845565b615ab26080830185614747565b615abf60a0830184614375565b979650505050505050565b600080600060608486031215615ae357615ae2614451565b5b6000615af186828701614cf2565b9350506020615b0286828701614cf2565b9250506040615b1386828701614cf2565b915050925092509256fea2646970667358221220a5b9257b58cdd3941bcbd77920a67c8714d9b953dd32232f93d216c7e0ca026964736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102975760003560e01c806382247ec01161015a578063c0246668116100c1578063dd62ed3e1161007a578063dd62ed3e146109dd578063df778d2614610a1a578063e73b90cd14610a31578063f2fde38b14610a5c578063fea4fa4d14610a85578063fefa5ce314610ab05761029e565b8063c0246668146108f7578063c18bc19514610920578063c862c28b14610949578063cb94a37014610960578063d257b34f14610989578063dd1e1ca9146109c65761029e565b80639a7a23d6116101135780639a7a23d6146107d55780639c74daf0146107fe578063a457c2d714610829578063a9059cbb14610866578063ae76b090146108a3578063b62496f5146108ba5761029e565b806382247ec0146106e55780638a8c523c146107105780638da5cb5b146107275780638e15f473146107525780638e1a9efb1461078157806395d89b41146107aa5761029e565b8063313ce567116101fe578063583e0568116101b7578063583e0568146105e75780636d77ecd11461061257806370a082311461063d578063715018a61461067a578063751039fc146106915780637571336a146106bc5761029e565b8063313ce567146104c3578063337662e0146104ee578063339578fe1461052b57806339509351146105425780634b94f50e1461057f5780634fbee193146105aa5761029e565b8063203e727e11610250578063203e727e146103b557806322429085146103de57806323b872dd1461040757806323bf4c861461044457806327f4d7d51461046d5780632fd689e3146104985761029e565b806304beaeb8146102a357806306fdde03146102ce578063095ea7b3146102f957806312b77e8a1461033657806318160ddd1461034d578063188a507e146103785761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610ad9565b6040516102c59190614384565b60405180910390f35b3480156102da57600080fd5b506102e3610adf565b6040516102f0919061442f565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b91906144e0565b610b71565b60405161032d919061453b565b60405180910390f35b34801561034257600080fd5b5061034b610b94565b005b34801561035957600080fd5b50610362610cab565b60405161036f9190614384565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190614556565b610cb5565b6040516103ac919061453b565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190614596565b610f12565b005b3480156103ea57600080fd5b50610405600480360381019061040091906145c3565b611021565b005b34801561041357600080fd5b5061042e60048036038101906104299190614616565b611120565b60405161043b919061453b565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190614669565b61114f565b005b34801561047957600080fd5b50610482611272565b60405161048f919061453b565b60405180910390f35b3480156104a457600080fd5b506104ad611285565b6040516104ba9190614384565b60405180910390f35b3480156104cf57600080fd5b506104d861128b565b6040516104e591906146b2565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190614669565b611294565b6040516105229190614384565b60405180910390f35b34801561053757600080fd5b506105406112ac565b005b34801561054e57600080fd5b50610569600480360381019061056491906144e0565b611332565b604051610576919061453b565b60405180910390f35b34801561058b57600080fd5b50610594611369565b6040516105a19190614384565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190614669565b611782565b6040516105de919061453b565b60405180910390f35b3480156105f357600080fd5b506105fc6117d8565b604051610609919061472c565b60405180910390f35b34801561061e57600080fd5b506106276117fe565b6040516106349190614756565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190614669565b611824565b6040516106719190614384565b60405180910390f35b34801561068657600080fd5b5061068f61186c565b005b34801561069d57600080fd5b506106a66118f4565b6040516106b3919061453b565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de919061479d565b611994565b005b3480156106f157600080fd5b506106fa611a6b565b6040516107079190614384565b60405180910390f35b34801561071c57600080fd5b50610725611a71565b005b34801561073357600080fd5b5061073c611b0a565b6040516107499190614756565b60405180910390f35b34801561075e57600080fd5b50610767611b34565b60405161077895949392919061481b565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190614669565b611bf9565b005b3480156107b657600080fd5b506107bf611cb9565b6040516107cc919061442f565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f7919061479d565b611d4b565b005b34801561080a57600080fd5b50610813611eab565b6040516108209190614756565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b91906144e0565b611ed1565b60405161085d919061453b565b60405180910390f35b34801561087257600080fd5b5061088d600480360381019061088891906144e0565b611f48565b60405161089a919061453b565b60405180910390f35b3480156108af57600080fd5b506108b8611f6b565b005b3480156108c657600080fd5b506108e160048036038101906108dc9190614669565b611ff1565b6040516108ee919061453b565b60405180910390f35b34801561090357600080fd5b5061091e6004803603810190610919919061479d565b612011565b005b34801561092c57600080fd5b5061094760048036038101906109429190614596565b612136565b005b34801561095557600080fd5b5061095e612246565b005b34801561096c57600080fd5b5061098760048036038101906109829190614669565b612335565b005b34801561099557600080fd5b506109b060048036038101906109ab9190614596565b6123f5565b6040516109bd919061453b565b60405180910390f35b3480156109d257600080fd5b506109db612549565b005b3480156109e957600080fd5b50610a0460048036038101906109ff9190614556565b612638565b604051610a119190614384565b60405180910390f35b348015610a2657600080fd5b50610a2f6126bf565b005b348015610a3d57600080fd5b50610a466127e7565b604051610a53919061453b565b60405180910390f35b348015610a6857600080fd5b50610a836004803603810190610a7e9190614669565b6127fa565b005b348015610a9157600080fd5b50610a9a6128f1565b604051610aa79190614384565b60405180910390f35b348015610abc57600080fd5b50610ad76004803603810190610ad29190614596565b6128f7565b005b600b5481565b606060038054610aee9061489d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a9061489d565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b600080610b7c612997565b9050610b8981858561299f565b600191505092915050565b610b9c612997565b73ffffffffffffffffffffffffffffffffffffffff16610bba611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c079061491a565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610c589061496b565b60006040518083038185875af1925050503d8060008114610c95576040519150601f19603f3d011682016040523d82523d6000602084013e610c9a565b606091505b5050905080610ca857600080fd5b50565b6000600254905090565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610d635750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b9050808015610dbb5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15610dc857436008819055505b6000601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610e6b5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614905060008380610ecd5750815b9050600080601054119050808015610ef25750600760149054906101000a900460ff16155b8015610efc575083155b8015610f055750815b9550505050505092915050565b610f1a612997565b73ffffffffffffffffffffffffffffffffffffffff16610f38611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f859061491a565b60405180910390fd5b670de0b6b3a76400006103e86001610fa4610cab565b610fae91906149af565b610fb89190614a20565b610fc29190614a20565b811015611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90614ac3565b60405180910390fd5b670de0b6b3a76400008161101891906149af565b600b8190555050565b611029612997565b73ffffffffffffffffffffffffffffffffffffffff16611047611b0a565b73ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110949061491a565b60405180910390fd5b8260118190555081601381905550806012819055506012546013546011546110c59190614ae3565b6110cf9190614ae3565b601081905550600a601054111561111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111290614b63565b60405180910390fd5b505050565b60008061112b612997565b9050611138858285612b68565b611143858585612bf4565b60019150509392505050565b611157612997565b73ffffffffffffffffffffffffffffffffffffffff16611175611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061491a565b60405180910390fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b600c5481565b60006012905090565b600f6020528060005260406000206000915090505481565b6112b4612997565b73ffffffffffffffffffffffffffffffffffffffff166112d2611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f9061491a565b60405180910390fd5b6000601581905550565b60008061133d612997565b905061135e81858561134f8589612638565b6113599190614ae3565b61299f565b600191505092915050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fd9190614b98565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114929190614b98565b9050600854600f6000600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161150357600080fd5b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190614c47565b50915091506000601d549050601c60149054906101000a900460ff1615611637573073ffffffffffffffffffffffffffffffffffffffff16638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015611603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116279190614d07565b9091929350909150905050809150505b60008473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a89190614dae565b60ff168673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a9190614dae565b60ff16600a6117299190614f0e565b83856dffffffffffffffffffffffffffff1661174591906149af565b61174f91906149af565b6117599190614a20565b9050836dffffffffffffffffffffffffffff16816117779190614a20565b965050505050505090565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611874612997565b73ffffffffffffffffffffffffffffffffffffffff16611892611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df9061491a565b60405180910390fd5b6118f260006134f9565b565b60006118fe612997565b73ffffffffffffffffffffffffffffffffffffffff1661191c611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119699061491a565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b61199c612997565b73ffffffffffffffffffffffffffffffffffffffff166119ba611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a079061491a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b611a79612997565b73ffffffffffffffffffffffffffffffffffffffff16611a97611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae49061491a565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080600080600080600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd49190614d07565b9450945094509450945084848484849950995099509950995050505050509091929394565b611c01612997565b73ffffffffffffffffffffffffffffffffffffffff16611c1f611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c9061491a565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611cc89061489d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf49061489d565b8015611d415780601f10611d1657610100808354040283529160200191611d41565b820191906000526020600020905b815481529060010190602001808311611d2457829003601f168201915b5050505050905090565b611d53612997565b73ffffffffffffffffffffffffffffffffffffffff16611d71611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe9061491a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90614fcb565b60405180910390fd5b611e6182826135bf565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611edc612997565b90506000611eea8286612638565b905083811015611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f269061505d565b60405180910390fd5b611f3c828686840361299f565b60019250505092915050565b600080611f53612997565b9050611f60818585612bf4565b600191505092915050565b611f73612997565b73ffffffffffffffffffffffffffffffffffffffff16611f91611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde9061491a565b60405180910390fd5b6000601481905550565b601e6020528060005260406000206000915054906101000a900460ff1681565b612019612997565b73ffffffffffffffffffffffffffffffffffffffff16612037611b0a565b73ffffffffffffffffffffffffffffffffffffffff161461208d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120849061491a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161212a919061453b565b60405180910390a25050565b61213e612997565b73ffffffffffffffffffffffffffffffffffffffff1661215c611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a99061491a565b60405180910390fd5b670de0b6b3a76400006103e86101f46121c9610cab565b6121d391906149af565b6121dd9190614a20565b6121e79190614a20565b811015612229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612220906150ef565b60405180910390fd5b670de0b6b3a76400008161223d91906149af565b600d8190555050565b61224e612997565b73ffffffffffffffffffffffffffffffffffffffff1661226c611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b99061491a565b60405180910390fd5b60001515601c60149054906101000a900460ff16151514612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f9061515b565b60405180910390fd5b6001601c60146101000a81548160ff021916908315150217905550565b61233d612997565b73ffffffffffffffffffffffffffffffffffffffff1661235b611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146123b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a89061491a565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006123ff612997565b73ffffffffffffffffffffffffffffffffffffffff1661241d611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a9061491a565b60405180910390fd5b620186a06001612481610cab565b61248b91906149af565b6124959190614a20565b8210156124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce906151ed565b60405180910390fd5b6103e8806124e3610cab565b6124ed91906149af565b6124f79190614a20565b821115612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061527f565b60405180910390fd5b81600c8190555060019050919050565b612551612997565b73ffffffffffffffffffffffffffffffffffffffff1661256f611b0a565b73ffffffffffffffffffffffffffffffffffffffff16146125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc9061491a565b60405180910390fd5b60011515601c60149054906101000a900460ff1615151461261b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612612906152eb565b60405180910390fd5b6000601c60146101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126c7612997565b73ffffffffffffffffffffffffffffffffffffffff166126e5611b0a565b73ffffffffffffffffffffffffffffffffffffffff161461273b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127329061491a565b60405180910390fd5b61274c61274730611824565b61366a565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516127949061496b565b60006040518083038185875af1925050503d80600081146127d1576040519150601f19603f3d011682016040523d82523d6000602084013e6127d6565b606091505b50509050806127e457600080fd5b50565b600e60009054906101000a900460ff1681565b612802612997565b73ffffffffffffffffffffffffffffffffffffffff16612820611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286d9061491a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc9061537d565b60405180910390fd5b6128ee816134f9565b50565b60105481565b6128ff612997565b73ffffffffffffffffffffffffffffffffffffffff1661291d611b0a565b73ffffffffffffffffffffffffffffffffffffffff1614612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296a9061491a565b60405180910390fd5b61298e670de0b6b3a7640000826138ad90919063ffffffff16565b601d8190555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a059061540f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a74906154a1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b5b9190614384565b60405180910390a3505050565b6000612b748484612638565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612bee5781811015612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd79061550d565b60405180910390fd5b612bed848484840361299f565b5b50505050565b6000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c975750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cff9061559f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6e90615631565b60405180910390fd5b60008203612d9157612d8b848460006138c3565b506134f4565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015612e3a5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015612ee55750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000612ef1611b0a565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480612f5c5750612f2d611b0a565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b905060008073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480612fc7575061dead73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b905060008280612fd45750815b80612feb5750600760149054906101000a900460ff165b9050600e60009054906101000a900460ff168015613007575080155b1561321557600e60019054906101000a900460ff16806130245750855b613063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305a9061569d565b60405180910390fd5b841561310b57600b548711156130ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a59061572f565b60405180910390fd5b600d546130ba89611824565b886130c59190614ae3565b1115613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9061579b565b60405180910390fd5b613214565b8361321357601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131b45750601a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561321257600d546131c589611824565b886131d09190614ae3565b1115613211576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132089061579b565b60405180910390fd5b5b5b5b5b601e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132f8576000600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132f35743600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61334f565b600760149054906101000a900460ff1661334e5788600e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600760149054906101000a900460ff161580156133b65750601e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561340c5750601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134625750601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e057600061347230611824565b90506000600c548210159050613486613b42565b801561348f5750805b8015613499575087155b156134dd576001600760146101000a81548160ff0219169083151502179055506134c1613b61565b6000600760146101000a81548160ff0219169083151502179055505b50505b6134ed8989898789613e43565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506136208282611994565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613687576136866157bb565b5b6040519080825280602002602001820160405280156136b55781602001602082028036833780820191505090505b50905030816000815181106136cd576136cc6157ea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137989190614b98565b816001815181106137ac576137ab6157ea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061381330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461299f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613877959493929190615912565b600060405180830381600087803b15801561389157600080fd5b505af11580156138a5573d6000803e3d6000fd5b505050505050565b600081836138bb91906149af565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139299061559f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399890615631565b60405180910390fd5b6139ac838383614014565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a29906159de565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ac59190614ae3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b299190614384565b60405180910390a3613b3c848484614019565b50505050565b600080613b4d611369565b11613b59576000613b5c565b60015b905090565b6000613b6c30611824565b90506000601754601654601854613b839190614ae3565b613b8d9190614ae3565b90506000821480613b9e5750600081145b15613baa575050613e41565b600c54821115613bba57600c5491505b600060028260185485613bcd91906149af565b613bd79190614a20565b613be19190614a20565b90506000613bf8828561401e90919063ffffffff16565b90506000479050613c088261366a565b6000613c1d824761401e90919063ffffffff16565b90506000613c4886613c3a601654856138ad90919063ffffffff16565b61403490919063ffffffff16565b90506000613c7387613c65601754866138ad90919063ffffffff16565b61403490919063ffffffff16565b90506000818385613c8491906159fe565b613c8e91906159fe565b9050600087118015613ca05750600081115b15613ced57613caf878261404a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613ce493929190615a32565b60405180910390a15b6000601881905550600060168190555060006017819055506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613d4d9061496b565b60006040518083038185875af1925050503d8060008114613d8a576040519150601f19603f3d011682016040523d82523d6000602084013e613d8f565b606091505b5050905080613d9d57600080fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613de59061496b565b60006040518083038185875af1925050503d8060008114613e22576040519150601f19603f3d011682016040523d82523d6000602084013e613e27565b606091505b5050905080613e3557600080fd5b50505050505050505050505b565b6000613e4f8686610cb5565b9050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613eb457613eae86868661412f565b5061400d565b80156140005760006010549050600060115490508415613ef357601454601054613ede9190614ae3565b9150601454601154613ef09190614ae3565b90505b8315613f1e57601554601054613f099190614ae3565b9150601554601154613f1b9190614ae3565b90505b6000613f466064613f38858a6138ad90919063ffffffff16565b61403490919063ffffffff16565b90508260125482613f5791906149af565b613f619190614a20565b60186000828254613f729190614ae3565b92505081905550828282613f8691906149af565b613f909190614a20565b60166000828254613fa19190614ae3565b925050819055508260135482613fb791906149af565b613fc19190614a20565b60176000828254613fd29190614ae3565b925050819055506000811115613fee57613fed8930836138c3565b5b8087613ffa91906159fe565b96505050505b61400b8686866138c3565b505b5050505050565b505050565b505050565b6000818361402c91906159fe565b905092915050565b600081836140429190614a20565b905092915050565b61407730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461299f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806140c3611b0a565b426040518863ffffffff1660e01b81526004016140e596959493929190615a69565b60606040518083038185885af1158015614103573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141289190615aca565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361419e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141959061559f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361420d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161420490615631565b60405180910390fd5b614218838383614014565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546142ee9190614ae3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516143529190614384565b60405180910390a3614365848484614019565b50505050565b6000819050919050565b61437e8161436b565b82525050565b60006020820190506143996000830184614375565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143d95780820151818401526020810190506143be565b60008484015250505050565b6000601f19601f8301169050919050565b60006144018261439f565b61440b81856143aa565b935061441b8185602086016143bb565b614424816143e5565b840191505092915050565b6000602082019050818103600083015261444981846143f6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061448182614456565b9050919050565b61449181614476565b811461449c57600080fd5b50565b6000813590506144ae81614488565b92915050565b6144bd8161436b565b81146144c857600080fd5b50565b6000813590506144da816144b4565b92915050565b600080604083850312156144f7576144f6614451565b5b60006145058582860161449f565b9250506020614516858286016144cb565b9150509250929050565b60008115159050919050565b61453581614520565b82525050565b6000602082019050614550600083018461452c565b92915050565b6000806040838503121561456d5761456c614451565b5b600061457b8582860161449f565b925050602061458c8582860161449f565b9150509250929050565b6000602082840312156145ac576145ab614451565b5b60006145ba848285016144cb565b91505092915050565b6000806000606084860312156145dc576145db614451565b5b60006145ea868287016144cb565b93505060206145fb868287016144cb565b925050604061460c868287016144cb565b9150509250925092565b60008060006060848603121561462f5761462e614451565b5b600061463d8682870161449f565b935050602061464e8682870161449f565b925050604061465f868287016144cb565b9150509250925092565b60006020828403121561467f5761467e614451565b5b600061468d8482850161449f565b91505092915050565b600060ff82169050919050565b6146ac81614696565b82525050565b60006020820190506146c760008301846146a3565b92915050565b6000819050919050565b60006146f26146ed6146e884614456565b6146cd565b614456565b9050919050565b6000614704826146d7565b9050919050565b6000614716826146f9565b9050919050565b6147268161470b565b82525050565b6000602082019050614741600083018461471d565b92915050565b61475081614476565b82525050565b600060208201905061476b6000830184614747565b92915050565b61477a81614520565b811461478557600080fd5b50565b60008135905061479781614771565b92915050565b600080604083850312156147b4576147b3614451565b5b60006147c28582860161449f565b92505060206147d385828601614788565b9150509250929050565b600069ffffffffffffffffffff82169050919050565b6147fc816147dd565b82525050565b6000819050919050565b61481581614802565b82525050565b600060a08201905061483060008301886147f3565b61483d602083018761480c565b61484a6040830186614375565b6148576060830185614375565b61486460808301846147f3565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148b557607f821691505b6020821081036148c8576148c761486e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149046020836143aa565b915061490f826148ce565b602082019050919050565b60006020820190508181036000830152614933816148f7565b9050919050565b600081905092915050565b50565b600061495560008361493a565b915061496082614945565b600082019050919050565b600061497682614948565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149ba8261436b565b91506149c58361436b565b92508282026149d38161436b565b915082820484148315176149ea576149e9614980565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a2b8261436b565b9150614a368361436b565b925082614a4657614a456149f1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614aad602f836143aa565b9150614ab882614a51565b604082019050919050565b60006020820190508181036000830152614adc81614aa0565b9050919050565b6000614aee8261436b565b9150614af98361436b565b9250828201905080821115614b1157614b10614980565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614b4d601d836143aa565b9150614b5882614b17565b602082019050919050565b60006020820190508181036000830152614b7c81614b40565b9050919050565b600081519050614b9281614488565b92915050565b600060208284031215614bae57614bad614451565b5b6000614bbc84828501614b83565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b614be881614bc5565b8114614bf357600080fd5b50565b600081519050614c0581614bdf565b92915050565b600063ffffffff82169050919050565b614c2481614c0b565b8114614c2f57600080fd5b50565b600081519050614c4181614c1b565b92915050565b600080600060608486031215614c6057614c5f614451565b5b6000614c6e86828701614bf6565b9350506020614c7f86828701614bf6565b9250506040614c9086828701614c32565b9150509250925092565b614ca3816147dd565b8114614cae57600080fd5b50565b600081519050614cc081614c9a565b92915050565b614ccf81614802565b8114614cda57600080fd5b50565b600081519050614cec81614cc6565b92915050565b600081519050614d01816144b4565b92915050565b600080600080600060a08688031215614d2357614d22614451565b5b6000614d3188828901614cb1565b9550506020614d4288828901614cdd565b9450506040614d5388828901614cf2565b9350506060614d6488828901614cf2565b9250506080614d7588828901614cb1565b9150509295509295909350565b614d8b81614696565b8114614d9657600080fd5b50565b600081519050614da881614d82565b92915050565b600060208284031215614dc457614dc3614451565b5b6000614dd284828501614d99565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115614e3257808604811115614e0e57614e0d614980565b5b6001851615614e1d5780820291505b8081029050614e2b85614ddb565b9450614df2565b94509492505050565b600082614e4b5760019050614f07565b81614e595760009050614f07565b8160018114614e6f5760028114614e7957614ea8565b6001915050614f07565b60ff841115614e8b57614e8a614980565b5b8360020a915084821115614ea257614ea1614980565b5b50614f07565b5060208310610133831016604e8410600b8410161715614edd5782820a905083811115614ed857614ed7614980565b5b614f07565b614eea8484846001614de8565b92509050818404811115614f0157614f00614980565b5b81810290505b9392505050565b6000614f198261436b565b9150614f248361436b565b9250614f517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e3b565b905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fb56039836143aa565b9150614fc082614f59565b604082019050919050565b60006020820190508181036000830152614fe481614fa8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150476025836143aa565b915061505282614feb565b604082019050919050565b600060208201905081810360008301526150768161503a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3530250000000000000000000000000000000000000000000000000000000000602082015250565b60006150d96023836143aa565b91506150e48261507d565b604082019050919050565b60006020820190508181036000830152615108816150cc565b9050919050565b7f7072696365206f7261636c6520616c726561647920656e61626c656400000000600082015250565b6000615145601c836143aa565b91506151508261510f565b602082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151d76035836143aa565b91506151e28261517b565b604082019050919050565b60006020820190508181036000830152615206816151ca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e203130302520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152696034836143aa565b91506152748261520d565b604082019050919050565b600060208201905081810360008301526152988161525c565b9050919050565b7f7072696365206f7261636c6520616c72656164792064697361626c6564000000600082015250565b60006152d5601d836143aa565b91506152e08261529f565b602082019050919050565b60006020820190508181036000830152615304816152c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153676026836143aa565b91506153728261530b565b604082019050919050565b600060208201905081810360008301526153968161535a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153f96024836143aa565b91506154048261539d565b604082019050919050565b60006020820190508181036000830152615428816153ec565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061548b6022836143aa565b91506154968261542f565b604082019050919050565b600060208201905081810360008301526154ba8161547e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006154f7601d836143aa565b9150615502826154c1565b602082019050919050565b60006020820190508181036000830152615526816154ea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155896025836143aa565b91506155948261552d565b604082019050919050565b600060208201905081810360008301526155b88161557c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061561b6023836143aa565b9150615626826155bf565b604082019050919050565b6000602082019050818103600083015261564a8161560e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156876016836143aa565b915061569282615651565b602082019050919050565b600060208201905081810360008301526156b68161567a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157196035836143aa565b9150615724826156bd565b604082019050919050565b600060208201905081810360008301526157488161570c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006157856013836143aa565b91506157908261574f565b602082019050919050565b600060208201905081810360008301526157b481615778565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061583e61583961583484615819565b6146cd565b61436b565b9050919050565b61584e81615823565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61588981614476565b82525050565b600061589b8383615880565b60208301905092915050565b6000602082019050919050565b60006158bf82615854565b6158c9818561585f565b93506158d483615870565b8060005b838110156159055781516158ec888261588f565b97506158f7836158a7565b9250506001810190506158d8565b5085935050505092915050565b600060a0820190506159276000830188614375565b6159346020830187615845565b818103604083015261594681866158b4565b90506159556060830185614747565b6159626080830184614375565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159c86026836143aa565b91506159d38261596c565b604082019050919050565b600060208201905081810360008301526159f7816159bb565b9050919050565b6000615a098261436b565b9150615a148361436b565b9250828203905081811115615a2c57615a2b614980565b5b92915050565b6000606082019050615a476000830186614375565b615a546020830185614375565b615a616040830184614375565b949350505050565b600060c082019050615a7e6000830189614747565b615a8b6020830188614375565b615a986040830187615845565b615aa56060830186615845565b615ab26080830185614747565b615abf60a0830184614375565b979650505050505050565b600080600060608486031215615ae357615ae2614451565b5b6000615af186828701614cf2565b9350506020615b0286828701614cf2565b9250506040615b1386828701614cf2565b915050925092509256fea2646970667358221220a5b9257b58cdd3941bcbd77920a67c8714d9b953dd32232f93d216c7e0ca026964736f6c63430008120033

Deployed Bytecode Sourcemap

38213:16543:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38506:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25953:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28445:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51881:169;;;;;;;;;;;;;:::i;:::-;;27073:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43870:577;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44964:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45681:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29267:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51108:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38663:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38549;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26915:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38738:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50883:91;;;;;;;;;;;;;:::i;:::-;;29971:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42555:808;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50648:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38286:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39326:177;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22575:103;;;;;;;;;;;;;:::i;:::-;;42301:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45506:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38590:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41659:82;;;;;;;;;;;;;:::i;:::-;;21924:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43371:491;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;46411:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26172:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41749:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38335:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30744:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27627:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50782:93;;;;;;;;;;;;;:::i;:::-;;39608:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46099:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45244:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51284:173;;;;;;;;;;;;;:::i;:::-;;46289:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44455:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51465:175;;;;;;;;;;;;;:::i;:::-;;27924:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51648:225;;;;;;;;;;;;;:::i;:::-;;38622:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22833:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38796:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50982:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38506:36;;;;:::o;25953:100::-;26007:13;26040:5;26033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25953:100;:::o;28445:242::-;28564:4;28586:13;28602:12;:10;:12::i;:::-;28586:28;;28625:32;28634:5;28641:7;28650:6;28625:8;:32::i;:::-;28675:4;28668:11;;;28445:242;;;;:::o;51881:169::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51933:12:::1;51958:16;;;;;;;;;;;51950:30;;51989:21;51950:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51932:83;;;52034:7;52026:16;;;::::0;::::1;;51921:129;51881:169::o:0;27073:108::-;27134:7;27161:12;;27154:19;;27073:108;:::o;43870:577::-;43933:4;43950:10;43971:14;;;;;;;;;;;43963:22;;:4;:22;;;:57;;;;;44003:16;;;;;;;;;;;43989:31;;:2;:31;;;;43963:57;43950:70;;44035:5;:32;;;;;44044:19;:23;44064:2;44044:23;;;;;;;;;;;;;;;;;;;;;;;;;44035:32;44031:60;;;44079:12;44069:7;:22;;;;44031:60;44102:22;44127:19;:25;44147:4;44127:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44156:19;:23;44176:2;44156:23;;;;;;;;;;;;;;;;;;;;;;;;;44127:52;44102:77;;44190:11;44210:14;;;;;;;;;;;44204:20;;:2;:20;;;44190:34;;44236:11;44250:5;:15;;;;44259:6;44250:15;44236:29;;44276:13;44306:1;44293:10;;:14;44276:32;;44342:8;:39;;;;;44368:13;;;;;;;;;;;44367:14;44342:39;:74;;;;;44399:17;44398:18;44342:74;:97;;;;;44433:6;44342:97;44321:118;;;;;;;43870:577;;;;:::o;44964:272::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45101:4:::1;45093;45088:1;45072:13;:11;:13::i;:::-;:17;;;;:::i;:::-;45071:26;;;;:::i;:::-;45070:35;;;;:::i;:::-;45060:6;:45;;45038:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;45224:4;45215:6;:13;;;;:::i;:::-;45191:21;:37;;;;44964:272:::0;:::o;45681:410::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45849:12:::1;45833:13;:28;;;;45890:14;45872:15;:32;;;;45931:12;45915:13;:28;;;;46001:13;;45983:15;;45967:13;;:31;;;;:::i;:::-;:47;;;;:::i;:::-;45954:10;:60;;;;46047:2;46033:10;;:16;;46025:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45681:410:::0;;;:::o;29267:295::-;29398:4;29415:15;29433:12;:10;:12::i;:::-;29415:30;;29456:38;29472:4;29478:7;29487:6;29456:15;:38::i;:::-;29505:27;29515:4;29521:2;29525:6;29505:9;:27::i;:::-;29550:4;29543:11;;;29267:295;;;;;:::o;51108:168::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51202:4:::1;51183:16;;:23;;;;;;;;;;;;;;;;;;51251:16;;;;;;;;;;;51217:9;;:51;;;;;;;;;;;;;;;;;;51108:168:::0;:::o;38663:34::-;;;;;;;;;;;;;:::o;38549:::-;;;;:::o;26915:93::-;26973:5;26998:2;26991:9;;26915:93;:::o;38738:51::-;;;;;;;;;;;;;;;;;:::o;50883:91::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50965:1:::1;50945:17;:21;;;;50883:91::o:0;29971:270::-;30086:4;30108:13;30124:12;:10;:12::i;:::-;30108:28;;30147:64;30156:5;30163:7;30200:10;30172:25;30182:5;30189:7;30172:9;:25::i;:::-;:38;;;;:::i;:::-;30147:8;:64::i;:::-;30229:4;30222:11;;;29971:270;;;;:::o;42555:808::-;42601:7;42621:21;42689:14;;;;;;;;;;;42674:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42621:103;;42735:21;42803:14;;;;;;;;;;;42788:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42735:103;;42889:7;;42857:16;:29;42874:11;;;;;;;;;;;42857:29;;;;;;;;;;;;;;;;:39;42849:48;;;;;;42909:12;42923;42956:14;;;;;;;;;;;42941:56;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42908:91;;;;;43010:21;43034:14;;43010:38;;43063:19;;;;;;;;;;;43059:100;;;43126:4;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43099:48;;;;;;;;;;;;;;;43059:100;43169:12;43297:6;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43289:26;;43266:6;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43258:26;;43254:2;:30;;;;:::i;:::-;43222:14;43193:4;43185:13;;:52;;;;:::i;:::-;:100;;;;:::i;:::-;43184:131;;;;:::i;:::-;43169:146;;43349:4;43341:13;;43334:4;:20;;;;:::i;:::-;43326:29;;;;;;;;42555:808;:::o;50648:126::-;50714:4;50738:19;:28;50758:7;50738:28;;;;;;;;;;;;;;;;;;;;;;;;;50731:35;;50648:126;;;:::o;38286:42::-;;;;;;;;;;;;;:::o;39326:177::-;;;;;;;;;;;;;:::o;27244:::-;27363:7;27395:9;:18;27405:7;27395:18;;;;;;;;;;;;;;;;27388:25;;27244:177;;;:::o;22575:103::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22640:30:::1;22667:1;22640:18;:30::i;:::-;22575:103::o:0;42301:122::-;42353:4;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42388:5:::1;42370:15;;:23;;;;;;;;;;;;;;;;;;42411:4;42404:11;;42301:122:::0;:::o;45506:167::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45661:4:::1;45619:31;:39;45651:6;45619:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45506:167:::0;;:::o;38590:25::-;;;;:::o;41659:82::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41729:4:::1;41712:14;;:21;;;;;;;;;;;;;;;;;;41659:82::o:0;21924:87::-;21970:7;21997:6;;;;;;;;;;;21990:13;;21924:87;:::o;43371:491::-;43461:6;43482;43503:7;43525;43547:6;43596:14;43625:12;43652:17;43684;43716:22;43752:9;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43581:198;;;;;;;;;;43800:7;43809:5;43816:9;43827;43838:15;43792:62;;;;;;;;;;;;;;;43371:491;;;;;:::o;46411:110::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46504:9:::1;46491:10;;:22;;;;;;;;;;;;;;;;;;46411:110:::0;:::o;26172:104::-;26228:13;26261:7;26254:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26172:104;:::o;41749:301::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41858:14:::1;;;;;;;;;;;41850:22;;:4;:22;;::::0;41842:92:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41945:41;41974:4;41980:5;41945:28;:41::i;:::-;42036:5;42002:40;;42030:4;42002:40;;;;;;;;;;;;41749:301:::0;;:::o;38335:29::-;;;;;;;;;;;;;:::o;30744:505::-;30864:4;30886:13;30902:12;:10;:12::i;:::-;30886:28;;30925:24;30952:25;30962:5;30969:7;30952:9;:25::i;:::-;30925:52;;31030:15;31010:16;:35;;30988:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;31146:60;31155:5;31162:7;31190:15;31171:16;:34;31146:8;:60::i;:::-;31237:4;31230:11;;;;30744:505;;;;:::o;27627:234::-;27742:4;27764:13;27780:12;:10;:12::i;:::-;27764:28;;27803;27813:5;27820:2;27824:6;27803:9;:28::i;:::-;27849:4;27842:11;;;27627:234;;;;:::o;50782:93::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50866:1:::1;50845:18;:22;;;;50782:93::o:0;39608:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;46099:182::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46215:8:::1;46184:19;:28;46204:7;46184:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46255:7;46239:34;;;46264:8;46239:34;;;;;;:::i;:::-;;;;;;;;46099:182:::0;;:::o;45244:254::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45386:4:::1;45378;45371:3;45355:13;:11;:13::i;:::-;:19;;;;:::i;:::-;45354:28;;;;:::i;:::-;45353:37;;;;:::i;:::-;45343:6;:47;;45321:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;45486:4;45477:6;:13;;;;:::i;:::-;45464:10;:26;;;;45244:254:::0;:::o;51284:173::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51374:5:::1;51351:28;;:19;;;;;;;;;;;:28;;;51343:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51445:4;51423:19;;:26;;;;;;;;;;;;;;;;;;51284:173::o:0;46289:114::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46386:9:::1;46367:16;;:28;;;;;;;;;;;;;;;;;;46289:114:::0;:::o;44455:501::-;44563:4;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44642:6:::1;44637:1;44621:13;:11;:13::i;:::-;:17;;;;:::i;:::-;44620:28;;;;:::i;:::-;44607:9;:41;;44585:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;44800:4;44792::::0;44776:13:::1;:11;:13::i;:::-;:20;;;;:::i;:::-;44775:29;;;;:::i;:::-;44762:9;:42;;44740:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;44917:9;44895:19;:31;;;;44944:4;44937:11;;44455:501:::0;;;:::o;51465:175::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51556:4:::1;51533:27;;:19;;;;;;;;;;;:27;;;51525:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51627:5;51605:19;;:27;;;;;;;;;;;;;;;;;;51465:175::o:0;27924:201::-;28058:7;28090:11;:18;28102:5;28090:18;;;;;;;;;;;;;;;:27;28109:7;28090:27;;;;;;;;;;;;;;;;28083:34;;27924:201;;;;:::o;51648:225::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51699:43:::1;51717:24;51735:4;51717:9;:24::i;:::-;51699:17;:43::i;:::-;51756:12;51781:16;;;;;;;;;;;51773:30;;51812:21;51773:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51755:83;;;51857:7;51849:16;;;::::0;::::1;;51688:185;51648:225::o:0;38622:34::-;;;;;;;;;;;;;:::o;22833:238::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22956:1:::1;22936:22;;:8;:22;;::::0;22914:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23035:28;23054:8;23035:18;:28::i;:::-;22833:238:::0;:::o;38796:25::-;;;;:::o;50982:118::-;22155:12;:10;:12::i;:::-;22144:23;;:7;:5;:7::i;:::-;:23;;;22136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51076:15:::1;51084:6;51076:3;:7;;:15;;;;:::i;:::-;51052:14;:40;;;;50982:118:::0;:::o;750:98::-;803:7;830:10;823:17;;750:98;:::o;34381:380::-;34534:1;34517:19;;:5;:19;;;34509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34615:1;34596:21;;:7;:21;;;34588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34699:6;34669:11;:18;34681:5;34669:18;;;;;;;;;;;;;;;:27;34688:7;34669:27;;;;;;;;;;;;;;;:36;;;;34737:7;34721:32;;34730:5;34721:32;;;34746:6;34721:32;;;;;;:::i;:::-;;;;;;;;34381:380;;;:::o;35052:502::-;35187:24;35214:25;35224:5;35231:7;35214:9;:25::i;:::-;35187:52;;35274:17;35254:16;:37;35250:297;;35354:6;35334:16;:26;;35308:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;35469:51;35478:5;35485:7;35513:6;35494:16;:25;35469:8;:51::i;:::-;35250:297;35176:378;35052:502;;;:::o;46529:2880::-;46653:21;46677:19;:25;46697:4;46677:25;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;46719:19;:23;46739:2;46719:23;;;;;;;;;;;;;;;;;;;;;;;;;46677:65;46653:89;;46779:1;46763:18;;:4;:18;;;46755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46856:1;46842:16;;:2;:16;;;46834:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46925:1;46915:6;:11;46911:93;;46943:28;46959:4;46965:2;46969:1;46943:15;:28::i;:::-;46986:7;;;46911:93;47016:10;47037:14;;;;;;;;;;;47029:22;;:4;:22;;;:75;;;;;47069:31;:35;47101:2;47069:35;;;;;;;;;;;;;;;;;;;;;;;;;47068:36;47029:75;47016:88;;47115:11;47135:14;;;;;;;;;;;47129:20;;:2;:20;;;:75;;;;;47167:31;:37;47199:4;47167:37;;;;;;;;;;;;;;;;;;;;;;;;;47166:38;47129:75;47115:89;;47215:16;47242:7;:5;:7::i;:::-;47234:15;;:4;:15;;;:32;;;;47259:7;:5;:7::i;:::-;47253:13;;:2;:13;;;47234:32;47215:51;;47277:11;47305:1;47291:16;;:2;:16;;;:41;;;;47325:6;47311:21;;:2;:21;;;47291:41;47277:55;;47343:17;47363:11;:21;;;;47378:6;47363:21;:38;;;;47388:13;;;;;;;;;;;47363:38;47343:58;;47426:15;;;;;;;;;;;:32;;;;;47446:12;47445:13;47426:32;47422:1076;;;47501:14;;;;;;;;;;;:34;;;;47519:16;47501:34;47475:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;47612:5;47608:879;;;47678:21;;47668:6;:31;;47638:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;47871:10;;47854:13;47864:2;47854:9;:13::i;:::-;47845:6;:22;;;;:::i;:::-;:36;;47815:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;47608:879;;;47970:6;47966:521;;48213:31;:35;48245:2;48213:35;;;;;;;;;;;;;;;;;;;;;;;;;48212:36;:95;;;;;48270:31;:37;48302:4;48270:37;;;;;;;;;;;;;;;;;;;;;;;;;48269:38;48212:95;48190:297;;;48398:10;;48381:13;48391:2;48381:9;:13::i;:::-;48372:6;:22;;;;:::i;:::-;:36;;48342:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;48190:297;47966:521;47608:879;47422:1076;48526:25;:31;48552:4;48526:31;;;;;;;;;;;;;;;;;;;;;;;;;48522:269;;;48602:1;48578:16;:20;48595:2;48578:20;;;;;;;;;;;;;;;;:25;48574:101;;48647:12;48624:16;:20;48641:2;48624:20;;;;;;;;;;;;;;;:35;;;;48574:101;48522:269;;;48712:13;;;;;;;;;;;48707:73;;48760:4;48746:11;;:18;;;;;;;;;;;;;;;;;;48707:73;48522:269;48808:13;;;;;;;;;;;48807:14;:63;;;;;48839:25;:31;48865:4;48839:31;;;;;;;;;;;;;;;;;;;;;;;;;48838:32;48807:63;:106;;;;;48888:19;:25;48908:4;48888:25;;;;;;;;;;;;;;;;;;;;;;;;;48887:26;48807:106;:147;;;;;48931:19;:23;48951:2;48931:23;;;;;;;;;;;;;;;;;;;;;;;;;48930:24;48807:147;48803:536;;;48971:28;49002:24;49020:4;49002:9;:24::i;:::-;48971:55;;49041:12;49080:19;;49056:20;:43;;49041:58;;49118:17;:15;:17::i;:::-;:45;;;;;49156:7;49118:45;:84;;;;;49186:16;49185:17;49118:84;49114:214;;;49239:4;49223:13;;:20;;;;;;;;;;;;;;;;;;49262:10;:8;:10::i;:::-;49307:5;49291:13;;:21;;;;;;;;;;;;;;;;;;49114:214;48956:383;;48803:536;49351:50;49369:4;49375:2;49379:6;49387;49395:5;49351:17;:50::i;:::-;46642:2767;;;;;;46529:2880;;;;:::o;23231:191::-;23305:16;23324:6;;;;;;;;;;;23305:25;;23350:8;23341:6;;:17;;;;;;;;;;;;;;;;;;23405:8;23374:40;;23395:8;23374:40;;;;;;;;;;;;23294:128;23231:191;:::o;42058:235::-;42175:5;42141:25;:31;42167:4;42141:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42191:38;42217:4;42223:5;42191:25;:38::i;:::-;42279:5;42245:40;;42273:4;42245:40;;;;;;;;;;;;42058:235;;:::o;52062:479::-;52129:21;52167:1;52153:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52129:40;;52198:4;52180;52185:1;52180:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;52224:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52214:4;52219:1;52214:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;52260:63;52277:4;52292:16;;;;;;;;;;;52311:11;52260:8;:63::i;:::-;52336:16;;;;;;;;;;;:67;;;52418:11;52444:1;52460:4;52487;52507:15;52336:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52118:423;52062:479;:::o;17553:98::-;17611:7;17642:1;17638;:5;;;;:::i;:::-;17631:12;;17553:98;;;;:::o;37486:708::-;37633:1;37617:18;;:4;:18;;;37609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37710:1;37696:16;;:2;:16;;;37688:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37765:38;37786:4;37792:2;37796:6;37765:20;:38::i;:::-;37816:19;37838:9;:15;37848:4;37838:15;;;;;;;;;;;;;;;;37816:37;;37901:6;37886:11;:21;;37864:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;38041:6;38027:11;:20;38009:9;:15;38019:4;38009:15;;;;;;;;;;;;;;;:38;;;;38086:6;38069:9;:13;38079:2;38069:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;38125:2;38110:26;;38119:4;38110:26;;;38129:6;38110:26;;;;;;:::i;:::-;;;;;;;;38149:37;38169:4;38175:2;38179:6;38149:19;:37::i;:::-;37598:596;37486:708;;;:::o;42431:116::-;42481:4;42523:1;42505:15;:13;:15::i;:::-;:19;:34;;42534:5;42505:34;;;42527:4;42505:34;42498:41;;42431:116;:::o;52920:1796::-;52959:23;52985:24;53003:4;52985:9;:24::i;:::-;52959:50;;53020:25;53106:21;;53070:19;;53048;;:41;;;;:::i;:::-;:79;;;;:::i;:::-;53020:107;;53161:1;53142:15;:20;:46;;;;53187:1;53166:17;:22;53142:46;53138:59;;;53190:7;;;;53138:59;53229:19;;53211:15;:37;53207:107;;;53283:19;;53265:37;;53207:107;53324:23;53438:1;53405:17;53369:19;;53351:15;:37;;;;:::i;:::-;53350:72;;;;:::i;:::-;:89;;;;:::i;:::-;53324:115;;53450:26;53479:36;53499:15;53479;:19;;:36;;;;:::i;:::-;53450:65;;53526:25;53554:21;53526:49;;53586:37;53604:18;53586:17;:37::i;:::-;53634:18;53655:44;53681:17;53655:21;:25;;:44;;;;:::i;:::-;53634:65;;53710:23;53736:82;53790:17;53736:35;53751:19;;53736:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;53710:108;;53829:25;53857:84;53913:17;53857:37;53872:21;;53857:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;53829:112;;53952:23;54009:17;53991:15;53978:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;53952:74;;54061:1;54043:15;:19;:42;;;;;54084:1;54066:15;:19;54043:42;54039:280;;;54102:47;54116:15;54133;54102:13;:47::i;:::-;54169:138;54202:18;54239:15;54273:19;;54169:138;;;;;;;;:::i;:::-;;;;;;;;54039:280;54353:1;54331:19;:23;;;;54387:1;54365:19;:23;;;;54423:1;54399:21;:25;;;;54438;54477:16;;;;;;;;;;;54469:30;;54507:15;54469:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54437:90;;;54546:20;54538:29;;;;;;54579:27;54620:10;;;;;;;;;;;54612:24;;54644:17;54612:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54578:88;;;54685:22;54677:31;;;;;;52948:1768;;;;;;;;;;;52920:1796;:::o;49417:1223::-;49582:11;49596:21;49608:4;49614:2;49596:11;:21::i;:::-;49582:35;;49634:19;:25;49654:4;49634:25;;;;;;;;;;;;;;;;;;;;;;;;;49630:959;;;49676:38;49697:4;49703:2;49707:6;49676:20;:38::i;:::-;49729:7;;;49630:959;49757:6;49753:836;;;49780:13;49796:10;;49780:26;;49821:17;49841:13;;49821:33;;49873:6;49869:151;;;49921:18;;49908:10;;:31;;;;:::i;:::-;49900:39;;49986:18;;49970:13;;:34;;;;:::i;:::-;49958:46;;49869:151;50038:5;50034:148;;;50085:17;;50072:10;;:30;;;;:::i;:::-;50064:38;;50149:17;;50133:13;;:33;;;;:::i;:::-;50121:45;;50034:148;50196:12;50211:26;50233:3;50211:17;50222:5;50211:6;:10;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;50196:41;;50300:5;50283:13;;50276:4;:20;;;;:::i;:::-;50275:30;;;;:::i;:::-;50252:19;;:53;;;;;;;:::i;:::-;;;;;;;;50364:5;50351:9;50344:4;:16;;;;:::i;:::-;50343:26;;;;:::i;:::-;50320:19;;:49;;;;;;;:::i;:::-;;;;;;;;50436:5;50417:15;;50410:4;:22;;;;:::i;:::-;50409:32;;;;:::i;:::-;50384:21;;:57;;;;;;;:::i;:::-;;;;;;;;50469:1;50462:4;:8;50458:91;;;50491:42;50507:4;50521;50528;50491:15;:42::i;:::-;50458:91;50573:4;50563:14;;;;;:::i;:::-;;;49765:824;;;49753:836;50599:33;50615:4;50621:2;50625:6;50599:15;:33::i;:::-;49571:1069;49417:1223;;;;;;:::o;36154:125::-;;;;:::o;36883:124::-;;;;:::o;17196:98::-;17254:7;17285:1;17281;:5;;;;:::i;:::-;17274:12;;17196:98;;;;:::o;17952:::-;18010:7;18041:1;18037;:5;;;;:::i;:::-;18030:12;;17952:98;;;;:::o;52549:363::-;52631:63;52648:4;52663:16;;;;;;;;;;;52682:11;52631:8;:63::i;:::-;52705:16;;;;;;;;;;;:32;;;52745:9;52778:4;52798:11;52824:1;52840;52856:7;:5;:7::i;:::-;52878:15;52705:199;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;52549:363;;:::o;31728:605::-;31880:1;31864:18;;:4;:18;;;31856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31957:1;31943:16;;:2;:16;;;31935:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32012:38;32033:4;32039:2;32043:6;32012:20;:38::i;:::-;32063:19;32085:9;:15;32095:4;32085:15;;;;;;;;;;;;;;;;32063:37;;32170:6;32156:11;:20;32138:9;:15;32148:4;32138:15;;;;;;;;;;;;;;;:38;;;;32225:6;32208:9;:13;32218:2;32208:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;32264:2;32249:26;;32258:4;32249:26;;;32268:6;32249:26;;;;;;:::i;:::-;;;;;;;;32288:37;32308:4;32314:2;32318:6;32288:19;:37::i;:::-;31845:488;31728:605;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:474::-;3866:6;3874;3923:2;3911:9;3902:7;3898:23;3894:32;3891:119;;;3929:79;;:::i;:::-;3891:119;4049:1;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4020:117;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;3798:474;;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:619::-;4690:6;4698;4706;4755:2;4743:9;4734:7;4730:23;4726:32;4723:119;;;4761:79;;:::i;:::-;4723:119;4881:1;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4852:117;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;5136:2;5162:53;5207:7;5198:6;5187:9;5183:22;5162:53;:::i;:::-;5152:63;;5107:118;4613:619;;;;;:::o;5238:::-;5315:6;5323;5331;5380:2;5368:9;5359:7;5355:23;5351:32;5348:119;;;5386:79;;:::i;:::-;5348:119;5506:1;5531:53;5576:7;5567:6;5556:9;5552:22;5531:53;:::i;:::-;5521:63;;5477:117;5633:2;5659:53;5704:7;5695:6;5684:9;5680:22;5659:53;:::i;:::-;5649:63;;5604:118;5761:2;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5732:118;5238:619;;;;;:::o;5863:329::-;5922:6;5971:2;5959:9;5950:7;5946:23;5942:32;5939:119;;;5977:79;;:::i;:::-;5939:119;6097:1;6122:53;6167:7;6158:6;6147:9;6143:22;6122:53;:::i;:::-;6112:63;;6068:117;5863:329;;;;:::o;6198:86::-;6233:7;6273:4;6266:5;6262:16;6251:27;;6198:86;;;:::o;6290:112::-;6373:22;6389:5;6373:22;:::i;:::-;6368:3;6361:35;6290:112;;:::o;6408:214::-;6497:4;6535:2;6524:9;6520:18;6512:26;;6548:67;6612:1;6601:9;6597:17;6588:6;6548:67;:::i;:::-;6408:214;;;;:::o;6628:60::-;6656:3;6677:5;6670:12;;6628:60;;;:::o;6694:142::-;6744:9;6777:53;6795:34;6804:24;6822:5;6804:24;:::i;:::-;6795:34;:::i;:::-;6777:53;:::i;:::-;6764:66;;6694:142;;;:::o;6842:126::-;6892:9;6925:37;6956:5;6925:37;:::i;:::-;6912:50;;6842:126;;;:::o;6974:152::-;7050:9;7083:37;7114:5;7083:37;:::i;:::-;7070:50;;6974:152;;;:::o;7132:183::-;7245:63;7302:5;7245:63;:::i;:::-;7240:3;7233:76;7132:183;;:::o;7321:274::-;7440:4;7478:2;7467:9;7463:18;7455:26;;7491:97;7585:1;7574:9;7570:17;7561:6;7491:97;:::i;:::-;7321:274;;;;:::o;7601:118::-;7688:24;7706:5;7688:24;:::i;:::-;7683:3;7676:37;7601:118;;:::o;7725:222::-;7818:4;7856:2;7845:9;7841:18;7833:26;;7869:71;7937:1;7926:9;7922:17;7913:6;7869:71;:::i;:::-;7725:222;;;;:::o;7953:116::-;8023:21;8038:5;8023:21;:::i;:::-;8016:5;8013:32;8003:60;;8059:1;8056;8049:12;8003:60;7953:116;:::o;8075:133::-;8118:5;8156:6;8143:20;8134:29;;8172:30;8196:5;8172:30;:::i;:::-;8075:133;;;;:::o;8214:468::-;8279:6;8287;8336:2;8324:9;8315:7;8311:23;8307:32;8304:119;;;8342:79;;:::i;:::-;8304:119;8462:1;8487:53;8532:7;8523:6;8512:9;8508:22;8487:53;:::i;:::-;8477:63;;8433:117;8589:2;8615:50;8657:7;8648:6;8637:9;8633:22;8615:50;:::i;:::-;8605:60;;8560:115;8214:468;;;;;:::o;8688:105::-;8724:7;8764:22;8757:5;8753:34;8742:45;;8688:105;;;:::o;8799:115::-;8884:23;8901:5;8884:23;:::i;:::-;8879:3;8872:36;8799:115;;:::o;8920:76::-;8956:7;8985:5;8974:16;;8920:76;;;:::o;9002:115::-;9087:23;9104:5;9087:23;:::i;:::-;9082:3;9075:36;9002:115;;:::o;9123:652::-;9322:4;9360:3;9349:9;9345:19;9337:27;;9374:69;9440:1;9429:9;9425:17;9416:6;9374:69;:::i;:::-;9453:70;9519:2;9508:9;9504:18;9495:6;9453:70;:::i;:::-;9533:72;9601:2;9590:9;9586:18;9577:6;9533:72;:::i;:::-;9615;9683:2;9672:9;9668:18;9659:6;9615:72;:::i;:::-;9697:71;9763:3;9752:9;9748:19;9739:6;9697:71;:::i;:::-;9123:652;;;;;;;;:::o;9781:180::-;9829:77;9826:1;9819:88;9926:4;9923:1;9916:15;9950:4;9947:1;9940:15;9967:320;10011:6;10048:1;10042:4;10038:12;10028:22;;10095:1;10089:4;10085:12;10116:18;10106:81;;10172:4;10164:6;10160:17;10150:27;;10106:81;10234:2;10226:6;10223:14;10203:18;10200:38;10197:84;;10253:18;;:::i;:::-;10197:84;10018:269;9967:320;;;:::o;10293:182::-;10433:34;10429:1;10421:6;10417:14;10410:58;10293:182;:::o;10481:366::-;10623:3;10644:67;10708:2;10703:3;10644:67;:::i;:::-;10637:74;;10720:93;10809:3;10720:93;:::i;:::-;10838:2;10833:3;10829:12;10822:19;;10481:366;;;:::o;10853:419::-;11019:4;11057:2;11046:9;11042:18;11034:26;;11106:9;11100:4;11096:20;11092:1;11081:9;11077:17;11070:47;11134:131;11260:4;11134:131;:::i;:::-;11126:139;;10853:419;;;:::o;11278:147::-;11379:11;11416:3;11401:18;;11278:147;;;;:::o;11431:114::-;;:::o;11551:398::-;11710:3;11731:83;11812:1;11807:3;11731:83;:::i;:::-;11724:90;;11823:93;11912:3;11823:93;:::i;:::-;11941:1;11936:3;11932:11;11925:18;;11551:398;;;:::o;11955:379::-;12139:3;12161:147;12304:3;12161:147;:::i;:::-;12154:154;;12325:3;12318:10;;11955:379;;;:::o;12340:180::-;12388:77;12385:1;12378:88;12485:4;12482:1;12475:15;12509:4;12506:1;12499:15;12526:410;12566:7;12589:20;12607:1;12589:20;:::i;:::-;12584:25;;12623:20;12641:1;12623:20;:::i;:::-;12618:25;;12678:1;12675;12671:9;12700:30;12718:11;12700:30;:::i;:::-;12689:41;;12879:1;12870:7;12866:15;12863:1;12860:22;12840:1;12833:9;12813:83;12790:139;;12909:18;;:::i;:::-;12790:139;12574:362;12526:410;;;;:::o;12942:180::-;12990:77;12987:1;12980:88;13087:4;13084:1;13077:15;13111:4;13108:1;13101:15;13128:185;13168:1;13185:20;13203:1;13185:20;:::i;:::-;13180:25;;13219:20;13237:1;13219:20;:::i;:::-;13214:25;;13258:1;13248:35;;13263:18;;:::i;:::-;13248:35;13305:1;13302;13298:9;13293:14;;13128:185;;;;:::o;13319:234::-;13459:34;13455:1;13447:6;13443:14;13436:58;13528:17;13523:2;13515:6;13511:15;13504:42;13319:234;:::o;13559:366::-;13701:3;13722:67;13786:2;13781:3;13722:67;:::i;:::-;13715:74;;13798:93;13887:3;13798:93;:::i;:::-;13916:2;13911:3;13907:12;13900:19;;13559:366;;;:::o;13931:419::-;14097:4;14135:2;14124:9;14120:18;14112:26;;14184:9;14178:4;14174:20;14170:1;14159:9;14155:17;14148:47;14212:131;14338:4;14212:131;:::i;:::-;14204:139;;13931:419;;;:::o;14356:191::-;14396:3;14415:20;14433:1;14415:20;:::i;:::-;14410:25;;14449:20;14467:1;14449:20;:::i;:::-;14444:25;;14492:1;14489;14485:9;14478:16;;14513:3;14510:1;14507:10;14504:36;;;14520:18;;:::i;:::-;14504:36;14356:191;;;;:::o;14553:179::-;14693:31;14689:1;14681:6;14677:14;14670:55;14553:179;:::o;14738:366::-;14880:3;14901:67;14965:2;14960:3;14901:67;:::i;:::-;14894:74;;14977:93;15066:3;14977:93;:::i;:::-;15095:2;15090:3;15086:12;15079:19;;14738:366;;;:::o;15110:419::-;15276:4;15314:2;15303:9;15299:18;15291:26;;15363:9;15357:4;15353:20;15349:1;15338:9;15334:17;15327:47;15391:131;15517:4;15391:131;:::i;:::-;15383:139;;15110:419;;;:::o;15535:143::-;15592:5;15623:6;15617:13;15608:22;;15639:33;15666:5;15639:33;:::i;:::-;15535:143;;;;:::o;15684:351::-;15754:6;15803:2;15791:9;15782:7;15778:23;15774:32;15771:119;;;15809:79;;:::i;:::-;15771:119;15929:1;15954:64;16010:7;16001:6;15990:9;15986:22;15954:64;:::i;:::-;15944:74;;15900:128;15684:351;;;;:::o;16041:114::-;16078:7;16118:30;16111:5;16107:42;16096:53;;16041:114;;;:::o;16161:122::-;16234:24;16252:5;16234:24;:::i;:::-;16227:5;16224:35;16214:63;;16273:1;16270;16263:12;16214:63;16161:122;:::o;16289:143::-;16346:5;16377:6;16371:13;16362:22;;16393:33;16420:5;16393:33;:::i;:::-;16289:143;;;;:::o;16438:93::-;16474:7;16514:10;16507:5;16503:22;16492:33;;16438:93;;;:::o;16537:120::-;16609:23;16626:5;16609:23;:::i;:::-;16602:5;16599:34;16589:62;;16647:1;16644;16637:12;16589:62;16537:120;:::o;16663:141::-;16719:5;16750:6;16744:13;16735:22;;16766:32;16792:5;16766:32;:::i;:::-;16663:141;;;;:::o;16810:661::-;16897:6;16905;16913;16962:2;16950:9;16941:7;16937:23;16933:32;16930:119;;;16968:79;;:::i;:::-;16930:119;17088:1;17113:64;17169:7;17160:6;17149:9;17145:22;17113:64;:::i;:::-;17103:74;;17059:128;17226:2;17252:64;17308:7;17299:6;17288:9;17284:22;17252:64;:::i;:::-;17242:74;;17197:129;17365:2;17391:63;17446:7;17437:6;17426:9;17422:22;17391:63;:::i;:::-;17381:73;;17336:128;16810:661;;;;;:::o;17477:120::-;17549:23;17566:5;17549:23;:::i;:::-;17542:5;17539:34;17529:62;;17587:1;17584;17577:12;17529:62;17477:120;:::o;17603:141::-;17659:5;17690:6;17684:13;17675:22;;17706:32;17732:5;17706:32;:::i;:::-;17603:141;;;;:::o;17750:120::-;17822:23;17839:5;17822:23;:::i;:::-;17815:5;17812:34;17802:62;;17860:1;17857;17850:12;17802:62;17750:120;:::o;17876:141::-;17932:5;17963:6;17957:13;17948:22;;17979:32;18005:5;17979:32;:::i;:::-;17876:141;;;;:::o;18023:143::-;18080:5;18111:6;18105:13;18096:22;;18127:33;18154:5;18127:33;:::i;:::-;18023:143;;;;:::o;18172:971::-;18275:6;18283;18291;18299;18307;18356:3;18344:9;18335:7;18331:23;18327:33;18324:120;;;18363:79;;:::i;:::-;18324:120;18483:1;18508:63;18563:7;18554:6;18543:9;18539:22;18508:63;:::i;:::-;18498:73;;18454:127;18620:2;18646:63;18701:7;18692:6;18681:9;18677:22;18646:63;:::i;:::-;18636:73;;18591:128;18758:2;18784:64;18840:7;18831:6;18820:9;18816:22;18784:64;:::i;:::-;18774:74;;18729:129;18897:2;18923:64;18979:7;18970:6;18959:9;18955:22;18923:64;:::i;:::-;18913:74;;18868:129;19036:3;19063:63;19118:7;19109:6;19098:9;19094:22;19063:63;:::i;:::-;19053:73;;19007:129;18172:971;;;;;;;;:::o;19149:118::-;19220:22;19236:5;19220:22;:::i;:::-;19213:5;19210:33;19200:61;;19257:1;19254;19247:12;19200:61;19149:118;:::o;19273:139::-;19328:5;19359:6;19353:13;19344:22;;19375:31;19400:5;19375:31;:::i;:::-;19273:139;;;;:::o;19418:347::-;19486:6;19535:2;19523:9;19514:7;19510:23;19506:32;19503:119;;;19541:79;;:::i;:::-;19503:119;19661:1;19686:62;19740:7;19731:6;19720:9;19716:22;19686:62;:::i;:::-;19676:72;;19632:126;19418:347;;;;:::o;19771:102::-;19813:8;19860:5;19857:1;19853:13;19832:34;;19771:102;;;:::o;19879:848::-;19940:5;19947:4;19971:6;19962:15;;19995:5;19986:14;;20009:712;20030:1;20020:8;20017:15;20009:712;;;20125:4;20120:3;20116:14;20110:4;20107:24;20104:50;;;20134:18;;:::i;:::-;20104:50;20184:1;20174:8;20170:16;20167:451;;;20599:4;20592:5;20588:16;20579:25;;20167:451;20649:4;20643;20639:15;20631:23;;20679:32;20702:8;20679:32;:::i;:::-;20667:44;;20009:712;;;19879:848;;;;;;;:::o;20733:1073::-;20787:5;20978:8;20968:40;;20999:1;20990:10;;21001:5;;20968:40;21027:4;21017:36;;21044:1;21035:10;;21046:5;;21017:36;21113:4;21161:1;21156:27;;;;21197:1;21192:191;;;;21106:277;;21156:27;21174:1;21165:10;;21176:5;;;21192:191;21237:3;21227:8;21224:17;21221:43;;;21244:18;;:::i;:::-;21221:43;21293:8;21290:1;21286:16;21277:25;;21328:3;21321:5;21318:14;21315:40;;;21335:18;;:::i;:::-;21315:40;21368:5;;;21106:277;;21492:2;21482:8;21479:16;21473:3;21467:4;21464:13;21460:36;21442:2;21432:8;21429:16;21424:2;21418:4;21415:12;21411:35;21395:111;21392:246;;;21548:8;21542:4;21538:19;21529:28;;21583:3;21576:5;21573:14;21570:40;;;21590:18;;:::i;:::-;21570:40;21623:5;;21392:246;21663:42;21701:3;21691:8;21685:4;21682:1;21663:42;:::i;:::-;21648:57;;;;21737:4;21732:3;21728:14;21721:5;21718:25;21715:51;;;21746:18;;:::i;:::-;21715:51;21795:4;21788:5;21784:16;21775:25;;20733:1073;;;;;;:::o;21812:285::-;21872:5;21896:23;21914:4;21896:23;:::i;:::-;21888:31;;21940:27;21958:8;21940:27;:::i;:::-;21928:39;;21986:104;22023:66;22013:8;22007:4;21986:104;:::i;:::-;21977:113;;21812:285;;;;:::o;22103:244::-;22243:34;22239:1;22231:6;22227:14;22220:58;22312:27;22307:2;22299:6;22295:15;22288:52;22103:244;:::o;22353:366::-;22495:3;22516:67;22580:2;22575:3;22516:67;:::i;:::-;22509:74;;22592:93;22681:3;22592:93;:::i;:::-;22710:2;22705:3;22701:12;22694:19;;22353:366;;;:::o;22725:419::-;22891:4;22929:2;22918:9;22914:18;22906:26;;22978:9;22972:4;22968:20;22964:1;22953:9;22949:17;22942:47;23006:131;23132:4;23006:131;:::i;:::-;22998:139;;22725:419;;;:::o;23150:224::-;23290:34;23286:1;23278:6;23274:14;23267:58;23359:7;23354:2;23346:6;23342:15;23335:32;23150:224;:::o;23380:366::-;23522:3;23543:67;23607:2;23602:3;23543:67;:::i;:::-;23536:74;;23619:93;23708:3;23619:93;:::i;:::-;23737:2;23732:3;23728:12;23721:19;;23380:366;;;:::o;23752:419::-;23918:4;23956:2;23945:9;23941:18;23933:26;;24005:9;23999:4;23995:20;23991:1;23980:9;23976:17;23969:47;24033:131;24159:4;24033:131;:::i;:::-;24025:139;;23752:419;;;:::o;24177:222::-;24317:34;24313:1;24305:6;24301:14;24294:58;24386:5;24381:2;24373:6;24369:15;24362:30;24177:222;:::o;24405:366::-;24547:3;24568:67;24632:2;24627:3;24568:67;:::i;:::-;24561:74;;24644:93;24733:3;24644:93;:::i;:::-;24762:2;24757:3;24753:12;24746:19;;24405:366;;;:::o;24777:419::-;24943:4;24981:2;24970:9;24966:18;24958:26;;25030:9;25024:4;25020:20;25016:1;25005:9;25001:17;24994:47;25058:131;25184:4;25058:131;:::i;:::-;25050:139;;24777:419;;;:::o;25202:178::-;25342:30;25338:1;25330:6;25326:14;25319:54;25202:178;:::o;25386:366::-;25528:3;25549:67;25613:2;25608:3;25549:67;:::i;:::-;25542:74;;25625:93;25714:3;25625:93;:::i;:::-;25743:2;25738:3;25734:12;25727:19;;25386:366;;;:::o;25758:419::-;25924:4;25962:2;25951:9;25947:18;25939:26;;26011:9;26005:4;26001:20;25997:1;25986:9;25982:17;25975:47;26039:131;26165:4;26039:131;:::i;:::-;26031:139;;25758:419;;;:::o;26183:240::-;26323:34;26319:1;26311:6;26307:14;26300:58;26392:23;26387:2;26379:6;26375:15;26368:48;26183:240;:::o;26429:366::-;26571:3;26592:67;26656:2;26651:3;26592:67;:::i;:::-;26585:74;;26668:93;26757:3;26668:93;:::i;:::-;26786:2;26781:3;26777:12;26770:19;;26429:366;;;:::o;26801:419::-;26967:4;27005:2;26994:9;26990:18;26982:26;;27054:9;27048:4;27044:20;27040:1;27029:9;27025:17;27018:47;27082:131;27208:4;27082:131;:::i;:::-;27074:139;;26801:419;;;:::o;27226:239::-;27366:34;27362:1;27354:6;27350:14;27343:58;27435:22;27430:2;27422:6;27418:15;27411:47;27226:239;:::o;27471:366::-;27613:3;27634:67;27698:2;27693:3;27634:67;:::i;:::-;27627:74;;27710:93;27799:3;27710:93;:::i;:::-;27828:2;27823:3;27819:12;27812:19;;27471:366;;;:::o;27843:419::-;28009:4;28047:2;28036:9;28032:18;28024:26;;28096:9;28090:4;28086:20;28082:1;28071:9;28067:17;28060:47;28124:131;28250:4;28124:131;:::i;:::-;28116:139;;27843:419;;;:::o;28268:179::-;28408:31;28404:1;28396:6;28392:14;28385:55;28268:179;:::o;28453:366::-;28595:3;28616:67;28680:2;28675:3;28616:67;:::i;:::-;28609:74;;28692:93;28781:3;28692:93;:::i;:::-;28810:2;28805:3;28801:12;28794:19;;28453:366;;;:::o;28825:419::-;28991:4;29029:2;29018:9;29014:18;29006:26;;29078:9;29072:4;29068:20;29064:1;29053:9;29049:17;29042:47;29106:131;29232:4;29106:131;:::i;:::-;29098:139;;28825:419;;;:::o;29250:225::-;29390:34;29386:1;29378:6;29374:14;29367:58;29459:8;29454:2;29446:6;29442:15;29435:33;29250:225;:::o;29481:366::-;29623:3;29644:67;29708:2;29703:3;29644:67;:::i;:::-;29637:74;;29720:93;29809:3;29720:93;:::i;:::-;29838:2;29833:3;29829:12;29822:19;;29481:366;;;:::o;29853:419::-;30019:4;30057:2;30046:9;30042:18;30034:26;;30106:9;30100:4;30096:20;30092:1;30081:9;30077:17;30070:47;30134:131;30260:4;30134:131;:::i;:::-;30126:139;;29853:419;;;:::o;30278:223::-;30418:34;30414:1;30406:6;30402:14;30395:58;30487:6;30482:2;30474:6;30470:15;30463:31;30278:223;:::o;30507:366::-;30649:3;30670:67;30734:2;30729:3;30670:67;:::i;:::-;30663:74;;30746:93;30835:3;30746:93;:::i;:::-;30864:2;30859:3;30855:12;30848:19;;30507:366;;;:::o;30879:419::-;31045:4;31083:2;31072:9;31068:18;31060:26;;31132:9;31126:4;31122:20;31118:1;31107:9;31103:17;31096:47;31160:131;31286:4;31160:131;:::i;:::-;31152:139;;30879:419;;;:::o;31304:221::-;31444:34;31440:1;31432:6;31428:14;31421:58;31513:4;31508:2;31500:6;31496:15;31489:29;31304:221;:::o;31531:366::-;31673:3;31694:67;31758:2;31753:3;31694:67;:::i;:::-;31687:74;;31770:93;31859:3;31770:93;:::i;:::-;31888:2;31883:3;31879:12;31872:19;;31531:366;;;:::o;31903:419::-;32069:4;32107:2;32096:9;32092:18;32084:26;;32156:9;32150:4;32146:20;32142:1;32131:9;32127:17;32120:47;32184:131;32310:4;32184:131;:::i;:::-;32176:139;;31903:419;;;:::o;32328:179::-;32468:31;32464:1;32456:6;32452:14;32445:55;32328:179;:::o;32513:366::-;32655:3;32676:67;32740:2;32735:3;32676:67;:::i;:::-;32669:74;;32752:93;32841:3;32752:93;:::i;:::-;32870:2;32865:3;32861:12;32854:19;;32513:366;;;:::o;32885:419::-;33051:4;33089:2;33078:9;33074:18;33066:26;;33138:9;33132:4;33128:20;33124:1;33113:9;33109:17;33102:47;33166:131;33292:4;33166:131;:::i;:::-;33158:139;;32885:419;;;:::o;33310:224::-;33450:34;33446:1;33438:6;33434:14;33427:58;33519:7;33514:2;33506:6;33502:15;33495:32;33310:224;:::o;33540:366::-;33682:3;33703:67;33767:2;33762:3;33703:67;:::i;:::-;33696:74;;33779:93;33868:3;33779:93;:::i;:::-;33897:2;33892:3;33888:12;33881:19;;33540:366;;;:::o;33912:419::-;34078:4;34116:2;34105:9;34101:18;34093:26;;34165:9;34159:4;34155:20;34151:1;34140:9;34136:17;34129:47;34193:131;34319:4;34193:131;:::i;:::-;34185:139;;33912:419;;;:::o;34337:222::-;34477:34;34473:1;34465:6;34461:14;34454:58;34546:5;34541:2;34533:6;34529:15;34522:30;34337:222;:::o;34565:366::-;34707:3;34728:67;34792:2;34787:3;34728:67;:::i;:::-;34721:74;;34804:93;34893:3;34804:93;:::i;:::-;34922:2;34917:3;34913:12;34906:19;;34565:366;;;:::o;34937:419::-;35103:4;35141:2;35130:9;35126:18;35118:26;;35190:9;35184:4;35180:20;35176:1;35165:9;35161:17;35154:47;35218:131;35344:4;35218:131;:::i;:::-;35210:139;;34937:419;;;:::o;35362:172::-;35502:24;35498:1;35490:6;35486:14;35479:48;35362:172;:::o;35540:366::-;35682:3;35703:67;35767:2;35762:3;35703:67;:::i;:::-;35696:74;;35779:93;35868:3;35779:93;:::i;:::-;35897:2;35892:3;35888:12;35881:19;;35540:366;;;:::o;35912:419::-;36078:4;36116:2;36105:9;36101:18;36093:26;;36165:9;36159:4;36155:20;36151:1;36140:9;36136:17;36129:47;36193:131;36319:4;36193:131;:::i;:::-;36185:139;;35912:419;;;:::o;36337:240::-;36477:34;36473:1;36465:6;36461:14;36454:58;36546:23;36541:2;36533:6;36529:15;36522:48;36337:240;:::o;36583:366::-;36725:3;36746:67;36810:2;36805:3;36746:67;:::i;:::-;36739:74;;36822:93;36911:3;36822:93;:::i;:::-;36940:2;36935:3;36931:12;36924:19;;36583:366;;;:::o;36955:419::-;37121:4;37159:2;37148:9;37144:18;37136:26;;37208:9;37202:4;37198:20;37194:1;37183:9;37179:17;37172:47;37236:131;37362:4;37236:131;:::i;:::-;37228:139;;36955:419;;;:::o;37380:169::-;37520:21;37516:1;37508:6;37504:14;37497:45;37380:169;:::o;37555:366::-;37697:3;37718:67;37782:2;37777:3;37718:67;:::i;:::-;37711:74;;37794:93;37883:3;37794:93;:::i;:::-;37912:2;37907:3;37903:12;37896:19;;37555:366;;;:::o;37927:419::-;38093:4;38131:2;38120:9;38116:18;38108:26;;38180:9;38174:4;38170:20;38166:1;38155:9;38151:17;38144:47;38208:131;38334:4;38208:131;:::i;:::-;38200:139;;37927:419;;;:::o;38352:180::-;38400:77;38397:1;38390:88;38497:4;38494:1;38487:15;38521:4;38518:1;38511:15;38538:180;38586:77;38583:1;38576:88;38683:4;38680:1;38673:15;38707:4;38704:1;38697:15;38724:85;38769:7;38798:5;38787:16;;38724:85;;;:::o;38815:158::-;38873:9;38906:61;38924:42;38933:32;38959:5;38933:32;:::i;:::-;38924:42;:::i;:::-;38906:61;:::i;:::-;38893:74;;38815:158;;;:::o;38979:147::-;39074:45;39113:5;39074:45;:::i;:::-;39069:3;39062:58;38979:147;;:::o;39132:114::-;39199:6;39233:5;39227:12;39217:22;;39132:114;;;:::o;39252:184::-;39351:11;39385:6;39380:3;39373:19;39425:4;39420:3;39416:14;39401:29;;39252:184;;;;:::o;39442:132::-;39509:4;39532:3;39524:11;;39562:4;39557:3;39553:14;39545:22;;39442:132;;;:::o;39580:108::-;39657:24;39675:5;39657:24;:::i;:::-;39652:3;39645:37;39580:108;;:::o;39694:179::-;39763:10;39784:46;39826:3;39818:6;39784:46;:::i;:::-;39862:4;39857:3;39853:14;39839:28;;39694:179;;;;:::o;39879:113::-;39949:4;39981;39976:3;39972:14;39964:22;;39879:113;;;:::o;40028:732::-;40147:3;40176:54;40224:5;40176:54;:::i;:::-;40246:86;40325:6;40320:3;40246:86;:::i;:::-;40239:93;;40356:56;40406:5;40356:56;:::i;:::-;40435:7;40466:1;40451:284;40476:6;40473:1;40470:13;40451:284;;;40552:6;40546:13;40579:63;40638:3;40623:13;40579:63;:::i;:::-;40572:70;;40665:60;40718:6;40665:60;:::i;:::-;40655:70;;40511:224;40498:1;40495;40491:9;40486:14;;40451:284;;;40455:14;40751:3;40744:10;;40152:608;;;40028:732;;;;:::o;40766:831::-;41029:4;41067:3;41056:9;41052:19;41044:27;;41081:71;41149:1;41138:9;41134:17;41125:6;41081:71;:::i;:::-;41162:80;41238:2;41227:9;41223:18;41214:6;41162:80;:::i;:::-;41289:9;41283:4;41279:20;41274:2;41263:9;41259:18;41252:48;41317:108;41420:4;41411:6;41317:108;:::i;:::-;41309:116;;41435:72;41503:2;41492:9;41488:18;41479:6;41435:72;:::i;:::-;41517:73;41585:3;41574:9;41570:19;41561:6;41517:73;:::i;:::-;40766:831;;;;;;;;:::o;41603:225::-;41743:34;41739:1;41731:6;41727:14;41720:58;41812:8;41807:2;41799:6;41795:15;41788:33;41603:225;:::o;41834:366::-;41976:3;41997:67;42061:2;42056:3;41997:67;:::i;:::-;41990:74;;42073:93;42162:3;42073:93;:::i;:::-;42191:2;42186:3;42182:12;42175:19;;41834:366;;;:::o;42206:419::-;42372:4;42410:2;42399:9;42395:18;42387:26;;42459:9;42453:4;42449:20;42445:1;42434:9;42430:17;42423:47;42487:131;42613:4;42487:131;:::i;:::-;42479:139;;42206:419;;;:::o;42631:194::-;42671:4;42691:20;42709:1;42691:20;:::i;:::-;42686:25;;42725:20;42743:1;42725:20;:::i;:::-;42720:25;;42769:1;42766;42762:9;42754:17;;42793:1;42787:4;42784:11;42781:37;;;42798:18;;:::i;:::-;42781:37;42631:194;;;;:::o;42831:442::-;42980:4;43018:2;43007:9;43003:18;42995:26;;43031:71;43099:1;43088:9;43084:17;43075:6;43031:71;:::i;:::-;43112:72;43180:2;43169:9;43165:18;43156:6;43112:72;:::i;:::-;43194;43262:2;43251:9;43247:18;43238:6;43194:72;:::i;:::-;42831:442;;;;;;:::o;43279:807::-;43528:4;43566:3;43555:9;43551:19;43543:27;;43580:71;43648:1;43637:9;43633:17;43624:6;43580:71;:::i;:::-;43661:72;43729:2;43718:9;43714:18;43705:6;43661:72;:::i;:::-;43743:80;43819:2;43808:9;43804:18;43795:6;43743:80;:::i;:::-;43833;43909:2;43898:9;43894:18;43885:6;43833:80;:::i;:::-;43923:73;43991:3;43980:9;43976:19;43967:6;43923:73;:::i;:::-;44006;44074:3;44063:9;44059:19;44050:6;44006:73;:::i;:::-;43279:807;;;;;;;;;:::o;44092:663::-;44180:6;44188;44196;44245:2;44233:9;44224:7;44220:23;44216:32;44213:119;;;44251:79;;:::i;:::-;44213:119;44371:1;44396:64;44452:7;44443:6;44432:9;44428:22;44396:64;:::i;:::-;44386:74;;44342:128;44509:2;44535:64;44591:7;44582:6;44571:9;44567:22;44535:64;:::i;:::-;44525:74;;44480:129;44648:2;44674:64;44730:7;44721:6;44710:9;44706:22;44674:64;:::i;:::-;44664:74;;44619:129;44092:663;;;;;:::o

Swarm Source

ipfs://a5b9257b58cdd3941bcbd77920a67c8714d9b953dd32232f93d216c7e0ca0269
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.