ETH Price: $2,447.58 (-0.89%)

Token

UniqueMeta (UNQM)
 

Overview

Max Total Supply

1,000,000,000,000 UNQM

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
119,318,490.806186987565867926 UNQM

Value
$0.00
0x620b42398d4406f02711e84d3b7cae11ba7bf681
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:
UniqueMeta

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-11
*/

/*
************************************************************
***********************UNIQUEMETA***************************
************************CONTRACT****************************
************************************************************

***********************WEBSITE******************************
            https://www.uniquemeta.org/

***********************TELEGRAM*****************************
            https://t.me/UniqueMetaEth

***********************TWITTER******************************
            https://twitter.com/UniqueMetaEth
*/

// SPDX-License-Identifier: Unlicensed
 
pragma solidity 0.8.9;
 
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, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint 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, uint);
 
    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    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);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
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,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract UniqueMeta is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xD49576C7094b61004264612Ddf5feEC207e5EFAE);
 
    bool private swapping;
 
    address public marketingWallet;
    address public devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
 
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
 
    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 buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
 
    uint256 public tokensForMarketing;
    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 ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    constructor() ERC20("UniqueMeta", "UNQM") {
 
        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 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 6;
        uint256 _buyDevFee = 3;
 
        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 8;
        uint256 _sellDevFee = 3;
 
        uint256 _earlySellLiquidityFee = 11;
        uint256 _earlySellMarketingFee = 11;
 
        uint256 totalSupply = 1 * 1e12 * 1e18;
 
        maxTransactionAmount = totalSupply * 1 / 1000; // 0.1% maxTransactionAmountTxn
        maxWallet = totalSupply * 5 / 1000; // .5% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
 
        marketingWallet = address(0xD49576C7094b61004264612Ddf5feEC207e5EFAE); // set as marketing wallet
        devWallet = address(0xD49576C7094b61004264612Ddf5feEC207e5EFAE); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, 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;
        lastLpBurnTime = block.timestamp;
        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() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% 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 {
        _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 updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        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");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 8;
                sellMarketingFee = 5;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 8;
                sellMarketingFee = 5;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        }
 
		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;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
        	amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) 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
            deadAddress,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > 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 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
 
 
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","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"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601160036101000a81548160ff0219169083151502179055506001601560006101000a81548160ff021916908315150217905550348015620000c457600080fd5b506040518060400160405280600a81526020017f556e697175654d657461000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f554e514d0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200014992919062000c9a565b5080600490805190602001906200016292919062000c9a565b5050506000620001776200076660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002428160016200076e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bd57600080fd5b505afa158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f8919062000db4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035b57600080fd5b505afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000db4565b6040518363ffffffff1660e01b8152600401620003b592919062000df7565b602060405180830381600087803b158015620003d057600080fd5b505af1158015620003e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040b919062000db4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200045360a05160016200076e60201b60201c565b6200046860a05160016200086b60201b60201c565b6000600590506000600690506000600390506000600590506000600890506000600390506000600b90506000600b905060006c0c9f2c9cd04674edea4000000090506103e8600182620004bc919062000e5d565b620004c8919062000eed565b6008819055506103e8600582620004e0919062000e5d565b620004ec919062000eed565b600a8190555061271060058262000504919062000e5d565b62000510919062000eed565b60098190555088601781905550876018819055508660198190555060195460185460175462000540919062000f25565b6200054c919062000f25565b60168190555085601b8190555084601c8190555083601d81905550601d54601c54601b546200057c919062000f25565b62000588919062000f25565b601a8190555082601e8190555081601f8190555073d49576c7094b61004264612ddf5feec207e5efae600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d49576c7094b61004264612ddf5feec207e5efae600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006686200065a6200090c60201b60201c565b60016200093660201b60201c565b6200067b3060016200093660201b60201c565b6200069061dead60016200093660201b60201c565b620006c5600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200093660201b60201c565b620006e7620006d96200090c60201b60201c565b60016200076e60201b60201c565b620006fa3060016200076e60201b60201c565b6200070f61dead60016200076e60201b60201c565b62000744600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076e60201b60201c565b62000756338262000a8360201b60201c565b50505050505050505050620011b6565b600033905090565b6200077e6200076660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008079062000fe3565b60405180910390fd5b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009466200076660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cf9062000fe3565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a77919062001022565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aed906200108f565b60405180910390fd5b62000b0a6000838362000c3260201b60201c565b62000b268160025462000c3760201b62002a2c1790919060201c565b60028190555062000b84816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000c3760201b62002a2c1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c269190620010c2565b60405180910390a35050565b505050565b600080828462000c48919062000f25565b90508381101562000c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c87906200112f565b60405180910390fd5b8091505092915050565b82805462000ca89062001180565b90600052602060002090601f01602090048101928262000ccc576000855562000d18565b82601f1062000ce757805160ff191683800117855562000d18565b8280016001018555821562000d18579182015b8281111562000d1757825182559160200191906001019062000cfa565b5b50905062000d27919062000d2b565b5090565b5b8082111562000d4657600081600090555060010162000d2c565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d7c8262000d4f565b9050919050565b62000d8e8162000d6f565b811462000d9a57600080fd5b50565b60008151905062000dae8162000d83565b92915050565b60006020828403121562000dcd5762000dcc62000d4a565b5b600062000ddd8482850162000d9d565b91505092915050565b62000df18162000d6f565b82525050565b600060408201905062000e0e600083018562000de6565b62000e1d602083018462000de6565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e6a8262000e24565b915062000e778362000e24565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000eb35762000eb262000e2e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000efa8262000e24565b915062000f078362000e24565b92508262000f1a5762000f1962000ebe565b5b828204905092915050565b600062000f328262000e24565b915062000f3f8362000e24565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f775762000f7662000e2e565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fcb60208362000f82565b915062000fd88262000f93565b602082019050919050565b6000602082019050818103600083015262000ffe8162000fbc565b9050919050565b60008115159050919050565b6200101c8162001005565b82525050565b600060208201905062001039600083018462001011565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001077601f8362000f82565b915062001084826200103f565b602082019050919050565b60006020820190508181036000830152620010aa8162001068565b9050919050565b620010bc8162000e24565b82525050565b6000602082019050620010d96000830184620010b1565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001117601b8362000f82565b91506200112482620010df565b602082019050919050565b600060208201905081810360008301526200114a8162001108565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200119957607f821691505b60208210811415620011b057620011af62001151565b5b50919050565b60805160a051615ea262001222600039600081816115a401528181611df3015281816130f801528181613518015261361501526000818161101f015281816130a001528181614580015281816146700152818161469701528181614733015261475a0152615ea26000f3fe6080604052600436106103d25760003560e01c80638a8c523c116101fd578063aacebbe311610118578063d85ba063116100ab578063f11a24d31161007a578063f11a24d314610e7a578063f2fde38b14610ea5578063f637434214610ece578063f8b45b0514610ef9578063ff935af614610f24576103d9565b8063d85ba06314610dbc578063dd62ed3e14610de7578063e2f4560514610e24578063e884f26014610e4f576103d9565b8063c18bc195116100e7578063c18bc19514610d00578063c876d0b914610d29578063c8c8ebe414610d54578063d257b34f14610d7f576103d9565b8063aacebbe314610c46578063b62496f514610c6f578063bbc0c74214610cac578063c024666814610cd7576103d9565b80639ec22c0e11610190578063a457c2d71161015f578063a457c2d714610b76578063a4c82a0014610bb3578063a4d15b6414610bde578063a9059cbb14610c09576103d9565b80639ec22c0e14610acc5780639fccce3214610af7578063a0d82dc514610b22578063a265777814610b4d576103d9565b8063924de9b7116101cc578063924de9b714610a2457806395d89b4114610a4d5780639a7a23d614610a785780639c3b4fdc14610aa1576103d9565b80638a8c523c1461098c5780638da5cb5b146109a35780638ea5220f146109ce57806392136913146109f9576103d9565b80632e82f1a0116102ed5780636ddd1713116102805780637571336a1161024f5780637571336a146108e457806375f0a8741461090d5780637bce5a04146109385780638095d56414610963576103d9565b80636ddd17131461083a57806370a0823114610865578063715018a6146108a2578063751039fc146108b9576103d9565b80634a62bb65116102bc5780634a62bb651461077c5780634fbee193146107a7578063541a43cf146107e45780636a486a8e1461080f576103d9565b80632e82f1a0146106be578063313ce567146106e9578063395093511461071457806349bd5a5e14610751576103d9565b80631a8145bb1161036557806327c8f8351161033457806327c8f835146106145780632bf3d42d1461063f5780632c3e486c1461066a5780632d5a5d3414610695576103d9565b80631a8145bb146105585780631f3fed8f14610583578063203e727e146105ae57806323b872dd146105d7576103d9565b806318160ddd116103a157806318160ddd146104ae5780631816467f146104d9578063184c16c514610502578063199ffc721461052d576103d9565b806306fdde03146103de578063095ea7b31461040957806310d5de53146104465780631694505e14610483576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f4d565b6040516104009190614926565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906149e1565b610fdf565b60405161043d9190614a3c565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614a57565b610ffd565b60405161047a9190614a3c565b60405180910390f35b34801561048f57600080fd5b5061049861101d565b6040516104a59190614ae3565b60405180910390f35b3480156104ba57600080fd5b506104c3611041565b6040516104d09190614b0d565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190614a57565b61104b565b005b34801561050e57600080fd5b506105176111a2565b6040516105249190614b0d565b60405180910390f35b34801561053957600080fd5b506105426111a8565b60405161054f9190614b0d565b60405180910390f35b34801561056457600080fd5b5061056d6111ae565b60405161057a9190614b0d565b60405180910390f35b34801561058f57600080fd5b506105986111b4565b6040516105a59190614b0d565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190614b28565b6111ba565b005b3480156105e357600080fd5b506105fe60048036038101906105f99190614b55565b6112e4565b60405161060b9190614a3c565b60405180910390f35b34801561062057600080fd5b506106296113bd565b6040516106369190614bb7565b60405180910390f35b34801561064b57600080fd5b506106546113d5565b6040516106619190614b0d565b60405180910390f35b34801561067657600080fd5b5061067f6113db565b60405161068c9190614b0d565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190614bfe565b6113e1565b005b3480156106ca57600080fd5b506106d36114d3565b6040516106e09190614a3c565b60405180910390f35b3480156106f557600080fd5b506106fe6114e6565b60405161070b9190614c5a565b60405180910390f35b34801561072057600080fd5b5061073b600480360381019061073691906149e1565b6114ef565b6040516107489190614a3c565b60405180910390f35b34801561075d57600080fd5b506107666115a2565b6040516107739190614bb7565b60405180910390f35b34801561078857600080fd5b506107916115c6565b60405161079e9190614a3c565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c99190614a57565b6115d9565b6040516107db9190614a3c565b60405180910390f35b3480156107f057600080fd5b506107f961162f565b6040516108069190614b0d565b60405180910390f35b34801561081b57600080fd5b50610824611635565b6040516108319190614b0d565b60405180910390f35b34801561084657600080fd5b5061084f61163b565b60405161085c9190614a3c565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190614a57565b61164e565b6040516108999190614b0d565b60405180910390f35b3480156108ae57600080fd5b506108b7611696565b005b3480156108c557600080fd5b506108ce6117ee565b6040516108db9190614a3c565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190614bfe565b6118a9565b005b34801561091957600080fd5b5061092261199b565b60405161092f9190614bb7565b60405180910390f35b34801561094457600080fd5b5061094d6119c1565b60405161095a9190614b0d565b60405180910390f35b34801561096f57600080fd5b5061098a60048036038101906109859190614c75565b6119c7565b005b34801561099857600080fd5b506109a1611ae1565b005b3480156109af57600080fd5b506109b8611bbe565b6040516109c59190614bb7565b60405180910390f35b3480156109da57600080fd5b506109e3611be8565b6040516109f09190614bb7565b60405180910390f35b348015610a0557600080fd5b50610a0e611c0e565b604051610a1b9190614b0d565b60405180910390f35b348015610a3057600080fd5b50610a4b6004803603810190610a469190614cc8565b611c14565b005b348015610a5957600080fd5b50610a62611cc8565b604051610a6f9190614926565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a9190614bfe565b611d5a565b005b348015610aad57600080fd5b50610ab6611e8e565b604051610ac39190614b0d565b60405180910390f35b348015610ad857600080fd5b50610ae1611e94565b604051610aee9190614b0d565b60405180910390f35b348015610b0357600080fd5b50610b0c611e9a565b604051610b199190614b0d565b60405180910390f35b348015610b2e57600080fd5b50610b37611ea0565b604051610b449190614b0d565b60405180910390f35b348015610b5957600080fd5b50610b746004803603810190610b6f9190614cc8565b611ea6565b005b348015610b8257600080fd5b50610b9d6004803603810190610b9891906149e1565b611f5a565b604051610baa9190614a3c565b60405180910390f35b348015610bbf57600080fd5b50610bc8612027565b604051610bd59190614b0d565b60405180910390f35b348015610bea57600080fd5b50610bf361202d565b604051610c009190614a3c565b60405180910390f35b348015610c1557600080fd5b50610c306004803603810190610c2b91906149e1565b612040565b604051610c3d9190614a3c565b60405180910390f35b348015610c5257600080fd5b50610c6d6004803603810190610c689190614a57565b61205e565b005b348015610c7b57600080fd5b50610c966004803603810190610c919190614a57565b6121b5565b604051610ca39190614a3c565b60405180910390f35b348015610cb857600080fd5b50610cc16121d5565b604051610cce9190614a3c565b60405180910390f35b348015610ce357600080fd5b50610cfe6004803603810190610cf99190614bfe565b6121e8565b005b348015610d0c57600080fd5b50610d276004803603810190610d229190614b28565b612328565b005b348015610d3557600080fd5b50610d3e612452565b604051610d4b9190614a3c565b60405180910390f35b348015610d6057600080fd5b50610d69612465565b604051610d769190614b0d565b60405180910390f35b348015610d8b57600080fd5b50610da66004803603810190610da19190614b28565b61246b565b604051610db39190614a3c565b60405180910390f35b348015610dc857600080fd5b50610dd16125db565b604051610dde9190614b0d565b60405180910390f35b348015610df357600080fd5b50610e0e6004803603810190610e099190614cf5565b6125e1565b604051610e1b9190614b0d565b60405180910390f35b348015610e3057600080fd5b50610e39612668565b604051610e469190614b0d565b60405180910390f35b348015610e5b57600080fd5b50610e6461266e565b604051610e719190614a3c565b60405180910390f35b348015610e8657600080fd5b50610e8f612729565b604051610e9c9190614b0d565b60405180910390f35b348015610eb157600080fd5b50610ecc6004803603810190610ec79190614a57565b61272f565b005b348015610eda57600080fd5b50610ee36128f6565b604051610ef09190614b0d565b60405180910390f35b348015610f0557600080fd5b50610f0e6128fc565b604051610f1b9190614b0d565b60405180910390f35b348015610f3057600080fd5b50610f4b6004803603810190610f469190614d35565b612902565b005b606060038054610f5c90614ddf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8890614ddf565b8015610fd55780601f10610faa57610100808354040283529160200191610fd5565b820191906000526020600020905b815481529060010190602001808311610fb857829003601f168201915b5050505050905090565b6000610ff3610fec612a8a565b8484612a92565b6001905092915050565b60256020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b611053612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d990614e5d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b60215481565b60205481565b6111c2612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890614e5d565b60405180910390fd5b670de0b6b3a76400006103e86001611267611041565b6112719190614eac565b61127b9190614f35565b6112859190614f35565b8110156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90614fd8565b60405180910390fd5b670de0b6b3a7640000816112db9190614eac565b60088190555050565b60006112f1848484612c5d565b6113b2846112fd612a8a565b6113ad85604051806060016040528060288152602001615e2060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611363612a8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d4c9092919063ffffffff16565b612a92565b600190509392505050565b73d49576c7094b61004264612ddf5feec207e5efae81565b601f5481565b600d5481565b6113e9612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90614e5d565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b60006012905090565b60006115986114fc612a8a565b84611593856001600061150d612a8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2c90919063ffffffff16565b612a92565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e5481565b601a5481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61169e612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614e5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117f8612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90614e5d565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6118b1612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790614e5d565b60405180910390fd5b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6119cf612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5590614e5d565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611a869190614ff8565b611a909190614ff8565b60168190555060146016541115611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad39061509a565b60405180910390fd5b505050565b611ae9612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90614e5d565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602381905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611c1c612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290614e5d565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611cd790614ddf565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0390614ddf565b8015611d505780601f10611d2557610100808354040283529160200191611d50565b820191906000526020600020905b815481529060010190602001808311611d3357829003601f168201915b5050505050905090565b611d62612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de890614e5d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e779061512c565b60405180910390fd5b611e8a8282613db0565b5050565b60195481565b60105481565b60225481565b601d5481565b611eae612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490614e5d565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b600061201d611f67612a8a565b8461201885604051806060016040528060258152602001615e486025913960016000611f91612a8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d4c9092919063ffffffff16565b612a92565b6001905092915050565b600e5481565b601160039054906101000a900460ff1681565b600061205461204d612a8a565b8484612c5d565b6001905092915050565b612066612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90614e5d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60266020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6121f0612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614e5d565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161231c9190614a3c565b60405180910390a25050565b612330612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614e5d565b60405180910390fd5b670de0b6b3a76400006103e860056123d5611041565b6123df9190614eac565b6123e99190614f35565b6123f39190614f35565b811015612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c906151be565b60405180910390fd5b670de0b6b3a7640000816124499190614eac565b600a8190555050565b601560009054906101000a900460ff1681565b60085481565b6000612475612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90614e5d565b60405180910390fd5b620186a06001612512611041565b61251c9190614eac565b6125269190614f35565b821015612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90615250565b60405180910390fd5b6103e86005612575611041565b61257f9190614eac565b6125899190614f35565b8211156125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c2906152e2565b60405180910390fd5b8160098190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612678612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe90614e5d565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b612737612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bd90614e5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d90615374565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600a5481565b61290a612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090614e5d565b60405180910390fd5b84601b8190555083601c8190555082601d8190555081601e8190555080601f81905550601d54601c54601b546129cf9190614ff8565b6129d99190614ff8565b601a819055506019601a541115612a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1c906153e0565b60405180910390fd5b5050505050565b6000808284612a3b9190614ff8565b905083811015612a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a779061544c565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af9906154de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6990615570565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c509190614b0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc490615602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490615694565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612de15750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1790615726565b60405180910390fd5b6000811415612e3a57612e3583836000613e51565b613d47565b601160009054906101000a900460ff16156134fd57612e57611bbe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ec55750612e95611bbe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612efe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f38575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f515750600560149054906101000a900460ff16155b156134fc57601160019054906101000a900460ff1661304b57602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061300b5750602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61304a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304190615792565b60405180910390fd5b5b601560009054906101000a900460ff161561321357613068611bbe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130ef57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561314757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132125743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106131cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c49061584a565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b65750602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561335d57600854811115613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f7906158dc565b60405180910390fd5b600a5461330c8361164e565b826133179190614ff8565b1115613358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334f90615948565b60405180910390fd5b6134fb565b602660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134005750602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561344f5760085481111561344a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613441906159da565b60405180910390fd5b6134fa565b602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134f957600a546134ac8361164e565b826134b79190614ff8565b11156134f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ef90615948565b60405180910390fd5b5b5b5b5b5b600160235461350c9190614ff8565b431115801561356757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135b35750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613611576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490508015801561367e5750601160039054906101000a900460ff165b15613798576000601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561372057504262015180601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371d9190614ff8565b10155b1561375f57601e54601c81905550601f54601b81905550601d54601c54601b5461374a9190614ff8565b6137549190614ff8565b601a81905550613793565b6008601c819055506005601b81905550601d54601c54601b546137829190614ff8565b61378c9190614ff8565b601a819055505b61386e565b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156138255742601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160039054906101000a900460ff1661386d576008601c819055506005601b81905550601d54601c54601b5461385c9190614ff8565b6138669190614ff8565b601a819055505b5b60006138793061164e565b90506000600954821015905080801561389e5750601160029054906101000a900460ff165b80156138b75750600560149054906101000a900460ff16155b801561390d5750602660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139635750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139b95750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139fd576001600560146101000a81548160ff0219169083151502179055506139e16140e6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ab35750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613abd57600090505b60008115613d3657602660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b2057506000601a54115b15613bed57613b4d6064613b3f601a54896143cd90919063ffffffff16565b61444890919063ffffffff16565b9050601a54601c5482613b609190614eac565b613b6a9190614f35565b60216000828254613b7b9190614ff8565b92505081905550601a54601d5482613b939190614eac565b613b9d9190614f35565b60226000828254613bae9190614ff8565b92505081905550601a54601b5482613bc69190614eac565b613bd09190614f35565b60206000828254613be19190614ff8565b92505081905550613d12565b602660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c4857506000601654115b15613d1157613c756064613c67601654896143cd90919063ffffffff16565b61444890919063ffffffff16565b905060165460185482613c889190614eac565b613c929190614f35565b60216000828254613ca39190614ff8565b9250508190555060165460195482613cbb9190614eac565b613cc59190614f35565b60226000828254613cd69190614ff8565b9250508190555060165460175482613cee9190614eac565b613cf89190614f35565b60206000828254613d099190614ff8565b925050819055505b5b6000811115613d2757613d26883083613e51565b5b8086613d3391906159fa565b95505b613d41888888613e51565b50505050505b505050565b6000838311158290613d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8b9190614926565b60405180910390fd5b5060008385613da391906159fa565b9050809150509392505050565b80602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb890615602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2890615694565b60405180910390fd5b613f3c838383614492565b613fa781604051806060016040528060268152602001615dfa602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d4c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061403a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140d99190614b0d565b60405180910390a3505050565b60006140f13061164e565b905060006022546020546021546141089190614ff8565b6141129190614ff8565b90506000808314806141245750600082145b15614131575050506143cb565b60146009546141409190614eac565b8311156141595760146009546141569190614eac565b92505b60006002836021548661416c9190614eac565b6141769190614f35565b6141809190614f35565b90506000614197828661449790919063ffffffff16565b905060004790506141a7826144e1565b60006141bc824761449790919063ffffffff16565b905060006141e7876141d9602054856143cd90919063ffffffff16565b61444890919063ffffffff16565b9050600061421288614204602254866143cd90919063ffffffff16565b61444890919063ffffffff16565b9050600081838561422391906159fa565b61422d91906159fa565b9050600060218190555060006020819055506000602281905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161428d90615a5f565b60006040518083038185875af1925050503d80600081146142ca576040519150601f19603f3d011682016040523d82523d6000602084013e6142cf565b606091505b5050809850506000871180156142e55750600081115b15614332576142f4878261472d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260215460405161432993929190615a74565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161437890615a5f565b60006040518083038185875af1925050503d80600081146143b5576040519150601f19603f3d011682016040523d82523d6000602084013e6143ba565b606091505b505080985050505050505050505050505b565b6000808314156143e05760009050614442565b600082846143ee9190614eac565b90508284826143fd9190614f35565b1461443d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161443490615b1d565b60405180910390fd5b809150505b92915050565b600061448a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061482a565b905092915050565b505050565b60006144d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d4c565b905092915050565b6000600267ffffffffffffffff8111156144fe576144fd615b3d565b5b60405190808252806020026020018201604052801561452c5781602001602082028036833780820191505090505b509050308160008151811061454457614543615b6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145e457600080fd5b505afa1580156145f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461c9190615bb0565b816001815181106146305761462f615b6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614695307f000000000000000000000000000000000000000000000000000000000000000084612a92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016146f7959493929190615cd6565b600060405180830381600087803b15801561471157600080fd5b505af1158015614725573d6000803e3d6000fd5b505050505050565b614758307f000000000000000000000000000000000000000000000000000000000000000084612a92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008073d49576c7094b61004264612ddf5feec207e5efae426040518863ffffffff1660e01b81526004016147d196959493929190615d30565b6060604051808303818588803b1580156147ea57600080fd5b505af11580156147fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148239190615da6565b5050505050565b60008083118290614871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148689190614926565b60405180910390fd5b50600083856148809190614f35565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156148c75780820151818401526020810190506148ac565b838111156148d6576000848401525b50505050565b6000601f19601f8301169050919050565b60006148f88261488d565b6149028185614898565b93506149128185602086016148a9565b61491b816148dc565b840191505092915050565b6000602082019050818103600083015261494081846148ed565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149788261494d565b9050919050565b6149888161496d565b811461499357600080fd5b50565b6000813590506149a58161497f565b92915050565b6000819050919050565b6149be816149ab565b81146149c957600080fd5b50565b6000813590506149db816149b5565b92915050565b600080604083850312156149f8576149f7614948565b5b6000614a0685828601614996565b9250506020614a17858286016149cc565b9150509250929050565b60008115159050919050565b614a3681614a21565b82525050565b6000602082019050614a516000830184614a2d565b92915050565b600060208284031215614a6d57614a6c614948565b5b6000614a7b84828501614996565b91505092915050565b6000819050919050565b6000614aa9614aa4614a9f8461494d565b614a84565b61494d565b9050919050565b6000614abb82614a8e565b9050919050565b6000614acd82614ab0565b9050919050565b614add81614ac2565b82525050565b6000602082019050614af86000830184614ad4565b92915050565b614b07816149ab565b82525050565b6000602082019050614b226000830184614afe565b92915050565b600060208284031215614b3e57614b3d614948565b5b6000614b4c848285016149cc565b91505092915050565b600080600060608486031215614b6e57614b6d614948565b5b6000614b7c86828701614996565b9350506020614b8d86828701614996565b9250506040614b9e868287016149cc565b9150509250925092565b614bb18161496d565b82525050565b6000602082019050614bcc6000830184614ba8565b92915050565b614bdb81614a21565b8114614be657600080fd5b50565b600081359050614bf881614bd2565b92915050565b60008060408385031215614c1557614c14614948565b5b6000614c2385828601614996565b9250506020614c3485828601614be9565b9150509250929050565b600060ff82169050919050565b614c5481614c3e565b82525050565b6000602082019050614c6f6000830184614c4b565b92915050565b600080600060608486031215614c8e57614c8d614948565b5b6000614c9c868287016149cc565b9350506020614cad868287016149cc565b9250506040614cbe868287016149cc565b9150509250925092565b600060208284031215614cde57614cdd614948565b5b6000614cec84828501614be9565b91505092915050565b60008060408385031215614d0c57614d0b614948565b5b6000614d1a85828601614996565b9250506020614d2b85828601614996565b9150509250929050565b600080600080600060a08688031215614d5157614d50614948565b5b6000614d5f888289016149cc565b9550506020614d70888289016149cc565b9450506040614d81888289016149cc565b9350506060614d92888289016149cc565b9250506080614da3888289016149cc565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614df757607f821691505b60208210811415614e0b57614e0a614db0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e47602083614898565b9150614e5282614e11565b602082019050919050565b60006020820190508181036000830152614e7681614e3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614eb7826149ab565b9150614ec2836149ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614efb57614efa614e7d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f40826149ab565b9150614f4b836149ab565b925082614f5b57614f5a614f06565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614fc2602f83614898565b9150614fcd82614f66565b604082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b6000615003826149ab565b915061500e836149ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561504357615042614e7d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000615084601d83614898565b915061508f8261504e565b602082019050919050565b600060208201905081810360008301526150b381615077565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000615116603983614898565b9150615121826150ba565b604082019050919050565b6000602082019050818103600083015261514581615109565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006151a8602483614898565b91506151b38261514c565b604082019050919050565b600060208201905081810360008301526151d78161519b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061523a603583614898565b9150615245826151de565b604082019050919050565b600060208201905081810360008301526152698161522d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152cc603483614898565b91506152d782615270565b604082019050919050565b600060208201905081810360008301526152fb816152bf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061535e602683614898565b915061536982615302565b604082019050919050565b6000602082019050818103600083015261538d81615351565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006153ca601d83614898565b91506153d582615394565b602082019050919050565b600060208201905081810360008301526153f9816153bd565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615436601b83614898565b915061544182615400565b602082019050919050565b6000602082019050818103600083015261546581615429565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154c8602483614898565b91506154d38261546c565b604082019050919050565b600060208201905081810360008301526154f7816154bb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061555a602283614898565b9150615565826154fe565b604082019050919050565b600060208201905081810360008301526155898161554d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155ec602583614898565b91506155f782615590565b604082019050919050565b6000602082019050818103600083015261561b816155df565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061567e602383614898565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000615710603183614898565b915061571b826156b4565b604082019050919050565b6000602082019050818103600083015261573f81615703565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061577c601683614898565b915061578782615746565b602082019050919050565b600060208201905081810360008301526157ab8161576f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615834604983614898565b915061583f826157b2565b606082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158c6603583614898565b91506158d18261586a565b604082019050919050565b600060208201905081810360008301526158f5816158b9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615932601383614898565b915061593d826158fc565b602082019050919050565b6000602082019050818103600083015261596181615925565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159c4603683614898565b91506159cf82615968565b604082019050919050565b600060208201905081810360008301526159f3816159b7565b9050919050565b6000615a05826149ab565b9150615a10836149ab565b925082821015615a2357615a22614e7d565b5b828203905092915050565b600081905092915050565b50565b6000615a49600083615a2e565b9150615a5482615a39565b600082019050919050565b6000615a6a82615a3c565b9150819050919050565b6000606082019050615a896000830186614afe565b615a966020830185614afe565b615aa36040830184614afe565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b07602183614898565b9150615b1282615aab565b604082019050919050565b60006020820190508181036000830152615b3681615afa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615baa8161497f565b92915050565b600060208284031215615bc657615bc5614948565b5b6000615bd484828501615b9b565b91505092915050565b6000819050919050565b6000615c02615bfd615bf884615bdd565b614a84565b6149ab565b9050919050565b615c1281615be7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4d8161496d565b82525050565b6000615c5f8383615c44565b60208301905092915050565b6000602082019050919050565b6000615c8382615c18565b615c8d8185615c23565b9350615c9883615c34565b8060005b83811015615cc9578151615cb08882615c53565b9750615cbb83615c6b565b925050600181019050615c9c565b5085935050505092915050565b600060a082019050615ceb6000830188614afe565b615cf86020830187615c09565b8181036040830152615d0a8186615c78565b9050615d196060830185614ba8565b615d266080830184614afe565b9695505050505050565b600060c082019050615d456000830189614ba8565b615d526020830188614afe565b615d5f6040830187615c09565b615d6c6060830186615c09565b615d796080830185614ba8565b615d8660a0830184614afe565b979650505050505050565b600081519050615da0816149b5565b92915050565b600080600060608486031215615dbf57615dbe614948565b5b6000615dcd86828701615d91565b9350506020615dde86828701615d91565b9250506040615def86828701615d91565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aa3007b8a305564b8981627aab80ef821b3287f6cd93c94ccabbad9635b6247864736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638a8c523c116101fd578063aacebbe311610118578063d85ba063116100ab578063f11a24d31161007a578063f11a24d314610e7a578063f2fde38b14610ea5578063f637434214610ece578063f8b45b0514610ef9578063ff935af614610f24576103d9565b8063d85ba06314610dbc578063dd62ed3e14610de7578063e2f4560514610e24578063e884f26014610e4f576103d9565b8063c18bc195116100e7578063c18bc19514610d00578063c876d0b914610d29578063c8c8ebe414610d54578063d257b34f14610d7f576103d9565b8063aacebbe314610c46578063b62496f514610c6f578063bbc0c74214610cac578063c024666814610cd7576103d9565b80639ec22c0e11610190578063a457c2d71161015f578063a457c2d714610b76578063a4c82a0014610bb3578063a4d15b6414610bde578063a9059cbb14610c09576103d9565b80639ec22c0e14610acc5780639fccce3214610af7578063a0d82dc514610b22578063a265777814610b4d576103d9565b8063924de9b7116101cc578063924de9b714610a2457806395d89b4114610a4d5780639a7a23d614610a785780639c3b4fdc14610aa1576103d9565b80638a8c523c1461098c5780638da5cb5b146109a35780638ea5220f146109ce57806392136913146109f9576103d9565b80632e82f1a0116102ed5780636ddd1713116102805780637571336a1161024f5780637571336a146108e457806375f0a8741461090d5780637bce5a04146109385780638095d56414610963576103d9565b80636ddd17131461083a57806370a0823114610865578063715018a6146108a2578063751039fc146108b9576103d9565b80634a62bb65116102bc5780634a62bb651461077c5780634fbee193146107a7578063541a43cf146107e45780636a486a8e1461080f576103d9565b80632e82f1a0146106be578063313ce567146106e9578063395093511461071457806349bd5a5e14610751576103d9565b80631a8145bb1161036557806327c8f8351161033457806327c8f835146106145780632bf3d42d1461063f5780632c3e486c1461066a5780632d5a5d3414610695576103d9565b80631a8145bb146105585780631f3fed8f14610583578063203e727e146105ae57806323b872dd146105d7576103d9565b806318160ddd116103a157806318160ddd146104ae5780631816467f146104d9578063184c16c514610502578063199ffc721461052d576103d9565b806306fdde03146103de578063095ea7b31461040957806310d5de53146104465780631694505e14610483576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f4d565b6040516104009190614926565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906149e1565b610fdf565b60405161043d9190614a3c565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614a57565b610ffd565b60405161047a9190614a3c565b60405180910390f35b34801561048f57600080fd5b5061049861101d565b6040516104a59190614ae3565b60405180910390f35b3480156104ba57600080fd5b506104c3611041565b6040516104d09190614b0d565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190614a57565b61104b565b005b34801561050e57600080fd5b506105176111a2565b6040516105249190614b0d565b60405180910390f35b34801561053957600080fd5b506105426111a8565b60405161054f9190614b0d565b60405180910390f35b34801561056457600080fd5b5061056d6111ae565b60405161057a9190614b0d565b60405180910390f35b34801561058f57600080fd5b506105986111b4565b6040516105a59190614b0d565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190614b28565b6111ba565b005b3480156105e357600080fd5b506105fe60048036038101906105f99190614b55565b6112e4565b60405161060b9190614a3c565b60405180910390f35b34801561062057600080fd5b506106296113bd565b6040516106369190614bb7565b60405180910390f35b34801561064b57600080fd5b506106546113d5565b6040516106619190614b0d565b60405180910390f35b34801561067657600080fd5b5061067f6113db565b60405161068c9190614b0d565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190614bfe565b6113e1565b005b3480156106ca57600080fd5b506106d36114d3565b6040516106e09190614a3c565b60405180910390f35b3480156106f557600080fd5b506106fe6114e6565b60405161070b9190614c5a565b60405180910390f35b34801561072057600080fd5b5061073b600480360381019061073691906149e1565b6114ef565b6040516107489190614a3c565b60405180910390f35b34801561075d57600080fd5b506107666115a2565b6040516107739190614bb7565b60405180910390f35b34801561078857600080fd5b506107916115c6565b60405161079e9190614a3c565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c99190614a57565b6115d9565b6040516107db9190614a3c565b60405180910390f35b3480156107f057600080fd5b506107f961162f565b6040516108069190614b0d565b60405180910390f35b34801561081b57600080fd5b50610824611635565b6040516108319190614b0d565b60405180910390f35b34801561084657600080fd5b5061084f61163b565b60405161085c9190614a3c565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190614a57565b61164e565b6040516108999190614b0d565b60405180910390f35b3480156108ae57600080fd5b506108b7611696565b005b3480156108c557600080fd5b506108ce6117ee565b6040516108db9190614a3c565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190614bfe565b6118a9565b005b34801561091957600080fd5b5061092261199b565b60405161092f9190614bb7565b60405180910390f35b34801561094457600080fd5b5061094d6119c1565b60405161095a9190614b0d565b60405180910390f35b34801561096f57600080fd5b5061098a60048036038101906109859190614c75565b6119c7565b005b34801561099857600080fd5b506109a1611ae1565b005b3480156109af57600080fd5b506109b8611bbe565b6040516109c59190614bb7565b60405180910390f35b3480156109da57600080fd5b506109e3611be8565b6040516109f09190614bb7565b60405180910390f35b348015610a0557600080fd5b50610a0e611c0e565b604051610a1b9190614b0d565b60405180910390f35b348015610a3057600080fd5b50610a4b6004803603810190610a469190614cc8565b611c14565b005b348015610a5957600080fd5b50610a62611cc8565b604051610a6f9190614926565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a9190614bfe565b611d5a565b005b348015610aad57600080fd5b50610ab6611e8e565b604051610ac39190614b0d565b60405180910390f35b348015610ad857600080fd5b50610ae1611e94565b604051610aee9190614b0d565b60405180910390f35b348015610b0357600080fd5b50610b0c611e9a565b604051610b199190614b0d565b60405180910390f35b348015610b2e57600080fd5b50610b37611ea0565b604051610b449190614b0d565b60405180910390f35b348015610b5957600080fd5b50610b746004803603810190610b6f9190614cc8565b611ea6565b005b348015610b8257600080fd5b50610b9d6004803603810190610b9891906149e1565b611f5a565b604051610baa9190614a3c565b60405180910390f35b348015610bbf57600080fd5b50610bc8612027565b604051610bd59190614b0d565b60405180910390f35b348015610bea57600080fd5b50610bf361202d565b604051610c009190614a3c565b60405180910390f35b348015610c1557600080fd5b50610c306004803603810190610c2b91906149e1565b612040565b604051610c3d9190614a3c565b60405180910390f35b348015610c5257600080fd5b50610c6d6004803603810190610c689190614a57565b61205e565b005b348015610c7b57600080fd5b50610c966004803603810190610c919190614a57565b6121b5565b604051610ca39190614a3c565b60405180910390f35b348015610cb857600080fd5b50610cc16121d5565b604051610cce9190614a3c565b60405180910390f35b348015610ce357600080fd5b50610cfe6004803603810190610cf99190614bfe565b6121e8565b005b348015610d0c57600080fd5b50610d276004803603810190610d229190614b28565b612328565b005b348015610d3557600080fd5b50610d3e612452565b604051610d4b9190614a3c565b60405180910390f35b348015610d6057600080fd5b50610d69612465565b604051610d769190614b0d565b60405180910390f35b348015610d8b57600080fd5b50610da66004803603810190610da19190614b28565b61246b565b604051610db39190614a3c565b60405180910390f35b348015610dc857600080fd5b50610dd16125db565b604051610dde9190614b0d565b60405180910390f35b348015610df357600080fd5b50610e0e6004803603810190610e099190614cf5565b6125e1565b604051610e1b9190614b0d565b60405180910390f35b348015610e3057600080fd5b50610e39612668565b604051610e469190614b0d565b60405180910390f35b348015610e5b57600080fd5b50610e6461266e565b604051610e719190614a3c565b60405180910390f35b348015610e8657600080fd5b50610e8f612729565b604051610e9c9190614b0d565b60405180910390f35b348015610eb157600080fd5b50610ecc6004803603810190610ec79190614a57565b61272f565b005b348015610eda57600080fd5b50610ee36128f6565b604051610ef09190614b0d565b60405180910390f35b348015610f0557600080fd5b50610f0e6128fc565b604051610f1b9190614b0d565b60405180910390f35b348015610f3057600080fd5b50610f4b6004803603810190610f469190614d35565b612902565b005b606060038054610f5c90614ddf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8890614ddf565b8015610fd55780601f10610faa57610100808354040283529160200191610fd5565b820191906000526020600020905b815481529060010190602001808311610fb857829003601f168201915b5050505050905090565b6000610ff3610fec612a8a565b8484612a92565b6001905092915050565b60256020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b611053612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d990614e5d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b60215481565b60205481565b6111c2612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890614e5d565b60405180910390fd5b670de0b6b3a76400006103e86001611267611041565b6112719190614eac565b61127b9190614f35565b6112859190614f35565b8110156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90614fd8565b60405180910390fd5b670de0b6b3a7640000816112db9190614eac565b60088190555050565b60006112f1848484612c5d565b6113b2846112fd612a8a565b6113ad85604051806060016040528060288152602001615e2060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611363612a8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d4c9092919063ffffffff16565b612a92565b600190509392505050565b73d49576c7094b61004264612ddf5feec207e5efae81565b601f5481565b600d5481565b6113e9612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90614e5d565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b60006012905090565b60006115986114fc612a8a565b84611593856001600061150d612a8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2c90919063ffffffff16565b612a92565b6001905092915050565b7f000000000000000000000000be39569d5c259b35d6a2ca3eb5e73dcc0ead598281565b601160009054906101000a900460ff1681565b6000602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e5481565b601a5481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61169e612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490614e5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117f8612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90614e5d565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6118b1612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790614e5d565b60405180910390fd5b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6119cf612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5590614e5d565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611a869190614ff8565b611a909190614ff8565b60168190555060146016541115611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad39061509a565b60405180910390fd5b505050565b611ae9612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90614e5d565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602381905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611c1c612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290614e5d565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611cd790614ddf565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0390614ddf565b8015611d505780601f10611d2557610100808354040283529160200191611d50565b820191906000526020600020905b815481529060010190602001808311611d3357829003601f168201915b5050505050905090565b611d62612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de890614e5d565b60405180910390fd5b7f000000000000000000000000be39569d5c259b35d6a2ca3eb5e73dcc0ead598273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e779061512c565b60405180910390fd5b611e8a8282613db0565b5050565b60195481565b60105481565b60225481565b601d5481565b611eae612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490614e5d565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b600061201d611f67612a8a565b8461201885604051806060016040528060258152602001615e486025913960016000611f91612a8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d4c9092919063ffffffff16565b612a92565b6001905092915050565b600e5481565b601160039054906101000a900460ff1681565b600061205461204d612a8a565b8484612c5d565b6001905092915050565b612066612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90614e5d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60266020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6121f0612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614e5d565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161231c9190614a3c565b60405180910390a25050565b612330612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614e5d565b60405180910390fd5b670de0b6b3a76400006103e860056123d5611041565b6123df9190614eac565b6123e99190614f35565b6123f39190614f35565b811015612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c906151be565b60405180910390fd5b670de0b6b3a7640000816124499190614eac565b600a8190555050565b601560009054906101000a900460ff1681565b60085481565b6000612475612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90614e5d565b60405180910390fd5b620186a06001612512611041565b61251c9190614eac565b6125269190614f35565b821015612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90615250565b60405180910390fd5b6103e86005612575611041565b61257f9190614eac565b6125899190614f35565b8211156125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c2906152e2565b60405180910390fd5b8160098190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612678612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe90614e5d565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b612737612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bd90614e5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d90615374565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600a5481565b61290a612a8a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090614e5d565b60405180910390fd5b84601b8190555083601c8190555082601d8190555081601e8190555080601f81905550601d54601c54601b546129cf9190614ff8565b6129d99190614ff8565b601a819055506019601a541115612a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1c906153e0565b60405180910390fd5b5050505050565b6000808284612a3b9190614ff8565b905083811015612a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a779061544c565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af9906154de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6990615570565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c509190614b0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc490615602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490615694565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612de15750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1790615726565b60405180910390fd5b6000811415612e3a57612e3583836000613e51565b613d47565b601160009054906101000a900460ff16156134fd57612e57611bbe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ec55750612e95611bbe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612efe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f38575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f515750600560149054906101000a900460ff16155b156134fc57601160019054906101000a900460ff1661304b57602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061300b5750602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61304a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304190615792565b60405180910390fd5b5b601560009054906101000a900460ff161561321357613068611bbe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130ef57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561314757507f000000000000000000000000be39569d5c259b35d6a2ca3eb5e73dcc0ead598273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132125743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106131cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c49061584a565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b65750602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561335d57600854811115613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f7906158dc565b60405180910390fd5b600a5461330c8361164e565b826133179190614ff8565b1115613358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334f90615948565b60405180910390fd5b6134fb565b602660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134005750602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561344f5760085481111561344a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613441906159da565b60405180910390fd5b6134fa565b602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134f957600a546134ac8361164e565b826134b79190614ff8565b11156134f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ef90615948565b60405180910390fd5b5b5b5b5b5b600160235461350c9190614ff8565b431115801561356757507f000000000000000000000000be39569d5c259b35d6a2ca3eb5e73dcc0ead598273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135b35750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613611576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000be39569d5c259b35d6a2ca3eb5e73dcc0ead598273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490508015801561367e5750601160039054906101000a900460ff165b15613798576000601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561372057504262015180601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371d9190614ff8565b10155b1561375f57601e54601c81905550601f54601b81905550601d54601c54601b5461374a9190614ff8565b6137549190614ff8565b601a81905550613793565b6008601c819055506005601b81905550601d54601c54601b546137829190614ff8565b61378c9190614ff8565b601a819055505b61386e565b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156138255742601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160039054906101000a900460ff1661386d576008601c819055506005601b81905550601d54601c54601b5461385c9190614ff8565b6138669190614ff8565b601a819055505b5b60006138793061164e565b90506000600954821015905080801561389e5750601160029054906101000a900460ff165b80156138b75750600560149054906101000a900460ff16155b801561390d5750602660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139635750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139b95750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139fd576001600560146101000a81548160ff0219169083151502179055506139e16140e6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ab35750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613abd57600090505b60008115613d3657602660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b2057506000601a54115b15613bed57613b4d6064613b3f601a54896143cd90919063ffffffff16565b61444890919063ffffffff16565b9050601a54601c5482613b609190614eac565b613b6a9190614f35565b60216000828254613b7b9190614ff8565b92505081905550601a54601d5482613b939190614eac565b613b9d9190614f35565b60226000828254613bae9190614ff8565b92505081905550601a54601b5482613bc69190614eac565b613bd09190614f35565b60206000828254613be19190614ff8565b92505081905550613d12565b602660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c4857506000601654115b15613d1157613c756064613c67601654896143cd90919063ffffffff16565b61444890919063ffffffff16565b905060165460185482613c889190614eac565b613c929190614f35565b60216000828254613ca39190614ff8565b9250508190555060165460195482613cbb9190614eac565b613cc59190614f35565b60226000828254613cd69190614ff8565b9250508190555060165460175482613cee9190614eac565b613cf89190614f35565b60206000828254613d099190614ff8565b925050819055505b5b6000811115613d2757613d26883083613e51565b5b8086613d3391906159fa565b95505b613d41888888613e51565b50505050505b505050565b6000838311158290613d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8b9190614926565b60405180910390fd5b5060008385613da391906159fa565b9050809150509392505050565b80602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb890615602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2890615694565b60405180910390fd5b613f3c838383614492565b613fa781604051806060016040528060268152602001615dfa602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d4c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061403a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140d99190614b0d565b60405180910390a3505050565b60006140f13061164e565b905060006022546020546021546141089190614ff8565b6141129190614ff8565b90506000808314806141245750600082145b15614131575050506143cb565b60146009546141409190614eac565b8311156141595760146009546141569190614eac565b92505b60006002836021548661416c9190614eac565b6141769190614f35565b6141809190614f35565b90506000614197828661449790919063ffffffff16565b905060004790506141a7826144e1565b60006141bc824761449790919063ffffffff16565b905060006141e7876141d9602054856143cd90919063ffffffff16565b61444890919063ffffffff16565b9050600061421288614204602254866143cd90919063ffffffff16565b61444890919063ffffffff16565b9050600081838561422391906159fa565b61422d91906159fa565b9050600060218190555060006020819055506000602281905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161428d90615a5f565b60006040518083038185875af1925050503d80600081146142ca576040519150601f19603f3d011682016040523d82523d6000602084013e6142cf565b606091505b5050809850506000871180156142e55750600081115b15614332576142f4878261472d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260215460405161432993929190615a74565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161437890615a5f565b60006040518083038185875af1925050503d80600081146143b5576040519150601f19603f3d011682016040523d82523d6000602084013e6143ba565b606091505b505080985050505050505050505050505b565b6000808314156143e05760009050614442565b600082846143ee9190614eac565b90508284826143fd9190614f35565b1461443d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161443490615b1d565b60405180910390fd5b809150505b92915050565b600061448a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061482a565b905092915050565b505050565b60006144d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d4c565b905092915050565b6000600267ffffffffffffffff8111156144fe576144fd615b3d565b5b60405190808252806020026020018201604052801561452c5781602001602082028036833780820191505090505b509050308160008151811061454457614543615b6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145e457600080fd5b505afa1580156145f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461c9190615bb0565b816001815181106146305761462f615b6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614695307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a92565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016146f7959493929190615cd6565b600060405180830381600087803b15801561471157600080fd5b505af1158015614725573d6000803e3d6000fd5b505050505050565b614758307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a92565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008073d49576c7094b61004264612ddf5feec207e5efae426040518863ffffffff1660e01b81526004016147d196959493929190615d30565b6060604051808303818588803b1580156147ea57600080fd5b505af11580156147fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148239190615da6565b5050505050565b60008083118290614871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148689190614926565b60405180910390fd5b50600083856148809190614f35565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156148c75780820151818401526020810190506148ac565b838111156148d6576000848401525b50505050565b6000601f19601f8301169050919050565b60006148f88261488d565b6149028185614898565b93506149128185602086016148a9565b61491b816148dc565b840191505092915050565b6000602082019050818103600083015261494081846148ed565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149788261494d565b9050919050565b6149888161496d565b811461499357600080fd5b50565b6000813590506149a58161497f565b92915050565b6000819050919050565b6149be816149ab565b81146149c957600080fd5b50565b6000813590506149db816149b5565b92915050565b600080604083850312156149f8576149f7614948565b5b6000614a0685828601614996565b9250506020614a17858286016149cc565b9150509250929050565b60008115159050919050565b614a3681614a21565b82525050565b6000602082019050614a516000830184614a2d565b92915050565b600060208284031215614a6d57614a6c614948565b5b6000614a7b84828501614996565b91505092915050565b6000819050919050565b6000614aa9614aa4614a9f8461494d565b614a84565b61494d565b9050919050565b6000614abb82614a8e565b9050919050565b6000614acd82614ab0565b9050919050565b614add81614ac2565b82525050565b6000602082019050614af86000830184614ad4565b92915050565b614b07816149ab565b82525050565b6000602082019050614b226000830184614afe565b92915050565b600060208284031215614b3e57614b3d614948565b5b6000614b4c848285016149cc565b91505092915050565b600080600060608486031215614b6e57614b6d614948565b5b6000614b7c86828701614996565b9350506020614b8d86828701614996565b9250506040614b9e868287016149cc565b9150509250925092565b614bb18161496d565b82525050565b6000602082019050614bcc6000830184614ba8565b92915050565b614bdb81614a21565b8114614be657600080fd5b50565b600081359050614bf881614bd2565b92915050565b60008060408385031215614c1557614c14614948565b5b6000614c2385828601614996565b9250506020614c3485828601614be9565b9150509250929050565b600060ff82169050919050565b614c5481614c3e565b82525050565b6000602082019050614c6f6000830184614c4b565b92915050565b600080600060608486031215614c8e57614c8d614948565b5b6000614c9c868287016149cc565b9350506020614cad868287016149cc565b9250506040614cbe868287016149cc565b9150509250925092565b600060208284031215614cde57614cdd614948565b5b6000614cec84828501614be9565b91505092915050565b60008060408385031215614d0c57614d0b614948565b5b6000614d1a85828601614996565b9250506020614d2b85828601614996565b9150509250929050565b600080600080600060a08688031215614d5157614d50614948565b5b6000614d5f888289016149cc565b9550506020614d70888289016149cc565b9450506040614d81888289016149cc565b9350506060614d92888289016149cc565b9250506080614da3888289016149cc565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614df757607f821691505b60208210811415614e0b57614e0a614db0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e47602083614898565b9150614e5282614e11565b602082019050919050565b60006020820190508181036000830152614e7681614e3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614eb7826149ab565b9150614ec2836149ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614efb57614efa614e7d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f40826149ab565b9150614f4b836149ab565b925082614f5b57614f5a614f06565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614fc2602f83614898565b9150614fcd82614f66565b604082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b6000615003826149ab565b915061500e836149ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561504357615042614e7d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000615084601d83614898565b915061508f8261504e565b602082019050919050565b600060208201905081810360008301526150b381615077565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000615116603983614898565b9150615121826150ba565b604082019050919050565b6000602082019050818103600083015261514581615109565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006151a8602483614898565b91506151b38261514c565b604082019050919050565b600060208201905081810360008301526151d78161519b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061523a603583614898565b9150615245826151de565b604082019050919050565b600060208201905081810360008301526152698161522d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152cc603483614898565b91506152d782615270565b604082019050919050565b600060208201905081810360008301526152fb816152bf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061535e602683614898565b915061536982615302565b604082019050919050565b6000602082019050818103600083015261538d81615351565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006153ca601d83614898565b91506153d582615394565b602082019050919050565b600060208201905081810360008301526153f9816153bd565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615436601b83614898565b915061544182615400565b602082019050919050565b6000602082019050818103600083015261546581615429565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154c8602483614898565b91506154d38261546c565b604082019050919050565b600060208201905081810360008301526154f7816154bb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061555a602283614898565b9150615565826154fe565b604082019050919050565b600060208201905081810360008301526155898161554d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155ec602583614898565b91506155f782615590565b604082019050919050565b6000602082019050818103600083015261561b816155df565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061567e602383614898565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000615710603183614898565b915061571b826156b4565b604082019050919050565b6000602082019050818103600083015261573f81615703565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061577c601683614898565b915061578782615746565b602082019050919050565b600060208201905081810360008301526157ab8161576f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615834604983614898565b915061583f826157b2565b606082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158c6603583614898565b91506158d18261586a565b604082019050919050565b600060208201905081810360008301526158f5816158b9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615932601383614898565b915061593d826158fc565b602082019050919050565b6000602082019050818103600083015261596181615925565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159c4603683614898565b91506159cf82615968565b604082019050919050565b600060208201905081810360008301526159f3816159b7565b9050919050565b6000615a05826149ab565b9150615a10836149ab565b925082821015615a2357615a22614e7d565b5b828203905092915050565b600081905092915050565b50565b6000615a49600083615a2e565b9150615a5482615a39565b600082019050919050565b6000615a6a82615a3c565b9150819050919050565b6000606082019050615a896000830186614afe565b615a966020830185614afe565b615aa36040830184614afe565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b07602183614898565b9150615b1282615aab565b604082019050919050565b60006020820190508181036000830152615b3681615afa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615baa8161497f565b92915050565b600060208284031215615bc657615bc5614948565b5b6000615bd484828501615b9b565b91505092915050565b6000819050919050565b6000615c02615bfd615bf884615bdd565b614a84565b6149ab565b9050919050565b615c1281615be7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4d8161496d565b82525050565b6000615c5f8383615c44565b60208301905092915050565b6000602082019050919050565b6000615c8382615c18565b615c8d8185615c23565b9350615c9883615c34565b8060005b83811015615cc9578151615cb08882615c53565b9750615cbb83615c6b565b925050600181019050615c9c565b5085935050505092915050565b600060a082019050615ceb6000830188614afe565b615cf86020830187615c09565b8181036040830152615d0a8186615c78565b9050615d196060830185614ba8565b615d266080830184614afe565b9695505050505050565b600060c082019050615d456000830189614ba8565b615d526020830188614afe565b615d5f6040830187615c09565b615d6c6060830186615c09565b615d796080830185614ba8565b615d8660a0830184614afe565b979650505050505050565b600081519050615da0816149b5565b92915050565b600080600060608486031215615dbf57615dbe614948565b5b6000615dcd86828701615d91565b9350506020615dde86828701615d91565b9250506040615def86828701615d91565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aa3007b8a305564b8981627aab80ef821b3287f6cd93c94ccabbad9635b6247864736f6c63430008090033

