ETH Price: $3,828.36 (+4.93%)

Token

ERC-20: SAUDI_SAM (SAUS)
 

Overview

Max Total Supply

10,000,000,000 SAUS

Holders

13

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SAUS

Value
$0.00
0x8b9482b13803de3377e0594888ad35327c0a25ff
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:
SAUDI_SAM

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

// Saudi Sam has come to pave the roads with gold. Jeets out. Allah'o'meda Vulture Capital big bags onboard
// A Wabi & Wilfred production

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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 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 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 IERC20 {
    /**
     * @dev Returns the amount of tokens in existence....
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     *
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to 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 {}
}

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address private devOpsWallet;

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

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

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

    // Seller Map
    mapping(address => uint256) private _holderFirstBuyTimestamp;

    // Blacklist Map
    mapping(address => bool) private _blacklist;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyDevOpsFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellDevOpsFee;
    uint256 public sellLiquidityFee;

    uint256 public earlySellLiquidityFee;
    uint256 public earlySellDevOpsFee;

    uint256 public tokensForDevOps;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // block number of opened trading
    uint256 launchedAt;

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("SAUDI_SAM", "SAUS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyDevOpsFee = 4;
        uint256 _buyLiquidityFee = 1;

        uint256 _sellDevOpsFee = 4;
        uint256 _sellLiquidityFee = 1;

        uint256 _earlySellLiquidityFee = 1;
        uint256 _earlySellDevOpsFee = 6;

        uint256 totalSupply = 1 * 1e10 * 1e18;

        maxTransactionAmount = (totalSupply * 30) / 1000; // 3% maxTransactionAmountTxn
        maxWallet = (totalSupply * 30) / 1000; // 3% maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

        buyDevOpsFee = _buyDevOpsFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyDevOpsFee + buyLiquidityFee;

        sellDevOpsFee = _sellDevOpsFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellDevOpsFee + sellLiquidityFee;

        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellDevOpsFee = _earlySellDevOpsFee;

        devOpsWallet = address(0x8B9482B13803De3377E0594888Ad35327c0a25FF); // set as devOps wallet

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

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

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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }

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

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

    function setEarlySellTax(bool onoff) external onlyOwner {
        enableEarlySellTax = onoff;
    }

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

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

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

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

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

    function updateBuyFees(uint256 _devOpsFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        buyDevOpsFee = _devOpsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevOpsFee + buyLiquidityFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _devOpsFee,
        uint256 _liquidityFee,
        uint256 _earlySellLiquidityFee,
        uint256 _earlySellDevOpsFee
    ) external onlyOwner {
        sellDevOpsFee = _devOpsFee;
        sellLiquidityFee = _liquidityFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellDevOpsFee = _earlySellDevOpsFee;
        sellTotalFees = sellDevOpsFee + sellLiquidityFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

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

    function blacklistAccount(address account, bool isBlacklisted)
        public
        onlyOwner
    {
        require(block.number < launchedAt + 40, "Waited too long to blacklist");
        _blacklist[account] = isBlacklisted;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevOpsWallet(address newDevOpsWallet) external onlyOwner {
        emit devOpsWalletUpdated(newDevOpsWallet, devOpsWallet);
        devOpsWallet = newDevOpsWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            !_blacklist[to] && !_blacklist[from],
            "You have been blacklisted from transfering tokens"
        );
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (
                _holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (12 hours) >= block.timestamp)
            ) {
                sellLiquidityFee = earlySellLiquidityFee;
                sellDevOpsFee = earlySellDevOpsFee;
                sellTotalFees = sellDevOpsFee + sellLiquidityFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForDevOps = ethBalance.mul(tokensForDevOps).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDevOps - ethForDev;

        tokensForLiquidity = 0;
        tokensForDevOps = 0;
        tokensForDev = 0;

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

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

// SAUDI FUCKING MONEY BABY

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devOpsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevOps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevOpsWallet","type":"address"}],"name":"updateDevOpsWallet","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":"uint256","name":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevOpsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600a60036101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600981526020017f53415544495f53414d00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5341555300000000000000000000000000000000000000000000000000000000815250816003908162000116919062000dfd565b50806004908162000128919062000dfd565b50505060006200013d6200065060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002088160016200065860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae919062000f4e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c919062000f4e565b6040518363ffffffff1660e01b81526004016200035b92919062000f91565b6020604051808303816000875af11580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000f4e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003e960a05160016200065860201b60201c565b620003fe60a05160016200075560201b60201c565b60006004905060006001905060006004905060006001905060006001905060006006905060006b204fce5e3e2502611000000090506103e8601e8262000445919062000fed565b6200045191906200107d565b6007819055506103e8601e8262000469919062000fed565b6200047591906200107d565b600981905550612710600a826200048d919062000fed565b6200049991906200107d565b6008819055508660108190555085601181905550601154601054620004bf9190620010b5565b600f819055508460138190555083601481905550601454601354620004e59190620010b5565b6012819055508260158190555081601681905550738b9482b13803de3377e0594888ad35327c0a25ff600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057062000562620007f660201b60201c565b60016200082060201b60201c565b620005833060016200082060201b60201c565b6200059861dead60016200082060201b60201c565b620005bf738b9482b13803de3377e0594888ad35327c0a25ff60016200082060201b60201c565b620005e1620005d3620007f660201b60201c565b60016200065860201b60201c565b620005f43060016200065860201b60201c565b6200060961dead60016200065860201b60201c565b62000630738b9482b13803de3377e0594888ad35327c0a25ff60016200065860201b60201c565b6200064233826200096d60201b60201c565b5050505050505050620012e1565b600033905090565b620006686200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f19062001173565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008306200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b99062001173565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009619190620011b2565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d6906200121f565b60405180910390fd5b620009f36000838362000b1b60201b60201c565b62000a0f8160025462000b2060201b6200259b1790919060201c565b60028190555062000a6d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b2060201b6200259b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b0f919062001252565b60405180910390a35050565b505050565b600080828462000b319190620010b5565b90508381101562000b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7090620012bf565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c0557607f821691505b60208210810362000c1b5762000c1a62000bbd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c46565b62000c91868362000c46565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cde62000cd862000cd28462000ca9565b62000cb3565b62000ca9565b9050919050565b6000819050919050565b62000cfa8362000cbd565b62000d1262000d098262000ce5565b84845462000c53565b825550505050565b600090565b62000d2962000d1a565b62000d3681848462000cef565b505050565b5b8181101562000d5e5762000d5260008262000d1f565b60018101905062000d3c565b5050565b601f82111562000dad5762000d778162000c21565b62000d828462000c36565b8101602085101562000d92578190505b62000daa62000da18562000c36565b83018262000d3b565b50505b505050565b600082821c905092915050565b600062000dd26000198460080262000db2565b1980831691505092915050565b600062000ded838362000dbf565b9150826002028217905092915050565b62000e088262000b83565b67ffffffffffffffff81111562000e245762000e2362000b8e565b5b62000e30825462000bec565b62000e3d82828562000d62565b600060209050601f83116001811462000e75576000841562000e60578287015190505b62000e6c858262000ddf565b86555062000edc565b601f19841662000e858662000c21565b60005b8281101562000eaf5784890151825560018201915060208501945060208101905062000e88565b8683101562000ecf578489015162000ecb601f89168262000dbf565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f168262000ee9565b9050919050565b62000f288162000f09565b811462000f3457600080fd5b50565b60008151905062000f488162000f1d565b92915050565b60006020828403121562000f675762000f6662000ee4565b5b600062000f778482850162000f37565b91505092915050565b62000f8b8162000f09565b82525050565b600060408201905062000fa8600083018562000f80565b62000fb7602083018462000f80565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ffa8262000ca9565b9150620010078362000ca9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001043576200104262000fbe565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200108a8262000ca9565b9150620010978362000ca9565b925082620010aa57620010a96200104e565b5b828204905092915050565b6000620010c28262000ca9565b9150620010cf8362000ca9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001107576200110662000fbe565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200115b60208362001112565b9150620011688262001123565b602082019050919050565b600060208201905081810360008301526200118e816200114c565b9050919050565b60008115159050919050565b620011ac8162001195565b82525050565b6000602082019050620011c96000830184620011a1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001207601f8362001112565b91506200121482620011cf565b602082019050919050565b600060208201905081810360008301526200123a81620011f8565b9050919050565b6200124c8162000ca9565b82525050565b600060208201905062001269600083018462001241565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012a7601b8362001112565b9150620012b4826200126f565b602082019050919050565b60006020820190508181036000830152620012da8162001298565b9050919050565b60805160a05161571862001346600039600081816111a40152818161198501528181612c62015261306b015260008181610d6901528181612c0a01528181613e5001528181613f3101528181613f5801528181613ff4015261401b01526157186000f3fe60806040526004361061031e5760003560e01c8063924de9b7116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bed578063f2fde38b14610c18578063f637434214610c41578063f8b45b0514610c6c57610325565b8063e2f4560514610b6e578063e7ad9fcd14610b99578063e884f26014610bc257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9e578063d257b34f14610ac9578063d85ba06314610b06578063dd62ed3e14610b3157610325565b8063c024666814610a21578063c18bc19514610a4a578063c876d0b914610a7357610325565b8063a4d15b6411610164578063b2b2c0bb1161013e578063b2b2c0bb14610965578063b62496f514610990578063bbc0c742146109cd578063bde73318146109f857610325565b8063a4d15b64146108d2578063a5cf68ef146108fd578063a9059cbb1461092857610325565b8063924de9b7146107c457806395d89b41146107ed5780639a7a23d6146108185780639fccce3214610841578063a26577781461086c578063a457c2d71461089557610325565b80634a62bb651161026a57806370a08231116102235780637571336a116101fd5780637571336a1461072e578063762d868a146107575780638a8c523c146107825780638da5cb5b1461079957610325565b806370a08231146106af578063715018a6146106ec578063751039fc1461070357610325565b80634a62bb651461059d5780634fbee193146105c8578063541a43cf1461060557806366ca9b83146106305780636a486a8e146106595780636ddd17131461068457610325565b80631b5cc613116102d75780632d5a5d34116102b15780632d5a5d34146104e1578063313ce5671461050a578063395093511461053557806349bd5a5e1461057257610325565b80631b5cc61314610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c97565b60405161034c91906141c4565b60405180910390f35b34801561036157600080fd5b5061037c6004803603810190610377919061427f565b610d29565b60405161038991906142da565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906142f5565b610d47565b6040516103c691906142da565b60405180910390f35b3480156103db57600080fd5b506103e4610d67565b6040516103f19190614381565b60405180910390f35b34801561040657600080fd5b5061040f610d8b565b60405161041c91906143ab565b60405180910390f35b34801561043157600080fd5b5061043a610d95565b60405161044791906143ab565b60405180910390f35b34801561045c57600080fd5b50610465610d9b565b60405161047291906143ab565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906143c6565b610da1565b005b3480156104b057600080fd5b506104cb60048036038101906104c691906143f3565b610ecb565b6040516104d891906142da565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614472565b610fa4565b005b34801561051657600080fd5b5061051f6110e6565b60405161052c91906144ce565b60405180910390f35b34801561054157600080fd5b5061055c6004803603810190610557919061427f565b6110ef565b60405161056991906142da565b60405180910390f35b34801561057e57600080fd5b506105876111a2565b60405161059491906144f8565b60405180910390f35b3480156105a957600080fd5b506105b26111c6565b6040516105bf91906142da565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906142f5565b6111d9565b6040516105fc91906142da565b60405180910390f35b34801561061157600080fd5b5061061a61122f565b60405161062791906143ab565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190614513565b611235565b005b34801561066557600080fd5b5061066e61133a565b60405161067b91906143ab565b60405180910390f35b34801561069057600080fd5b50610699611340565b6040516106a691906142da565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906142f5565b611353565b6040516106e391906143ab565b60405180910390f35b3480156106f857600080fd5b5061070161139b565b005b34801561070f57600080fd5b506107186114f3565b60405161072591906142da565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614472565b6115ae565b005b34801561076357600080fd5b5061076c6116a0565b60405161077991906143ab565b60405180910390f35b34801561078e57600080fd5b506107976116a6565b005b3480156107a557600080fd5b506107ae61177c565b6040516107bb91906144f8565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614553565b6117a6565b005b3480156107f957600080fd5b5061080261185a565b60405161080f91906141c4565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614472565b6118ec565b005b34801561084d57600080fd5b50610856611a1f565b60405161086391906143ab565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614553565b611a25565b005b3480156108a157600080fd5b506108bc60048036038101906108b7919061427f565b611ad9565b6040516108c991906142da565b60405180910390f35b3480156108de57600080fd5b506108e7611ba6565b6040516108f491906142da565b60405180910390f35b34801561090957600080fd5b50610912611bb9565b60405161091f91906143ab565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a919061427f565b611bbf565b60405161095c91906142da565b60405180910390f35b34801561097157600080fd5b5061097a611bdd565b60405161098791906143ab565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906142f5565b611be3565b6040516109c491906142da565b60405180910390f35b3480156109d957600080fd5b506109e2611c03565b6040516109ef91906142da565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906142f5565b611c16565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190614472565b611d6d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906143c6565b611ead565b005b348015610a7f57600080fd5b50610a88611fd7565b604051610a9591906142da565b60405180910390f35b348015610aaa57600080fd5b50610ab3611fea565b604051610ac091906143ab565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb91906143c6565b611ff0565b604051610afd91906142da565b60405180910390f35b348015610b1257600080fd5b50610b1b612160565b604051610b2891906143ab565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190614580565b612166565b604051610b6591906143ab565b60405180910390f35b348015610b7a57600080fd5b50610b836121ed565b604051610b9091906143ab565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb91906145c0565b6121f3565b005b348015610bce57600080fd5b50610bd7612308565b604051610be491906142da565b60405180910390f35b348015610bf957600080fd5b50610c026123c3565b604051610c0f91906143ab565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906142f5565b6123c9565b005b348015610c4d57600080fd5b50610c5661258f565b604051610c6391906143ab565b60405180910390f35b348015610c7857600080fd5b50610c81612595565b604051610c8e91906143ab565b60405180910390f35b606060038054610ca690614656565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290614656565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d3d610d366125f9565b8484612601565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60165481565b610da96125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906146d3565b60405180910390fd5b670de0b6b3a76400006103e86001610e4e610d8b565b610e589190614722565b610e6291906147ab565b610e6c91906147ab565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061484e565b60405180910390fd5b670de0b6b3a764000081610ec29190614722565b60078190555050565b6000610ed88484846127ca565b610f9984610ee46125f9565b610f948560405180606001604052806028815260200161569660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f4a6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ad9092919063ffffffff16565b612601565b600190509392505050565b610fac6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906146d3565b60405180910390fd5b6028601a5461104a919061486e565b431061108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290614910565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111986110fc6125f9565b84611193856001600061110d6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b612601565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61123d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906146d3565b60405180910390fd5b81601081905550806011819055506011546010546112ea919061486e565b600f819055506014600f541115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061497c565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a36125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906146d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114fd6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906146d3565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6115b66125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906146d3565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6116ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906146d3565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906146d3565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461186990614656565b80601f016020809104026020016040519081016040528092919081815260200182805461189590614656565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f46125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a906146d3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a0e565b60405180910390fd5b611a1b8282613711565b5050565b60195481565b611a2d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab3906146d3565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b6000611b9c611ae66125f9565b84611b97856040518060600160405280602581526020016156be6025913960016000611b106125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ad9092919063ffffffff16565b612601565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b6000611bd3611bcc6125f9565b84846127ca565b6001905092915050565b60175481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611c1e6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906146d3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d756125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb906146d3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea191906142da565b60405180910390a25050565b611eb56125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906146d3565b60405180910390fd5b670de0b6b3a76400006103e86005611f5a610d8b565b611f649190614722565b611f6e91906147ab565b611f7891906147ab565b811015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614aa0565b60405180910390fd5b670de0b6b3a764000081611fce9190614722565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b6000611ffa6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906146d3565b60405180910390fd5b620186a06001612097610d8b565b6120a19190614722565b6120ab91906147ab565b8210156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614b32565b60405180910390fd5b6103e8601e6120fa610d8b565b6121049190614722565b61210e91906147ab565b821115612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614bc4565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121fb6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906146d3565b60405180910390fd5b836013819055508260148190555081601581905550806016819055506014546013546122b6919061486e565b60128190555060146012541115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061497c565b60405180910390fd5b50505050565b60006123126125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906146d3565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123d16125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612457906146d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614c56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b60008082846125aa919061486e565b9050838110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614cc2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614d54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614de6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127bd91906143ab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614e78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614f0a565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561294c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290614f9c565b60405180910390fd5b600081036129a45761299f838360006137b2565b6136a8565b600a60009054906101000a900460ff1615613067576129c161177c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2f57506129ff61177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a685750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abb5750600560149054906101000a900460ff16155b1561306657600a60019054906101000a900460ff16612bb557601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b755750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90615008565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d7d57612bd261177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c5957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d7c5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e906150c0565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757600754811115612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190615152565b60405180910390fd5b600954612e7683611353565b82612e81919061486e565b1115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb9906151be565b60405180910390fd5b613065565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6a5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb957600754811115612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90615250565b60405180910390fd5b613064565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130635760095461301683611353565b82613021919061486e565b1115613062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613059906151be565b60405180910390fd5b5b5b5b5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130d45750600a60039054906101000a900460ff165b156131a8576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561317557504261a8c0600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613172919061486e565b10155b156131a35760155460148190555060165460138190555060145460135461319c919061486e565b6012819055505b613235565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132345742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600061324030611353565b9050600060085482101590508080156132655750600a60029054906101000a900460ff165b801561327e5750600560149054906101000a900460ff16155b80156132d45750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561332a5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133805750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c4576001600560146101000a81548160ff0219169083151502179055506133a8613a45565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061347a5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348457600090505b6000811561369757601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e757506000601254115b1561358157613514606461350660125489613c9e90919063ffffffff16565b613d1890919063ffffffff16565b9050601254601454826135279190614722565b61353191906147ab565b60186000828254613542919061486e565b925050819055506012546013548261355a9190614722565b61356491906147ab565b60176000828254613575919061486e565b92505081905550613673565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135dc57506000600f54115b156136725761360960646135fb600f5489613c9e90919063ffffffff16565b613d1890919063ffffffff16565b9050600f546011548261361c9190614722565b61362691906147ab565b60186000828254613637919061486e565b92505081905550600f546010548261364f9190614722565b61365991906147ab565b6017600082825461366a919061486e565b925050819055505b5b6000811115613688576136878830836137b2565b5b80866136949190615270565b95505b6136a28888886137b2565b50505050505b505050565b60008383111582906136f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ec91906141c4565b60405180910390fd5b50600083856137049190615270565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381890614e78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388790614f0a565b60405180910390fd5b61389b838383613d62565b61390681604051806060016040528060268152602001615670602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ad9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613999816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3891906143ab565b60405180910390a3505050565b6000613a5030611353565b90506000601954601754601854613a67919061486e565b613a71919061486e565b9050600080831480613a835750600082145b15613a9057505050613c9c565b6014600854613a9f9190614722565b831115613ab8576014600854613ab59190614722565b92505b600060028360185486613acb9190614722565b613ad591906147ab565b613adf91906147ab565b90506000613af68286613d6790919063ffffffff16565b90506000479050613b0682613db1565b6000613b1b8247613d6790919063ffffffff16565b90506000613b4687613b3860175485613c9e90919063ffffffff16565b613d1890919063ffffffff16565b90506000613b7188613b6360195486613c9e90919063ffffffff16565b613d1890919063ffffffff16565b90506000818385613b829190615270565b613b8c9190615270565b9050600060188190555060006017819055506000601981905550600087118015613bb65750600081115b15613c0357613bc58782613fee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613bfa939291906152a4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c499061530c565b60006040518083038185875af1925050503d8060008114613c86576040519150601f19603f3d011682016040523d82523d6000602084013e613c8b565b606091505b505080985050505050505050505050505b565b6000808303613cb05760009050613d12565b60008284613cbe9190614722565b9050828482613ccd91906147ab565b14613d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0490615393565b60405180910390fd5b809150505b92915050565b6000613d5a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140c8565b905092915050565b505050565b6000613da983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ad565b905092915050565b6000600267ffffffffffffffff811115613dce57613dcd6153b3565b5b604051908082528060200260200182016040528015613dfc5781602001602082028036833780820191505090505b5090503081600081518110613e1457613e136153e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edd9190615426565b81600181518110613ef157613ef06153e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f56307f000000000000000000000000000000000000000000000000000000000000000084612601565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb895949392919061554c565b600060405180830381600087803b158015613fd257600080fd5b505af1158015613fe6573d6000803e3d6000fd5b505050505050565b614019307f000000000000000000000000000000000000000000000000000000000000000084612601565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161407e969594939291906155a6565b60606040518083038185885af115801561409c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c1919061561c565b5050505050565b6000808311829061410f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410691906141c4565b60405180910390fd5b506000838561411e91906147ab565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416557808201518184015260208101905061414a565b83811115614174576000848401525b50505050565b6000601f19601f8301169050919050565b60006141968261412b565b6141a08185614136565b93506141b0818560208601614147565b6141b98161417a565b840191505092915050565b600060208201905081810360008301526141de818461418b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614216826141eb565b9050919050565b6142268161420b565b811461423157600080fd5b50565b6000813590506142438161421d565b92915050565b6000819050919050565b61425c81614249565b811461426757600080fd5b50565b60008135905061427981614253565b92915050565b60008060408385031215614296576142956141e6565b5b60006142a485828601614234565b92505060206142b58582860161426a565b9150509250929050565b60008115159050919050565b6142d4816142bf565b82525050565b60006020820190506142ef60008301846142cb565b92915050565b60006020828403121561430b5761430a6141e6565b5b600061431984828501614234565b91505092915050565b6000819050919050565b600061434761434261433d846141eb565b614322565b6141eb565b9050919050565b60006143598261432c565b9050919050565b600061436b8261434e565b9050919050565b61437b81614360565b82525050565b60006020820190506143966000830184614372565b92915050565b6143a581614249565b82525050565b60006020820190506143c0600083018461439c565b92915050565b6000602082840312156143dc576143db6141e6565b5b60006143ea8482850161426a565b91505092915050565b60008060006060848603121561440c5761440b6141e6565b5b600061441a86828701614234565b935050602061442b86828701614234565b925050604061443c8682870161426a565b9150509250925092565b61444f816142bf565b811461445a57600080fd5b50565b60008135905061446c81614446565b92915050565b60008060408385031215614489576144886141e6565b5b600061449785828601614234565b92505060206144a88582860161445d565b9150509250929050565b600060ff82169050919050565b6144c8816144b2565b82525050565b60006020820190506144e360008301846144bf565b92915050565b6144f28161420b565b82525050565b600060208201905061450d60008301846144e9565b92915050565b6000806040838503121561452a576145296141e6565b5b60006145388582860161426a565b92505060206145498582860161426a565b9150509250929050565b600060208284031215614569576145686141e6565b5b60006145778482850161445d565b91505092915050565b60008060408385031215614597576145966141e6565b5b60006145a585828601614234565b92505060206145b685828601614234565b9150509250929050565b600080600080608085870312156145da576145d96141e6565b5b60006145e88782880161426a565b94505060206145f98782880161426a565b935050604061460a8782880161426a565b925050606061461b8782880161426a565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466e57607f821691505b60208210810361468157614680614627565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146bd602083614136565b91506146c882614687565b602082019050919050565b600060208201905081810360008301526146ec816146b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061472d82614249565b915061473883614249565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614771576147706146f3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b682614249565b91506147c183614249565b9250826147d1576147d061477c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614838602f83614136565b9150614843826147dc565b604082019050919050565b600060208201905081810360008301526148678161482b565b9050919050565b600061487982614249565b915061488483614249565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148b9576148b86146f3565b5b828201905092915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c69737400000000600082015250565b60006148fa601c83614136565b9150614905826148c4565b602082019050919050565b60006020820190508181036000830152614929816148ed565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614966601d83614136565b915061497182614930565b602082019050919050565b6000602082019050818103600083015261499581614959565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149f8603983614136565b9150614a038261499c565b604082019050919050565b60006020820190508181036000830152614a27816149eb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a8a602483614136565b9150614a9582614a2e565b604082019050919050565b60006020820190508181036000830152614ab981614a7d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b1c603583614136565b9150614b2782614ac0565b604082019050919050565b60006020820190508181036000830152614b4b81614b0f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20332520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614bae603283614136565b9150614bb982614b52565b604082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c40602683614136565b9150614c4b82614be4565b604082019050919050565b60006020820190508181036000830152614c6f81614c33565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cac601b83614136565b9150614cb782614c76565b602082019050919050565b60006020820190508181036000830152614cdb81614c9f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3e602483614136565b9150614d4982614ce2565b604082019050919050565b60006020820190508181036000830152614d6d81614d31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd0602283614136565b9150614ddb82614d74565b604082019050919050565b60006020820190508181036000830152614dff81614dc3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e62602583614136565b9150614e6d82614e06565b604082019050919050565b60006020820190508181036000830152614e9181614e55565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef4602383614136565b9150614eff82614e98565b604082019050919050565b60006020820190508181036000830152614f2381614ee7565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f86603183614136565b9150614f9182614f2a565b604082019050919050565b60006020820190508181036000830152614fb581614f79565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ff2601683614136565b9150614ffd82614fbc565b602082019050919050565b6000602082019050818103600083015261502181614fe5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150aa604983614136565b91506150b582615028565b606082019050919050565b600060208201905081810360008301526150d98161509d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061513c603583614136565b9150615147826150e0565b604082019050919050565b6000602082019050818103600083015261516b8161512f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a8601383614136565b91506151b382615172565b602082019050919050565b600060208201905081810360008301526151d78161519b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061523a603683614136565b9150615245826151de565b604082019050919050565b600060208201905081810360008301526152698161522d565b9050919050565b600061527b82614249565b915061528683614249565b925082821015615299576152986146f3565b5b828203905092915050565b60006060820190506152b9600083018661439c565b6152c6602083018561439c565b6152d3604083018461439c565b949350505050565b600081905092915050565b50565b60006152f66000836152db565b9150615301826152e6565b600082019050919050565b6000615317826152e9565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061537d602183614136565b915061538882615321565b604082019050919050565b600060208201905081810360008301526153ac81615370565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154208161421d565b92915050565b60006020828403121561543c5761543b6141e6565b5b600061544a84828501615411565b91505092915050565b6000819050919050565b600061547861547361546e84615453565b614322565b614249565b9050919050565b6154888161545d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154c38161420b565b82525050565b60006154d583836154ba565b60208301905092915050565b6000602082019050919050565b60006154f98261548e565b6155038185615499565b935061550e836154aa565b8060005b8381101561553f57815161552688826154c9565b9750615531836154e1565b925050600181019050615512565b5085935050505092915050565b600060a082019050615561600083018861439c565b61556e602083018761547f565b818103604083015261558081866154ee565b905061558f60608301856144e9565b61559c608083018461439c565b9695505050505050565b600060c0820190506155bb60008301896144e9565b6155c8602083018861439c565b6155d5604083018761547f565b6155e2606083018661547f565b6155ef60808301856144e9565b6155fc60a083018461439c565b979650505050505050565b60008151905061561681614253565b92915050565b600080600060608486031215615635576156346141e6565b5b600061564386828701615607565b935050602061565486828701615607565b925050604061566586828701615607565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b976426a4570fd95c1a42cd5f3f961d2856a771a49f3bf2788e51421d77c60764736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c8063924de9b7116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bed578063f2fde38b14610c18578063f637434214610c41578063f8b45b0514610c6c57610325565b8063e2f4560514610b6e578063e7ad9fcd14610b99578063e884f26014610bc257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9e578063d257b34f14610ac9578063d85ba06314610b06578063dd62ed3e14610b3157610325565b8063c024666814610a21578063c18bc19514610a4a578063c876d0b914610a7357610325565b8063a4d15b6411610164578063b2b2c0bb1161013e578063b2b2c0bb14610965578063b62496f514610990578063bbc0c742146109cd578063bde73318146109f857610325565b8063a4d15b64146108d2578063a5cf68ef146108fd578063a9059cbb1461092857610325565b8063924de9b7146107c457806395d89b41146107ed5780639a7a23d6146108185780639fccce3214610841578063a26577781461086c578063a457c2d71461089557610325565b80634a62bb651161026a57806370a08231116102235780637571336a116101fd5780637571336a1461072e578063762d868a146107575780638a8c523c146107825780638da5cb5b1461079957610325565b806370a08231146106af578063715018a6146106ec578063751039fc1461070357610325565b80634a62bb651461059d5780634fbee193146105c8578063541a43cf1461060557806366ca9b83146106305780636a486a8e146106595780636ddd17131461068457610325565b80631b5cc613116102d75780632d5a5d34116102b15780632d5a5d34146104e1578063313ce5671461050a578063395093511461053557806349bd5a5e1461057257610325565b80631b5cc61314610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c97565b60405161034c91906141c4565b60405180910390f35b34801561036157600080fd5b5061037c6004803603810190610377919061427f565b610d29565b60405161038991906142da565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906142f5565b610d47565b6040516103c691906142da565b60405180910390f35b3480156103db57600080fd5b506103e4610d67565b6040516103f19190614381565b60405180910390f35b34801561040657600080fd5b5061040f610d8b565b60405161041c91906143ab565b60405180910390f35b34801561043157600080fd5b5061043a610d95565b60405161044791906143ab565b60405180910390f35b34801561045c57600080fd5b50610465610d9b565b60405161047291906143ab565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906143c6565b610da1565b005b3480156104b057600080fd5b506104cb60048036038101906104c691906143f3565b610ecb565b6040516104d891906142da565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614472565b610fa4565b005b34801561051657600080fd5b5061051f6110e6565b60405161052c91906144ce565b60405180910390f35b34801561054157600080fd5b5061055c6004803603810190610557919061427f565b6110ef565b60405161056991906142da565b60405180910390f35b34801561057e57600080fd5b506105876111a2565b60405161059491906144f8565b60405180910390f35b3480156105a957600080fd5b506105b26111c6565b6040516105bf91906142da565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906142f5565b6111d9565b6040516105fc91906142da565b60405180910390f35b34801561061157600080fd5b5061061a61122f565b60405161062791906143ab565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190614513565b611235565b005b34801561066557600080fd5b5061066e61133a565b60405161067b91906143ab565b60405180910390f35b34801561069057600080fd5b50610699611340565b6040516106a691906142da565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906142f5565b611353565b6040516106e391906143ab565b60405180910390f35b3480156106f857600080fd5b5061070161139b565b005b34801561070f57600080fd5b506107186114f3565b60405161072591906142da565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614472565b6115ae565b005b34801561076357600080fd5b5061076c6116a0565b60405161077991906143ab565b60405180910390f35b34801561078e57600080fd5b506107976116a6565b005b3480156107a557600080fd5b506107ae61177c565b6040516107bb91906144f8565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614553565b6117a6565b005b3480156107f957600080fd5b5061080261185a565b60405161080f91906141c4565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614472565b6118ec565b005b34801561084d57600080fd5b50610856611a1f565b60405161086391906143ab565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614553565b611a25565b005b3480156108a157600080fd5b506108bc60048036038101906108b7919061427f565b611ad9565b6040516108c991906142da565b60405180910390f35b3480156108de57600080fd5b506108e7611ba6565b6040516108f491906142da565b60405180910390f35b34801561090957600080fd5b50610912611bb9565b60405161091f91906143ab565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a919061427f565b611bbf565b60405161095c91906142da565b60405180910390f35b34801561097157600080fd5b5061097a611bdd565b60405161098791906143ab565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906142f5565b611be3565b6040516109c491906142da565b60405180910390f35b3480156109d957600080fd5b506109e2611c03565b6040516109ef91906142da565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906142f5565b611c16565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190614472565b611d6d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906143c6565b611ead565b005b348015610a7f57600080fd5b50610a88611fd7565b604051610a9591906142da565b60405180910390f35b348015610aaa57600080fd5b50610ab3611fea565b604051610ac091906143ab565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb91906143c6565b611ff0565b604051610afd91906142da565b60405180910390f35b348015610b1257600080fd5b50610b1b612160565b604051610b2891906143ab565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190614580565b612166565b604051610b6591906143ab565b60405180910390f35b348015610b7a57600080fd5b50610b836121ed565b604051610b9091906143ab565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb91906145c0565b6121f3565b005b348015610bce57600080fd5b50610bd7612308565b604051610be491906142da565b60405180910390f35b348015610bf957600080fd5b50610c026123c3565b604051610c0f91906143ab565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906142f5565b6123c9565b005b348015610c4d57600080fd5b50610c5661258f565b604051610c6391906143ab565b60405180910390f35b348015610c7857600080fd5b50610c81612595565b604051610c8e91906143ab565b60405180910390f35b606060038054610ca690614656565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290614656565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d3d610d366125f9565b8484612601565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b60165481565b610da96125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906146d3565b60405180910390fd5b670de0b6b3a76400006103e86001610e4e610d8b565b610e589190614722565b610e6291906147ab565b610e6c91906147ab565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061484e565b60405180910390fd5b670de0b6b3a764000081610ec29190614722565b60078190555050565b6000610ed88484846127ca565b610f9984610ee46125f9565b610f948560405180606001604052806028815260200161569660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f4a6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ad9092919063ffffffff16565b612601565b600190509392505050565b610fac6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906146d3565b60405180910390fd5b6028601a5461104a919061486e565b431061108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290614910565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111986110fc6125f9565b84611193856001600061110d6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b612601565b6001905092915050565b7f0000000000000000000000000c5c6470f77a8faec90497e8d2c7b6cde0389cdc81565b600a60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61123d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906146d3565b60405180910390fd5b81601081905550806011819055506011546010546112ea919061486e565b600f819055506014600f541115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061497c565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a36125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906146d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114fd6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906146d3565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6115b66125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906146d3565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6116ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906146d3565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906146d3565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461186990614656565b80601f016020809104026020016040519081016040528092919081815260200182805461189590614656565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f46125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a906146d3565b60405180910390fd5b7f0000000000000000000000000c5c6470f77a8faec90497e8d2c7b6cde0389cdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a0e565b60405180910390fd5b611a1b8282613711565b5050565b60195481565b611a2d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab3906146d3565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b6000611b9c611ae66125f9565b84611b97856040518060600160405280602581526020016156be6025913960016000611b106125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ad9092919063ffffffff16565b612601565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b6000611bd3611bcc6125f9565b84846127ca565b6001905092915050565b60175481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611c1e6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906146d3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d756125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb906146d3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea191906142da565b60405180910390a25050565b611eb56125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906146d3565b60405180910390fd5b670de0b6b3a76400006103e86005611f5a610d8b565b611f649190614722565b611f6e91906147ab565b611f7891906147ab565b811015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614aa0565b60405180910390fd5b670de0b6b3a764000081611fce9190614722565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b6000611ffa6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906146d3565b60405180910390fd5b620186a06001612097610d8b565b6120a19190614722565b6120ab91906147ab565b8210156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614b32565b60405180910390fd5b6103e8601e6120fa610d8b565b6121049190614722565b61210e91906147ab565b821115612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614bc4565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121fb6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906146d3565b60405180910390fd5b836013819055508260148190555081601581905550806016819055506014546013546122b6919061486e565b60128190555060146012541115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061497c565b60405180910390fd5b50505050565b60006123126125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906146d3565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123d16125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612457906146d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614c56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b60008082846125aa919061486e565b9050838110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614cc2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614d54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614de6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127bd91906143ab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614e78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614f0a565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561294c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290614f9c565b60405180910390fd5b600081036129a45761299f838360006137b2565b6136a8565b600a60009054906101000a900460ff1615613067576129c161177c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2f57506129ff61177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a685750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abb5750600560149054906101000a900460ff16155b1561306657600a60019054906101000a900460ff16612bb557601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b755750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90615008565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d7d57612bd261177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c5957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb157507f0000000000000000000000000c5c6470f77a8faec90497e8d2c7b6cde0389cdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d7c5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e906150c0565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757600754811115612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190615152565b60405180910390fd5b600954612e7683611353565b82612e81919061486e565b1115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb9906151be565b60405180910390fd5b613065565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6a5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb957600754811115612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90615250565b60405180910390fd5b613064565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130635760095461301683611353565b82613021919061486e565b1115613062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613059906151be565b60405180910390fd5b5b5b5b5b5b60007f0000000000000000000000000c5c6470f77a8faec90497e8d2c7b6cde0389cdc73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130d45750600a60039054906101000a900460ff165b156131a8576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561317557504261a8c0600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613172919061486e565b10155b156131a35760155460148190555060165460138190555060145460135461319c919061486e565b6012819055505b613235565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132345742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600061324030611353565b9050600060085482101590508080156132655750600a60029054906101000a900460ff165b801561327e5750600560149054906101000a900460ff16155b80156132d45750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561332a5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133805750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c4576001600560146101000a81548160ff0219169083151502179055506133a8613a45565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061347a5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348457600090505b6000811561369757601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e757506000601254115b1561358157613514606461350660125489613c9e90919063ffffffff16565b613d1890919063ffffffff16565b9050601254601454826135279190614722565b61353191906147ab565b60186000828254613542919061486e565b925050819055506012546013548261355a9190614722565b61356491906147ab565b60176000828254613575919061486e565b92505081905550613673565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135dc57506000600f54115b156136725761360960646135fb600f5489613c9e90919063ffffffff16565b613d1890919063ffffffff16565b9050600f546011548261361c9190614722565b61362691906147ab565b60186000828254613637919061486e565b92505081905550600f546010548261364f9190614722565b61365991906147ab565b6017600082825461366a919061486e565b925050819055505b5b6000811115613688576136878830836137b2565b5b80866136949190615270565b95505b6136a28888886137b2565b50505050505b505050565b60008383111582906136f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ec91906141c4565b60405180910390fd5b50600083856137049190615270565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381890614e78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388790614f0a565b60405180910390fd5b61389b838383613d62565b61390681604051806060016040528060268152602001615670602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ad9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613999816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3891906143ab565b60405180910390a3505050565b6000613a5030611353565b90506000601954601754601854613a67919061486e565b613a71919061486e565b9050600080831480613a835750600082145b15613a9057505050613c9c565b6014600854613a9f9190614722565b831115613ab8576014600854613ab59190614722565b92505b600060028360185486613acb9190614722565b613ad591906147ab565b613adf91906147ab565b90506000613af68286613d6790919063ffffffff16565b90506000479050613b0682613db1565b6000613b1b8247613d6790919063ffffffff16565b90506000613b4687613b3860175485613c9e90919063ffffffff16565b613d1890919063ffffffff16565b90506000613b7188613b6360195486613c9e90919063ffffffff16565b613d1890919063ffffffff16565b90506000818385613b829190615270565b613b8c9190615270565b9050600060188190555060006017819055506000601981905550600087118015613bb65750600081115b15613c0357613bc58782613fee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613bfa939291906152a4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c499061530c565b60006040518083038185875af1925050503d8060008114613c86576040519150601f19603f3d011682016040523d82523d6000602084013e613c8b565b606091505b505080985050505050505050505050505b565b6000808303613cb05760009050613d12565b60008284613cbe9190614722565b9050828482613ccd91906147ab565b14613d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0490615393565b60405180910390fd5b809150505b92915050565b6000613d5a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140c8565b905092915050565b505050565b6000613da983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ad565b905092915050565b6000600267ffffffffffffffff811115613dce57613dcd6153b3565b5b604051908082528060200260200182016040528015613dfc5781602001602082028036833780820191505090505b5090503081600081518110613e1457613e136153e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edd9190615426565b81600181518110613ef157613ef06153e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f56307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612601565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb895949392919061554c565b600060405180830381600087803b158015613fd257600080fd5b505af1158015613fe6573d6000803e3d6000fd5b505050505050565b614019307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612601565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161407e969594939291906155a6565b60606040518083038185885af115801561409c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c1919061561c565b5050505050565b6000808311829061410f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410691906141c4565b60405180910390fd5b506000838561411e91906147ab565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416557808201518184015260208101905061414a565b83811115614174576000848401525b50505050565b6000601f19601f8301169050919050565b60006141968261412b565b6141a08185614136565b93506141b0818560208601614147565b6141b98161417a565b840191505092915050565b600060208201905081810360008301526141de818461418b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614216826141eb565b9050919050565b6142268161420b565b811461423157600080fd5b50565b6000813590506142438161421d565b92915050565b6000819050919050565b61425c81614249565b811461426757600080fd5b50565b60008135905061427981614253565b92915050565b60008060408385031215614296576142956141e6565b5b60006142a485828601614234565b92505060206142b58582860161426a565b9150509250929050565b60008115159050919050565b6142d4816142bf565b82525050565b60006020820190506142ef60008301846142cb565b92915050565b60006020828403121561430b5761430a6141e6565b5b600061431984828501614234565b91505092915050565b6000819050919050565b600061434761434261433d846141eb565b614322565b6141eb565b9050919050565b60006143598261432c565b9050919050565b600061436b8261434e565b9050919050565b61437b81614360565b82525050565b60006020820190506143966000830184614372565b92915050565b6143a581614249565b82525050565b60006020820190506143c0600083018461439c565b92915050565b6000602082840312156143dc576143db6141e6565b5b60006143ea8482850161426a565b91505092915050565b60008060006060848603121561440c5761440b6141e6565b5b600061441a86828701614234565b935050602061442b86828701614234565b925050604061443c8682870161426a565b9150509250925092565b61444f816142bf565b811461445a57600080fd5b50565b60008135905061446c81614446565b92915050565b60008060408385031215614489576144886141e6565b5b600061449785828601614234565b92505060206144a88582860161445d565b9150509250929050565b600060ff82169050919050565b6144c8816144b2565b82525050565b60006020820190506144e360008301846144bf565b92915050565b6144f28161420b565b82525050565b600060208201905061450d60008301846144e9565b92915050565b6000806040838503121561452a576145296141e6565b5b60006145388582860161426a565b92505060206145498582860161426a565b9150509250929050565b600060208284031215614569576145686141e6565b5b60006145778482850161445d565b91505092915050565b60008060408385031215614597576145966141e6565b5b60006145a585828601614234565b92505060206145b685828601614234565b9150509250929050565b600080600080608085870312156145da576145d96141e6565b5b60006145e88782880161426a565b94505060206145f98782880161426a565b935050604061460a8782880161426a565b925050606061461b8782880161426a565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466e57607f821691505b60208210810361468157614680614627565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146bd602083614136565b91506146c882614687565b602082019050919050565b600060208201905081810360008301526146ec816146b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061472d82614249565b915061473883614249565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614771576147706146f3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b682614249565b91506147c183614249565b9250826147d1576147d061477c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614838602f83614136565b9150614843826147dc565b604082019050919050565b600060208201905081810360008301526148678161482b565b9050919050565b600061487982614249565b915061488483614249565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148b9576148b86146f3565b5b828201905092915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c69737400000000600082015250565b60006148fa601c83614136565b9150614905826148c4565b602082019050919050565b60006020820190508181036000830152614929816148ed565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614966601d83614136565b915061497182614930565b602082019050919050565b6000602082019050818103600083015261499581614959565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149f8603983614136565b9150614a038261499c565b604082019050919050565b60006020820190508181036000830152614a27816149eb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a8a602483614136565b9150614a9582614a2e565b604082019050919050565b60006020820190508181036000830152614ab981614a7d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b1c603583614136565b9150614b2782614ac0565b604082019050919050565b60006020820190508181036000830152614b4b81614b0f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20332520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614bae603283614136565b9150614bb982614b52565b604082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c40602683614136565b9150614c4b82614be4565b604082019050919050565b60006020820190508181036000830152614c6f81614c33565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cac601b83614136565b9150614cb782614c76565b602082019050919050565b60006020820190508181036000830152614cdb81614c9f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3e602483614136565b9150614d4982614ce2565b604082019050919050565b60006020820190508181036000830152614d6d81614d31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd0602283614136565b9150614ddb82614d74565b604082019050919050565b60006020820190508181036000830152614dff81614dc3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e62602583614136565b9150614e6d82614e06565b604082019050919050565b60006020820190508181036000830152614e9181614e55565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef4602383614136565b9150614eff82614e98565b604082019050919050565b60006020820190508181036000830152614f2381614ee7565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f86603183614136565b9150614f9182614f2a565b604082019050919050565b60006020820190508181036000830152614fb581614f79565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ff2601683614136565b9150614ffd82614fbc565b602082019050919050565b6000602082019050818103600083015261502181614fe5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150aa604983614136565b91506150b582615028565b606082019050919050565b600060208201905081810360008301526150d98161509d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061513c603583614136565b9150615147826150e0565b604082019050919050565b6000602082019050818103600083015261516b8161512f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a8601383614136565b91506151b382615172565b602082019050919050565b600060208201905081810360008301526151d78161519b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061523a603683614136565b9150615245826151de565b604082019050919050565b600060208201905081810360008301526152698161522d565b9050919050565b600061527b82614249565b915061528683614249565b925082821015615299576152986146f3565b5b828203905092915050565b60006060820190506152b9600083018661439c565b6152c6602083018561439c565b6152d3604083018461439c565b949350505050565b600081905092915050565b50565b60006152f66000836152db565b9150615301826152e6565b600082019050919050565b6000615317826152e9565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061537d602183614136565b915061538882615321565b604082019050919050565b600060208201905081810360008301526153ac81615370565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154208161421d565b92915050565b60006020828403121561543c5761543b6141e6565b5b600061544a84828501615411565b91505092915050565b6000819050919050565b600061547861547361546e84615453565b614322565b614249565b9050919050565b6154888161545d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154c38161420b565b82525050565b60006154d583836154ba565b60208301905092915050565b6000602082019050919050565b60006154f98261548e565b6155038185615499565b935061550e836154aa565b8060005b8381101561553f57815161552688826154c9565b9750615531836154e1565b925050600181019050615512565b5085935050505092915050565b600060a082019050615561600083018861439c565b61556e602083018761547f565b818103604083015261558081866154ee565b905061558f60608301856144e9565b61559c608083018461439c565b9695505050505050565b600060c0820190506155bb60008301896144e9565b6155c8602083018861439c565b6155d5604083018761547f565b6155e2606083018661547f565b6155ef60808301856144e9565b6155fc60a083018461439c565b979650505050505050565b60008151905061561681614253565b92915050565b600080600060608486031215615635576156346141e6565b5b600061564386828701615607565b935050602061565486828701615607565b925050604061566586828701615607565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b976426a4570fd95c1a42cd5f3f961d2856a771a49f3bf2788e51421d77c60764736f6c634300080f0033

Deployed Bytecode Sourcemap

31060:17384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7676:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9984:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32599:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31139:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8796:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32317:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32238;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37187:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10676:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39149:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8638:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11539:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31197:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31426:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40099:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32195:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38105:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32085:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31506:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8967:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22831:148;;;;;;;;;;;;;:::i;:::-;;36187:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37734:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32120:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35987:148;;;;;;;;;;;;;:::i;:::-;;22189:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37997:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7895:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39396:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32357:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36512:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12342:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31544:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32012:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9357:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32280:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32820:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31466:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39904:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38959:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37470:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31930:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31311:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36683:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31978:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9636:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31353:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38434:517;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36369:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32046:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23134:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32155:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31393:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7676:100;7730:13;7763:5;7756:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7676:100;:::o;9984:210::-;10103:4;10125:39;10134:12;:10;:12::i;:::-;10148:7;10157:6;10125:8;:39::i;:::-;10182:4;10175:11;;9984:210;;;;:::o;32599:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;31139:51::-;;;:::o;8796:108::-;8857:7;8884:12;;8877:19;;8796:108;:::o;32317:33::-;;;;:::o;32238:::-;;;;:::o;37187:275::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37324:4:::1;37316;37311:1;37295:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37294:26;;;;:::i;:::-;37293:35;;;;:::i;:::-;37283:6;:45;;37261:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;37447:6;37437;:17;;;;:::i;:::-;37414:20;:40;;;;37187:275:::0;:::o;10676:454::-;10816:4;10833:36;10843:6;10851:9;10862:6;10833:9;:36::i;:::-;10880:220;10903:6;10924:12;:10;:12::i;:::-;10951:138;11007:6;10951:138;;;;;;;;;;;;;;;;;:11;:19;10963:6;10951:19;;;;;;;;;;;;;;;:33;10971:12;:10;:12::i;:::-;10951:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;10880:8;:220::i;:::-;11118:4;11111:11;;10676:454;;;;;:::o;39149:239::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39299:2:::1;39286:10;;:15;;;;:::i;:::-;39271:12;:30;39263:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39367:13;39345:10;:19;39356:7;39345:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;39149:239:::0;;:::o;8638:93::-;8696:5;8721:2;8714:9;;8638:93;:::o;11539:300::-;11654:4;11676:133;11699:12;:10;:12::i;:::-;11726:7;11748:50;11787:10;11748:11;:25;11760:12;:10;:12::i;:::-;11748:25;;;;;;;;;;;;;;;:34;11774:7;11748:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11676:8;:133::i;:::-;11827:4;11820:11;;11539:300;;;;:::o;31197:38::-;;;:::o;31426:33::-;;;;;;;;;;;;;:::o;40099:126::-;40165:4;40189:19;:28;40209:7;40189:28;;;;;;;;;;;;;;;;;;;;;;;;;40182:35;;40099:126;;;:::o;32195:36::-;;;;:::o;38105:321::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38239:10:::1;38224:12;:25;;;;38278:13;38260:15;:31;;;;38332:15;;38317:12;;:30;;;;:::i;:::-;38302:12;:45;;;;38382:2;38366:12;;:18;;38358:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38105:321:::0;;:::o;32085:28::-;;;;:::o;31506:31::-;;;;;;;;;;;;;:::o;8967:177::-;9086:7;9118:9;:18;9128:7;9118:18;;;;;;;;;;;;;;;;9111:25;;8967:177;;;:::o;22831:148::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22938:1:::1;22901:40;;22922:6;;;;;;;;;;;22901:40;;;;;;;;;;;;22969:1;22952:6;;:19;;;;;;;;;;;;;;;;;;22831:148::o:0;36187:121::-;36239:4;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36273:5:::1;36256:14;;:22;;;;;;;;;;;;;;;;;;36296:4;36289:11;;36187:121:::0;:::o;37734:167::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37889:4:::1;37847:31;:39;37879:6;37847:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37734:167:::0;;:::o;32120:28::-;;;;:::o;35987:148::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36058:4:::1;36042:13;;:20;;;;;;;;;;;;;;;;;;36087:4;36073:11;;:18;;;;;;;;;;;;;;;;;;36115:12;36102:10;:25;;;;35987:148::o:0;22189:79::-;22227:7;22254:6;;;;;;;;;;;22247:13;;22189:79;:::o;37997:100::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38082:7:::1;38068:11;;:21;;;;;;;;;;;;;;;;;;37997:100:::0;:::o;7895:104::-;7951:13;7984:7;7977:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7895:104;:::o;39396:304::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39540:13:::1;39532:21;;:4;:21;;::::0;39510:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39651:41;39680:4;39686:5;39651:28;:41::i;:::-;39396:304:::0;;:::o;32357:27::-;;;;:::o;36512:101::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36600:5:::1;36579:18;;:26;;;;;;;;;;;;;;;;;;36512:101:::0;:::o;12342:400::-;12462:4;12484:228;12507:12;:10;:12::i;:::-;12534:7;12556:145;12613:15;12556:145;;;;;;;;;;;;;;;;;:11;:25;12568:12;:10;:12::i;:::-;12556:25;;;;;;;;;;;;;;;:34;12582:7;12556:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12484:8;:228::i;:::-;12730:4;12723:11;;12342:400;;;;:::o;31544:37::-;;;;;;;;;;;;;:::o;32012:27::-;;;;:::o;9357:216::-;9479:4;9501:42;9511:12;:10;:12::i;:::-;9525:9;9536:6;9501:9;:42::i;:::-;9561:4;9554:11;;9357:216;;;;:::o;32280:30::-;;;;:::o;32820:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31466:33::-;;;;;;;;;;;;;:::o;39904:187::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40029:12:::1;;;;;;;;;;;39992:50;;40012:15;39992:50;;;;;;;;;;;;40068:15;40053:12;;:30;;;;;;;;;;;;;;;;;;39904:187:::0;:::o;38959:182::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39075:8:::1;39044:19;:28;39064:7;39044:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39115:7;39099:34;;;39124:8;39099:34;;;;;;:::i;:::-;;;;;;;;38959:182:::0;;:::o;37470:256::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37610:4:::1;37602;37597:1;37581:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37580:26;;;;:::i;:::-;37579:35;;;;:::i;:::-;37569:6;:45;;37547:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;37711:6;37701;:17;;;;:::i;:::-;37689:9;:29;;;;37470:256:::0;:::o;31930:39::-;;;;;;;;;;;;;:::o;31311:35::-;;;;:::o;36683:496::-;36791:4;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36870:6:::1;36865:1;36849:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36848:28;;;;:::i;:::-;36835:9;:41;;36813:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37026:4;37020:2;37004:13;:11;:13::i;:::-;:18;;;;:::i;:::-;37003:27;;;;:::i;:::-;36990:9;:40;;36968:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37140:9;37119:18;:30;;;;37167:4;37160:11;;36683:496:::0;;;:::o;31978:27::-;;;;:::o;9636:201::-;9770:7;9802:11;:18;9814:5;9802:18;;;;;;;;;;;;;;;:27;9821:7;9802:27;;;;;;;;;;;;;;;;9795:34;;9636:201;;;;:::o;31353:33::-;;;;:::o;38434:517::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38651:10:::1;38635:13;:26;;;;38691:13;38672:16;:32;;;;38739:22;38715:21;:46;;;;38793:19;38772:18;:40;;;;38855:16;;38839:13;;:32;;;;:::i;:::-;38823:13;:48;;;;38907:2;38890:13;;:19;;38882:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38434:517:::0;;;;:::o;36369:135::-;36429:4;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36469:5:::1;36446:20;;:28;;;;;;;;;;;;;;;;;;36492:4;36485:11;;36369:135:::0;:::o;32046:30::-;;;;:::o;23134:281::-;22411:12;:10;:12::i;:::-;22401:22;;:6;;;;;;;;;;;:22;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23257:1:::1;23237:22;;:8;:22;;::::0;23215:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23370:8;23341:38;;23362:6;;;;;;;;;;;23341:38;;;;;;;;;;;;23399:8;23390:6;;:17;;;;;;;;;;;;;;;;;;23134:281:::0;:::o;32155:31::-;;;;:::o;31393:24::-;;;;:::o;17111:181::-;17169:7;17189:9;17205:1;17201;:5;;;;:::i;:::-;17189:17;;17230:1;17225;:6;;17217:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17283:1;17276:8;;;17111:181;;;;:::o;311:98::-;364:7;391:10;384:17;;311:98;:::o;15733:380::-;15886:1;15869:19;;:5;:19;;;15861:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15967:1;15948:21;;:7;:21;;;15940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16051:6;16021:11;:18;16033:5;16021:18;;;;;;;;;;;;;;;:27;16040:7;16021:27;;;;;;;;;;;;;;;:36;;;;16089:7;16073:32;;16082:5;16073:32;;;16098:6;16073:32;;;;;;:::i;:::-;;;;;;;;15733:380;;;:::o;40283:5362::-;40431:1;40415:18;;:4;:18;;;40407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40508:1;40494:16;;:2;:16;;;40486:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40584:10;:14;40595:2;40584:14;;;;;;;;;;;;;;;;;;;;;;;;;40583:15;:36;;;;;40603:10;:16;40614:4;40603:16;;;;;;;;;;;;;;;;;;;;;;;;;40602:17;40583:36;40561:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;40721:1;40711:6;:11;40707:93;;40739:28;40755:4;40761:2;40765:1;40739:15;:28::i;:::-;40782:7;;40707:93;40816:14;;;;;;;;;;;40812:2487;;;40877:7;:5;:7::i;:::-;40869:15;;:4;:15;;;;:49;;;;;40911:7;:5;:7::i;:::-;40905:13;;:2;:13;;;;40869:49;:86;;;;;40953:1;40939:16;;:2;:16;;;;40869:86;:128;;;;;40990:6;40976:21;;:2;:21;;;;40869:128;:158;;;;;41019:8;;;;;;;;;;;41018:9;40869:158;40847:2441;;;41067:13;;;;;;;;;;;41062:223;;41139:19;:25;41159:4;41139:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41168:19;:23;41188:2;41168:23;;;;;;;;;;;;;;;;;;;;;;;;;41139:52;41105:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;41062:223;41441:20;;;;;;;;;;;41437:641;;;41522:7;:5;:7::i;:::-;41516:13;;:2;:13;;;;:72;;;;;41572:15;41558:30;;:2;:30;;;;41516:72;:129;;;;;41631:13;41617:28;;:2;:28;;;;41516:129;41486:573;;;41809:12;41734:28;:39;41763:9;41734:39;;;;;;;;;;;;;;;;:87;41696:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42023:12;41981:28;:39;42010:9;41981:39;;;;;;;;;;;;;;;:54;;;;41486:573;41437:641;42152:25;:31;42178:4;42152:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42209:31;:35;42241:2;42209:35;;;;;;;;;;;;;;;;;;;;;;;;;42208:36;42152:92;42126:1147;;;42331:20;;42321:6;:30;;42287:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;42539:9;;42522:13;42532:2;42522:9;:13::i;:::-;42513:6;:22;;;;:::i;:::-;:35;;42479:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42126:1147;;;42717:25;:29;42743:2;42717:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42772:31;:37;42804:4;42772:37;;;;;;;;;;;;;;;;;;;;;;;;;42771:38;42717:92;42691:582;;;42896:20;;42886:6;:30;;42852:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;42691:582;;;43053:31;:35;43085:2;43053:35;;;;;;;;;;;;;;;;;;;;;;;;;43048:225;;43173:9;;43156:13;43166:2;43156:9;:13::i;:::-;43147:6;:22;;;;:::i;:::-;:35;;43113:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43048:225;42691:582;42126:1147;40847:2441;40812:2487;43340:10;43361:13;43353:21;;:4;:21;;;43340:34;;43390:5;43389:6;:28;;;;;43399:18;;;;;;;;;;;43389:28;43385:565;;;43490:1;43456:24;:30;43481:4;43456:30;;;;;;;;;;;;;;;;:35;;:120;;;;;43560:15;43547:8;43513:24;:30;43538:4;43513:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;43456:120;43434:353;;;43630:21;;43611:16;:40;;;;43686:18;;43670:13;:34;;;;43755:16;;43739:13;;:32;;;;:::i;:::-;43723:13;:48;;;;43434:353;43385:565;;;43855:1;43823:24;:28;43848:2;43823:28;;;;;;;;;;;;;;;;:33;43819:120;;43908:15;43877:24;:28;43902:2;43877:28;;;;;;;;;;;;;;;:46;;;;43819:120;43385:565;43962:28;43993:24;44011:4;43993:9;:24::i;:::-;43962:55;;44030:12;44069:18;;44045:20;:42;;44030:57;;44118:7;:35;;;;;44142:11;;;;;;;;;;;44118:35;:61;;;;;44171:8;;;;;;;;;;;44170:9;44118:61;:110;;;;;44197:25;:31;44223:4;44197:31;;;;;;;;;;;;;;;;;;;;;;;;;44196:32;44118:110;:153;;;;;44246:19;:25;44266:4;44246:25;;;;;;;;;;;;;;;;;;;;;;;;;44245:26;44118:153;:194;;;;;44289:19;:23;44309:2;44289:23;;;;;;;;;;;;;;;;;;;;;;;;;44288:24;44118:194;44100:326;;;44350:4;44339:8;;:15;;;;;;;;;;;;;;;;;;44371:10;:8;:10::i;:::-;44409:5;44398:8;;:16;;;;;;;;;;;;;;;;;;44100:326;44438:12;44454:8;;;;;;;;;;;44453:9;44438:24;;44564:19;:25;44584:4;44564:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44593:19;:23;44613:2;44593:23;;;;;;;;;;;;;;;;;;;;;;;;;44564:52;44560:100;;;44643:5;44633:15;;44560:100;44672:12;44777:7;44773:819;;;44829:25;:29;44855:2;44829:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44878:1;44862:13;;:17;44829:50;44825:618;;;44907:34;44937:3;44907:25;44918:13;;44907:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44900:41;;45010:13;;44990:16;;44983:4;:23;;;;:::i;:::-;44982:41;;;;:::i;:::-;44960:18;;:63;;;;;;;:::i;:::-;;;;;;;;45086:13;;45069;;45062:4;:20;;;;:::i;:::-;45061:38;;;;:::i;:::-;45042:15;;:57;;;;;;;:::i;:::-;;;;;;;;44825:618;;;45161:25;:31;45187:4;45161:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;45211:1;45196:12;;:16;45161:51;45157:286;;;45240:33;45269:3;45240:24;45251:12;;45240:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45233:40;;45341:12;;45322:15;;45315:4;:22;;;;:::i;:::-;45314:39;;;;:::i;:::-;45292:18;;:61;;;;;;;:::i;:::-;;;;;;;;45415:12;;45399;;45392:4;:19;;;;:::i;:::-;45391:36;;;;:::i;:::-;45372:15;;:55;;;;;;;:::i;:::-;;;;;;;;45157:286;44825:618;45470:1;45463:4;:8;45459:91;;;45492:42;45508:4;45522;45529;45492:15;:42::i;:::-;45459:91;45576:4;45566:14;;;;;:::i;:::-;;;44773:819;45604:33;45620:4;45626:2;45630:6;45604:15;:33::i;:::-;40396:5249;;;;;40283:5362;;;;:::o;18014:226::-;18134:7;18167:1;18162;:6;;18170:12;18154:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18194:9;18210:1;18206;:5;;;;:::i;:::-;18194:17;;18231:1;18224:8;;;18014:226;;;;;:::o;39708:188::-;39825:5;39791:25;:31;39817:4;39791:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39882:5;39848:40;;39876:4;39848:40;;;;;;;;;;;;39708:188;;:::o;13232:610::-;13390:1;13372:20;;:6;:20;;;13364:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13474:1;13453:23;;:9;:23;;;13445:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13529:47;13550:6;13558:9;13569:6;13529:20;:47::i;:::-;13609:108;13645:6;13609:108;;;;;;;;;;;;;;;;;:9;:17;13619:6;13609:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;13589:9;:17;13599:6;13589:17;;;;;;;;;;;;;;;:128;;;;13751:32;13776:6;13751:9;:20;13761:9;13751:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13728:9;:20;13738:9;13728:20;;;;;;;;;;;;;;;:55;;;;13816:9;13799:35;;13808:6;13799:35;;;13827:6;13799:35;;;;;;:::i;:::-;;;;;;;;13232:610;;;:::o;46777:1664::-;46816:23;46842:24;46860:4;46842:9;:24::i;:::-;46816:50;;46877:25;46970:12;;46939:15;;46905:18;;:49;;;;:::i;:::-;:77;;;;:::i;:::-;46877:105;;46993:12;47041:1;47022:15;:20;:46;;;;47067:1;47046:17;:22;47022:46;47018:85;;;47085:7;;;;;47018:85;47158:2;47137:18;;:23;;;;:::i;:::-;47119:15;:41;47115:115;;;47216:2;47195:18;;:23;;;;:::i;:::-;47177:41;;47115:115;47291:23;47404:1;47371:17;47336:18;;47318:15;:36;;;;:::i;:::-;47317:71;;;;:::i;:::-;:88;;;;:::i;:::-;47291:114;;47416:26;47445:36;47465:15;47445;:19;;:36;;;;:::i;:::-;47416:65;;47494:25;47522:21;47494:49;;47556:36;47573:18;47556:16;:36::i;:::-;47605:18;47626:44;47652:17;47626:21;:25;;:44;;;;:::i;:::-;47605:65;;47683:20;47706:78;47756:17;47706:31;47721:15;;47706:10;:14;;:31;;;;:::i;:::-;:35;;:78;;;;:::i;:::-;47683:101;;47795:17;47815:51;47848:17;47815:28;47830:12;;47815:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;47795:71;;47877:23;47931:9;47916:12;47903:10;:25;;;;:::i;:::-;:37;;;;:::i;:::-;47877:63;;47974:1;47953:18;:22;;;;48004:1;47986:15;:19;;;;48031:1;48016:12;:16;;;;48067:1;48049:15;:19;:42;;;;;48090:1;48072:15;:19;48049:42;48045:278;;;48108:46;48121:15;48138;48108:12;:46::i;:::-;48174:137;48207:18;48244:15;48278:18;;48174:137;;;;;;;;:::i;:::-;;;;;;;;48045:278;48357:12;;;;;;;;;;;48349:26;;48383:21;48349:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48335:98;;;;;46805:1636;;;;;;;;;;46777:1664;:::o;18499:471::-;18557:7;18807:1;18802;:6;18798:47;;18832:1;18825:8;;;;18798:47;18857:9;18873:1;18869;:5;;;;:::i;:::-;18857:17;;18902:1;18897;18893;:5;;;;:::i;:::-;:10;18885:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18961:1;18954:8;;;18499:471;;;;;:::o;19446:132::-;19504:7;19531:39;19535:1;19538;19531:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19524:46;;19446:132;;;;:::o;16716:125::-;;;;:::o;17575:136::-;17633:7;17660:43;17664:1;17667;17660:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17653:50;;17575:136;;;;:::o;45653:589::-;45779:21;45817:1;45803:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45779:40;;45848:4;45830;45835:1;45830:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45874:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45864:4;45869:1;45864:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45909:62;45926:4;45941:15;45959:11;45909:8;:62::i;:::-;46010:15;:66;;;46091:11;46117:1;46161:4;46188;46208:15;46010:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45708:534;45653:589;:::o;46250:519::-;46398:62;46415:4;46430:15;46448:11;46398:8;:62::i;:::-;46503:15;:31;;;46542:9;46575:4;46595:11;46621:1;46664;46715:4;46735:15;46503:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46250:519;;:::o;20074:312::-;20194:7;20226:1;20222;:5;20229:12;20214:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20253:9;20269:1;20265;:5;;;;:::i;:::-;20253:17;;20377:1;20370:8;;;20074:312;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:116::-;6189:21;6204:5;6189:21;:::i;:::-;6182:5;6179:32;6169:60;;6225:1;6222;6215:12;6169:60;6119:116;:::o;6241:133::-;6284:5;6322:6;6309:20;6300:29;;6338:30;6362:5;6338:30;:::i;:::-;6241:133;;;;:::o;6380:468::-;6445:6;6453;6502:2;6490:9;6481:7;6477:23;6473:32;6470:119;;;6508:79;;:::i;:::-;6470:119;6628:1;6653:53;6698:7;6689:6;6678:9;6674:22;6653:53;:::i;:::-;6643:63;;6599:117;6755:2;6781:50;6823:7;6814:6;6803:9;6799:22;6781:50;:::i;:::-;6771:60;;6726:115;6380:468;;;;;:::o;6854:86::-;6889:7;6929:4;6922:5;6918:16;6907:27;;6854:86;;;:::o;6946:112::-;7029:22;7045:5;7029:22;:::i;:::-;7024:3;7017:35;6946:112;;:::o;7064:214::-;7153:4;7191:2;7180:9;7176:18;7168:26;;7204:67;7268:1;7257:9;7253:17;7244:6;7204:67;:::i;:::-;7064:214;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:474::-;7704:6;7712;7761:2;7749:9;7740:7;7736:23;7732:32;7729:119;;;7767:79;;:::i;:::-;7729:119;7887:1;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7858:117;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;7636:474;;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:765::-;9011:6;9019;9027;9035;9084:3;9072:9;9063:7;9059:23;9055:33;9052:120;;;9091:79;;:::i;:::-;9052:120;9211:1;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9182:117;9338:2;9364:53;9409:7;9400:6;9389:9;9385:22;9364:53;:::i;:::-;9354:63;;9309:118;9466:2;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9437:118;9594:2;9620:53;9665:7;9656:6;9645:9;9641:22;9620:53;:::i;:::-;9610:63;;9565:118;8925:765;;;;;;;:::o;9696:180::-;9744:77;9741:1;9734:88;9841:4;9838:1;9831:15;9865:4;9862:1;9855:15;9882:320;9926:6;9963:1;9957:4;9953:12;9943:22;;10010:1;10004:4;10000:12;10031:18;10021:81;;10087:4;10079:6;10075:17;10065:27;;10021:81;10149:2;10141:6;10138:14;10118:18;10115:38;10112:84;;10168:18;;:::i;:::-;10112:84;9933:269;9882:320;;;:::o;10208:182::-;10348:34;10344:1;10336:6;10332:14;10325:58;10208:182;:::o;10396:366::-;10538:3;10559:67;10623:2;10618:3;10559:67;:::i;:::-;10552:74;;10635:93;10724:3;10635:93;:::i;:::-;10753:2;10748:3;10744:12;10737:19;;10396:366;;;:::o;10768:419::-;10934:4;10972:2;10961:9;10957:18;10949:26;;11021:9;11015:4;11011:20;11007:1;10996:9;10992:17;10985:47;11049:131;11175:4;11049:131;:::i;:::-;11041:139;;10768:419;;;:::o;11193:180::-;11241:77;11238:1;11231:88;11338:4;11335:1;11328:15;11362:4;11359:1;11352:15;11379:348;11419:7;11442:20;11460:1;11442:20;:::i;:::-;11437:25;;11476:20;11494:1;11476:20;:::i;:::-;11471:25;;11664:1;11596:66;11592:74;11589:1;11586:81;11581:1;11574:9;11567:17;11563:105;11560:131;;;11671:18;;:::i;:::-;11560:131;11719:1;11716;11712:9;11701:20;;11379:348;;;;:::o;11733:180::-;11781:77;11778:1;11771:88;11878:4;11875:1;11868:15;11902:4;11899:1;11892:15;11919:185;11959:1;11976:20;11994:1;11976:20;:::i;:::-;11971:25;;12010:20;12028:1;12010:20;:::i;:::-;12005:25;;12049:1;12039:35;;12054:18;;:::i;:::-;12039:35;12096:1;12093;12089:9;12084:14;;11919:185;;;;:::o;12110:234::-;12250:34;12246:1;12238:6;12234:14;12227:58;12319:17;12314:2;12306:6;12302:15;12295:42;12110:234;:::o;12350:366::-;12492:3;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12589:93;12678:3;12589:93;:::i;:::-;12707:2;12702:3;12698:12;12691:19;;12350:366;;;:::o;12722:419::-;12888:4;12926:2;12915:9;12911:18;12903:26;;12975:9;12969:4;12965:20;12961:1;12950:9;12946:17;12939:47;13003:131;13129:4;13003:131;:::i;:::-;12995:139;;12722:419;;;:::o;13147:305::-;13187:3;13206:20;13224:1;13206:20;:::i;:::-;13201:25;;13240:20;13258:1;13240:20;:::i;:::-;13235:25;;13394:1;13326:66;13322:74;13319:1;13316:81;13313:107;;;13400:18;;:::i;:::-;13313:107;13444:1;13441;13437:9;13430:16;;13147:305;;;;:::o;13458:178::-;13598:30;13594:1;13586:6;13582:14;13575:54;13458:178;:::o;13642:366::-;13784:3;13805:67;13869:2;13864:3;13805:67;:::i;:::-;13798:74;;13881:93;13970:3;13881:93;:::i;:::-;13999:2;13994:3;13990:12;13983:19;;13642:366;;;:::o;14014:419::-;14180:4;14218:2;14207:9;14203:18;14195:26;;14267:9;14261:4;14257:20;14253:1;14242:9;14238:17;14231:47;14295:131;14421:4;14295:131;:::i;:::-;14287:139;;14014:419;;;:::o;14439:179::-;14579:31;14575:1;14567:6;14563:14;14556:55;14439:179;:::o;14624:366::-;14766:3;14787:67;14851:2;14846:3;14787:67;:::i;:::-;14780:74;;14863:93;14952:3;14863:93;:::i;:::-;14981:2;14976:3;14972:12;14965:19;;14624:366;;;:::o;14996:419::-;15162:4;15200:2;15189:9;15185:18;15177:26;;15249:9;15243:4;15239:20;15235:1;15224:9;15220:17;15213:47;15277:131;15403:4;15277:131;:::i;:::-;15269:139;;14996:419;;;:::o;15421:244::-;15561:34;15557:1;15549:6;15545:14;15538:58;15630:27;15625:2;15617:6;15613:15;15606:52;15421:244;:::o;15671:366::-;15813:3;15834:67;15898:2;15893:3;15834:67;:::i;:::-;15827:74;;15910:93;15999:3;15910:93;:::i;:::-;16028:2;16023:3;16019:12;16012:19;;15671:366;;;:::o;16043:419::-;16209:4;16247:2;16236:9;16232:18;16224:26;;16296:9;16290:4;16286:20;16282:1;16271:9;16267:17;16260:47;16324:131;16450:4;16324:131;:::i;:::-;16316:139;;16043:419;;;:::o;16468:223::-;16608:34;16604:1;16596:6;16592:14;16585:58;16677:6;16672:2;16664:6;16660:15;16653:31;16468:223;:::o;16697:366::-;16839:3;16860:67;16924:2;16919:3;16860:67;:::i;:::-;16853:74;;16936:93;17025:3;16936:93;:::i;:::-;17054:2;17049:3;17045:12;17038:19;;16697:366;;;:::o;17069:419::-;17235:4;17273:2;17262:9;17258:18;17250:26;;17322:9;17316:4;17312:20;17308:1;17297:9;17293:17;17286:47;17350:131;17476:4;17350:131;:::i;:::-;17342:139;;17069:419;;;:::o;17494:240::-;17634:34;17630:1;17622:6;17618:14;17611:58;17703:23;17698:2;17690:6;17686:15;17679:48;17494:240;:::o;17740:366::-;17882:3;17903:67;17967:2;17962:3;17903:67;:::i;:::-;17896:74;;17979:93;18068:3;17979:93;:::i;:::-;18097:2;18092:3;18088:12;18081:19;;17740:366;;;:::o;18112:419::-;18278:4;18316:2;18305:9;18301:18;18293:26;;18365:9;18359:4;18355:20;18351:1;18340:9;18336:17;18329:47;18393:131;18519:4;18393:131;:::i;:::-;18385:139;;18112:419;;;:::o;18537:237::-;18677:34;18673:1;18665:6;18661:14;18654:58;18746:20;18741:2;18733:6;18729:15;18722:45;18537:237;:::o;18780:366::-;18922:3;18943:67;19007:2;19002:3;18943:67;:::i;:::-;18936:74;;19019:93;19108:3;19019:93;:::i;:::-;19137:2;19132:3;19128:12;19121:19;;18780:366;;;:::o;19152:419::-;19318:4;19356:2;19345:9;19341:18;19333:26;;19405:9;19399:4;19395:20;19391:1;19380:9;19376:17;19369:47;19433:131;19559:4;19433:131;:::i;:::-;19425:139;;19152:419;;;:::o;19577:225::-;19717:34;19713:1;19705:6;19701:14;19694:58;19786:8;19781:2;19773:6;19769:15;19762:33;19577:225;:::o;19808:366::-;19950:3;19971:67;20035:2;20030:3;19971:67;:::i;:::-;19964:74;;20047:93;20136:3;20047:93;:::i;:::-;20165:2;20160:3;20156:12;20149:19;;19808:366;;;:::o;20180:419::-;20346:4;20384:2;20373:9;20369:18;20361:26;;20433:9;20427:4;20423:20;20419:1;20408:9;20404:17;20397:47;20461:131;20587:4;20461:131;:::i;:::-;20453:139;;20180:419;;;:::o;20605:177::-;20745:29;20741:1;20733:6;20729:14;20722:53;20605:177;:::o;20788:366::-;20930:3;20951:67;21015:2;21010:3;20951:67;:::i;:::-;20944:74;;21027:93;21116:3;21027:93;:::i;:::-;21145:2;21140:3;21136:12;21129:19;;20788:366;;;:::o;21160:419::-;21326:4;21364:2;21353:9;21349:18;21341:26;;21413:9;21407:4;21403:20;21399:1;21388:9;21384:17;21377:47;21441:131;21567:4;21441:131;:::i;:::-;21433:139;;21160:419;;;:::o;21585:223::-;21725:34;21721:1;21713:6;21709:14;21702:58;21794:6;21789:2;21781:6;21777:15;21770:31;21585:223;:::o;21814:366::-;21956:3;21977:67;22041:2;22036:3;21977:67;:::i;:::-;21970:74;;22053:93;22142:3;22053:93;:::i;:::-;22171:2;22166:3;22162:12;22155:19;;21814:366;;;:::o;22186:419::-;22352:4;22390:2;22379:9;22375:18;22367:26;;22439:9;22433:4;22429:20;22425:1;22414:9;22410:17;22403:47;22467:131;22593:4;22467:131;:::i;:::-;22459:139;;22186:419;;;:::o;22611:221::-;22751:34;22747:1;22739:6;22735:14;22728:58;22820:4;22815:2;22807:6;22803:15;22796:29;22611:221;:::o;22838:366::-;22980:3;23001:67;23065:2;23060:3;23001:67;:::i;:::-;22994:74;;23077:93;23166:3;23077:93;:::i;:::-;23195:2;23190:3;23186:12;23179:19;;22838:366;;;:::o;23210:419::-;23376:4;23414:2;23403:9;23399:18;23391:26;;23463:9;23457:4;23453:20;23449:1;23438:9;23434:17;23427:47;23491:131;23617:4;23491:131;:::i;:::-;23483:139;;23210:419;;;:::o;23635:224::-;23775:34;23771:1;23763:6;23759:14;23752:58;23844:7;23839:2;23831:6;23827:15;23820:32;23635:224;:::o;23865:366::-;24007:3;24028:67;24092:2;24087:3;24028:67;:::i;:::-;24021:74;;24104:93;24193:3;24104:93;:::i;:::-;24222:2;24217:3;24213:12;24206:19;;23865:366;;;:::o;24237:419::-;24403:4;24441:2;24430:9;24426:18;24418:26;;24490:9;24484:4;24480:20;24476:1;24465:9;24461:17;24454:47;24518:131;24644:4;24518:131;:::i;:::-;24510:139;;24237:419;;;:::o;24662:222::-;24802:34;24798:1;24790:6;24786:14;24779:58;24871:5;24866:2;24858:6;24854:15;24847:30;24662:222;:::o;24890:366::-;25032:3;25053:67;25117:2;25112:3;25053:67;:::i;:::-;25046:74;;25129:93;25218:3;25129:93;:::i;:::-;25247:2;25242:3;25238:12;25231:19;;24890:366;;;:::o;25262:419::-;25428:4;25466:2;25455:9;25451:18;25443:26;;25515:9;25509:4;25505:20;25501:1;25490:9;25486:17;25479:47;25543:131;25669:4;25543:131;:::i;:::-;25535:139;;25262:419;;;:::o;25687:236::-;25827:34;25823:1;25815:6;25811:14;25804:58;25896:19;25891:2;25883:6;25879:15;25872:44;25687:236;:::o;25929:366::-;26071:3;26092:67;26156:2;26151:3;26092:67;:::i;:::-;26085:74;;26168:93;26257:3;26168:93;:::i;:::-;26286:2;26281:3;26277:12;26270:19;;25929:366;;;:::o;26301:419::-;26467:4;26505:2;26494:9;26490:18;26482:26;;26554:9;26548:4;26544:20;26540:1;26529:9;26525:17;26518:47;26582:131;26708:4;26582:131;:::i;:::-;26574:139;;26301:419;;;:::o;26726:172::-;26866:24;26862:1;26854:6;26850:14;26843:48;26726:172;:::o;26904:366::-;27046:3;27067:67;27131:2;27126:3;27067:67;:::i;:::-;27060:74;;27143:93;27232:3;27143:93;:::i;:::-;27261:2;27256:3;27252:12;27245:19;;26904:366;;;:::o;27276:419::-;27442:4;27480:2;27469:9;27465:18;27457:26;;27529:9;27523:4;27519:20;27515:1;27504:9;27500:17;27493:47;27557:131;27683:4;27557:131;:::i;:::-;27549:139;;27276:419;;;:::o;27701:297::-;27841:34;27837:1;27829:6;27825:14;27818:58;27910:34;27905:2;27897:6;27893:15;27886:59;27979:11;27974:2;27966:6;27962:15;27955:36;27701:297;:::o;28004:366::-;28146:3;28167:67;28231:2;28226:3;28167:67;:::i;:::-;28160:74;;28243:93;28332:3;28243:93;:::i;:::-;28361:2;28356:3;28352:12;28345:19;;28004:366;;;:::o;28376:419::-;28542:4;28580:2;28569:9;28565:18;28557:26;;28629:9;28623:4;28619:20;28615:1;28604:9;28600:17;28593:47;28657:131;28783:4;28657:131;:::i;:::-;28649:139;;28376:419;;;:::o;28801:240::-;28941:34;28937:1;28929:6;28925:14;28918:58;29010:23;29005:2;28997:6;28993:15;28986:48;28801:240;:::o;29047:366::-;29189:3;29210:67;29274:2;29269:3;29210:67;:::i;:::-;29203:74;;29286:93;29375:3;29286:93;:::i;:::-;29404:2;29399:3;29395:12;29388:19;;29047:366;;;:::o;29419:419::-;29585:4;29623:2;29612:9;29608:18;29600:26;;29672:9;29666:4;29662:20;29658:1;29647:9;29643:17;29636:47;29700:131;29826:4;29700:131;:::i;:::-;29692:139;;29419:419;;;:::o;29844:169::-;29984:21;29980:1;29972:6;29968:14;29961:45;29844:169;:::o;30019:366::-;30161:3;30182:67;30246:2;30241:3;30182:67;:::i;:::-;30175:74;;30258:93;30347:3;30258:93;:::i;:::-;30376:2;30371:3;30367:12;30360:19;;30019:366;;;:::o;30391:419::-;30557:4;30595:2;30584:9;30580:18;30572:26;;30644:9;30638:4;30634:20;30630:1;30619:9;30615:17;30608:47;30672:131;30798:4;30672:131;:::i;:::-;30664:139;;30391:419;;;:::o;30816:241::-;30956:34;30952:1;30944:6;30940:14;30933:58;31025:24;31020:2;31012:6;31008:15;31001:49;30816:241;:::o;31063:366::-;31205:3;31226:67;31290:2;31285:3;31226:67;:::i;:::-;31219:74;;31302:93;31391:3;31302:93;:::i;:::-;31420:2;31415:3;31411:12;31404:19;;31063:366;;;:::o;31435:419::-;31601:4;31639:2;31628:9;31624:18;31616:26;;31688:9;31682:4;31678:20;31674:1;31663:9;31659:17;31652:47;31716:131;31842:4;31716:131;:::i;:::-;31708:139;;31435:419;;;:::o;31860:191::-;31900:4;31920:20;31938:1;31920:20;:::i;:::-;31915:25;;31954:20;31972:1;31954:20;:::i;:::-;31949:25;;31993:1;31990;31987:8;31984:34;;;31998:18;;:::i;:::-;31984:34;32043:1;32040;32036:9;32028:17;;31860:191;;;;:::o;32057:442::-;32206:4;32244:2;32233:9;32229:18;32221:26;;32257:71;32325:1;32314:9;32310:17;32301:6;32257:71;:::i;:::-;32338:72;32406:2;32395:9;32391:18;32382:6;32338:72;:::i;:::-;32420;32488:2;32477:9;32473:18;32464:6;32420:72;:::i;:::-;32057:442;;;;;;:::o;32505:147::-;32606:11;32643:3;32628:18;;32505:147;;;;:::o;32658:114::-;;:::o;32778:398::-;32937:3;32958:83;33039:1;33034:3;32958:83;:::i;:::-;32951:90;;33050:93;33139:3;33050:93;:::i;:::-;33168:1;33163:3;33159:11;33152:18;;32778:398;;;:::o;33182:379::-;33366:3;33388:147;33531:3;33388:147;:::i;:::-;33381:154;;33552:3;33545:10;;33182:379;;;:::o;33567:220::-;33707:34;33703:1;33695:6;33691:14;33684:58;33776:3;33771:2;33763:6;33759:15;33752:28;33567:220;:::o;33793:366::-;33935:3;33956:67;34020:2;34015:3;33956:67;:::i;:::-;33949:74;;34032:93;34121:3;34032:93;:::i;:::-;34150:2;34145:3;34141:12;34134:19;;33793:366;;;:::o;34165:419::-;34331:4;34369:2;34358:9;34354:18;34346:26;;34418:9;34412:4;34408:20;34404:1;34393:9;34389:17;34382:47;34446:131;34572:4;34446:131;:::i;:::-;34438:139;;34165:419;;;:::o;34590:180::-;34638:77;34635:1;34628:88;34735:4;34732:1;34725:15;34759:4;34756:1;34749:15;34776:180;34824:77;34821:1;34814:88;34921:4;34918:1;34911:15;34945:4;34942:1;34935:15;34962:143;35019:5;35050:6;35044:13;35035:22;;35066:33;35093:5;35066:33;:::i;:::-;34962:143;;;;:::o;35111:351::-;35181:6;35230:2;35218:9;35209:7;35205:23;35201:32;35198:119;;;35236:79;;:::i;:::-;35198:119;35356:1;35381:64;35437:7;35428:6;35417:9;35413:22;35381:64;:::i;:::-;35371:74;;35327:128;35111:351;;;;:::o;35468:85::-;35513:7;35542:5;35531:16;;35468:85;;;:::o;35559:158::-;35617:9;35650:61;35668:42;35677:32;35703:5;35677:32;:::i;:::-;35668:42;:::i;:::-;35650:61;:::i;:::-;35637:74;;35559:158;;;:::o;35723:147::-;35818:45;35857:5;35818:45;:::i;:::-;35813:3;35806:58;35723:147;;:::o;35876:114::-;35943:6;35977:5;35971:12;35961:22;;35876:114;;;:::o;35996:184::-;36095:11;36129:6;36124:3;36117:19;36169:4;36164:3;36160:14;36145:29;;35996:184;;;;:::o;36186:132::-;36253:4;36276:3;36268:11;;36306:4;36301:3;36297:14;36289:22;;36186:132;;;:::o;36324:108::-;36401:24;36419:5;36401:24;:::i;:::-;36396:3;36389:37;36324:108;;:::o;36438:179::-;36507:10;36528:46;36570:3;36562:6;36528:46;:::i;:::-;36606:4;36601:3;36597:14;36583:28;;36438:179;;;;:::o;36623:113::-;36693:4;36725;36720:3;36716:14;36708:22;;36623:113;;;:::o;36772:732::-;36891:3;36920:54;36968:5;36920:54;:::i;:::-;36990:86;37069:6;37064:3;36990:86;:::i;:::-;36983:93;;37100:56;37150:5;37100:56;:::i;:::-;37179:7;37210:1;37195:284;37220:6;37217:1;37214:13;37195:284;;;37296:6;37290:13;37323:63;37382:3;37367:13;37323:63;:::i;:::-;37316:70;;37409:60;37462:6;37409:60;:::i;:::-;37399:70;;37255:224;37242:1;37239;37235:9;37230:14;;37195:284;;;37199:14;37495:3;37488:10;;36896:608;;;36772:732;;;;:::o;37510:831::-;37773:4;37811:3;37800:9;37796:19;37788:27;;37825:71;37893:1;37882:9;37878:17;37869:6;37825:71;:::i;:::-;37906:80;37982:2;37971:9;37967:18;37958:6;37906:80;:::i;:::-;38033:9;38027:4;38023:20;38018:2;38007:9;38003:18;37996:48;38061:108;38164:4;38155:6;38061:108;:::i;:::-;38053:116;;38179:72;38247:2;38236:9;38232:18;38223:6;38179:72;:::i;:::-;38261:73;38329:3;38318:9;38314:19;38305:6;38261:73;:::i;:::-;37510:831;;;;;;;;:::o;38347:807::-;38596:4;38634:3;38623:9;38619:19;38611:27;;38648:71;38716:1;38705:9;38701:17;38692:6;38648:71;:::i;:::-;38729:72;38797:2;38786:9;38782:18;38773:6;38729:72;:::i;:::-;38811:80;38887:2;38876:9;38872:18;38863:6;38811:80;:::i;:::-;38901;38977:2;38966:9;38962:18;38953:6;38901:80;:::i;:::-;38991:73;39059:3;39048:9;39044:19;39035:6;38991:73;:::i;:::-;39074;39142:3;39131:9;39127:19;39118:6;39074:73;:::i;:::-;38347:807;;;;;;;;;:::o;39160:143::-;39217:5;39248:6;39242:13;39233:22;;39264:33;39291:5;39264:33;:::i;:::-;39160:143;;;;:::o;39309:663::-;39397:6;39405;39413;39462:2;39450:9;39441:7;39437:23;39433:32;39430:119;;;39468:79;;:::i;:::-;39430:119;39588:1;39613:64;39669:7;39660:6;39649:9;39645:22;39613:64;:::i;:::-;39603:74;;39559:128;39726:2;39752:64;39808:7;39799:6;39788:9;39784:22;39752:64;:::i;:::-;39742:74;;39697:129;39865:2;39891:64;39947:7;39938:6;39927:9;39923:22;39891:64;:::i;:::-;39881:74;;39836:129;39309:663;;;;;:::o

Swarm Source

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