ETH Price: $3,469.46 (-1.34%)
Gas: 4 Gwei

Token

Hanagumi (花組)
 

Overview

Max Total Supply

1,000,000,000,000 花組

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
shinkohaven.eth
Balance
20,000,000,000 花組

Value
$0.00
0x8ADD70024a5673bE5fFdD952239Ef2Ccbd6a7152
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:
Hanagumi

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-09-07
*/

/**

    花組

*/
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 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 Hanagumi is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address public marketingWallet;
    address public devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public 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 earlySellDevFee;
 
    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 UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Hanagumi", unicode"花組") {
 
        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 = 2;
        uint256 _buyLiquidityFee = 3;
        uint256 _buyDevFee = 2;
 
        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 3;
        uint256 _sellDevFee = 2;
 
        uint256 _earlySellLiquidityFee = 2;
        uint256 _earlySellMarketingFee = 3;
	    uint256 _earlySellDevFee = 2; 
        uint256 totalSupply = 1 * 1e12 * 1e18;
 
        maxTransactionAmount = totalSupply * 5 / 1000; // 0.5% maxTransactionAmountTxn
        maxWallet = totalSupply * 10 / 1000; // 1% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% 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;
	    earlySellDevFee = _earlySellDevFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        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, uint256 _earlySellDevFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	earlySellDevFee = _earlySellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "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;
		sellDevFee = earlySellDevFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 3;
                sellMarketingFee = 5;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 2;
                sellMarketingFee = 3;
		        sellDevFee = 2;
                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
            address(this),
            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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"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":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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"},{"internalType":"uint256","name":"_earlySellDevFee","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600881526020017f48616e6167756d690000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017fe88ab1e7b584000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000c08565b5080600490805190602001906200013692919062000c08565b50505060006200014b620006d460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000216816001620006dc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029157600080fd5b505afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc919062000d22565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032f57600080fd5b505afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000d22565b6040518363ffffffff1660e01b81526004016200038992919062000d65565b602060405180830381600087803b158015620003a457600080fd5b505af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000d22565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200042760a0516001620006dc60201b60201c565b6200043c60a0516001620007d960201b60201c565b60006002905060006003905060006002905060006002905060006003905060006002905060006002905060006003905060006002905060006c0c9f2c9cd04674edea4000000090506103e860058262000496919062000dcb565b620004a2919062000e5b565b6008819055506103e8600a82620004ba919062000dcb565b620004c6919062000e5b565b600a81905550612710600a82620004de919062000dcb565b620004ea919062000e5b565b6009819055508960118190555088601281905550876013819055506013546012546011546200051a919062000e93565b62000526919062000e93565b60108190555086601581905550856016819055508460178190555060175460165460155462000556919062000e93565b62000562919062000e93565b601481905550836018819055508260198190555081601a819055506200058d6200087a60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005dd6200087a60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063f620006316200087a60201b60201c565b6001620008a460201b60201c565b62000652306001620008a460201b60201c565b6200066761dead6001620008a460201b60201c565b620006896200067b6200087a60201b60201c565b6001620006dc60201b60201c565b6200069c306001620006dc60201b60201c565b620006b161dead6001620006dc60201b60201c565b620006c33382620009f160201b60201c565b505050505050505050505062001124565b600033905090565b620006ec620006d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007759062000f51565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008b4620006d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000946576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093d9062000f51565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009e5919062000f90565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5b9062000ffd565b60405180910390fd5b62000a786000838362000ba060201b60201c565b62000a948160025462000ba560201b620028a51790919060201c565b60028190555062000af2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ba560201b620028a51790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b94919062001030565b60405180910390a35050565b505050565b600080828462000bb6919062000e93565b90508381101562000bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf5906200109d565b60405180910390fd5b8091505092915050565b82805462000c1690620010ee565b90600052602060002090601f01602090048101928262000c3a576000855562000c86565b82601f1062000c5557805160ff191683800117855562000c86565b8280016001018555821562000c86579182015b8281111562000c8557825182559160200191906001019062000c68565b5b50905062000c95919062000c99565b5090565b5b8082111562000cb457600081600090555060010162000c9a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cea8262000cbd565b9050919050565b62000cfc8162000cdd565b811462000d0857600080fd5b50565b60008151905062000d1c8162000cf1565b92915050565b60006020828403121562000d3b5762000d3a62000cb8565b5b600062000d4b8482850162000d0b565b91505092915050565b62000d5f8162000cdd565b82525050565b600060408201905062000d7c600083018562000d54565b62000d8b602083018462000d54565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dd88262000d92565b915062000de58362000d92565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e215762000e2062000d9c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e688262000d92565b915062000e758362000d92565b92508262000e885762000e8762000e2c565b5b828204905092915050565b600062000ea08262000d92565b915062000ead8362000d92565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ee55762000ee462000d9c565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f3960208362000ef0565b915062000f468262000f01565b602082019050919050565b6000602082019050818103600083015262000f6c8162000f2a565b9050919050565b60008115159050919050565b62000f8a8162000f73565b82525050565b600060208201905062000fa7600083018462000f7f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fe5601f8362000ef0565b915062000ff28262000fad565b602082019050919050565b60006020820190508181036000830152620010188162000fd6565b9050919050565b6200102a8162000d92565b82525050565b60006020820190506200104760008301846200101f565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001085601b8362000ef0565b915062001092826200104d565b602082019050919050565b60006020820190508181036000830152620010b88162001076565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200110757607f821691505b602082108114156200111e576200111d620010bf565b5b50919050565b60805160a051615d2a620011906000396000818161155401528181611d9c01528181612f7101528181613391015261348e015260008181610eda01528181612f190152818161440a015281816144fa01528181614521015281816145bd01526145e40152615d2a6000f3fe6080604052600436106103905760003560e01c80638da5cb5b116101dc578063b62496f511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610d5f578063f2fde38b14610d8a578063f637434214610db3578063f8b45b0514610dde57610397565b8063d85ba06314610ca1578063dd62ed3e14610ccc578063e2f4560514610d09578063e884f26014610d3457610397565b8063c18bc195116100dc578063c18bc19514610be5578063c876d0b914610c0e578063c8c8ebe414610c39578063d257b34f14610c6457610397565b8063b62496f514610b54578063bbc0c74214610b91578063c024666814610bbc57610397565b80639fccce321161017a578063a4d15b6411610149578063a4d15b6414610a98578063a7fc9e2114610ac3578063a9059cbb14610aee578063aacebbe314610b2b57610397565b80639fccce32146109dc578063a0d82dc514610a07578063a265777814610a32578063a457c2d714610a5b57610397565b8063924de9b7116101b6578063924de9b71461093457806395d89b411461095d5780639a7a23d6146109885780639c3b4fdc146109b157610397565b80638da5cb5b146108b35780638ea5220f146108de578063921369131461090957610397565b806339509351116102c157806370a082311161025f57806375f0a8741161022e57806375f0a8741461081d5780637bce5a04146108485780638095d564146108735780638a8c523c1461089c57610397565b806370a0823114610775578063715018a6146107b2578063751039fc146107c95780637571336a146107f457610397565b80634fbee1931161029b5780634fbee193146106b7578063541a43cf146106f45780636a486a8e1461071f5780636ddd17131461074a57610397565b8063395093511461062457806349bd5a5e146106615780634a62bb651461068c57610397565b80631f3fed8f1161032e57806323b872dd1161030857806323b872dd146105685780632bf3d42d146105a55780632d5a5d34146105d0578063313ce567146105f957610397565b80631f3fed8f146104eb578063203e727e1461051657806322d3e2aa1461053f57610397565b80631694505e1161036a5780631694505e1461044157806318160ddd1461046c5780631816467f146104975780631a8145bb146104c057610397565b806306fdde031461039c578063095ea7b3146103c757806310d5de531461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e09565b6040516103be919061479c565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614857565b610e9b565b6040516103fb91906148b2565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906148cd565b610eb9565b60405161043891906148b2565b60405180910390f35b34801561044d57600080fd5b50610456610ed8565b6040516104639190614959565b60405180910390f35b34801561047857600080fd5b50610481610efc565b60405161048e9190614983565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b991906148cd565b610f06565b005b3480156104cc57600080fd5b506104d561105d565b6040516104e29190614983565b60405180910390f35b3480156104f757600080fd5b50610500611063565b60405161050d9190614983565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061499e565b611069565b005b34801561054b57600080fd5b50610566600480360381019061056191906149cb565b611193565b005b34801561057457600080fd5b5061058f600480360381019061058a9190614a58565b6112c5565b60405161059c91906148b2565b60405180910390f35b3480156105b157600080fd5b506105ba61139e565b6040516105c79190614983565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f29190614ad7565b6113a4565b005b34801561060557600080fd5b5061060e611496565b60405161061b9190614b33565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190614857565b61149f565b60405161065891906148b2565b60405180910390f35b34801561066d57600080fd5b50610676611552565b6040516106839190614b5d565b60405180910390f35b34801561069857600080fd5b506106a1611576565b6040516106ae91906148b2565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906148cd565b611589565b6040516106eb91906148b2565b60405180910390f35b34801561070057600080fd5b506107096115df565b6040516107169190614983565b60405180910390f35b34801561072b57600080fd5b506107346115e5565b6040516107419190614983565b60405180910390f35b34801561075657600080fd5b5061075f6115eb565b60405161076c91906148b2565b60405180910390f35b34801561078157600080fd5b5061079c600480360381019061079791906148cd565b6115fe565b6040516107a99190614983565b60405180910390f35b3480156107be57600080fd5b506107c7611646565b005b3480156107d557600080fd5b506107de61179e565b6040516107eb91906148b2565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190614ad7565b611859565b005b34801561082957600080fd5b5061083261194b565b60405161083f9190614b5d565b60405180910390f35b34801561085457600080fd5b5061085d611971565b60405161086a9190614983565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190614b78565b611977565b005b3480156108a857600080fd5b506108b1611a91565b005b3480156108bf57600080fd5b506108c8611b67565b6040516108d59190614b5d565b60405180910390f35b3480156108ea57600080fd5b506108f3611b91565b6040516109009190614b5d565b60405180910390f35b34801561091557600080fd5b5061091e611bb7565b60405161092b9190614983565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190614bcb565b611bbd565b005b34801561096957600080fd5b50610972611c71565b60405161097f919061479c565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190614ad7565b611d03565b005b3480156109bd57600080fd5b506109c6611e37565b6040516109d39190614983565b60405180910390f35b3480156109e857600080fd5b506109f1611e3d565b6040516109fe9190614983565b60405180910390f35b348015610a1357600080fd5b50610a1c611e43565b604051610a299190614983565b60405180910390f35b348015610a3e57600080fd5b50610a596004803603810190610a549190614bcb565b611e49565b005b348015610a6757600080fd5b50610a826004803603810190610a7d9190614857565b611efd565b604051610a8f91906148b2565b60405180910390f35b348015610aa457600080fd5b50610aad611fca565b604051610aba91906148b2565b60405180910390f35b348015610acf57600080fd5b50610ad8611fdd565b604051610ae59190614983565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190614857565b611fe3565b604051610b2291906148b2565b60405180910390f35b348015610b3757600080fd5b50610b526004803603810190610b4d91906148cd565b612001565b005b348015610b6057600080fd5b50610b7b6004803603810190610b7691906148cd565b612158565b604051610b8891906148b2565b60405180910390f35b348015610b9d57600080fd5b50610ba6612178565b604051610bb391906148b2565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde9190614ad7565b61218b565b005b348015610bf157600080fd5b50610c0c6004803603810190610c07919061499e565b6122cb565b005b348015610c1a57600080fd5b50610c236123f5565b604051610c3091906148b2565b60405180910390f35b348015610c4557600080fd5b50610c4e612408565b604051610c5b9190614983565b60405180910390f35b348015610c7057600080fd5b50610c8b6004803603810190610c86919061499e565b61240e565b604051610c9891906148b2565b60405180910390f35b348015610cad57600080fd5b50610cb661257e565b604051610cc39190614983565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190614bf8565b612584565b604051610d009190614983565b60405180910390f35b348015610d1557600080fd5b50610d1e61260b565b604051610d2b9190614983565b60405180910390f35b348015610d4057600080fd5b50610d49612611565b604051610d5691906148b2565b60405180910390f35b348015610d6b57600080fd5b50610d746126cc565b604051610d819190614983565b60405180910390f35b348015610d9657600080fd5b50610db16004803603810190610dac91906148cd565b6126d2565b005b348015610dbf57600080fd5b50610dc8612899565b604051610dd59190614983565b60405180910390f35b348015610dea57600080fd5b50610df361289f565b604051610e009190614983565b60405180910390f35b606060038054610e1890614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4490614c67565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b6000610eaf610ea8612903565b848461290b565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f0e612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490614ce5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b611071612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614ce5565b60405180910390fd5b670de0b6b3a76400006103e86001611116610efc565b6111209190614d34565b61112a9190614dbd565b6111349190614dbd565b811015611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90614e60565b60405180910390fd5b670de0b6b3a76400008161118a9190614d34565b60088190555050565b61119b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190614ce5565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a819055506017546016546015546112679190614e80565b6112719190614e80565b601481905550606360145411156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614f22565b60405180910390fd5b505050505050565b60006112d2848484612ad6565b611393846112de612903565b61138e85604051806060016040528060288152602001615ca860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611344612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b61290b565b600190509392505050565b60195481565b6113ac612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290614ce5565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006115486114ac612903565b8461154385600160006114bd612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a590919063ffffffff16565b61290b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164e612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117a8612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614ce5565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611861612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614ce5565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61197f612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590614ce5565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611a369190614e80565b611a409190614e80565b60108190555060146010541115611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390614f8e565b60405180910390fd5b505050565b611a99612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90614ce5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611bc5612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4b90614ce5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611c8090614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614c67565b8015611cf95780601f10611cce57610100808354040283529160200191611cf9565b820191906000526020600020905b815481529060010190602001808311611cdc57829003601f168201915b5050505050905090565b611d0b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9190614ce5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090615020565b60405180910390fd5b611e338282613c3a565b5050565b60135481565b601d5481565b60175481565b611e51612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed790614ce5565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611fc0611f0a612903565b84611fbb85604051806060016040528060258152602001615cd06025913960016000611f34612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b61290b565b6001905092915050565b600b60039054906101000a900460ff1681565b601a5481565b6000611ff7611ff0612903565b8484612ad6565b6001905092915050565b612009612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90614ce5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612193612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990614ce5565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122bf91906148b2565b60405180910390a25050565b6122d3612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614ce5565b60405180910390fd5b670de0b6b3a76400006103e86005612378610efc565b6123829190614d34565b61238c9190614dbd565b6123969190614dbd565b8110156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906150b2565b60405180910390fd5b670de0b6b3a7640000816123ec9190614d34565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000612418612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e90614ce5565b60405180910390fd5b620186a060016124b5610efc565b6124bf9190614d34565b6124c99190614dbd565b82101561250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290615144565b60405180910390fd5b6103e86005612518610efc565b6125229190614d34565b61252c9190614dbd565b82111561256e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612565906151d6565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061261b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a190614ce5565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6126da612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090615268565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b60008082846128b49190614e80565b9050838110156128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f0906152d4565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615366565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e2906153f8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac99190614983565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d9061548a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bad9061551c565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c5a5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c90906155ae565b60405180910390fd5b6000811415612cb357612cae83836000613cdb565b613bd1565b600b60009054906101000a900460ff161561337657612cd0611b67565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d3e5750612d0e611b67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612db1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dca5750600560149054906101000a900460ff16155b1561337557600b60019054906101000a900460ff16612ec457601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e845750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061561a565b60405180910390fd5b5b600f60009054906101000a900460ff161561308c57612ee1611b67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f6857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561308b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303d906156d2565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312f5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d657600854811115613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317090615764565b60405180910390fd5b600a54613185836115fe565b826131909190614e80565b11156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c8906157d0565b60405180910390fd5b613374565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132795750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c8576008548111156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90615862565b60405180910390fd5b613373565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661337257600a54613325836115fe565b826133309190614e80565b1115613371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613368906157d0565b60405180910390fd5b5b5b5b5b5b6001601e546133859190614e80565b43111580156133e057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561342c5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561348a576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156134f75750600b60039054906101000a900460ff165b1561361a576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561359957504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135969190614e80565b10155b156135e157601854601681905550601954601581905550601a546017819055506017546016546015546135cc9190614e80565b6135d69190614e80565b601481905550613615565b600360168190555060056015819055506017546016546015546136049190614e80565b61360e9190614e80565b6014819055505b6136f8565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156136a75742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff166136f7576002601681905550600360158190555060026017819055506017546016546015546136e69190614e80565b6136f09190614e80565b6014819055505b5b6000613703306115fe565b9050600060095482101590508080156137285750600b60029054906101000a900460ff165b80156137415750600560149054906101000a900460ff16155b80156137975750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137ed5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138435750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613887576001600560146101000a81548160ff02191690831515021790555061386b613f70565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061393d5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561394757600090505b60008115613bc057602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139aa57506000601454115b15613a77576139d760646139c96014548961425790919063ffffffff16565b6142d290919063ffffffff16565b9050601454601654826139ea9190614d34565b6139f49190614dbd565b601c6000828254613a059190614e80565b9250508190555060145460175482613a1d9190614d34565b613a279190614dbd565b601d6000828254613a389190614e80565b9250508190555060145460155482613a509190614d34565b613a5a9190614dbd565b601b6000828254613a6b9190614e80565b92505081905550613b9c565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad257506000601054115b15613b9b57613aff6064613af16010548961425790919063ffffffff16565b6142d290919063ffffffff16565b905060105460125482613b129190614d34565b613b1c9190614dbd565b601c6000828254613b2d9190614e80565b9250508190555060105460135482613b459190614d34565b613b4f9190614dbd565b601d6000828254613b609190614e80565b9250508190555060105460115482613b789190614d34565b613b829190614dbd565b601b6000828254613b939190614e80565b925050819055505b5b6000811115613bb157613bb0883083613cdb565b5b8086613bbd9190615882565b95505b613bcb888888613cdb565b50505050505b505050565b6000838311158290613c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c15919061479c565b60405180910390fd5b5060008385613c2d9190615882565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d429061548a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db29061551c565b60405180910390fd5b613dc683838361431c565b613e3181604051806060016040528060268152602001615c82602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f639190614983565b60405180910390a3505050565b6000613f7b306115fe565b90506000601d54601b54601c54613f929190614e80565b613f9c9190614e80565b9050600080831480613fae5750600082145b15613fbb57505050614255565b6014600954613fca9190614d34565b831115613fe3576014600954613fe09190614d34565b92505b6000600283601c5486613ff69190614d34565b6140009190614dbd565b61400a9190614dbd565b90506000614021828661432190919063ffffffff16565b905060004790506140318261436b565b6000614046824761432190919063ffffffff16565b9050600061407187614063601b548561425790919063ffffffff16565b6142d290919063ffffffff16565b9050600061409c8861408e601d548661425790919063ffffffff16565b6142d290919063ffffffff16565b905060008183856140ad9190615882565b6140b79190615882565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614117906158e7565b60006040518083038185875af1925050503d8060008114614154576040519150601f19603f3d011682016040523d82523d6000602084013e614159565b606091505b50508098505060008711801561416f5750600081115b156141bc5761417e87826145b7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c546040516141b3939291906158fc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614202906158e7565b60006040518083038185875af1925050503d806000811461423f576040519150601f19603f3d011682016040523d82523d6000602084013e614244565b606091505b505080985050505050505050505050505b565b60008083141561426a57600090506142cc565b600082846142789190614d34565b90508284826142879190614dbd565b146142c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142be906159a5565b60405180910390fd5b809150505b92915050565b600061431483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506146a0565b905092915050565b505050565b600061436383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bd6565b905092915050565b6000600267ffffffffffffffff811115614388576143876159c5565b5b6040519080825280602002602001820160405280156143b65781602001602082028036833780820191505090505b50905030816000815181106143ce576143cd6159f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561446e57600080fd5b505afa158015614482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a69190615a38565b816001815181106144ba576144b96159f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061451f307f00000000000000000000000000000000000000000000000000000000000000008461290b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614581959493929190615b5e565b600060405180830381600087803b15801561459b57600080fd5b505af11580156145af573d6000803e3d6000fd5b505050505050565b6145e2307f00000000000000000000000000000000000000000000000000000000000000008461290b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161464796959493929190615bb8565b6060604051808303818588803b15801561466057600080fd5b505af1158015614674573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146999190615c2e565b5050505050565b600080831182906146e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146de919061479c565b60405180910390fd5b50600083856146f69190614dbd565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561473d578082015181840152602081019050614722565b8381111561474c576000848401525b50505050565b6000601f19601f8301169050919050565b600061476e82614703565b614778818561470e565b935061478881856020860161471f565b61479181614752565b840191505092915050565b600060208201905081810360008301526147b68184614763565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147ee826147c3565b9050919050565b6147fe816147e3565b811461480957600080fd5b50565b60008135905061481b816147f5565b92915050565b6000819050919050565b61483481614821565b811461483f57600080fd5b50565b6000813590506148518161482b565b92915050565b6000806040838503121561486e5761486d6147be565b5b600061487c8582860161480c565b925050602061488d85828601614842565b9150509250929050565b60008115159050919050565b6148ac81614897565b82525050565b60006020820190506148c760008301846148a3565b92915050565b6000602082840312156148e3576148e26147be565b5b60006148f18482850161480c565b91505092915050565b6000819050919050565b600061491f61491a614915846147c3565b6148fa565b6147c3565b9050919050565b600061493182614904565b9050919050565b600061494382614926565b9050919050565b61495381614938565b82525050565b600060208201905061496e600083018461494a565b92915050565b61497d81614821565b82525050565b60006020820190506149986000830184614974565b92915050565b6000602082840312156149b4576149b36147be565b5b60006149c284828501614842565b91505092915050565b60008060008060008060c087890312156149e8576149e76147be565b5b60006149f689828a01614842565b9650506020614a0789828a01614842565b9550506040614a1889828a01614842565b9450506060614a2989828a01614842565b9350506080614a3a89828a01614842565b92505060a0614a4b89828a01614842565b9150509295509295509295565b600080600060608486031215614a7157614a706147be565b5b6000614a7f8682870161480c565b9350506020614a908682870161480c565b9250506040614aa186828701614842565b9150509250925092565b614ab481614897565b8114614abf57600080fd5b50565b600081359050614ad181614aab565b92915050565b60008060408385031215614aee57614aed6147be565b5b6000614afc8582860161480c565b9250506020614b0d85828601614ac2565b9150509250929050565b600060ff82169050919050565b614b2d81614b17565b82525050565b6000602082019050614b486000830184614b24565b92915050565b614b57816147e3565b82525050565b6000602082019050614b726000830184614b4e565b92915050565b600080600060608486031215614b9157614b906147be565b5b6000614b9f86828701614842565b9350506020614bb086828701614842565b9250506040614bc186828701614842565b9150509250925092565b600060208284031215614be157614be06147be565b5b6000614bef84828501614ac2565b91505092915050565b60008060408385031215614c0f57614c0e6147be565b5b6000614c1d8582860161480c565b9250506020614c2e8582860161480c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ccf60208361470e565b9150614cda82614c99565b602082019050919050565b60006020820190508181036000830152614cfe81614cc2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d3f82614821565b9150614d4a83614821565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8357614d82614d05565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dc882614821565b9150614dd383614821565b925082614de357614de2614d8e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e4a602f8361470e565b9150614e5582614dee565b604082019050919050565b60006020820190508181036000830152614e7981614e3d565b9050919050565b6000614e8b82614821565b9150614e9683614821565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ecb57614eca614d05565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f0c601d8361470e565b9150614f1782614ed6565b602082019050919050565b60006020820190508181036000830152614f3b81614eff565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614f78601d8361470e565b9150614f8382614f42565b602082019050919050565b60006020820190508181036000830152614fa781614f6b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061500a60398361470e565b915061501582614fae565b604082019050919050565b6000602082019050818103600083015261503981614ffd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061509c60248361470e565b91506150a782615040565b604082019050919050565b600060208201905081810360008301526150cb8161508f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061512e60358361470e565b9150615139826150d2565b604082019050919050565b6000602082019050818103600083015261515d81615121565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006151c060348361470e565b91506151cb82615164565b604082019050919050565b600060208201905081810360008301526151ef816151b3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061525260268361470e565b915061525d826151f6565b604082019050919050565b6000602082019050818103600083015261528181615245565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152be601b8361470e565b91506152c982615288565b602082019050919050565b600060208201905081810360008301526152ed816152b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061535060248361470e565b915061535b826152f4565b604082019050919050565b6000602082019050818103600083015261537f81615343565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153e260228361470e565b91506153ed82615386565b604082019050919050565b60006020820190508181036000830152615411816153d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061547460258361470e565b915061547f82615418565b604082019050919050565b600060208201905081810360008301526154a381615467565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061550660238361470e565b9150615511826154aa565b604082019050919050565b60006020820190508181036000830152615535816154f9565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061559860318361470e565b91506155a38261553c565b604082019050919050565b600060208201905081810360008301526155c78161558b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061560460168361470e565b915061560f826155ce565b602082019050919050565b60006020820190508181036000830152615633816155f7565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006156bc60498361470e565b91506156c78261563a565b606082019050919050565b600060208201905081810360008301526156eb816156af565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061574e60358361470e565b9150615759826156f2565b604082019050919050565b6000602082019050818103600083015261577d81615741565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006157ba60138361470e565b91506157c582615784565b602082019050919050565b600060208201905081810360008301526157e9816157ad565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061584c60368361470e565b9150615857826157f0565b604082019050919050565b6000602082019050818103600083015261587b8161583f565b9050919050565b600061588d82614821565b915061589883614821565b9250828210156158ab576158aa614d05565b5b828203905092915050565b600081905092915050565b50565b60006158d16000836158b6565b91506158dc826158c1565b600082019050919050565b60006158f2826158c4565b9150819050919050565b60006060820190506159116000830186614974565b61591e6020830185614974565b61592b6040830184614974565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061598f60218361470e565b915061599a82615933565b604082019050919050565b600060208201905081810360008301526159be81615982565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615a32816147f5565b92915050565b600060208284031215615a4e57615a4d6147be565b5b6000615a5c84828501615a23565b91505092915050565b6000819050919050565b6000615a8a615a85615a8084615a65565b6148fa565b614821565b9050919050565b615a9a81615a6f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ad5816147e3565b82525050565b6000615ae78383615acc565b60208301905092915050565b6000602082019050919050565b6000615b0b82615aa0565b615b158185615aab565b9350615b2083615abc565b8060005b83811015615b51578151615b388882615adb565b9750615b4383615af3565b925050600181019050615b24565b5085935050505092915050565b600060a082019050615b736000830188614974565b615b806020830187615a91565b8181036040830152615b928186615b00565b9050615ba16060830185614b4e565b615bae6080830184614974565b9695505050505050565b600060c082019050615bcd6000830189614b4e565b615bda6020830188614974565b615be76040830187615a91565b615bf46060830186615a91565b615c016080830185614b4e565b615c0e60a0830184614974565b979650505050505050565b600081519050615c288161482b565b92915050565b600080600060608486031215615c4757615c466147be565b5b6000615c5586828701615c19565b9350506020615c6686828701615c19565b9250506040615c7786828701615c19565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122086580fd19b6b760fb8f4072535084a1f9bc6ebc93dce6f550d0a5e86e2e1722d64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80638da5cb5b116101dc578063b62496f511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610d5f578063f2fde38b14610d8a578063f637434214610db3578063f8b45b0514610dde57610397565b8063d85ba06314610ca1578063dd62ed3e14610ccc578063e2f4560514610d09578063e884f26014610d3457610397565b8063c18bc195116100dc578063c18bc19514610be5578063c876d0b914610c0e578063c8c8ebe414610c39578063d257b34f14610c6457610397565b8063b62496f514610b54578063bbc0c74214610b91578063c024666814610bbc57610397565b80639fccce321161017a578063a4d15b6411610149578063a4d15b6414610a98578063a7fc9e2114610ac3578063a9059cbb14610aee578063aacebbe314610b2b57610397565b80639fccce32146109dc578063a0d82dc514610a07578063a265777814610a32578063a457c2d714610a5b57610397565b8063924de9b7116101b6578063924de9b71461093457806395d89b411461095d5780639a7a23d6146109885780639c3b4fdc146109b157610397565b80638da5cb5b146108b35780638ea5220f146108de578063921369131461090957610397565b806339509351116102c157806370a082311161025f57806375f0a8741161022e57806375f0a8741461081d5780637bce5a04146108485780638095d564146108735780638a8c523c1461089c57610397565b806370a0823114610775578063715018a6146107b2578063751039fc146107c95780637571336a146107f457610397565b80634fbee1931161029b5780634fbee193146106b7578063541a43cf146106f45780636a486a8e1461071f5780636ddd17131461074a57610397565b8063395093511461062457806349bd5a5e146106615780634a62bb651461068c57610397565b80631f3fed8f1161032e57806323b872dd1161030857806323b872dd146105685780632bf3d42d146105a55780632d5a5d34146105d0578063313ce567146105f957610397565b80631f3fed8f146104eb578063203e727e1461051657806322d3e2aa1461053f57610397565b80631694505e1161036a5780631694505e1461044157806318160ddd1461046c5780631816467f146104975780631a8145bb146104c057610397565b806306fdde031461039c578063095ea7b3146103c757806310d5de531461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e09565b6040516103be919061479c565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614857565b610e9b565b6040516103fb91906148b2565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906148cd565b610eb9565b60405161043891906148b2565b60405180910390f35b34801561044d57600080fd5b50610456610ed8565b6040516104639190614959565b60405180910390f35b34801561047857600080fd5b50610481610efc565b60405161048e9190614983565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b991906148cd565b610f06565b005b3480156104cc57600080fd5b506104d561105d565b6040516104e29190614983565b60405180910390f35b3480156104f757600080fd5b50610500611063565b60405161050d9190614983565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061499e565b611069565b005b34801561054b57600080fd5b50610566600480360381019061056191906149cb565b611193565b005b34801561057457600080fd5b5061058f600480360381019061058a9190614a58565b6112c5565b60405161059c91906148b2565b60405180910390f35b3480156105b157600080fd5b506105ba61139e565b6040516105c79190614983565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f29190614ad7565b6113a4565b005b34801561060557600080fd5b5061060e611496565b60405161061b9190614b33565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190614857565b61149f565b60405161065891906148b2565b60405180910390f35b34801561066d57600080fd5b50610676611552565b6040516106839190614b5d565b60405180910390f35b34801561069857600080fd5b506106a1611576565b6040516106ae91906148b2565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906148cd565b611589565b6040516106eb91906148b2565b60405180910390f35b34801561070057600080fd5b506107096115df565b6040516107169190614983565b60405180910390f35b34801561072b57600080fd5b506107346115e5565b6040516107419190614983565b60405180910390f35b34801561075657600080fd5b5061075f6115eb565b60405161076c91906148b2565b60405180910390f35b34801561078157600080fd5b5061079c600480360381019061079791906148cd565b6115fe565b6040516107a99190614983565b60405180910390f35b3480156107be57600080fd5b506107c7611646565b005b3480156107d557600080fd5b506107de61179e565b6040516107eb91906148b2565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190614ad7565b611859565b005b34801561082957600080fd5b5061083261194b565b60405161083f9190614b5d565b60405180910390f35b34801561085457600080fd5b5061085d611971565b60405161086a9190614983565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190614b78565b611977565b005b3480156108a857600080fd5b506108b1611a91565b005b3480156108bf57600080fd5b506108c8611b67565b6040516108d59190614b5d565b60405180910390f35b3480156108ea57600080fd5b506108f3611b91565b6040516109009190614b5d565b60405180910390f35b34801561091557600080fd5b5061091e611bb7565b60405161092b9190614983565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190614bcb565b611bbd565b005b34801561096957600080fd5b50610972611c71565b60405161097f919061479c565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190614ad7565b611d03565b005b3480156109bd57600080fd5b506109c6611e37565b6040516109d39190614983565b60405180910390f35b3480156109e857600080fd5b506109f1611e3d565b6040516109fe9190614983565b60405180910390f35b348015610a1357600080fd5b50610a1c611e43565b604051610a299190614983565b60405180910390f35b348015610a3e57600080fd5b50610a596004803603810190610a549190614bcb565b611e49565b005b348015610a6757600080fd5b50610a826004803603810190610a7d9190614857565b611efd565b604051610a8f91906148b2565b60405180910390f35b348015610aa457600080fd5b50610aad611fca565b604051610aba91906148b2565b60405180910390f35b348015610acf57600080fd5b50610ad8611fdd565b604051610ae59190614983565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190614857565b611fe3565b604051610b2291906148b2565b60405180910390f35b348015610b3757600080fd5b50610b526004803603810190610b4d91906148cd565b612001565b005b348015610b6057600080fd5b50610b7b6004803603810190610b7691906148cd565b612158565b604051610b8891906148b2565b60405180910390f35b348015610b9d57600080fd5b50610ba6612178565b604051610bb391906148b2565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde9190614ad7565b61218b565b005b348015610bf157600080fd5b50610c0c6004803603810190610c07919061499e565b6122cb565b005b348015610c1a57600080fd5b50610c236123f5565b604051610c3091906148b2565b60405180910390f35b348015610c4557600080fd5b50610c4e612408565b604051610c5b9190614983565b60405180910390f35b348015610c7057600080fd5b50610c8b6004803603810190610c86919061499e565b61240e565b604051610c9891906148b2565b60405180910390f35b348015610cad57600080fd5b50610cb661257e565b604051610cc39190614983565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190614bf8565b612584565b604051610d009190614983565b60405180910390f35b348015610d1557600080fd5b50610d1e61260b565b604051610d2b9190614983565b60405180910390f35b348015610d4057600080fd5b50610d49612611565b604051610d5691906148b2565b60405180910390f35b348015610d6b57600080fd5b50610d746126cc565b604051610d819190614983565b60405180910390f35b348015610d9657600080fd5b50610db16004803603810190610dac91906148cd565b6126d2565b005b348015610dbf57600080fd5b50610dc8612899565b604051610dd59190614983565b60405180910390f35b348015610dea57600080fd5b50610df361289f565b604051610e009190614983565b60405180910390f35b606060038054610e1890614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4490614c67565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b6000610eaf610ea8612903565b848461290b565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f0e612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490614ce5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b611071612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614ce5565b60405180910390fd5b670de0b6b3a76400006103e86001611116610efc565b6111209190614d34565b61112a9190614dbd565b6111349190614dbd565b811015611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90614e60565b60405180910390fd5b670de0b6b3a76400008161118a9190614d34565b60088190555050565b61119b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190614ce5565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a819055506017546016546015546112679190614e80565b6112719190614e80565b601481905550606360145411156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614f22565b60405180910390fd5b505050505050565b60006112d2848484612ad6565b611393846112de612903565b61138e85604051806060016040528060288152602001615ca860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611344612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b61290b565b600190509392505050565b60195481565b6113ac612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290614ce5565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006115486114ac612903565b8461154385600160006114bd612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a590919063ffffffff16565b61290b565b6001905092915050565b7f000000000000000000000000b71b920643ebf0b67eb446a9d47c078f4ffe271c81565b600b60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164e612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117a8612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614ce5565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611861612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614ce5565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61197f612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590614ce5565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611a369190614e80565b611a409190614e80565b60108190555060146010541115611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390614f8e565b60405180910390fd5b505050565b611a99612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90614ce5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611bc5612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4b90614ce5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611c8090614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614c67565b8015611cf95780601f10611cce57610100808354040283529160200191611cf9565b820191906000526020600020905b815481529060010190602001808311611cdc57829003601f168201915b5050505050905090565b611d0b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9190614ce5565b60405180910390fd5b7f000000000000000000000000b71b920643ebf0b67eb446a9d47c078f4ffe271c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090615020565b60405180910390fd5b611e338282613c3a565b5050565b60135481565b601d5481565b60175481565b611e51612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed790614ce5565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611fc0611f0a612903565b84611fbb85604051806060016040528060258152602001615cd06025913960016000611f34612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b61290b565b6001905092915050565b600b60039054906101000a900460ff1681565b601a5481565b6000611ff7611ff0612903565b8484612ad6565b6001905092915050565b612009612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90614ce5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612193612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990614ce5565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122bf91906148b2565b60405180910390a25050565b6122d3612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614ce5565b60405180910390fd5b670de0b6b3a76400006103e86005612378610efc565b6123829190614d34565b61238c9190614dbd565b6123969190614dbd565b8110156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906150b2565b60405180910390fd5b670de0b6b3a7640000816123ec9190614d34565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000612418612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e90614ce5565b60405180910390fd5b620186a060016124b5610efc565b6124bf9190614d34565b6124c99190614dbd565b82101561250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290615144565b60405180910390fd5b6103e86005612518610efc565b6125229190614d34565b61252c9190614dbd565b82111561256e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612565906151d6565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061261b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a190614ce5565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6126da612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090615268565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b60008082846128b49190614e80565b9050838110156128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f0906152d4565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615366565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e2906153f8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac99190614983565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d9061548a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bad9061551c565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c5a5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c90906155ae565b60405180910390fd5b6000811415612cb357612cae83836000613cdb565b613bd1565b600b60009054906101000a900460ff161561337657612cd0611b67565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d3e5750612d0e611b67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612db1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dca5750600560149054906101000a900460ff16155b1561337557600b60019054906101000a900460ff16612ec457601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e845750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061561a565b60405180910390fd5b5b600f60009054906101000a900460ff161561308c57612ee1611b67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f6857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc057507f000000000000000000000000b71b920643ebf0b67eb446a9d47c078f4ffe271c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561308b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303d906156d2565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312f5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d657600854811115613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317090615764565b60405180910390fd5b600a54613185836115fe565b826131909190614e80565b11156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c8906157d0565b60405180910390fd5b613374565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132795750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c8576008548111156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90615862565b60405180910390fd5b613373565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661337257600a54613325836115fe565b826133309190614e80565b1115613371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613368906157d0565b60405180910390fd5b5b5b5b5b5b6001601e546133859190614e80565b43111580156133e057507f000000000000000000000000b71b920643ebf0b67eb446a9d47c078f4ffe271c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561342c5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561348a576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000b71b920643ebf0b67eb446a9d47c078f4ffe271c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156134f75750600b60039054906101000a900460ff165b1561361a576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561359957504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135969190614e80565b10155b156135e157601854601681905550601954601581905550601a546017819055506017546016546015546135cc9190614e80565b6135d69190614e80565b601481905550613615565b600360168190555060056015819055506017546016546015546136049190614e80565b61360e9190614e80565b6014819055505b6136f8565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156136a75742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff166136f7576002601681905550600360158190555060026017819055506017546016546015546136e69190614e80565b6136f09190614e80565b6014819055505b5b6000613703306115fe565b9050600060095482101590508080156137285750600b60029054906101000a900460ff165b80156137415750600560149054906101000a900460ff16155b80156137975750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137ed5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138435750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613887576001600560146101000a81548160ff02191690831515021790555061386b613f70565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061393d5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561394757600090505b60008115613bc057602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139aa57506000601454115b15613a77576139d760646139c96014548961425790919063ffffffff16565b6142d290919063ffffffff16565b9050601454601654826139ea9190614d34565b6139f49190614dbd565b601c6000828254613a059190614e80565b9250508190555060145460175482613a1d9190614d34565b613a279190614dbd565b601d6000828254613a389190614e80565b9250508190555060145460155482613a509190614d34565b613a5a9190614dbd565b601b6000828254613a6b9190614e80565b92505081905550613b9c565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad257506000601054115b15613b9b57613aff6064613af16010548961425790919063ffffffff16565b6142d290919063ffffffff16565b905060105460125482613b129190614d34565b613b1c9190614dbd565b601c6000828254613b2d9190614e80565b9250508190555060105460135482613b459190614d34565b613b4f9190614dbd565b601d6000828254613b609190614e80565b9250508190555060105460115482613b789190614d34565b613b829190614dbd565b601b6000828254613b939190614e80565b925050819055505b5b6000811115613bb157613bb0883083613cdb565b5b8086613bbd9190615882565b95505b613bcb888888613cdb565b50505050505b505050565b6000838311158290613c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c15919061479c565b60405180910390fd5b5060008385613c2d9190615882565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d429061548a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db29061551c565b60405180910390fd5b613dc683838361431c565b613e3181604051806060016040528060268152602001615c82602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f639190614983565b60405180910390a3505050565b6000613f7b306115fe565b90506000601d54601b54601c54613f929190614e80565b613f9c9190614e80565b9050600080831480613fae5750600082145b15613fbb57505050614255565b6014600954613fca9190614d34565b831115613fe3576014600954613fe09190614d34565b92505b6000600283601c5486613ff69190614d34565b6140009190614dbd565b61400a9190614dbd565b90506000614021828661432190919063ffffffff16565b905060004790506140318261436b565b6000614046824761432190919063ffffffff16565b9050600061407187614063601b548561425790919063ffffffff16565b6142d290919063ffffffff16565b9050600061409c8861408e601d548661425790919063ffffffff16565b6142d290919063ffffffff16565b905060008183856140ad9190615882565b6140b79190615882565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614117906158e7565b60006040518083038185875af1925050503d8060008114614154576040519150601f19603f3d011682016040523d82523d6000602084013e614159565b606091505b50508098505060008711801561416f5750600081115b156141bc5761417e87826145b7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c546040516141b3939291906158fc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614202906158e7565b60006040518083038185875af1925050503d806000811461423f576040519150601f19603f3d011682016040523d82523d6000602084013e614244565b606091505b505080985050505050505050505050505b565b60008083141561426a57600090506142cc565b600082846142789190614d34565b90508284826142879190614dbd565b146142c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142be906159a5565b60405180910390fd5b809150505b92915050565b600061431483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506146a0565b905092915050565b505050565b600061436383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bd6565b905092915050565b6000600267ffffffffffffffff811115614388576143876159c5565b5b6040519080825280602002602001820160405280156143b65781602001602082028036833780820191505090505b50905030816000815181106143ce576143cd6159f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561446e57600080fd5b505afa158015614482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a69190615a38565b816001815181106144ba576144b96159f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061451f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461290b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614581959493929190615b5e565b600060405180830381600087803b15801561459b57600080fd5b505af11580156145af573d6000803e3d6000fd5b505050505050565b6145e2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461290b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161464796959493929190615bb8565b6060604051808303818588803b15801561466057600080fd5b505af1158015614674573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146999190615c2e565b5050505050565b600080831182906146e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146de919061479c565b60405180910390fd5b50600083856146f69190614dbd565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561473d578082015181840152602081019050614722565b8381111561474c576000848401525b50505050565b6000601f19601f8301169050919050565b600061476e82614703565b614778818561470e565b935061478881856020860161471f565b61479181614752565b840191505092915050565b600060208201905081810360008301526147b68184614763565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147ee826147c3565b9050919050565b6147fe816147e3565b811461480957600080fd5b50565b60008135905061481b816147f5565b92915050565b6000819050919050565b61483481614821565b811461483f57600080fd5b50565b6000813590506148518161482b565b92915050565b6000806040838503121561486e5761486d6147be565b5b600061487c8582860161480c565b925050602061488d85828601614842565b9150509250929050565b60008115159050919050565b6148ac81614897565b82525050565b60006020820190506148c760008301846148a3565b92915050565b6000602082840312156148e3576148e26147be565b5b60006148f18482850161480c565b91505092915050565b6000819050919050565b600061491f61491a614915846147c3565b6148fa565b6147c3565b9050919050565b600061493182614904565b9050919050565b600061494382614926565b9050919050565b61495381614938565b82525050565b600060208201905061496e600083018461494a565b92915050565b61497d81614821565b82525050565b60006020820190506149986000830184614974565b92915050565b6000602082840312156149b4576149b36147be565b5b60006149c284828501614842565b91505092915050565b60008060008060008060c087890312156149e8576149e76147be565b5b60006149f689828a01614842565b9650506020614a0789828a01614842565b9550506040614a1889828a01614842565b9450506060614a2989828a01614842565b9350506080614a3a89828a01614842565b92505060a0614a4b89828a01614842565b9150509295509295509295565b600080600060608486031215614a7157614a706147be565b5b6000614a7f8682870161480c565b9350506020614a908682870161480c565b9250506040614aa186828701614842565b9150509250925092565b614ab481614897565b8114614abf57600080fd5b50565b600081359050614ad181614aab565b92915050565b60008060408385031215614aee57614aed6147be565b5b6000614afc8582860161480c565b9250506020614b0d85828601614ac2565b9150509250929050565b600060ff82169050919050565b614b2d81614b17565b82525050565b6000602082019050614b486000830184614b24565b92915050565b614b57816147e3565b82525050565b6000602082019050614b726000830184614b4e565b92915050565b600080600060608486031215614b9157614b906147be565b5b6000614b9f86828701614842565b9350506020614bb086828701614842565b9250506040614bc186828701614842565b9150509250925092565b600060208284031215614be157614be06147be565b5b6000614bef84828501614ac2565b91505092915050565b60008060408385031215614c0f57614c0e6147be565b5b6000614c1d8582860161480c565b9250506020614c2e8582860161480c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ccf60208361470e565b9150614cda82614c99565b602082019050919050565b60006020820190508181036000830152614cfe81614cc2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d3f82614821565b9150614d4a83614821565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8357614d82614d05565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dc882614821565b9150614dd383614821565b925082614de357614de2614d8e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e4a602f8361470e565b9150614e5582614dee565b604082019050919050565b60006020820190508181036000830152614e7981614e3d565b9050919050565b6000614e8b82614821565b9150614e9683614821565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ecb57614eca614d05565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f0c601d8361470e565b9150614f1782614ed6565b602082019050919050565b60006020820190508181036000830152614f3b81614eff565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614f78601d8361470e565b9150614f8382614f42565b602082019050919050565b60006020820190508181036000830152614fa781614f6b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061500a60398361470e565b915061501582614fae565b604082019050919050565b6000602082019050818103600083015261503981614ffd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061509c60248361470e565b91506150a782615040565b604082019050919050565b600060208201905081810360008301526150cb8161508f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061512e60358361470e565b9150615139826150d2565b604082019050919050565b6000602082019050818103600083015261515d81615121565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006151c060348361470e565b91506151cb82615164565b604082019050919050565b600060208201905081810360008301526151ef816151b3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061525260268361470e565b915061525d826151f6565b604082019050919050565b6000602082019050818103600083015261528181615245565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152be601b8361470e565b91506152c982615288565b602082019050919050565b600060208201905081810360008301526152ed816152b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061535060248361470e565b915061535b826152f4565b604082019050919050565b6000602082019050818103600083015261537f81615343565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153e260228361470e565b91506153ed82615386565b604082019050919050565b60006020820190508181036000830152615411816153d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061547460258361470e565b915061547f82615418565b604082019050919050565b600060208201905081810360008301526154a381615467565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061550660238361470e565b9150615511826154aa565b604082019050919050565b60006020820190508181036000830152615535816154f9565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061559860318361470e565b91506155a38261553c565b604082019050919050565b600060208201905081810360008301526155c78161558b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061560460168361470e565b915061560f826155ce565b602082019050919050565b60006020820190508181036000830152615633816155f7565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006156bc60498361470e565b91506156c78261563a565b606082019050919050565b600060208201905081810360008301526156eb816156af565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061574e60358361470e565b9150615759826156f2565b604082019050919050565b6000602082019050818103600083015261577d81615741565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006157ba60138361470e565b91506157c582615784565b602082019050919050565b600060208201905081810360008301526157e9816157ad565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061584c60368361470e565b9150615857826157f0565b604082019050919050565b6000602082019050818103600083015261587b8161583f565b9050919050565b600061588d82614821565b915061589883614821565b9250828210156158ab576158aa614d05565b5b828203905092915050565b600081905092915050565b50565b60006158d16000836158b6565b91506158dc826158c1565b600082019050919050565b60006158f2826158c4565b9150819050919050565b60006060820190506159116000830186614974565b61591e6020830185614974565b61592b6040830184614974565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061598f60218361470e565b915061599a82615933565b604082019050919050565b600060208201905081810360008301526159be81615982565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615a32816147f5565b92915050565b600060208284031215615a4e57615a4d6147be565b5b6000615a5c84828501615a23565b91505092915050565b6000819050919050565b6000615a8a615a85615a8084615a65565b6148fa565b614821565b9050919050565b615a9a81615a6f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ad5816147e3565b82525050565b6000615ae78383615acc565b60208301905092915050565b6000602082019050919050565b6000615b0b82615aa0565b615b158185615aab565b9350615b2083615abc565b8060005b83811015615b51578151615b388882615adb565b9750615b4383615af3565b925050600181019050615b24565b5085935050505092915050565b600060a082019050615b736000830188614974565b615b806020830187615a91565b8181036040830152615b928186615b00565b9050615ba16060830185614b4e565b615bae6080830184614974565b9695505050505050565b600060c082019050615bcd6000830189614b4e565b615bda6020830188614974565b615be76040830187615a91565b615bf46060830186615a91565b615c016080830185614b4e565b615c0e60a0830184614974565b979650505050505050565b600081519050615c288161482b565b92915050565b600080600060608486031215615c4757615c466147be565b5b6000615c5586828701615c19565b9350506020615c6686828701615c19565b9250506040615c7786828701615c19565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122086580fd19b6b760fb8f4072535084a1f9bc6ebc93dce6f550d0a5e86e2e1722d64736f6c63430008090033