Deployed Bytecode Sourcemap

29981:17880:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8079:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10253:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32029:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30062:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9202:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39349:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30668:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30482:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31743:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31703;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36584:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10905:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30165:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31657:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30577:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38536:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30538:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9043:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11670:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30120:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30767:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39518:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31614:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31468:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30847:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9374:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22581:148;;;;;;;;;;;;;:::i;:::-;;35695:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37051:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30295:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31360;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37402:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35451:191;;;;;;;;;;;;;:::i;:::-;;21937:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30332:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31503:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37292:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8299:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38680:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31434:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30722:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31783:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31579:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36020:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12392:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30629:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30885:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9715:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39132:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32252:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30807:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38345:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36827:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31277:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30366:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36194:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31326:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9954:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30408:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35877:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31397:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22885:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31541:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30448:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37780:556;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8079:100;8133:13;8166:5;8159:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8079:100;:::o;10253:169::-;10336:4;10353:39;10362:12;:10;:12::i;:::-;10376:7;10385:6;10353:8;:39::i;:::-;10410:4;10403:11;;10253:169;;;;:::o;32029:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30062:51::-;;;:::o;9202:108::-;9263:7;9290:12;;9283:19;;9202:108;:::o;39349:157::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39456:9:::1;;;;;;;;;;;39428:38;;39445:9;39428:38;;;;;;;;;;;;39489:9;39477;;:21;;;;;;;;;;;;;;;;;;39349:157:::0;:::o;30668:47::-;;;;:::o;30482:36::-;;;;:::o;31743:33::-;;;;:::o;31703:::-;;;;:::o;36584:234::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36703:4:::1;36697;36693:1;36677:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36676:31;;;;:::i;:::-;36666:6;:41;;36658:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36803:6;36793;:17;;;;:::i;:::-;36770:20;:40;;;;36584:234:::0;:::o;10905:355::-;11045:4;11062:36;11072:6;11080:9;11091:6;11062:9;:36::i;:::-;11109:121;11118:6;11126:12;:10;:12::i;:::-;11140:89;11178:6;11140:89;;;;;;;;;;;;;;;;;:11;:19;11152:6;11140:19;;;;;;;;;;;;;;;:33;11160:12;:10;:12::i;:::-;11140:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11109:8;:121::i;:::-;11248:4;11241:11;;10905:355;;;;;:::o;30165:89::-;30211:42;30165:89;:::o;31657:36::-;;;;:::o;30577:45::-;;;;:::o;38536:135::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38650:13:::1;38628:10;:19;38639:7;38628:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;38536:135:::0;;:::o;30538:32::-;;;;;;;;;;;;;:::o;9043:93::-;9101:5;9126:2;9119:9;;9043:93;:::o;11670:218::-;11758:4;11775:83;11784:12;:10;:12::i;:::-;11798:7;11807:50;11846:10;11807:11;:25;11819:12;:10;:12::i;:::-;11807:25;;;;;;;;;;;;;;;:34;11833:7;11807:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11775:8;:83::i;:::-;11876:4;11869:11;;11670:218;;;;:::o;30120:38::-;;;:::o;30767:33::-;;;;;;;;;;;;;:::o;39518:125::-;39583:4;39607:19;:28;39627:7;39607:28;;;;;;;;;;;;;;;;;;;;;;;;;39600:35;;39518:125;;;:::o;31614:36::-;;;;:::o;31468:28::-;;;;:::o;30847:31::-;;;;;;;;;;;;;:::o;9374:127::-;9448:7;9475:9;:18;9485:7;9475:18;;;;;;;;;;;;;;;;9468:25;;9374:127;;;:::o;22581:148::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22688:1:::1;22651:40;;22672:6;;;;;;;;;;;22651:40;;;;;;;;;;;;22719:1;22702:6;;:19;;;;;;;;;;;;;;;;;;22581:148::o:0;35695:120::-;35747:4;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35780:5:::1;35763:14;;:22;;;;;;;;;;;;;;;;;;35803:4;35796:11;;35695:120:::0;:::o;37051:144::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37183:4:::1;37141:31;:39;37173:6;37141:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37051:144:::0;;:::o;30295:30::-;;;;;;;;;;;;;:::o;31360:::-;;;;:::o;37402:369::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37536:13:::1;37518:15;:31;;;;37578:13;37560:15;:31;;;;37614:7;37602:9;:19;;;;37683:9;;37665:15;;37647;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;37632:12;:60;;;;37727:2;37711:12;;:18;;37703:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37402:369:::0;;;:::o;35451:191::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35522:4:::1;35506:13;;:20;;;;;;;;;;;;;;;;;;35551:4;35537:11;;:18;;;;;;;;;;;;;;;;;;35583:15;35566:14;:32;;;;35622:12;35609:10;:25;;;;35451:191::o:0;21937:79::-;21975:7;22002:6;;;;;;;;;;;21995:13;;21937:79;:::o;30332:24::-;;;;;;;;;;;;;:::o;31503:31::-;;;;:::o;37292:101::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37378:7:::1;37364:11;;:21;;;;;;;;;;;;;;;;;;37292:101:::0;:::o;8299:104::-;8355:13;8388:7;8381:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8299:104;:::o;38680:245::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38787:13:::1;38779:21;;:4;:21;;;;38771:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;38876:41;38905:4;38911:5;38876:28;:41::i;:::-;38680:245:::0;;:::o;31434:24::-;;;;:::o;30722:35::-;;;;:::o;31783:27::-;;;;:::o;31579:25::-;;;;:::o;36020:102::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:5:::1;36088:18;;:26;;;;;;;;;;;;;;;;;;36020:102:::0;:::o;12392:269::-;12485:4;12502:129;12511:12;:10;:12::i;:::-;12525:7;12534:96;12573:15;12534:96;;;;;;;;;;;;;;;;;:11;:25;12546:12;:10;:12::i;:::-;12534:25;;;;;;;;;;;;;;;:34;12560:7;12534:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12502:8;:129::i;:::-;12649:4;12642:11;;12392:269;;;;:::o;30629:29::-;;;;:::o;30885:37::-;;;;;;;;;;;;;:::o;9715:175::-;9801:4;9818:42;9828:12;:10;:12::i;:::-;9842:9;9853:6;9818:9;:42::i;:::-;9878:4;9871:11;;9715:175;;;;:::o;39132:208::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39269:15:::1;;;;;;;;;;;39226:59;;39249:18;39226:59;;;;;;;;;;;;39314:18;39296:15;;:36;;;;;;;;;;;;;;;;;;39132:208:::0;:::o;32252:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30807:33::-;;;;;;;;;;;;;:::o;38345:182::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38461:8:::1;38430:19;:28;38450:7;38430:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38501:7;38485:34;;;38510:8;38485:34;;;;;;:::i;:::-;;;;;;;;38345:182:::0;;:::o;36827:215::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36949:4:::1;36943;36939:1;36923:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36922:31;;;;:::i;:::-;36912:6;:41;;36904:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;37027:6;37017;:17;;;;:::i;:::-;37005:9;:29;;;;36827:215:::0;:::o;31277:39::-;;;;;;;;;;;;;:::o;30366:35::-;;;;:::o;36194:381::-;36275:4;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36331:6:::1;36327:1;36311:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;36298:9;:39;;36290:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;36446:4;36442:1;36426:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36413:9;:37;;36405:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;36538:9;36517:18;:30;;;;36564:4;36557:11;;36194:381:::0;;;:::o;31326:27::-;;;;:::o;9954:151::-;10043:7;10070:11;:18;10082:5;10070:18;;;;;;;;;;;;;;;:27;10089:7;10070:27;;;;;;;;;;;;;;;;10063:34;;9954:151;;;;:::o;30408:33::-;;;;:::o;35877:134::-;35937:4;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35976:5:::1;35953:20;;:28;;;;;;;;;;;;;;;;;;35999:4;35992:11;;35877:134:::0;:::o;31397:30::-;;;;:::o;22885:244::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22994:1:::1;22974:22;;:8;:22;;;;22966:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23084:8;23055:38;;23076:6;;;;;;;;;;;23055:38;;;;;;;;;;;;23113:8;23104:6;;:17;;;;;;;;;;;;;;;;;;22885:244:::0;:::o;31541:31::-;;;;:::o;30448:24::-;;;;:::o;37780:556::-;22160:12;:10;:12::i;:::-;22150:22;;:6;;;;;;;;;;;:22;;;22142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37980:13:::1;37961:16;:32;;;;38023:13;38004:16;:32;;;;38060:7;38047:10;:20;;;;38102:22;38078:21;:46;;;;38159:22;38135:21;:46;;;;38246:10;;38227:16;;38208;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;38192:13;:64;;;;38292:2;38275:13;;:19;;38267:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37780:556:::0;;;;;:::o;16969:182::-;17027:7;17047:9;17063:1;17059;:5;;;;:::i;:::-;17047:17;;17088:1;17083;:6;;17075:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17142:1;17135:8;;;16969:182;;;;:::o;681:98::-;734:7;761:10;754:17;;681:98;:::o;15588:381::-;15741:1;15724:19;;:5;:19;;;;15716:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15822:1;15803:21;;:7;:21;;;;15795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15907:6;15877:11;:18;15889:5;15877:18;;;;;;;;;;;;;;;:27;15896:7;15877:27;;;;;;;;;;;;;;;:36;;;;15945:7;15929:32;;15938:5;15929:32;;;15954:6;15929:32;;;;;;:::i;:::-;;;;;;;;15588:381;;;:::o;39703:5436::-;39851:1;39835:18;;:4;:18;;;;39827:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39928:1;39914:16;;:2;:16;;;;39906:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39990:10;:14;40001:2;39990:14;;;;;;;;;;;;;;;;;;;;;;;;;39989:15;:36;;;;;40009:10;:16;40020:4;40009:16;;;;;;;;;;;;;;;;;;;;;;;;;40008:17;39989:36;39981:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;40104:1;40094:6;:11;40091:92;;;40122:28;40138:4;40144:2;40148:1;40122:15;:28::i;:::-;40165:7;;40091:92;40199:14;;;;;;;;;;;40196:1811;;;40259:7;:5;:7::i;:::-;40251:15;;:4;:15;;;;:49;;;;;40293:7;:5;:7::i;:::-;40287:13;;:2;:13;;;;40251:49;:86;;;;;40335:1;40321:16;;:2;:16;;;;40251:86;:128;;;;;40372:6;40358:21;;:2;:21;;;;40251:128;:158;;;;;40401:8;;;;;;;;;;;40400:9;40251:158;40229:1767;;;40447:13;;;;;;;;;;;40443:148;;40492:19;:25;40512:4;40492:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40521:19;:23;40541:2;40521:23;;;;;;;;;;;;;;;;;;;;;;;;;40492:52;40484:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40443:148;40750:20;;;;;;;;;;;40746:423;;;40804:7;:5;:7::i;:::-;40798:13;;:2;:13;;;;:47;;;;;40829:15;40815:30;;:2;:30;;;;40798:47;:79;;;;;40863:13;40849:28;;:2;:28;;;;40798:79;40794:356;;;40955:12;40913:28;:39;40942:9;40913:39;;;;;;;;;;;;;;;;:54;40905:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41114:12;41072:28;:39;41101:9;41072:39;;;;;;;;;;;;;;;:54;;;;40794:356;40746:423;41222:25;:31;41248:4;41222:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;41258:31;:35;41290:2;41258:35;;;;;;;;;;;;;;;;;;;;;;;;;41257:36;41222:71;41218:763;;;41340:20;;41330:6;:30;;41322:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;41479:9;;41462:13;41472:2;41462:9;:13::i;:::-;41453:6;:22;;;;:::i;:::-;:35;;41445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41218:763;;;41591:25;:29;41617:2;41591:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;41625:31;:37;41657:4;41625:37;;;;;;;;;;;;;;;;;;;;;;;;;41624:38;41591:71;41587:394;;;41709:20;;41699:6;:30;;41691:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;41587:394;;;41835:31;:35;41867:2;41835:35;;;;;;;;;;;;;;;;;;;;;;;;;41831:150;;41928:9;;41911:13;41921:2;41911:9;:13::i;:::-;41902:6;:22;;;;:::i;:::-;:35;;41894:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41831:150;41587:394;41218:763;40229:1767;40196:1811;42081:1;42068:10;;:14;;;;:::i;:::-;42051:12;:32;;:73;;;;;42111:13;42105:19;;:2;:19;;;;42051:73;:152;;;;;42160:42;42146:57;;:2;:57;;;;42051:152;42047:221;;;42252:4;42235:10;:14;42246:2;42235:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42047:221;42310:10;42331:13;42323:21;;:4;:21;;;42310:34;;42360:5;42359:6;:28;;;;;42369:18;;;;;;;;;;;42359:28;42355:958;;;42442:1;42408:24;:30;42433:4;42408:30;;;;;;;;;;;;;;;;:35;;:120;;;;;42512:15;42499:8;42465:24;:30;42490:4;42465:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;42408:120;42404:527;;;42569:21;;42550:16;:40;;;;42628:21;;42609:16;:40;;;;42722:10;;42703:16;;42684;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;42668:13;:64;;;;42404:527;;;42792:1;42773:16;:20;;;;42831:1;42812:16;:20;;;;42905:10;;42886:16;;42867;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;42851:13;:64;;;;42404:527;42355:958;;;42999:1;42967:24;:28;42992:2;42967:28;;;;;;;;;;;;;;;;:33;42963:120;;;43052:15;43021:24;:28;43046:2;43021:28;;;;;;;;;;;;;;;:46;;;;42963:120;43105:18;;;;;;;;;;;43100:202;;43163:1;43144:16;:20;;;;43202:1;43183:16;:20;;;;43276:10;;43257:16;;43238;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;43222:13;:64;;;;43100:202;42355:958;43320:28;43351:24;43369:4;43351:9;:24::i;:::-;43320:55;;43389:12;43428:18;;43404:20;:42;;43389:57;;43478:7;:35;;;;;43502:11;;;;;;;;;;;43478:35;:61;;;;;43531:8;;;;;;;;;;;43530:9;43478:61;:110;;;;;43557:25;:31;43583:4;43557:31;;;;;;;;;;;;;;;;;;;;;;;;;43556:32;43478:110;:153;;;;;43606:19;:25;43626:4;43606:25;;;;;;;;;;;;;;;;;;;;;;;;;43605:26;43478:153;:194;;;;;43649:19;:23;43669:2;43649:23;;;;;;;;;;;;;;;;;;;;;;;;;43648:24;43478:194;43460:328;;;43710:4;43699:8;;:15;;;;;;;;;;;;;;;;;;43732:10;:8;:10::i;:::-;43771:5;43760:8;;:16;;;;;;;;;;;;;;;;;;43460:328;43801:12;43817:8;;;;;;;;;;;43816:9;43801:24;;43927:19;:25;43947:4;43927:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43956:19;:23;43976:2;43956:23;;;;;;;;;;;;;;;;;;;;;;;;;43927:52;43924:99;;;44006:5;43996:15;;43924:99;44036:12;44140:7;44137:948;;;44191:25;:29;44217:2;44191:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44240:1;44224:13;;:17;44191:50;44187:748;;;44268:34;44298:3;44268:25;44279:13;;44268:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44261:41;;44369:13;;44350:16;;44343:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;44321:18;;:61;;;;;;;:::i;:::-;;;;;;;;44437:13;;44424:10;;44417:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;44401:12;;:49;;;;;;;:::i;:::-;;;;;;;;44517:13;;44498:16;;44491:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;44469:18;;:61;;;;;;;:::i;:::-;;;;;;;;44187:748;;;44591:25;:31;44617:4;44591:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;44641:1;44626:12;;:16;44591:51;44588:347;;;44667:33;44696:3;44667:24;44678:12;;44667:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44660:40;;44763:12;;44745:15;;44738:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;44716:18;;:59;;;;;;;:::i;:::-;;;;;;;;44829:12;;44817:9;;44810:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;44794:12;;:47;;;;;;;:::i;:::-;;;;;;;;44907:12;;44889:15;;44882:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;44860:18;;:59;;;;;;;:::i;:::-;;;;;;;;44588:347;44187:748;44962:1;44955:4;:8;44952:93;;;44987:42;45003:4;45017;45024;44987:15;:42::i;:::-;44952:93;45069:4;45059:14;;;;;:::i;:::-;;;44137:948;45098:33;45114:4;45120:2;45124:6;45098:15;:33::i;:::-;39816:5323;;;;;39703:5436;;;;:::o;17875:193::-;17961:7;17994:1;17989;:6;;17997:12;17981:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18021:9;18037:1;18033;:5;;;;:::i;:::-;18021:17;;18059:1;18052:8;;;17875:193;;;;;:::o;38934:189::-;39051:5;39017:25;:31;39043:4;39017:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39109:5;39075:40;;39103:4;39075:40;;;;;;;;;;;;38934:189;;:::o;13152:575::-;13310:1;13292:20;;:6;:20;;;;13284:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13394:1;13373:23;;:9;:23;;;;13365:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13450:47;13471:6;13479:9;13490:6;13450:20;:47::i;:::-;13531:71;13553:6;13531:71;;;;;;;;;;;;;;;;;:9;:17;13541:6;13531:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13511:9;:17;13521:6;13511:17;;;;;;;;;;;;;;;:91;;;;13636:32;13661:6;13636:9;:20;13646:9;13636:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13613:9;:20;13623:9;13613:20;;;;;;;;;;;;;;;:55;;;;13701:9;13684:35;;13693:6;13684:35;;;13712:6;13684:35;;;;;;:::i;:::-;;;;;;;;13152:575;;;:::o;46281:1577::-;46320:23;46346:24;46364:4;46346:9;:24::i;:::-;46320:50;;46381:25;46451:12;;46430:18;;46409;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;46381:82;;46474:12;46522:1;46503:15;:20;:46;;;;46548:1;46527:17;:22;46503:46;46500:60;;;46552:7;;;;;46500:60;46615:2;46594:18;;:23;;;;:::i;:::-;46576:15;:41;46573:111;;;46670:2;46649:18;;:23;;;;:::i;:::-;46631:41;;46573:111;46746:23;46831:1;46811:17;46790:18;;46772:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;46746:86;;46843:26;46872:36;46892:15;46872;:19;;:36;;;;:::i;:::-;46843:65;;46922:25;46950:21;46922:49;;46985:36;47002:18;46985:16;:36::i;:::-;47036:18;47057:44;47083:17;47057:21;:25;;:44;;;;:::i;:::-;47036:65;;47115:23;47141:57;47180:17;47141:34;47156:18;;47141:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;47115:83;;47209:17;47229:51;47262:17;47229:28;47244:12;;47229:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;47209:71;;47297:23;47354:9;47336:15;47323:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;47297:66;;47401:1;47380:18;:22;;;;47434:1;47413:18;:22;;;;47461:1;47446:12;:16;;;;47497:9;;;;;;;;;;;47489:23;;47520:9;47489:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47476:58;;;;;47569:1;47551:15;:19;:42;;;;;47592:1;47574:15;:19;47551:42;47548:210;;;47609:46;47622:15;47639;47609:12;:46::i;:::-;47675:71;47690:18;47710:15;47727:18;;47675:71;;;;;;;;:::i;:::-;;;;;;;;47548:210;47795:15;;;;;;;;;;;47787:29;;47824:21;47787:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47774:76;;;;;46309:1549;;;;;;;;;;46281:1577;:::o;18328:473::-;18386:7;18636:1;18631;:6;18627:47;;;18661:1;18654:8;;;;18627:47;18687:9;18703:1;18699;:5;;;;:::i;:::-;18687:17;;18732:1;18727;18723;:5;;;;:::i;:::-;:10;18715:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18792:1;18785:8;;;18328:473;;;;;:::o;19278:132::-;19336:7;19363:39;19367:1;19370;19363:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19356:46;;19278:132;;;;:::o;16573:125::-;;;;:::o;17435:136::-;17493:7;17520:43;17524:1;17527;17520:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17513:50;;17435:136;;;;:::o;45148:597::-;45277:21;45315:1;45301:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45277:40;;45346:4;45328;45333:1;45328:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45372:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45362:4;45367:1;45362:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45408:62;45425:4;45440:15;45458:11;45408:8;:62::i;:::-;45510:15;:66;;;45591:11;45617:1;45661:4;45688;45708:15;45510:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45203:542;45148:597;:::o;45754:518::-;45902:62;45919:4;45934:15;45952:11;45902:8;:62::i;:::-;46008:15;:31;;;46047:9;46080:4;46100:11;46126:1;46169;30211:42;46238:15;46008:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45754:518;;:::o;19907:279::-;19993:7;20025:1;20021;:5;20028:12;20013:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20052:9;20068:1;20064;:5;;;;:::i;:::-;20052:17;;20177:1;20170:8;;;19907:279;;;;;:::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:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:116::-;6541:21;6556:5;6541:21;:::i;:::-;6534:5;6531:32;6521:60;;6577:1;6574;6567:12;6521:60;6471:116;:::o;6593:133::-;6636:5;6674:6;6661:20;6652:29;;6690:30;6714:5;6690:30;:::i;:::-;6593:133;;;;:::o;6732:468::-;6797:6;6805;6854:2;6842:9;6833:7;6829:23;6825:32;6822:119;;;6860:79;;:::i;:::-;6822:119;6980:1;7005:53;7050:7;7041:6;7030:9;7026:22;7005:53;:::i;:::-;6995:63;;6951:117;7107:2;7133:50;7175:7;7166:6;7155:9;7151:22;7133:50;:::i;:::-;7123:60;;7078:115;6732:468;;;;;:::o;7206:86::-;7241:7;7281:4;7274:5;7270:16;7259:27;;7206:86;;;:::o;7298:112::-;7381:22;7397:5;7381:22;:::i;:::-;7376:3;7369:35;7298:112;;:::o;7416:214::-;7505:4;7543:2;7532:9;7528:18;7520:26;;7556:67;7620:1;7609:9;7605:17;7596:6;7556:67;:::i;:::-;7416:214;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:911::-;9165:6;9173;9181;9189;9197;9246:3;9234:9;9225:7;9221:23;9217:33;9214:120;;;9253:79;;:::i;:::-;9214:120;9373:1;9398:53;9443:7;9434:6;9423:9;9419:22;9398:53;:::i;:::-;9388:63;;9344:117;9500:2;9526:53;9571:7;9562:6;9551:9;9547:22;9526:53;:::i;:::-;9516:63;;9471:118;9628:2;9654:53;9699:7;9690:6;9679:9;9675:22;9654:53;:::i;:::-;9644:63;;9599:118;9756:2;9782:53;9827:7;9818:6;9807:9;9803:22;9782:53;:::i;:::-;9772:63;;9727:118;9884:3;9911:53;9956:7;9947:6;9936:9;9932:22;9911:53;:::i;:::-;9901:63;;9855:119;9070:911;;;;;;;;:::o;9987:180::-;10035:77;10032:1;10025:88;10132:4;10129:1;10122:15;10156:4;10153:1;10146:15;10173:320;10217:6;10254:1;10248:4;10244:12;10234:22;;10301:1;10295:4;10291:12;10322:18;10312:81;;10378:4;10370:6;10366:17;10356:27;;10312:81;10440:2;10432:6;10429:14;10409:18;10406:38;10403:84;;;10459:18;;:::i;:::-;10403:84;10224:269;10173:320;;;:::o;10499:182::-;10639:34;10635:1;10627:6;10623:14;10616:58;10499:182;:::o;10687:366::-;10829:3;10850:67;10914:2;10909:3;10850:67;:::i;:::-;10843:74;;10926:93;11015:3;10926:93;:::i;:::-;11044:2;11039:3;11035:12;11028:19;;10687:366;;;:::o;11059:419::-;11225:4;11263:2;11252:9;11248:18;11240:26;;11312:9;11306:4;11302:20;11298:1;11287:9;11283:17;11276:47;11340:131;11466:4;11340:131;:::i;:::-;11332:139;;11059:419;;;:::o;11484:180::-;11532:77;11529:1;11522:88;11629:4;11626:1;11619:15;11653:4;11650:1;11643:15;11670:348;11710:7;11733:20;11751:1;11733:20;:::i;:::-;11728:25;;11767:20;11785:1;11767:20;:::i;:::-;11762:25;;11955:1;11887:66;11883:74;11880:1;11877:81;11872:1;11865:9;11858:17;11854:105;11851:131;;;11962:18;;:::i;:::-;11851:131;12010:1;12007;12003:9;11992:20;;11670:348;;;;:::o;12024:180::-;12072:77;12069:1;12062:88;12169:4;12166:1;12159:15;12193:4;12190:1;12183:15;12210:185;12250:1;12267:20;12285:1;12267:20;:::i;:::-;12262:25;;12301:20;12319:1;12301:20;:::i;:::-;12296:25;;12340:1;12330:35;;12345:18;;:::i;:::-;12330:35;12387:1;12384;12380:9;12375:14;;12210:185;;;;:::o;12401:234::-;12541:34;12537:1;12529:6;12525:14;12518:58;12610:17;12605:2;12597:6;12593:15;12586:42;12401:234;:::o;12641:366::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:419::-;13179:4;13217:2;13206:9;13202:18;13194:26;;13266:9;13260:4;13256:20;13252:1;13241:9;13237:17;13230:47;13294:131;13420:4;13294:131;:::i;:::-;13286:139;;13013:419;;;:::o;13438:305::-;13478:3;13497:20;13515:1;13497:20;:::i;:::-;13492:25;;13531:20;13549:1;13531:20;:::i;:::-;13526:25;;13685:1;13617:66;13613:74;13610:1;13607:81;13604:107;;;13691:18;;:::i;:::-;13604:107;13735:1;13732;13728:9;13721:16;;13438:305;;;;:::o;13749:179::-;13889:31;13885:1;13877:6;13873:14;13866:55;13749:179;:::o;13934:366::-;14076:3;14097:67;14161:2;14156:3;14097:67;:::i;:::-;14090:74;;14173:93;14262:3;14173:93;:::i;:::-;14291:2;14286:3;14282:12;14275:19;;13934:366;;;:::o;14306:419::-;14472:4;14510:2;14499:9;14495:18;14487:26;;14559:9;14553:4;14549:20;14545:1;14534:9;14530:17;14523:47;14587:131;14713:4;14587:131;:::i;:::-;14579:139;;14306:419;;;:::o;14731:244::-;14871:34;14867:1;14859:6;14855:14;14848:58;14940:27;14935:2;14927:6;14923:15;14916:52;14731:244;:::o;14981:366::-;15123:3;15144:67;15208:2;15203:3;15144:67;:::i;:::-;15137:74;;15220:93;15309:3;15220:93;:::i;:::-;15338:2;15333:3;15329:12;15322:19;;14981:366;;;:::o;15353:419::-;15519:4;15557:2;15546:9;15542:18;15534:26;;15606:9;15600:4;15596:20;15592:1;15581:9;15577:17;15570:47;15634:131;15760:4;15634:131;:::i;:::-;15626:139;;15353:419;;;:::o;15778:223::-;15918:34;15914:1;15906:6;15902:14;15895:58;15987:6;15982:2;15974:6;15970:15;15963:31;15778:223;:::o;16007:366::-;16149:3;16170:67;16234:2;16229:3;16170:67;:::i;:::-;16163:74;;16246:93;16335:3;16246:93;:::i;:::-;16364:2;16359:3;16355:12;16348:19;;16007:366;;;:::o;16379:419::-;16545:4;16583:2;16572:9;16568:18;16560:26;;16632:9;16626:4;16622:20;16618:1;16607:9;16603:17;16596:47;16660:131;16786:4;16660:131;:::i;:::-;16652:139;;16379:419;;;:::o;16804:240::-;16944:34;16940:1;16932:6;16928:14;16921:58;17013:23;17008:2;17000:6;16996:15;16989:48;16804:240;:::o;17050:366::-;17192:3;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17289:93;17378:3;17289:93;:::i;:::-;17407:2;17402:3;17398:12;17391:19;;17050:366;;;:::o;17422:419::-;17588:4;17626:2;17615:9;17611:18;17603:26;;17675:9;17669:4;17665:20;17661:1;17650:9;17646:17;17639:47;17703:131;17829:4;17703:131;:::i;:::-;17695:139;;17422:419;;;:::o;17847:239::-;17987:34;17983:1;17975:6;17971:14;17964:58;18056:22;18051:2;18043:6;18039:15;18032:47;17847:239;:::o;18092:366::-;18234:3;18255:67;18319:2;18314:3;18255:67;:::i;:::-;18248:74;;18331:93;18420:3;18331:93;:::i;:::-;18449:2;18444:3;18440:12;18433:19;;18092:366;;;:::o;18464:419::-;18630:4;18668:2;18657:9;18653:18;18645:26;;18717:9;18711:4;18707:20;18703:1;18692:9;18688:17;18681:47;18745:131;18871:4;18745:131;:::i;:::-;18737:139;;18464:419;;;:::o;18889:225::-;19029:34;19025:1;19017:6;19013:14;19006:58;19098:8;19093:2;19085:6;19081:15;19074:33;18889:225;:::o;19120:366::-;19262:3;19283:67;19347:2;19342:3;19283:67;:::i;:::-;19276:74;;19359:93;19448:3;19359:93;:::i;:::-;19477:2;19472:3;19468:12;19461:19;;19120:366;;;:::o;19492:419::-;19658:4;19696:2;19685:9;19681:18;19673:26;;19745:9;19739:4;19735:20;19731:1;19720:9;19716:17;19709:47;19773:131;19899:4;19773:131;:::i;:::-;19765:139;;19492:419;;;:::o;19917:179::-;20057:31;20053:1;20045:6;20041:14;20034:55;19917:179;:::o;20102:366::-;20244:3;20265:67;20329:2;20324:3;20265:67;:::i;:::-;20258:74;;20341:93;20430:3;20341:93;:::i;:::-;20459:2;20454:3;20450:12;20443:19;;20102:366;;;:::o;20474:419::-;20640:4;20678:2;20667:9;20663:18;20655:26;;20727:9;20721:4;20717:20;20713:1;20702:9;20698:17;20691:47;20755:131;20881:4;20755:131;:::i;:::-;20747:139;;20474:419;;;:::o;20899:177::-;21039:29;21035:1;21027:6;21023:14;21016:53;20899:177;:::o;21082:366::-;21224:3;21245:67;21309:2;21304:3;21245:67;:::i;:::-;21238:74;;21321:93;21410:3;21321:93;:::i;:::-;21439:2;21434:3;21430:12;21423:19;;21082:366;;;:::o;21454:419::-;21620:4;21658:2;21647:9;21643:18;21635:26;;21707:9;21701:4;21697:20;21693:1;21682:9;21678:17;21671:47;21735:131;21861:4;21735:131;:::i;:::-;21727:139;;21454:419;;;:::o;21879:223::-;22019:34;22015:1;22007:6;22003:14;21996:58;22088:6;22083:2;22075:6;22071:15;22064:31;21879:223;:::o;22108:366::-;22250:3;22271:67;22335:2;22330:3;22271:67;:::i;:::-;22264:74;;22347:93;22436:3;22347:93;:::i;:::-;22465:2;22460:3;22456:12;22449:19;;22108:366;;;:::o;22480:419::-;22646:4;22684:2;22673:9;22669:18;22661:26;;22733:9;22727:4;22723:20;22719:1;22708:9;22704:17;22697:47;22761:131;22887:4;22761:131;:::i;:::-;22753:139;;22480:419;;;:::o;22905:221::-;23045:34;23041:1;23033:6;23029:14;23022:58;23114:4;23109:2;23101:6;23097:15;23090:29;22905:221;:::o;23132:366::-;23274:3;23295:67;23359:2;23354:3;23295:67;:::i;:::-;23288:74;;23371:93;23460:3;23371:93;:::i;:::-;23489:2;23484:3;23480:12;23473:19;;23132:366;;;:::o;23504:419::-;23670:4;23708:2;23697:9;23693:18;23685:26;;23757:9;23751:4;23747:20;23743:1;23732:9;23728:17;23721:47;23785:131;23911:4;23785:131;:::i;:::-;23777:139;;23504:419;;;:::o;23929:224::-;24069:34;24065:1;24057:6;24053:14;24046:58;24138:7;24133:2;24125:6;24121:15;24114:32;23929:224;:::o;24159:366::-;24301:3;24322:67;24386:2;24381:3;24322:67;:::i;:::-;24315:74;;24398:93;24487:3;24398:93;:::i;:::-;24516:2;24511:3;24507:12;24500:19;;24159:366;;;:::o;24531:419::-;24697:4;24735:2;24724:9;24720:18;24712:26;;24784:9;24778:4;24774:20;24770:1;24759:9;24755:17;24748:47;24812:131;24938:4;24812:131;:::i;:::-;24804:139;;24531:419;;;:::o;24956:222::-;25096:34;25092:1;25084:6;25080:14;25073:58;25165:5;25160:2;25152:6;25148:15;25141:30;24956:222;:::o;25184:366::-;25326:3;25347:67;25411:2;25406:3;25347:67;:::i;:::-;25340:74;;25423:93;25512:3;25423:93;:::i;:::-;25541:2;25536:3;25532:12;25525:19;;25184:366;;;:::o;25556:419::-;25722:4;25760:2;25749:9;25745:18;25737:26;;25809:9;25803:4;25799:20;25795:1;25784:9;25780:17;25773:47;25837:131;25963:4;25837:131;:::i;:::-;25829:139;;25556:419;;;:::o;25981:236::-;26121:34;26117:1;26109:6;26105:14;26098:58;26190:19;26185:2;26177:6;26173:15;26166:44;25981:236;:::o;26223:366::-;26365:3;26386:67;26450:2;26445:3;26386:67;:::i;:::-;26379:74;;26462:93;26551:3;26462:93;:::i;:::-;26580:2;26575:3;26571:12;26564:19;;26223:366;;;:::o;26595:419::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:172::-;27160:24;27156:1;27148:6;27144:14;27137:48;27020:172;:::o;27198:366::-;27340:3;27361:67;27425:2;27420:3;27361:67;:::i;:::-;27354:74;;27437:93;27526:3;27437:93;:::i;:::-;27555:2;27550:3;27546:12;27539:19;;27198:366;;;:::o;27570:419::-;27736:4;27774:2;27763:9;27759:18;27751:26;;27823:9;27817:4;27813:20;27809:1;27798:9;27794:17;27787:47;27851:131;27977:4;27851:131;:::i;:::-;27843:139;;27570:419;;;:::o;27995:297::-;28135:34;28131:1;28123:6;28119:14;28112:58;28204:34;28199:2;28191:6;28187:15;28180:59;28273:11;28268:2;28260:6;28256:15;28249:36;27995:297;:::o;28298:366::-;28440:3;28461:67;28525:2;28520:3;28461:67;:::i;:::-;28454:74;;28537:93;28626:3;28537:93;:::i;:::-;28655:2;28650:3;28646:12;28639:19;;28298:366;;;:::o;28670:419::-;28836:4;28874:2;28863:9;28859:18;28851:26;;28923:9;28917:4;28913:20;28909:1;28898:9;28894:17;28887:47;28951:131;29077:4;28951:131;:::i;:::-;28943:139;;28670:419;;;:::o;29095:240::-;29235:34;29231:1;29223:6;29219:14;29212:58;29304:23;29299:2;29291:6;29287:15;29280:48;29095:240;:::o;29341:366::-;29483:3;29504:67;29568:2;29563:3;29504:67;:::i;:::-;29497:74;;29580:93;29669:3;29580:93;:::i;:::-;29698:2;29693:3;29689:12;29682:19;;29341:366;;;:::o;29713:419::-;29879:4;29917:2;29906:9;29902:18;29894:26;;29966:9;29960:4;29956:20;29952:1;29941:9;29937:17;29930:47;29994:131;30120:4;29994:131;:::i;:::-;29986:139;;29713:419;;;:::o;30138:169::-;30278:21;30274:1;30266:6;30262:14;30255:45;30138:169;:::o;30313:366::-;30455:3;30476:67;30540:2;30535:3;30476:67;:::i;:::-;30469:74;;30552:93;30641:3;30552:93;:::i;:::-;30670:2;30665:3;30661:12;30654:19;;30313:366;;;:::o;30685:419::-;30851:4;30889:2;30878:9;30874:18;30866:26;;30938:9;30932:4;30928:20;30924:1;30913:9;30909:17;30902:47;30966:131;31092:4;30966:131;:::i;:::-;30958:139;;30685:419;;;:::o;31110:241::-;31250:34;31246:1;31238:6;31234:14;31227:58;31319:24;31314:2;31306:6;31302:15;31295:49;31110:241;:::o;31357:366::-;31499:3;31520:67;31584:2;31579:3;31520:67;:::i;:::-;31513:74;;31596:93;31685:3;31596:93;:::i;:::-;31714:2;31709:3;31705:12;31698:19;;31357:366;;;:::o;31729:419::-;31895:4;31933:2;31922:9;31918:18;31910:26;;31982:9;31976:4;31972:20;31968:1;31957:9;31953:17;31946:47;32010:131;32136:4;32010:131;:::i;:::-;32002:139;;31729:419;;;:::o;32154:191::-;32194:4;32214:20;32232:1;32214:20;:::i;:::-;32209:25;;32248:20;32266:1;32248:20;:::i;:::-;32243:25;;32287:1;32284;32281:8;32278:34;;;32292:18;;:::i;:::-;32278:34;32337:1;32334;32330:9;32322:17;;32154:191;;;;:::o;32351:147::-;32452:11;32489:3;32474:18;;32351:147;;;;:::o;32504:114::-;;:::o;32624:398::-;32783:3;32804:83;32885:1;32880:3;32804:83;:::i;:::-;32797:90;;32896:93;32985:3;32896:93;:::i;:::-;33014:1;33009:3;33005:11;32998:18;;32624:398;;;:::o;33028:379::-;33212:3;33234:147;33377:3;33234:147;:::i;:::-;33227:154;;33398:3;33391:10;;33028:379;;;:::o;33413:442::-;33562:4;33600:2;33589:9;33585:18;33577:26;;33613:71;33681:1;33670:9;33666:17;33657:6;33613:71;:::i;:::-;33694:72;33762:2;33751:9;33747:18;33738:6;33694:72;:::i;:::-;33776;33844:2;33833:9;33829:18;33820:6;33776:72;:::i;:::-;33413:442;;;;;;:::o;33861:220::-;34001:34;33997:1;33989:6;33985:14;33978:58;34070:3;34065:2;34057:6;34053:15;34046:28;33861:220;:::o;34087:366::-;34229:3;34250:67;34314:2;34309:3;34250:67;:::i;:::-;34243:74;;34326:93;34415:3;34326:93;:::i;:::-;34444:2;34439:3;34435:12;34428:19;;34087:366;;;:::o;34459:419::-;34625:4;34663:2;34652:9;34648:18;34640:26;;34712:9;34706:4;34702:20;34698:1;34687:9;34683:17;34676:47;34740:131;34866:4;34740:131;:::i;:::-;34732:139;;34459:419;;;:::o;34884:180::-;34932:77;34929:1;34922:88;35029:4;35026:1;35019:15;35053:4;35050:1;35043:15;35070:180;35118:77;35115:1;35108:88;35215:4;35212:1;35205:15;35239:4;35236:1;35229:15;35256:143;35313:5;35344:6;35338:13;35329:22;;35360:33;35387:5;35360:33;:::i;:::-;35256:143;;;;:::o;35405:351::-;35475:6;35524:2;35512:9;35503:7;35499:23;35495:32;35492:119;;;35530:79;;:::i;:::-;35492:119;35650:1;35675:64;35731:7;35722:6;35711:9;35707:22;35675:64;:::i;:::-;35665:74;;35621:128;35405:351;;;;:::o;35762:85::-;35807:7;35836:5;35825:16;;35762:85;;;:::o;35853:158::-;35911:9;35944:61;35962:42;35971:32;35997:5;35971:32;:::i;:::-;35962:42;:::i;:::-;35944:61;:::i;:::-;35931:74;;35853:158;;;:::o;36017:147::-;36112:45;36151:5;36112:45;:::i;:::-;36107:3;36100:58;36017:147;;:::o;36170:114::-;36237:6;36271:5;36265:12;36255:22;;36170:114;;;:::o;36290:184::-;36389:11;36423:6;36418:3;36411:19;36463:4;36458:3;36454:14;36439:29;;36290:184;;;;:::o;36480:132::-;36547:4;36570:3;36562:11;;36600:4;36595:3;36591:14;36583:22;;36480:132;;;:::o;36618:108::-;36695:24;36713:5;36695:24;:::i;:::-;36690:3;36683:37;36618:108;;:::o;36732:179::-;36801:10;36822:46;36864:3;36856:6;36822:46;:::i;:::-;36900:4;36895:3;36891:14;36877:28;;36732:179;;;;:::o;36917:113::-;36987:4;37019;37014:3;37010:14;37002:22;;36917:113;;;:::o;37066:732::-;37185:3;37214:54;37262:5;37214:54;:::i;:::-;37284:86;37363:6;37358:3;37284:86;:::i;:::-;37277:93;;37394:56;37444:5;37394:56;:::i;:::-;37473:7;37504:1;37489:284;37514:6;37511:1;37508:13;37489:284;;;37590:6;37584:13;37617:63;37676:3;37661:13;37617:63;:::i;:::-;37610:70;;37703:60;37756:6;37703:60;:::i;:::-;37693:70;;37549:224;37536:1;37533;37529:9;37524:14;;37489:284;;;37493:14;37789:3;37782:10;;37190:608;;;37066:732;;;;:::o;37804:831::-;38067:4;38105:3;38094:9;38090:19;38082:27;;38119:71;38187:1;38176:9;38172:17;38163:6;38119:71;:::i;:::-;38200:80;38276:2;38265:9;38261:18;38252:6;38200:80;:::i;:::-;38327:9;38321:4;38317:20;38312:2;38301:9;38297:18;38290:48;38355:108;38458:4;38449:6;38355:108;:::i;:::-;38347:116;;38473:72;38541:2;38530:9;38526:18;38517:6;38473:72;:::i;:::-;38555:73;38623:3;38612:9;38608:19;38599:6;38555:73;:::i;:::-;37804:831;;;;;;;;:::o;38641:807::-;38890:4;38928:3;38917:9;38913:19;38905:27;;38942:71;39010:1;38999:9;38995:17;38986:6;38942:71;:::i;:::-;39023:72;39091:2;39080:9;39076:18;39067:6;39023:72;:::i;:::-;39105:80;39181:2;39170:9;39166:18;39157:6;39105:80;:::i;:::-;39195;39271:2;39260:9;39256:18;39247:6;39195:80;:::i;:::-;39285:73;39353:3;39342:9;39338:19;39329:6;39285:73;:::i;:::-;39368;39436:3;39425:9;39421:19;39412:6;39368:73;:::i;:::-;38641:807;;;;;;;;;:::o;39454:143::-;39511:5;39542:6;39536:13;39527:22;;39558:33;39585:5;39558:33;:::i;:::-;39454:143;;;;:::o;39603:663::-;39691:6;39699;39707;39756:2;39744:9;39735:7;39731:23;39727:32;39724:119;;;39762:79;;:::i;:::-;39724:119;39882:1;39907:64;39963:7;39954:6;39943:9;39939:22;39907:64;:::i;:::-;39897:74;;39853:128;40020:2;40046:64;40102:7;40093:6;40082:9;40078:22;40046:64;:::i;:::-;40036:74;;39991:129;40159:2;40185:64;40241:7;40232:6;40221:9;40217:22;40185:64;:::i;:::-;40175:74;;40130:129;39603:663;;;;;:::o

Swarm Source

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