Deployed Bytecode Sourcemap

29296:17683:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7394:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9568:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30998:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29375:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8517:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38399:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30712:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30672;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35570:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36766:620;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10220:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30589:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37586:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8358:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10985:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29433:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29699:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38568:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30546:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30400:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29779:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8689:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21896:148;;;;;;;;;;;;;:::i;:::-;;34676:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36037:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29512:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30292;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36388:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34475:148;;;;;;;;;;;;;:::i;:::-;;21252:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29549:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30435:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36278:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7614:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37730:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30366:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30752:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30511:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35001:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11707:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29817:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30632:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9030:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38182:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31221:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29739:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37395:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35813:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30209:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29583:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35175:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30258:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9269:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29625:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34858:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30329:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22200:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30473:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29665:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7394:100;7448:13;7481:5;7474:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7394:100;:::o;9568:169::-;9651:4;9668:39;9677:12;:10;:12::i;:::-;9691:7;9700:6;9668:8;:39::i;:::-;9725:4;9718:11;;9568:169;;;;:::o;30998:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29375:51::-;;;:::o;8517:108::-;8578:7;8605:12;;8598:19;;8517:108;:::o;38399:157::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38506:9:::1;;;;;;;;;;;38478:38;;38495:9;38478:38;;;;;;;;;;;;38539:9;38527;;:21;;;;;;;;;;;;;;;;;;38399:157:::0;:::o;30712:33::-;;;;:::o;30672:::-;;;;:::o;35570:234::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35689:4:::1;35683;35679:1;35663:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35662:31;;;;:::i;:::-;35652:6;:41;;35644:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35789:6;35779;:17;;;;:::i;:::-;35756:20;:40;;;;35570:234:::0;:::o;36766:620::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36992:13:::1;36973:16;:32;;;;37035:13;37016:16;:32;;;;37072:7;37059:10;:20;;;;37114:22;37090:21;:46;;;;37171:22;37147:21;:46;;;;37215:16;37197:15;:34;;;;37296:10;;37277:16;;37258;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37242:13;:64;;;;37342:2;37325:13;;:19;;37317:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36766:620:::0;;;;;;:::o;10220:355::-;10360:4;10377:36;10387:6;10395:9;10406:6;10377:9;:36::i;:::-;10424:121;10433:6;10441:12;:10;:12::i;:::-;10455:89;10493:6;10455:89;;;;;;;;;;;;;;;;;:11;:19;10467:6;10455:19;;;;;;;;;;;;;;;:33;10475:12;:10;:12::i;:::-;10455:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10424:8;:121::i;:::-;10563:4;10556:11;;10220:355;;;;;:::o;30589:36::-;;;;:::o;37586:135::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37700:13:::1;37678:10;:19;37689:7;37678:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37586:135:::0;;:::o;8358:93::-;8416:5;8441:2;8434:9;;8358:93;:::o;10985:218::-;11073:4;11090:83;11099:12;:10;:12::i;:::-;11113:7;11122:50;11161:10;11122:11;:25;11134:12;:10;:12::i;:::-;11122:25;;;;;;;;;;;;;;;:34;11148:7;11122:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11090:8;:83::i;:::-;11191:4;11184:11;;10985:218;;;;:::o;29433:38::-;;;:::o;29699:33::-;;;;;;;;;;;;;:::o;38568:125::-;38633:4;38657:19;:28;38677:7;38657:28;;;;;;;;;;;;;;;;;;;;;;;;;38650:35;;38568:125;;;:::o;30546:36::-;;;;:::o;30400:28::-;;;;:::o;29779:31::-;;;;;;;;;;;;;:::o;8689:127::-;8763:7;8790:9;:18;8800:7;8790:18;;;;;;;;;;;;;;;;8783:25;;8689:127;;;:::o;21896:148::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22003:1:::1;21966:40;;21987:6;;;;;;;;;;;21966:40;;;;;;;;;;;;22034:1;22017:6;;:19;;;;;;;;;;;;;;;;;;21896:148::o:0;34676:120::-;34728:4;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34761:5:::1;34744:14;;:22;;;;;;;;;;;;;;;;;;34784:4;34777:11;;34676:120:::0;:::o;36037:144::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36169:4:::1;36127:31;:39;36159:6;36127:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36037:144:::0;;:::o;29512:30::-;;;;;;;;;;;;;:::o;30292:::-;;;;:::o;36388:369::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36522:13:::1;36504:15;:31;;;;36564:13;36546:15;:31;;;;36600:7;36588:9;:19;;;;36669:9;;36651:15;;36633;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36618:12;:60;;;;36713:2;36697:12;;:18;;36689:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36388:369:::0;;;:::o;34475:148::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34546:4:::1;34530:13;;:20;;;;;;;;;;;;;;;;;;34575:4;34561:11;;:18;;;;;;;;;;;;;;;;;;34603:12;34590:10;:25;;;;34475:148::o:0;21252:79::-;21290:7;21317:6;;;;;;;;;;;21310:13;;21252:79;:::o;29549:24::-;;;;;;;;;;;;;:::o;30435:31::-;;;;:::o;36278:101::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36364:7:::1;36350:11;;:21;;;;;;;;;;;;;;;;;;36278:101:::0;:::o;7614:104::-;7670:13;7703:7;7696:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7614:104;:::o;37730:245::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37837:13:::1;37829:21;;:4;:21;;;;37821:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37926:41;37955:4;37961:5;37926:28;:41::i;:::-;37730:245:::0;;:::o;30366:24::-;;;;:::o;30752:27::-;;;;:::o;30511:25::-;;;;:::o;35001:102::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35090:5:::1;35069:18;;:26;;;;;;;;;;;;;;;;;;35001:102:::0;:::o;11707:269::-;11800:4;11817:129;11826:12;:10;:12::i;:::-;11840:7;11849:96;11888:15;11849:96;;;;;;;;;;;;;;;;;:11;:25;11861:12;:10;:12::i;:::-;11849:25;;;;;;;;;;;;;;;:34;11875:7;11849:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11817:8;:129::i;:::-;11964:4;11957:11;;11707:269;;;;:::o;29817:37::-;;;;;;;;;;;;;:::o;30632:30::-;;;;:::o;9030:175::-;9116:4;9133:42;9143:12;:10;:12::i;:::-;9157:9;9168:6;9133:9;:42::i;:::-;9193:4;9186:11;;9030:175;;;;:::o;38182:208::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38319:15:::1;;;;;;;;;;;38276:59;;38299:18;38276:59;;;;;;;;;;;;38364:18;38346:15;;:36;;;;;;;;;;;;;;;;;;38182:208:::0;:::o;31221:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29739:33::-;;;;;;;;;;;;;:::o;37395:182::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37511:8:::1;37480:19;:28;37500:7;37480:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37551:7;37535:34;;;37560:8;37535:34;;;;;;:::i;:::-;;;;;;;;37395:182:::0;;:::o;35813:215::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35935:4:::1;35929;35925:1;35909:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35908:31;;;;:::i;:::-;35898:6;:41;;35890:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36013:6;36003;:17;;;;:::i;:::-;35991:9;:29;;;;35813:215:::0;:::o;30209:39::-;;;;;;;;;;;;;:::o;29583:35::-;;;;:::o;35175:386::-;35256:4;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35313:6:::1;35309:1;35293:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35280:9;:39;;35272:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35429:4;35425:1;35409:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35396:9;:37;;35388:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35522:9;35501:18;:30;;;;35549:4;35542:11;;35175:386:::0;;;:::o;30258:27::-;;;;:::o;9269:151::-;9358:7;9385:11;:18;9397:5;9385:18;;;;;;;;;;;;;;;:27;9404:7;9385:27;;;;;;;;;;;;;;;;9378:34;;9269:151;;;;:::o;29625:33::-;;;;:::o;34858:134::-;34918:4;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34957:5:::1;34934:20;;:28;;;;;;;;;;;;;;;;;;34980:4;34973:11;;34858:134:::0;:::o;30329:30::-;;;;:::o;22200:244::-;21475:12;:10;:12::i;:::-;21465:22;;:6;;;;;;;;;;;:22;;;21457:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22309:1:::1;22289:22;;:8;:22;;;;22281:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22399:8;22370:38;;22391:6;;;;;;;;;;;22370:38;;;;;;;;;;;;22428:8;22419:6;;:17;;;;;;;;;;;;;;;;;;22200:244:::0;:::o;30473:31::-;;;;:::o;29665:24::-;;;;:::o;16284:182::-;16342:7;16362:9;16378:1;16374;:5;;;;:::i;:::-;16362:17;;16403:1;16398;:6;;16390:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16457:1;16450:8;;;16284:182;;;;:::o;85:98::-;138:7;165:10;158:17;;85:98;:::o;14903:381::-;15056:1;15039:19;;:5;:19;;;;15031:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15137:1;15118:21;;:7;:21;;;;15110:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15222:6;15192:11;:18;15204:5;15192:18;;;;;;;;;;;;;;;:27;15211:7;15192:27;;;;;;;;;;;;;;;:36;;;;15260:7;15244:32;;15253:5;15244:32;;;15269:6;15244:32;;;;;;:::i;:::-;;;;;;;;14903:381;;;:::o;38753:5511::-;38901:1;38885:18;;:4;:18;;;;38877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38978:1;38964:16;;:2;:16;;;;38956:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39040:10;:14;39051:2;39040:14;;;;;;;;;;;;;;;;;;;;;;;;;39039:15;:36;;;;;39059:10;:16;39070:4;39059:16;;;;;;;;;;;;;;;;;;;;;;;;;39058:17;39039:36;39031:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39154:1;39144:6;:11;39141:92;;;39172:28;39188:4;39194:2;39198:1;39172:15;:28::i;:::-;39215:7;;39141:92;39249:14;;;;;;;;;;;39246:1811;;;39309:7;:5;:7::i;:::-;39301:15;;:4;:15;;;;:49;;;;;39343:7;:5;:7::i;:::-;39337:13;;:2;:13;;;;39301:49;:86;;;;;39385:1;39371:16;;:2;:16;;;;39301:86;:128;;;;;39422:6;39408:21;;:2;:21;;;;39301:128;:158;;;;;39451:8;;;;;;;;;;;39450:9;39301:158;39279:1767;;;39497:13;;;;;;;;;;;39493:148;;39542:19;:25;39562:4;39542:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39571:19;:23;39591:2;39571:23;;;;;;;;;;;;;;;;;;;;;;;;;39542:52;39534:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39493:148;39800:20;;;;;;;;;;;39796:423;;;39854:7;:5;:7::i;:::-;39848:13;;:2;:13;;;;:47;;;;;39879:15;39865:30;;:2;:30;;;;39848:47;:79;;;;;39913:13;39899:28;;:2;:28;;;;39848:79;39844:356;;;40005:12;39963:28;:39;39992:9;39963:39;;;;;;;;;;;;;;;;:54;39955:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40164:12;40122:28;:39;40151:9;40122:39;;;;;;;;;;;;;;;:54;;;;39844:356;39796:423;40272:25;:31;40298:4;40272:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40308:31;:35;40340:2;40308:35;;;;;;;;;;;;;;;;;;;;;;;;;40307:36;40272:71;40268:763;;;40390:20;;40380:6;:30;;40372:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40529:9;;40512:13;40522:2;40512:9;:13::i;:::-;40503:6;:22;;;;:::i;:::-;:35;;40495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40268:763;;;40641:25;:29;40667:2;40641:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40675:31;:37;40707:4;40675:37;;;;;;;;;;;;;;;;;;;;;;;;;40674:38;40641:71;40637:394;;;40759:20;;40749:6;:30;;40741:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40637:394;;;40885:31;:35;40917:2;40885:35;;;;;;;;;;;;;;;;;;;;;;;;;40881:150;;40978:9;;40961:13;40971:2;40961:9;:13::i;:::-;40952:6;:22;;;;:::i;:::-;:35;;40944:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40881:150;40637:394;40268:763;39279:1767;39246:1811;41131:1;41118:10;;:14;;;;:::i;:::-;41101:12;:32;;:73;;;;;41161:13;41155:19;;:2;:19;;;;41101:73;:152;;;;;41210:42;41196:57;;:2;:57;;;;41101:152;41097:221;;;41302:4;41285:10;:14;41296:2;41285:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41097:221;41360:10;41381:13;41373:21;;:4;:21;;;41360:34;;41410:5;41409:6;:28;;;;;41419:18;;;;;;;;;;;41409:28;41405:1018;;;41492:1;41458:24;:30;41483:4;41458:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41562:15;41549:8;41515:24;:30;41540:4;41515:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;41458:120;41454:560;;;41619:21;;41600:16;:40;;;;41678:21;;41659:16;:40;;;;41717:15;;41704:10;:28;;;;41805:10;;41786:16;;41767;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41751:13;:64;;;;41454:560;;;41875:1;41856:16;:20;;;;41914:1;41895:16;:20;;;;41988:10;;41969:16;;41950;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41934:13;:64;;;;41454:560;41405:1018;;;42082:1;42050:24;:28;42075:2;42050:28;;;;;;;;;;;;;;;;:33;42046:120;;;42135:15;42104:24;:28;42129:2;42104:28;;;;;;;;;;;;;;;:46;;;;42046:120;42188:18;;;;;;;;;;;42183:229;;42246:1;42227:16;:20;;;;42285:1;42266:16;:20;;;;42312:1;42299:10;:14;;;;42386:10;;42367:16;;42348;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;42332:13;:64;;;;42183:229;41405:1018;42436:28;42467:24;42485:4;42467:9;:24::i;:::-;42436:55;;42505:12;42544:18;;42520:20;:42;;42505:57;;42594:7;:35;;;;;42618:11;;;;;;;;;;;42594:35;:61;;;;;42647:8;;;;;;;;;;;42646:9;42594:61;:110;;;;;42673:25;:31;42699:4;42673:31;;;;;;;;;;;;;;;;;;;;;;;;;42672:32;42594:110;:153;;;;;42722:19;:25;42742:4;42722:25;;;;;;;;;;;;;;;;;;;;;;;;;42721:26;42594:153;:194;;;;;42765:19;:23;42785:2;42765:23;;;;;;;;;;;;;;;;;;;;;;;;;42764:24;42594:194;42576:328;;;42826:4;42815:8;;:15;;;;;;;;;;;;;;;;;;42848:10;:8;:10::i;:::-;42887:5;42876:8;;:16;;;;;;;;;;;;;;;;;;42576:328;42917:12;42933:8;;;;;;;;;;;42932:9;42917:24;;43043:19;:25;43063:4;43043:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43072:19;:23;43092:2;43072:23;;;;;;;;;;;;;;;;;;;;;;;;;43043:52;43040:99;;;43122:5;43112:15;;43040:99;43152:12;43256:7;43253:957;;;43307:25;:29;43333:2;43307:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43356:1;43340:13;;:17;43307:50;43303:754;;;43384:34;43414:3;43384:25;43395:13;;43384:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43377:41;;43485:13;;43466:16;;43459:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43437:18;;:61;;;;;;;:::i;:::-;;;;;;;;43553:13;;43540:10;;43533:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;43517:12;;:49;;;;;;;:::i;:::-;;;;;;;;43633:13;;43614:16;;43607:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43585:18;;:61;;;;;;;:::i;:::-;;;;;;;;43303:754;;;43707:25;:31;43733:4;43707:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43757:1;43742:12;;:16;43707:51;43704:353;;;43786:33;43815:3;43786:24;43797:12;;43786:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43779:40;;43885:12;;43867:15;;43860:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43838:18;;:59;;;;;;;:::i;:::-;;;;;;;;43951:12;;43939:9;;43932:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43916:12;;:47;;;;;;;:::i;:::-;;;;;;;;44029:12;;44011:15;;44004:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43982:18;;:59;;;;;;;:::i;:::-;;;;;;;;43704:353;43303:754;44084:1;44077:4;:8;44074:93;;;44109:42;44125:4;44139;44146;44109:15;:42::i;:::-;44074:93;44194:4;44184:14;;;;;:::i;:::-;;;43253:957;44223:33;44239:4;44245:2;44249:6;44223:15;:33::i;:::-;38866:5398;;;;;38753:5511;;;;:::o;17190:193::-;17276:7;17309:1;17304;:6;;17312:12;17296:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17336:9;17352:1;17348;:5;;;;:::i;:::-;17336:17;;17374:1;17367:8;;;17190:193;;;;;:::o;37984:189::-;38101:5;38067:25;:31;38093:4;38067:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38159:5;38125:40;;38153:4;38125:40;;;;;;;;;;;;37984:189;;:::o;12467:575::-;12625:1;12607:20;;:6;:20;;;;12599:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12709:1;12688:23;;:9;:23;;;;12680:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12765:47;12786:6;12794:9;12805:6;12765:20;:47::i;:::-;12846:71;12868:6;12846:71;;;;;;;;;;;;;;;;;:9;:17;12856:6;12846:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12826:9;:17;12836:6;12826:17;;;;;;;;;;;;;;;:91;;;;12951:32;12976:6;12951:9;:20;12961:9;12951:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12928:9;:20;12938:9;12928:20;;;;;;;;;;;;;;;:55;;;;13016:9;12999:35;;13008:6;12999:35;;;13027:6;12999:35;;;;;;:::i;:::-;;;;;;;;12467:575;;;:::o;45408:1568::-;45447:23;45473:24;45491:4;45473:9;:24::i;:::-;45447:50;;45508:25;45578:12;;45557:18;;45536;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45508:82;;45601:12;45649:1;45630:15;:20;:46;;;;45675:1;45654:17;:22;45630:46;45627:60;;;45679:7;;;;;45627:60;45742:2;45721:18;;:23;;;;:::i;:::-;45703:15;:41;45700:111;;;45797:2;45776:18;;:23;;;;:::i;:::-;45758:41;;45700:111;45873:23;45958:1;45938:17;45917:18;;45899:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45873:86;;45970:26;45999:36;46019:15;45999;:19;;:36;;;;:::i;:::-;45970:65;;46049:25;46077:21;46049:49;;46112:36;46129:18;46112:16;:36::i;:::-;46163:18;46184:44;46210:17;46184:21;:25;;:44;;;;:::i;:::-;46163:65;;46242:23;46268:57;46307:17;46268:34;46283:18;;46268:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;46242:83;;46336:17;46356:51;46389:17;46356:28;46371:12;;46356:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;46336:71;;46418:23;46475:9;46457:15;46444:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;46418:66;;46522:1;46501:18;:22;;;;46555:1;46534:18;:22;;;;46582:1;46567:12;:16;;;;46618:9;;;;;;;;;;;46610:23;;46641:9;46610:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46597:58;;;;;46690:1;46672:15;:19;:42;;;;;46713:1;46695:15;:19;46672:42;46669:210;;;46730:46;46743:15;46760;46730:12;:46::i;:::-;46796:71;46811:18;46831:15;46848:18;;46796:71;;;;;;;;:::i;:::-;;;;;;;;46669:210;46913:15;;;;;;;;;;;46905:29;;46942:21;46905:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46892:76;;;;;45436:1540;;;;;;;;;;45408:1568;:::o;17643:473::-;17701:7;17951:1;17946;:6;17942:47;;;17976:1;17969:8;;;;17942:47;18002:9;18018:1;18014;:5;;;;:::i;:::-;18002:17;;18047:1;18042;18038;:5;;;;:::i;:::-;:10;18030:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18107:1;18100:8;;;17643:473;;;;;:::o;18593:132::-;18651:7;18678:39;18682:1;18685;18678:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18671:46;;18593:132;;;;:::o;15888:125::-;;;;:::o;16750:136::-;16808:7;16835:43;16839:1;16842;16835:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16828:50;;16750:136;;;;:::o;44273:597::-;44402:21;44440:1;44426:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44402:40;;44471:4;44453;44458:1;44453:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44497:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44487:4;44492:1;44487:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44533:62;44550:4;44565:15;44583:11;44533:8;:62::i;:::-;44635:15;:66;;;44716:11;44742:1;44786:4;44813;44833:15;44635:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44328:542;44273:597;:::o;44879:520::-;45027:62;45044:4;45059:15;45077:11;45027:8;:62::i;:::-;45133:15;:31;;;45172:9;45205:4;45225:11;45251:1;45294;45345:4;45365:15;45133:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44879:520;;:::o;19222:279::-;19308:7;19340:1;19336;:5;19343:12;19328:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19367:9;19383:1;19379;:5;;;;:::i;:::-;19367:17;;19492:1;19485:8;;;19222: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:1057::-;5598:6;5606;5614;5622;5630;5638;5687:3;5675:9;5666:7;5662:23;5658:33;5655:120;;;5694:79;;:::i;:::-;5655:120;5814:1;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5785:117;5941:2;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5912:118;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;6197:2;6223:53;6268:7;6259:6;6248:9;6244:22;6223:53;:::i;:::-;6213:63;;6168:118;6325:3;6352:53;6397:7;6388:6;6377:9;6373:22;6352:53;:::i;:::-;6342:63;;6296:119;6454:3;6481:53;6526:7;6517:6;6506:9;6502:22;6481:53;:::i;:::-;6471:63;;6425:119;5494:1057;;;;;;;;:::o;6557:619::-;6634:6;6642;6650;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:53;6895:7;6886:6;6875:9;6871:22;6850:53;:::i;:::-;6840:63;;6796:117;6952:2;6978:53;7023:7;7014:6;7003:9;6999:22;6978:53;:::i;:::-;6968:63;;6923:118;7080:2;7106:53;7151:7;7142:6;7131:9;7127:22;7106:53;:::i;:::-;7096:63;;7051:118;6557:619;;;;;:::o;7182:116::-;7252:21;7267:5;7252:21;:::i;:::-;7245:5;7242:32;7232:60;;7288:1;7285;7278:12;7232:60;7182:116;:::o;7304:133::-;7347:5;7385:6;7372:20;7363:29;;7401:30;7425:5;7401:30;:::i;:::-;7304:133;;;;:::o;7443:468::-;7508:6;7516;7565:2;7553:9;7544:7;7540:23;7536:32;7533:119;;;7571:79;;:::i;:::-;7533:119;7691:1;7716:53;7761:7;7752:6;7741:9;7737:22;7716:53;:::i;:::-;7706:63;;7662:117;7818:2;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7789:115;7443:468;;;;;:::o;7917:86::-;7952:7;7992:4;7985:5;7981:16;7970:27;;7917:86;;;:::o;8009:112::-;8092:22;8108:5;8092:22;:::i;:::-;8087:3;8080:35;8009:112;;:::o;8127:214::-;8216:4;8254:2;8243:9;8239:18;8231:26;;8267:67;8331:1;8320:9;8316:17;8307:6;8267:67;:::i;:::-;8127:214;;;;:::o;8347:118::-;8434:24;8452:5;8434:24;:::i;:::-;8429:3;8422:37;8347:118;;:::o;8471:222::-;8564:4;8602:2;8591:9;8587:18;8579:26;;8615:71;8683:1;8672:9;8668:17;8659:6;8615:71;:::i;:::-;8471:222;;;;:::o;8699:619::-;8776:6;8784;8792;8841:2;8829:9;8820:7;8816:23;8812:32;8809:119;;;8847:79;;:::i;:::-;8809:119;8967:1;8992:53;9037:7;9028:6;9017:9;9013:22;8992:53;:::i;:::-;8982:63;;8938:117;9094:2;9120:53;9165:7;9156:6;9145:9;9141:22;9120:53;:::i;:::-;9110:63;;9065:118;9222:2;9248:53;9293:7;9284:6;9273:9;9269:22;9248:53;:::i;:::-;9238:63;;9193:118;8699:619;;;;;:::o;9324:323::-;9380:6;9429:2;9417:9;9408:7;9404:23;9400:32;9397:119;;;9435:79;;:::i;:::-;9397:119;9555:1;9580:50;9622:7;9613:6;9602:9;9598:22;9580:50;:::i;:::-;9570:60;;9526:114;9324:323;;;;:::o;9653:474::-;9721:6;9729;9778:2;9766:9;9757:7;9753:23;9749:32;9746:119;;;9784:79;;:::i;:::-;9746:119;9904:1;9929:53;9974:7;9965:6;9954:9;9950:22;9929:53;:::i;:::-;9919:63;;9875:117;10031:2;10057:53;10102:7;10093:6;10082:9;10078:22;10057:53;:::i;:::-;10047:63;;10002:118;9653:474;;;;;:::o;10133:180::-;10181:77;10178:1;10171:88;10278:4;10275:1;10268:15;10302:4;10299:1;10292:15;10319:320;10363:6;10400:1;10394:4;10390:12;10380:22;;10447:1;10441:4;10437:12;10468:18;10458:81;;10524:4;10516:6;10512:17;10502:27;;10458:81;10586:2;10578:6;10575:14;10555:18;10552:38;10549:84;;;10605:18;;:::i;:::-;10549:84;10370:269;10319:320;;;:::o;10645:182::-;10785:34;10781:1;10773:6;10769:14;10762:58;10645:182;:::o;10833:366::-;10975:3;10996:67;11060:2;11055:3;10996:67;:::i;:::-;10989:74;;11072:93;11161:3;11072:93;:::i;:::-;11190:2;11185:3;11181:12;11174:19;;10833:366;;;:::o;11205:419::-;11371:4;11409:2;11398:9;11394:18;11386:26;;11458:9;11452:4;11448:20;11444:1;11433:9;11429:17;11422:47;11486:131;11612:4;11486:131;:::i;:::-;11478:139;;11205:419;;;:::o;11630:180::-;11678:77;11675:1;11668:88;11775:4;11772:1;11765:15;11799:4;11796:1;11789:15;11816:348;11856:7;11879:20;11897:1;11879:20;:::i;:::-;11874:25;;11913:20;11931:1;11913:20;:::i;:::-;11908:25;;12101:1;12033:66;12029:74;12026:1;12023:81;12018:1;12011:9;12004:17;12000:105;11997:131;;;12108:18;;:::i;:::-;11997:131;12156:1;12153;12149:9;12138:20;;11816:348;;;;:::o;12170:180::-;12218:77;12215:1;12208:88;12315:4;12312:1;12305:15;12339:4;12336:1;12329:15;12356:185;12396:1;12413:20;12431:1;12413:20;:::i;:::-;12408:25;;12447:20;12465:1;12447:20;:::i;:::-;12442:25;;12486:1;12476:35;;12491:18;;:::i;:::-;12476:35;12533:1;12530;12526:9;12521:14;;12356:185;;;;:::o;12547:234::-;12687:34;12683:1;12675:6;12671:14;12664:58;12756:17;12751:2;12743:6;12739:15;12732:42;12547:234;:::o;12787:366::-;12929:3;12950:67;13014:2;13009:3;12950:67;:::i;:::-;12943:74;;13026:93;13115:3;13026:93;:::i;:::-;13144:2;13139:3;13135:12;13128:19;;12787:366;;;:::o;13159:419::-;13325:4;13363:2;13352:9;13348:18;13340:26;;13412:9;13406:4;13402:20;13398:1;13387:9;13383:17;13376:47;13440:131;13566:4;13440:131;:::i;:::-;13432:139;;13159:419;;;:::o;13584:305::-;13624:3;13643:20;13661:1;13643:20;:::i;:::-;13638:25;;13677:20;13695:1;13677:20;:::i;:::-;13672:25;;13831:1;13763:66;13759:74;13756:1;13753:81;13750:107;;;13837:18;;:::i;:::-;13750:107;13881:1;13878;13874:9;13867:16;;13584:305;;;;:::o;13895:179::-;14035:31;14031:1;14023:6;14019:14;14012:55;13895:179;:::o;14080:366::-;14222:3;14243:67;14307:2;14302:3;14243:67;:::i;:::-;14236:74;;14319:93;14408:3;14319:93;:::i;:::-;14437:2;14432:3;14428:12;14421:19;;14080:366;;;:::o;14452:419::-;14618:4;14656:2;14645:9;14641:18;14633:26;;14705:9;14699:4;14695:20;14691:1;14680:9;14676:17;14669:47;14733:131;14859:4;14733:131;:::i;:::-;14725:139;;14452:419;;;:::o;14877:179::-;15017:31;15013:1;15005:6;15001:14;14994:55;14877:179;:::o;15062:366::-;15204:3;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15301:93;15390:3;15301:93;:::i;:::-;15419:2;15414:3;15410:12;15403:19;;15062:366;;;:::o;15434:419::-;15600:4;15638:2;15627:9;15623:18;15615:26;;15687:9;15681:4;15677:20;15673:1;15662:9;15658:17;15651:47;15715:131;15841:4;15715:131;:::i;:::-;15707:139;;15434:419;;;:::o;15859:244::-;15999:34;15995:1;15987:6;15983:14;15976:58;16068:27;16063:2;16055:6;16051:15;16044:52;15859:244;:::o;16109:366::-;16251:3;16272:67;16336:2;16331:3;16272:67;:::i;:::-;16265:74;;16348:93;16437:3;16348:93;:::i;:::-;16466:2;16461:3;16457:12;16450:19;;16109:366;;;:::o;16481:419::-;16647:4;16685:2;16674:9;16670:18;16662:26;;16734:9;16728:4;16724:20;16720:1;16709:9;16705:17;16698:47;16762:131;16888:4;16762:131;:::i;:::-;16754:139;;16481:419;;;:::o;16906:223::-;17046:34;17042:1;17034:6;17030:14;17023:58;17115:6;17110:2;17102:6;17098:15;17091:31;16906:223;:::o;17135:366::-;17277:3;17298:67;17362:2;17357:3;17298:67;:::i;:::-;17291:74;;17374:93;17463:3;17374:93;:::i;:::-;17492:2;17487:3;17483:12;17476:19;;17135:366;;;:::o;17507:419::-;17673:4;17711:2;17700:9;17696:18;17688:26;;17760:9;17754:4;17750:20;17746:1;17735:9;17731:17;17724:47;17788:131;17914:4;17788:131;:::i;:::-;17780:139;;17507:419;;;:::o;17932:240::-;18072:34;18068:1;18060:6;18056:14;18049:58;18141:23;18136:2;18128:6;18124:15;18117:48;17932:240;:::o;18178:366::-;18320:3;18341:67;18405:2;18400:3;18341:67;:::i;:::-;18334:74;;18417:93;18506:3;18417:93;:::i;:::-;18535:2;18530:3;18526:12;18519:19;;18178:366;;;:::o;18550:419::-;18716:4;18754:2;18743:9;18739:18;18731:26;;18803:9;18797:4;18793:20;18789:1;18778:9;18774:17;18767:47;18831:131;18957:4;18831:131;:::i;:::-;18823:139;;18550:419;;;:::o;18975:239::-;19115:34;19111:1;19103:6;19099:14;19092:58;19184:22;19179:2;19171:6;19167:15;19160:47;18975:239;:::o;19220:366::-;19362:3;19383:67;19447:2;19442:3;19383:67;:::i;:::-;19376:74;;19459:93;19548:3;19459:93;:::i;:::-;19577:2;19572:3;19568:12;19561:19;;19220:366;;;:::o;19592:419::-;19758:4;19796:2;19785:9;19781:18;19773:26;;19845:9;19839:4;19835:20;19831:1;19820:9;19816:17;19809:47;19873:131;19999:4;19873:131;:::i;:::-;19865:139;;19592:419;;;:::o;20017:225::-;20157:34;20153:1;20145:6;20141:14;20134:58;20226:8;20221:2;20213:6;20209:15;20202:33;20017:225;:::o;20248:366::-;20390:3;20411:67;20475:2;20470:3;20411:67;:::i;:::-;20404:74;;20487:93;20576:3;20487:93;:::i;:::-;20605:2;20600:3;20596:12;20589:19;;20248:366;;;:::o;20620:419::-;20786:4;20824:2;20813:9;20809:18;20801:26;;20873:9;20867:4;20863:20;20859:1;20848:9;20844:17;20837:47;20901:131;21027:4;20901:131;:::i;:::-;20893:139;;20620:419;;;:::o;21045:177::-;21185:29;21181:1;21173:6;21169:14;21162:53;21045:177;:::o;21228:366::-;21370:3;21391:67;21455:2;21450:3;21391:67;:::i;:::-;21384:74;;21467:93;21556:3;21467:93;:::i;:::-;21585:2;21580:3;21576:12;21569:19;;21228:366;;;:::o;21600:419::-;21766:4;21804:2;21793:9;21789:18;21781:26;;21853:9;21847:4;21843:20;21839:1;21828:9;21824:17;21817:47;21881:131;22007:4;21881:131;:::i;:::-;21873:139;;21600:419;;;:::o;22025:223::-;22165:34;22161:1;22153:6;22149:14;22142:58;22234:6;22229:2;22221:6;22217:15;22210:31;22025:223;:::o;22254:366::-;22396:3;22417:67;22481:2;22476:3;22417:67;:::i;:::-;22410:74;;22493:93;22582:3;22493:93;:::i;:::-;22611:2;22606:3;22602:12;22595:19;;22254:366;;;:::o;22626:419::-;22792:4;22830:2;22819:9;22815:18;22807:26;;22879:9;22873:4;22869:20;22865:1;22854:9;22850:17;22843:47;22907:131;23033:4;22907:131;:::i;:::-;22899:139;;22626:419;;;:::o;23051:221::-;23191:34;23187:1;23179:6;23175:14;23168:58;23260:4;23255:2;23247:6;23243:15;23236:29;23051:221;:::o;23278:366::-;23420:3;23441:67;23505:2;23500:3;23441:67;:::i;:::-;23434:74;;23517:93;23606:3;23517:93;:::i;:::-;23635:2;23630:3;23626:12;23619:19;;23278:366;;;:::o;23650:419::-;23816:4;23854:2;23843:9;23839:18;23831:26;;23903:9;23897:4;23893:20;23889:1;23878:9;23874:17;23867:47;23931:131;24057:4;23931:131;:::i;:::-;23923:139;;23650:419;;;:::o;24075:224::-;24215:34;24211:1;24203:6;24199:14;24192:58;24284:7;24279:2;24271:6;24267:15;24260:32;24075:224;:::o;24305:366::-;24447:3;24468:67;24532:2;24527:3;24468:67;:::i;:::-;24461:74;;24544:93;24633:3;24544:93;:::i;:::-;24662:2;24657:3;24653:12;24646:19;;24305:366;;;:::o;24677:419::-;24843:4;24881:2;24870:9;24866:18;24858:26;;24930:9;24924:4;24920:20;24916:1;24905:9;24901:17;24894:47;24958:131;25084:4;24958:131;:::i;:::-;24950:139;;24677:419;;;:::o;25102:222::-;25242:34;25238:1;25230:6;25226:14;25219:58;25311:5;25306:2;25298:6;25294:15;25287:30;25102:222;:::o;25330:366::-;25472:3;25493:67;25557:2;25552:3;25493:67;:::i;:::-;25486:74;;25569:93;25658:3;25569:93;:::i;:::-;25687:2;25682:3;25678:12;25671:19;;25330:366;;;:::o;25702:419::-;25868:4;25906:2;25895:9;25891:18;25883:26;;25955:9;25949:4;25945:20;25941:1;25930:9;25926:17;25919:47;25983:131;26109:4;25983:131;:::i;:::-;25975:139;;25702:419;;;:::o;26127:236::-;26267:34;26263:1;26255:6;26251:14;26244:58;26336:19;26331:2;26323:6;26319:15;26312:44;26127:236;:::o;26369:366::-;26511:3;26532:67;26596:2;26591:3;26532:67;:::i;:::-;26525:74;;26608:93;26697:3;26608:93;:::i;:::-;26726:2;26721:3;26717:12;26710:19;;26369:366;;;:::o;26741:419::-;26907:4;26945:2;26934:9;26930:18;26922:26;;26994:9;26988:4;26984:20;26980:1;26969:9;26965:17;26958:47;27022:131;27148:4;27022:131;:::i;:::-;27014:139;;26741:419;;;:::o;27166:172::-;27306:24;27302:1;27294:6;27290:14;27283:48;27166:172;:::o;27344:366::-;27486:3;27507:67;27571:2;27566:3;27507:67;:::i;:::-;27500:74;;27583:93;27672:3;27583:93;:::i;:::-;27701:2;27696:3;27692:12;27685:19;;27344:366;;;:::o;27716:419::-;27882:4;27920:2;27909:9;27905:18;27897:26;;27969:9;27963:4;27959:20;27955:1;27944:9;27940:17;27933:47;27997:131;28123:4;27997:131;:::i;:::-;27989:139;;27716:419;;;:::o;28141:297::-;28281:34;28277:1;28269:6;28265:14;28258:58;28350:34;28345:2;28337:6;28333:15;28326:59;28419:11;28414:2;28406:6;28402:15;28395:36;28141:297;:::o;28444:366::-;28586:3;28607:67;28671:2;28666:3;28607:67;:::i;:::-;28600:74;;28683:93;28772:3;28683:93;:::i;:::-;28801:2;28796:3;28792:12;28785:19;;28444:366;;;:::o;28816:419::-;28982:4;29020:2;29009:9;29005:18;28997:26;;29069:9;29063:4;29059:20;29055:1;29044:9;29040:17;29033:47;29097:131;29223:4;29097:131;:::i;:::-;29089:139;;28816:419;;;:::o;29241:240::-;29381:34;29377:1;29369:6;29365:14;29358:58;29450:23;29445:2;29437:6;29433:15;29426:48;29241:240;:::o;29487:366::-;29629:3;29650:67;29714:2;29709:3;29650:67;:::i;:::-;29643:74;;29726:93;29815:3;29726:93;:::i;:::-;29844:2;29839:3;29835:12;29828:19;;29487:366;;;:::o;29859:419::-;30025:4;30063:2;30052:9;30048:18;30040:26;;30112:9;30106:4;30102:20;30098:1;30087:9;30083:17;30076:47;30140:131;30266:4;30140:131;:::i;:::-;30132:139;;29859:419;;;:::o;30284:169::-;30424:21;30420:1;30412:6;30408:14;30401:45;30284:169;:::o;30459:366::-;30601:3;30622:67;30686:2;30681:3;30622:67;:::i;:::-;30615:74;;30698:93;30787:3;30698:93;:::i;:::-;30816:2;30811:3;30807:12;30800:19;;30459:366;;;:::o;30831:419::-;30997:4;31035:2;31024:9;31020:18;31012:26;;31084:9;31078:4;31074:20;31070:1;31059:9;31055:17;31048:47;31112:131;31238:4;31112:131;:::i;:::-;31104:139;;30831:419;;;:::o;31256:241::-;31396:34;31392:1;31384:6;31380:14;31373:58;31465:24;31460:2;31452:6;31448:15;31441:49;31256:241;:::o;31503:366::-;31645:3;31666:67;31730:2;31725:3;31666:67;:::i;:::-;31659:74;;31742:93;31831:3;31742:93;:::i;:::-;31860:2;31855:3;31851:12;31844:19;;31503:366;;;:::o;31875:419::-;32041:4;32079:2;32068:9;32064:18;32056:26;;32128:9;32122:4;32118:20;32114:1;32103:9;32099:17;32092:47;32156:131;32282:4;32156:131;:::i;:::-;32148:139;;31875:419;;;:::o;32300:191::-;32340:4;32360:20;32378:1;32360:20;:::i;:::-;32355:25;;32394:20;32412:1;32394:20;:::i;:::-;32389:25;;32433:1;32430;32427:8;32424:34;;;32438:18;;:::i;:::-;32424:34;32483:1;32480;32476:9;32468:17;;32300:191;;;;:::o;32497:147::-;32598:11;32635:3;32620:18;;32497:147;;;;:::o;32650:114::-;;:::o;32770:398::-;32929:3;32950:83;33031:1;33026:3;32950:83;:::i;:::-;32943:90;;33042:93;33131:3;33042:93;:::i;:::-;33160:1;33155:3;33151:11;33144:18;;32770:398;;;:::o;33174:379::-;33358:3;33380:147;33523:3;33380:147;:::i;:::-;33373:154;;33544:3;33537:10;;33174:379;;;:::o;33559:442::-;33708:4;33746:2;33735:9;33731:18;33723:26;;33759:71;33827:1;33816:9;33812:17;33803:6;33759:71;:::i;:::-;33840:72;33908:2;33897:9;33893:18;33884:6;33840:72;:::i;:::-;33922;33990:2;33979:9;33975:18;33966:6;33922:72;:::i;:::-;33559:442;;;;;;:::o;34007:220::-;34147:34;34143:1;34135:6;34131:14;34124:58;34216:3;34211:2;34203:6;34199:15;34192:28;34007:220;:::o;34233:366::-;34375:3;34396:67;34460:2;34455:3;34396:67;:::i;:::-;34389:74;;34472:93;34561:3;34472:93;:::i;:::-;34590:2;34585:3;34581:12;34574:19;;34233:366;;;:::o;34605:419::-;34771:4;34809:2;34798:9;34794:18;34786:26;;34858:9;34852:4;34848:20;34844:1;34833:9;34829:17;34822:47;34886:131;35012:4;34886:131;:::i;:::-;34878:139;;34605:419;;;:::o;35030:180::-;35078:77;35075:1;35068:88;35175:4;35172:1;35165:15;35199:4;35196:1;35189:15;35216:180;35264:77;35261:1;35254:88;35361:4;35358:1;35351:15;35385:4;35382:1;35375:15;35402:143;35459:5;35490:6;35484:13;35475:22;;35506:33;35533:5;35506:33;:::i;:::-;35402:143;;;;:::o;35551:351::-;35621:6;35670:2;35658:9;35649:7;35645:23;35641:32;35638:119;;;35676:79;;:::i;:::-;35638:119;35796:1;35821:64;35877:7;35868:6;35857:9;35853:22;35821:64;:::i;:::-;35811:74;;35767:128;35551:351;;;;:::o;35908:85::-;35953:7;35982:5;35971:16;;35908:85;;;:::o;35999:158::-;36057:9;36090:61;36108:42;36117:32;36143:5;36117:32;:::i;:::-;36108:42;:::i;:::-;36090:61;:::i;:::-;36077:74;;35999:158;;;:::o;36163:147::-;36258:45;36297:5;36258:45;:::i;:::-;36253:3;36246:58;36163:147;;:::o;36316:114::-;36383:6;36417:5;36411:12;36401:22;;36316:114;;;:::o;36436:184::-;36535:11;36569:6;36564:3;36557:19;36609:4;36604:3;36600:14;36585:29;;36436:184;;;;:::o;36626:132::-;36693:4;36716:3;36708:11;;36746:4;36741:3;36737:14;36729:22;;36626:132;;;:::o;36764:108::-;36841:24;36859:5;36841:24;:::i;:::-;36836:3;36829:37;36764:108;;:::o;36878:179::-;36947:10;36968:46;37010:3;37002:6;36968:46;:::i;:::-;37046:4;37041:3;37037:14;37023:28;;36878:179;;;;:::o;37063:113::-;37133:4;37165;37160:3;37156:14;37148:22;;37063:113;;;:::o;37212:732::-;37331:3;37360:54;37408:5;37360:54;:::i;:::-;37430:86;37509:6;37504:3;37430:86;:::i;:::-;37423:93;;37540:56;37590:5;37540:56;:::i;:::-;37619:7;37650:1;37635:284;37660:6;37657:1;37654:13;37635:284;;;37736:6;37730:13;37763:63;37822:3;37807:13;37763:63;:::i;:::-;37756:70;;37849:60;37902:6;37849:60;:::i;:::-;37839:70;;37695:224;37682:1;37679;37675:9;37670:14;;37635:284;;;37639:14;37935:3;37928:10;;37336:608;;;37212:732;;;;:::o;37950:831::-;38213:4;38251:3;38240:9;38236:19;38228:27;;38265:71;38333:1;38322:9;38318:17;38309:6;38265:71;:::i;:::-;38346:80;38422:2;38411:9;38407:18;38398:6;38346:80;:::i;:::-;38473:9;38467:4;38463:20;38458:2;38447:9;38443:18;38436:48;38501:108;38604:4;38595:6;38501:108;:::i;:::-;38493:116;;38619:72;38687:2;38676:9;38672:18;38663:6;38619:72;:::i;:::-;38701:73;38769:3;38758:9;38754:19;38745:6;38701:73;:::i;:::-;37950:831;;;;;;;;:::o;38787:807::-;39036:4;39074:3;39063:9;39059:19;39051:27;;39088:71;39156:1;39145:9;39141:17;39132:6;39088:71;:::i;:::-;39169:72;39237:2;39226:9;39222:18;39213:6;39169:72;:::i;:::-;39251:80;39327:2;39316:9;39312:18;39303:6;39251:80;:::i;:::-;39341;39417:2;39406:9;39402:18;39393:6;39341:80;:::i;:::-;39431:73;39499:3;39488:9;39484:19;39475:6;39431:73;:::i;:::-;39514;39582:3;39571:9;39567:19;39558:6;39514:73;:::i;:::-;38787:807;;;;;;;;;:::o;39600:143::-;39657:5;39688:6;39682:13;39673:22;;39704:33;39731:5;39704:33;:::i;:::-;39600:143;;;;:::o;39749:663::-;39837:6;39845;39853;39902:2;39890:9;39881:7;39877:23;39873:32;39870:119;;;39908:79;;:::i;:::-;39870:119;40028:1;40053:64;40109:7;40100:6;40089:9;40085:22;40053:64;:::i;:::-;40043:74;;39999:128;40166:2;40192:64;40248:7;40239:6;40228:9;40224:22;40192:64;:::i;:::-;40182:74;;40137:129;40305:2;40331:64;40387:7;40378:6;40367:9;40363:22;40331:64;:::i;:::-;40321:74;;40276:129;39749:663;;;;;:::o

Swarm Source

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