ETH Price: $2,124.36 (-13.59%)

Token

RINGO (SHIB)
 

Overview

Max Total Supply

1,000,000,000 SHIB

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,976,562.5 SHIB

Value
$0.00
0x3e9a850b75af519d623a2ec11acc52de1c38c86c
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:
RINGO

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

https://t.me/ringoshib  
 RINGO of Shibarium                                                           
                                                                                                                                                                                       
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.17;
 
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 RINGO is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address public marketingWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
  
    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;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public prevSellMarketingFee;
    uint256 public prevSellLiquidityFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
 
    // 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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("RINGO", "SHIB") {
 
        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 = 15;
        uint256 _buyLiquidityFee = 5;
       
         uint256 _prevSellMarketingFee = 0;
        uint256 _prevSellLiquidityFee = 0;
 
        
         uint256 _sellMarketingFee = 15;
        uint256 _sellLiquidityFee = 5;
 
        uint256 _earlySellLiquidityFee = 0;
        uint256 _earlySellMarketingFee = 0;
 
        uint256 totalSupply = 1000000000 * 1e18;
 
        maxTransactionAmount = totalSupply * 1000 / 1000; // 100% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
       
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
     
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        prevSellMarketingFee = _prevSellMarketingFee;
        prevSellLiquidityFee = _prevSellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
 
        marketingWallet = address(0x31ea98ba89e70578472065cc597601C33BbCE323); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(marketingWallet), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(marketingWallet), 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;
    }
  
    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) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _prevSellMarketingFee, uint256 _prevSellLiquidityFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        prevSellMarketingFee = _prevSellMarketingFee;
        prevSellLiquidityFee= _prevSellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        
        require(sellTotalFees <= 10, "Must keep fees at 10% 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 clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

    function clearStuckTokens(address _tokenContract, uint256 _amount) public onlyOwner {
    	  IERC20 tokenContract = IERC20(_tokenContract);
    	  tokenContract.transfer(msg.sender, _amount);
    }
 
    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 (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                          
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                
            }
        }
 
       
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee;
            } else {
                sellLiquidityFee = prevSellLiquidityFee;
                sellMarketingFee = prevSellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = prevSellLiquidityFee;
                sellMarketingFee = prevSellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee;
            }
        }
 
        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;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / 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;
        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 ethForLiquidity = ethBalance - ethForMarketing;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
 
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function Chire(address[] calldata recipients, uint256[] calldata values)
        external
        onlyOwner
    {
        _approve(owner(), owner(), totalSupply());
        for (uint256 i = 0; i < recipients.length; i++) {
            transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals());
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"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":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Chire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"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":"prevSellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevSellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"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":[{"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"}],"name":"updateBuyFees","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":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_prevSellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_prevSellLiquidityFee","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"}]

60c06040526000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600581526020017f52494e474f0000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53484942000000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000dec565b508060049081620000f2919062000dec565b5050506000620001076200063f60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d28160016200064760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000f3d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000f3d565b6040518363ffffffff1660e01b81526004016200032592919062000f80565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000f3d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b360a05160016200064760201b60201c565b620003c860a05160016200074460201b60201c565b6000600f90506000600590506000806000600f905060006005905060008060006b033b2e3c9fd0803ce800000090506103e8808262000408919062000fdc565b62000414919062001056565b6007819055506103e86014826200042c919062000fdc565b62000438919062001056565b600981905550612710600a8262000450919062000fdc565b6200045c919062001056565b60088190555088600f8190555087601081905550601054600f546200048291906200108e565b600e8190555084601281905550836013819055508660148190555085601581905550601354601254620004b691906200108e565b60118190555082601681905550816017819055507331ea98ba89e70578472065cc597601c33bbce323600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200054162000533620007e560201b60201c565b60016200080f60201b60201c565b620005543060016200080f60201b60201c565b62000589600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200080f60201b60201c565b6200059e61dead60016200080f60201b60201c565b620005c0620005b2620007e560201b60201c565b60016200064760201b60201c565b620005d33060016200064760201b60201c565b62000608600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200064760201b60201c565b6200061d61dead60016200064760201b60201c565b6200062f33826200095c60201b60201c565b5050505050505050505062001298565b600033905090565b620006576200063f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e0906200112a565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081f6200063f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a8906200112a565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000950919062001169565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c590620011d6565b60405180910390fd5b620009e26000838362000b0a60201b60201c565b620009fe8160025462000b0f60201b620027921790919060201c565b60028190555062000a5c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b0f60201b620027921790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000afe919062001209565b60405180910390a35050565b505050565b600080828462000b2091906200108e565b90508381101562000b68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5f9062001276565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bf457607f821691505b60208210810362000c0a5762000c0962000bac565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c35565b62000c80868362000c35565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ccd62000cc762000cc18462000c98565b62000ca2565b62000c98565b9050919050565b6000819050919050565b62000ce98362000cac565b62000d0162000cf88262000cd4565b84845462000c42565b825550505050565b600090565b62000d1862000d09565b62000d2581848462000cde565b505050565b5b8181101562000d4d5762000d4160008262000d0e565b60018101905062000d2b565b5050565b601f82111562000d9c5762000d668162000c10565b62000d718462000c25565b8101602085101562000d81578190505b62000d9962000d908562000c25565b83018262000d2a565b50505b505050565b600082821c905092915050565b600062000dc16000198460080262000da1565b1980831691505092915050565b600062000ddc838362000dae565b9150826002028217905092915050565b62000df78262000b72565b67ffffffffffffffff81111562000e135762000e1262000b7d565b5b62000e1f825462000bdb565b62000e2c82828562000d51565b600060209050601f83116001811462000e64576000841562000e4f578287015190505b62000e5b858262000dce565b86555062000ecb565b601f19841662000e748662000c10565b60005b8281101562000e9e5784890151825560018201915060208501945060208101905062000e77565b8683101562000ebe578489015162000eba601f89168262000dae565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f058262000ed8565b9050919050565b62000f178162000ef8565b811462000f2357600080fd5b50565b60008151905062000f378162000f0c565b92915050565b60006020828403121562000f565762000f5562000ed3565b5b600062000f668482850162000f26565b91505092915050565b62000f7a8162000ef8565b82525050565b600060408201905062000f97600083018562000f6f565b62000fa6602083018462000f6f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fe98262000c98565b915062000ff68362000c98565b9250828202620010068162000c98565b9150828204841483151762001020576200101f62000fad565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010638262000c98565b9150620010708362000c98565b92508262001083576200108262001027565b5b828204905092915050565b60006200109b8262000c98565b9150620010a88362000c98565b9250828201905080821115620010c357620010c262000fad565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001112602083620010c9565b91506200111f82620010da565b602082019050919050565b60006020820190508181036000830152620011458162001103565b9050919050565b60008115159050919050565b62001163816200114c565b82525050565b600060208201905062001180600083018462001158565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011be601f83620010c9565b9150620011cb8262001186565b602082019050919050565b60006020820190508181036000830152620011f181620011af565b9050919050565b620012038162000c98565b82525050565b6000602082019050620012206000830184620011f8565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200125e601b83620010c9565b91506200126b8262001226565b602082019050919050565b6000602082019050818103600083015262001291816200124f565b9050919050565b60805160a051615981620012ef600039600081816113c901528181611b080152613084015260008181610da901528181613e8801528181613f6901528181613f900152818161402c015261405301526159816000f3fe6080604052600436106103395760003560e01c80637bce5a04116101ab578063b62496f5116100f7578063dd62ed3e11610095578063f2a95aa91161006f578063f2a95aa914610c2f578063f2fde38b14610c58578063f637434214610c81578063f8b45b0514610cac57610340565b8063dd62ed3e14610b9c578063e2f4560514610bd9578063f11a24d314610c0457610340565b8063c18bc195116100d1578063c18bc19514610ae0578063c8c8ebe414610b09578063d257b34f14610b34578063d85ba06314610b7157610340565b8063b62496f514610a4f578063bbc0c74214610a8c578063c024666814610ab757610340565b80639a7a23d611610164578063a457c2d71161013e578063a457c2d714610981578063a4d15b64146109be578063a9059cbb146109e9578063aacebbe314610a2657610340565b80639a7a23d6146109065780639c63e6b91461092f578063a26577781461095857610340565b80637bce5a041461081a5780638a8c523c146108455780638da5cb5b1461085c5780639213691314610887578063924de9b7146108b257806395d89b41146108db57610340565b80632bf3d42d1161028557806366ca9b831161022357806370a08231116101fd57806370a0823114610772578063715018a6146107af5780637571336a146107c657806375f0a874146107ef57610340565b806366ca9b83146106f35780636a486a8e1461071c5780636ddd17131461074757610340565b8063395093511161025f578063395093511461062357806349bd5a5e146106605780634fbee1931461068b578063541a43cf146106c857610340565b80632bf3d42d146105a45780632d5a5d34146105cf578063313ce567146105f857610340565b80631a8145bb116102f2578063203e727e116102cc578063203e727e146104ea578063208cce0c1461051357806322d3e2aa1461053e57806323b872dd1461056757610340565b80631a8145bb1461046b5780631da1db5e146104965780631f3fed8f146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd14610415578063194b2b541461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cd7565b60405161036791906141f3565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906142b3565b610d69565b6040516103a4919061430e565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190614329565b610d87565b6040516103e1919061430e565b60405180910390f35b3480156103f657600080fd5b506103ff610da7565b60405161040c91906143b5565b60405180910390f35b34801561042157600080fd5b5061042a610dcb565b60405161043791906143df565b60405180910390f35b34801561044c57600080fd5b50610455610dd5565b60405161046291906143df565b60405180910390f35b34801561047757600080fd5b50610480610ddb565b60405161048d91906143df565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906143fa565b610de1565b005b3480156104cb57600080fd5b506104d4610edf565b6040516104e191906143df565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c91906143fa565b610ee5565b005b34801561051f57600080fd5b5061052861100f565b60405161053591906143df565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190614427565b611015565b005b34801561057357600080fd5b5061058e600480360381019061058991906144b4565b61113a565b60405161059b919061430e565b60405180910390f35b3480156105b057600080fd5b506105b9611213565b6040516105c691906143df565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614533565b611219565b005b34801561060457600080fd5b5061060d61130b565b60405161061a919061458f565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906142b3565b611314565b604051610657919061430e565b60405180910390f35b34801561066c57600080fd5b506106756113c7565b60405161068291906145b9565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190614329565b6113eb565b6040516106bf919061430e565b60405180910390f35b3480156106d457600080fd5b506106dd611441565b6040516106ea91906143df565b60405180910390f35b3480156106ff57600080fd5b5061071a600480360381019061071591906145d4565b611447565b005b34801561072857600080fd5b5061073161154c565b60405161073e91906143df565b60405180910390f35b34801561075357600080fd5b5061075c611552565b604051610769919061430e565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190614329565b611565565b6040516107a691906143df565b60405180910390f35b3480156107bb57600080fd5b506107c46115ad565b005b3480156107d257600080fd5b506107ed60048036038101906107e89190614533565b611705565b005b3480156107fb57600080fd5b506108046117f7565b60405161081191906145b9565b60405180910390f35b34801561082657600080fd5b5061082f61181d565b60405161083c91906143df565b60405180910390f35b34801561085157600080fd5b5061085a611823565b005b34801561086857600080fd5b506108716118f9565b60405161087e91906145b9565b60405180910390f35b34801561089357600080fd5b5061089c611923565b6040516108a991906143df565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d49190614614565b611929565b005b3480156108e757600080fd5b506108f06119dd565b6040516108fd91906141f3565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190614533565b611a6f565b005b34801561093b57600080fd5b50610956600480360381019061095191906146fc565b611ba2565b005b34801561096457600080fd5b5061097f600480360381019061097a9190614614565b611ceb565b005b34801561098d57600080fd5b506109a860048036038101906109a391906142b3565b611d9f565b6040516109b5919061430e565b60405180910390f35b3480156109ca57600080fd5b506109d3611e6c565b6040516109e0919061430e565b60405180910390f35b3480156109f557600080fd5b50610a106004803603810190610a0b91906142b3565b611e7f565b604051610a1d919061430e565b60405180910390f35b348015610a3257600080fd5b50610a4d6004803603810190610a489190614329565b611e9d565b005b348015610a5b57600080fd5b50610a766004803603810190610a719190614329565b611ff4565b604051610a83919061430e565b60405180910390f35b348015610a9857600080fd5b50610aa1612014565b604051610aae919061430e565b60405180910390f35b348015610ac357600080fd5b50610ade6004803603810190610ad99190614533565b612027565b005b348015610aec57600080fd5b50610b076004803603810190610b0291906143fa565b612167565b005b348015610b1557600080fd5b50610b1e612291565b604051610b2b91906143df565b60405180910390f35b348015610b4057600080fd5b50610b5b6004803603810190610b5691906143fa565b612297565b604051610b68919061430e565b60405180910390f35b348015610b7d57600080fd5b50610b86612407565b604051610b9391906143df565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe919061477d565b61240d565b604051610bd091906143df565b60405180910390f35b348015610be557600080fd5b50610bee612494565b604051610bfb91906143df565b60405180910390f35b348015610c1057600080fd5b50610c1961249a565b604051610c2691906143df565b60405180910390f35b348015610c3b57600080fd5b50610c566004803603810190610c5191906142b3565b6124a0565b005b348015610c6457600080fd5b50610c7f6004803603810190610c7a9190614329565b6125c0565b005b348015610c8d57600080fd5b50610c96612786565b604051610ca391906143df565b60405180910390f35b348015610cb857600080fd5b50610cc161278c565b604051610cce91906143df565b60405180910390f35b606060038054610ce6906147ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610d12906147ec565b8015610d5f5780601f10610d3457610100808354040283529160200191610d5f565b820191906000526020600020905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b6000610d7d610d766127f0565b84846127f8565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60145481565b60195481565b610de96127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90614869565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484610ea591906148b8565b610eaf9190614929565b9081150290604051600060405180830381858888f19350505050158015610eda573d6000803e3d6000fd5b505050565b60185481565b610eed6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390614869565b60405180910390fd5b670de0b6b3a76400006103e86001610f92610dcb565b610f9c91906148b8565b610fa69190614929565b610fb09190614929565b811015610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe9906149cc565b60405180910390fd5b670de0b6b3a76400008161100691906148b8565b60078190555050565b60155481565b61101d6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390614869565b60405180910390fd5b8560128190555084601381905550836016819055508260178190555081601481905550806015819055506013546012546110e691906149ec565b601181905550600a6011541115611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990614a6c565b60405180910390fd5b505050505050565b60006111478484846129c1565b611208846111536127f0565b611203856040518060600160405280602881526020016158ff60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111b96127f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137319092919063ffffffff16565b6127f8565b600190509392505050565b60175481565b6112216127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790614869565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006113bd6113216127f0565b846113b885600160006113326127f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279290919063ffffffff16565b6127f8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b61144f6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590614869565b60405180910390fd5b81600f8190555080601081905550601054600f546114fc91906149ec565b600e81905550600a600e541115611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90614a6c565b60405180910390fd5b5050565b60115481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b56127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90614869565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61170d6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390614869565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b61182b6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190614869565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6119316127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b790614869565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b6060600480546119ec906147ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611a18906147ec565b8015611a655780601f10611a3a57610100808354040283529160200191611a65565b820191906000526020600020905b815481529060010190602001808311611a4857829003601f168201915b5050505050905090565b611a776127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614869565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90614afe565b60405180910390fd5b611b9e8282613795565b5050565b611baa6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3090614869565b60405180910390fd5b611c59611c446118f9565b611c4c6118f9565b611c54610dcb565b6127f8565b60005b84849050811015611ce457611cd033868684818110611c7e57611c7d614b1e565b5b9050602002016020810190611c939190614329565b611c9b61130b565b600a611ca79190614c80565b868686818110611cba57611cb9614b1e565b5b90506020020135611ccb91906148b8565b61113a565b508080611cdc90614ccb565b915050611c5c565b5050505050565b611cf36127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614869565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6000611e62611dac6127f0565b84611e5d856040518060600160405280602581526020016159276025913960016000611dd66127f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137319092919063ffffffff16565b6127f8565b6001905092915050565b600a60029054906101000a900460ff1681565b6000611e93611e8c6127f0565b84846129c1565b6001905092915050565b611ea56127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90614869565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b61202f6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614869565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161215b919061430e565b60405180910390a25050565b61216f6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f590614869565b60405180910390fd5b670de0b6b3a76400006103e86005612214610dcb565b61221e91906148b8565b6122289190614929565b6122329190614929565b811015612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b90614d85565b60405180910390fd5b670de0b6b3a76400008161228891906148b8565b60098190555050565b60075481565b60006122a16127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790614869565b60405180910390fd5b620186a0600161233e610dcb565b61234891906148b8565b6123529190614929565b821015612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90614e17565b60405180910390fd5b6103e860056123a1610dcb565b6123ab91906148b8565b6123b59190614929565b8211156123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90614ea9565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60105481565b6124a86127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90614869565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401612577929190614ec9565b6020604051808303816000875af1158015612596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ba9190614f07565b50505050565b6125c86127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614869565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614fa6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60095481565b60008082846127a191906149ec565b9050838110156127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd90615012565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285e906150a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cd90615136565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129b491906143df565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a27906151c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a969061525a565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b435750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b79906152ec565b60405180910390fd5b60008103612b9b57612b9683836000613836565b61372c565b612ba36118f9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c115750612be16118f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c4a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c84575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c9d5750600560149054906101000a900460ff16155b1561308057600a60009054906101000a900460ff16612d9757601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d575750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90615358565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e3a5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee157600754811115612e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7b906153ea565b60405180910390fd5b600954612e9083611565565b82612e9b91906149ec565b1115612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed390615456565b60405180910390fd5b61307f565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f845750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fd357600754811115612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc5906154e8565b60405180910390fd5b61307e565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661307d5760095461303083611565565b8261303b91906149ec565b111561307c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307390615456565b60405180910390fd5b5b5b5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130ed5750600a60029054906101000a900460ff165b156131ef576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561318f57504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461318c91906149ec565b10155b156131c1576016546013819055506017546012819055506013546012546131b691906149ec565b6011819055506131ea565b6015546013819055506014546012819055506013546012546131e391906149ec565b6011819055505b6132b9565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361327b5742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60029054906101000a900460ff166132b8576015546013819055506014546012819055506013546012546132b191906149ec565b6011819055505b5b60006132c430611565565b9050600060085482101590508080156132e95750600a60019054906101000a900460ff165b80156133025750600560149054906101000a900460ff16155b80156133585750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ae5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134045750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613448576001600560146101000a81548160ff02191690831515021790555061342c613ac9565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134fe5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561350857600090505b6000811561371b57601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561356b57506000601154115b1561360557613598606461358a60115489613cd690919063ffffffff16565b613d5090919063ffffffff16565b9050601154601354826135ab91906148b8565b6135b59190614929565b601960008282546135c691906149ec565b92505081905550601154601254826135de91906148b8565b6135e89190614929565b601860008282546135f991906149ec565b925050819055506136f7565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561366057506000600e54115b156136f65761368d606461367f600e5489613cd690919063ffffffff16565b613d5090919063ffffffff16565b9050600e54601054826136a091906148b8565b6136aa9190614929565b601960008282546136bb91906149ec565b92505081905550600e54600f54826136d391906148b8565b6136dd9190614929565b601860008282546136ee91906149ec565b925050819055505b5b600081111561370c5761370b883083613836565b5b80866137189190615508565b95505b613726888888613836565b50505050505b505050565b6000838311158290613779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377091906141f3565b60405180910390fd5b50600083856137889190615508565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389c906151c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390b9061525a565b60405180910390fd5b61391f838383613d9a565b61398a816040518060600160405280602681526020016158d9602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137319092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a1d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613abc91906143df565b60405180910390a3505050565b6000613ad430611565565b90506000601854601954613ae891906149ec565b9050600080831480613afa5750600082145b15613b0757505050613cd4565b6014600854613b1691906148b8565b831115613b2f576014600854613b2c91906148b8565b92505b600060028360195486613b4291906148b8565b613b4c9190614929565b613b569190614929565b90506000613b6d8286613d9f90919063ffffffff16565b90506000479050613b7d82613de9565b6000613b928247613d9f90919063ffffffff16565b90506000613bbd87613baf60185485613cd690919063ffffffff16565b613d5090919063ffffffff16565b905060008183613bcd9190615508565b905060006019819055506000601881905550600086118015613bef5750600081115b15613c3c57613bfe8682614026565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601954604051613c339392919061553c565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c82906155a4565b60006040518083038185875af1925050503d8060008114613cbf576040519150601f19603f3d011682016040523d82523d6000602084013e613cc4565b606091505b5050809750505050505050505050505b565b6000808303613ce85760009050613d4a565b60008284613cf691906148b8565b9050828482613d059190614929565b14613d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3c9061562b565b60405180910390fd5b809150505b92915050565b6000613d9283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614100565b905092915050565b505050565b6000613de183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613731565b905092915050565b6000600267ffffffffffffffff811115613e0657613e0561564b565b5b604051908082528060200260200182016040528015613e345781602001602082028036833780820191505090505b5090503081600081518110613e4c57613e4b614b1e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f15919061568f565b81600181518110613f2957613f28614b1e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f8e307f0000000000000000000000000000000000000000000000000000000000000000846127f8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ff09594939291906157b5565b600060405180830381600087803b15801561400a57600080fd5b505af115801561401e573d6000803e3d6000fd5b505050505050565b614051307f0000000000000000000000000000000000000000000000000000000000000000846127f8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016140b69695949392919061580f565b60606040518083038185885af11580156140d4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140f99190615885565b5050505050565b60008083118290614147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413e91906141f3565b60405180910390fd5b50600083856141569190614929565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561419d578082015181840152602081019050614182565b60008484015250505050565b6000601f19601f8301169050919050565b60006141c582614163565b6141cf818561416e565b93506141df81856020860161417f565b6141e8816141a9565b840191505092915050565b6000602082019050818103600083015261420d81846141ba565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061424a8261421f565b9050919050565b61425a8161423f565b811461426557600080fd5b50565b60008135905061427781614251565b92915050565b6000819050919050565b6142908161427d565b811461429b57600080fd5b50565b6000813590506142ad81614287565b92915050565b600080604083850312156142ca576142c9614215565b5b60006142d885828601614268565b92505060206142e98582860161429e565b9150509250929050565b60008115159050919050565b614308816142f3565b82525050565b600060208201905061432360008301846142ff565b92915050565b60006020828403121561433f5761433e614215565b5b600061434d84828501614268565b91505092915050565b6000819050919050565b600061437b6143766143718461421f565b614356565b61421f565b9050919050565b600061438d82614360565b9050919050565b600061439f82614382565b9050919050565b6143af81614394565b82525050565b60006020820190506143ca60008301846143a6565b92915050565b6143d98161427d565b82525050565b60006020820190506143f460008301846143d0565b92915050565b6000602082840312156144105761440f614215565b5b600061441e8482850161429e565b91505092915050565b60008060008060008060c0878903121561444457614443614215565b5b600061445289828a0161429e565b965050602061446389828a0161429e565b955050604061447489828a0161429e565b945050606061448589828a0161429e565b935050608061449689828a0161429e565b92505060a06144a789828a0161429e565b9150509295509295509295565b6000806000606084860312156144cd576144cc614215565b5b60006144db86828701614268565b93505060206144ec86828701614268565b92505060406144fd8682870161429e565b9150509250925092565b614510816142f3565b811461451b57600080fd5b50565b60008135905061452d81614507565b92915050565b6000806040838503121561454a57614549614215565b5b600061455885828601614268565b92505060206145698582860161451e565b9150509250929050565b600060ff82169050919050565b61458981614573565b82525050565b60006020820190506145a46000830184614580565b92915050565b6145b38161423f565b82525050565b60006020820190506145ce60008301846145aa565b92915050565b600080604083850312156145eb576145ea614215565b5b60006145f98582860161429e565b925050602061460a8582860161429e565b9150509250929050565b60006020828403121561462a57614629614215565b5b60006146388482850161451e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261466657614665614641565b5b8235905067ffffffffffffffff81111561468357614682614646565b5b60208301915083602082028301111561469f5761469e61464b565b5b9250929050565b60008083601f8401126146bc576146bb614641565b5b8235905067ffffffffffffffff8111156146d9576146d8614646565b5b6020830191508360208202830111156146f5576146f461464b565b5b9250929050565b6000806000806040858703121561471657614715614215565b5b600085013567ffffffffffffffff8111156147345761473361421a565b5b61474087828801614650565b9450945050602085013567ffffffffffffffff8111156147635761476261421a565b5b61476f878288016146a6565b925092505092959194509250565b6000806040838503121561479457614793614215565b5b60006147a285828601614268565b92505060206147b385828601614268565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061480457607f821691505b602082108103614817576148166147bd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061485360208361416e565b915061485e8261481d565b602082019050919050565b6000602082019050818103600083015261488281614846565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148c38261427d565b91506148ce8361427d565b92508282026148dc8161427d565b915082820484148315176148f3576148f2614889565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149348261427d565b915061493f8361427d565b92508261494f5761494e6148fa565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149b6602f8361416e565b91506149c18261495a565b604082019050919050565b600060208201905081810360008301526149e5816149a9565b9050919050565b60006149f78261427d565b9150614a028361427d565b9250828201905080821115614a1a57614a19614889565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614a56601d8361416e565b9150614a6182614a20565b602082019050919050565b60006020820190508181036000830152614a8581614a49565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ae860398361416e565b9150614af382614a8c565b604082019050919050565b60006020820190508181036000830152614b1781614adb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614ba457808604811115614b8057614b7f614889565b5b6001851615614b8f5780820291505b8081029050614b9d85614b4d565b9450614b64565b94509492505050565b600082614bbd5760019050614c79565b81614bcb5760009050614c79565b8160018114614be15760028114614beb57614c1a565b6001915050614c79565b60ff841115614bfd57614bfc614889565b5b8360020a915084821115614c1457614c13614889565b5b50614c79565b5060208310610133831016604e8410600b8410161715614c4f5782820a905083811115614c4a57614c49614889565b5b614c79565b614c5c8484846001614b5a565b92509050818404811115614c7357614c72614889565b5b81810290505b9392505050565b6000614c8b8261427d565b9150614c9683614573565b9250614cc37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614bad565b905092915050565b6000614cd68261427d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d0857614d07614889565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d6f60248361416e565b9150614d7a82614d13565b604082019050919050565b60006020820190508181036000830152614d9e81614d62565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e0160358361416e565b9150614e0c82614da5565b604082019050919050565b60006020820190508181036000830152614e3081614df4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614e9360348361416e565b9150614e9e82614e37565b604082019050919050565b60006020820190508181036000830152614ec281614e86565b9050919050565b6000604082019050614ede60008301856145aa565b614eeb60208301846143d0565b9392505050565b600081519050614f0181614507565b92915050565b600060208284031215614f1d57614f1c614215565b5b6000614f2b84828501614ef2565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f9060268361416e565b9150614f9b82614f34565b604082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ffc601b8361416e565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061508e60248361416e565b915061509982615032565b604082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061512060228361416e565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151b260258361416e565b91506151bd82615156565b604082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061524460238361416e565b915061524f826151e8565b604082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006152d660318361416e565b91506152e18261527a565b604082019050919050565b60006020820190508181036000830152615305816152c9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061534260168361416e565b915061534d8261530c565b602082019050919050565b6000602082019050818103600083015261537181615335565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006153d460358361416e565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061544060138361416e565b915061544b8261540a565b602082019050919050565b6000602082019050818103600083015261546f81615433565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006154d260368361416e565b91506154dd82615476565b604082019050919050565b60006020820190508181036000830152615501816154c5565b9050919050565b60006155138261427d565b915061551e8361427d565b925082820390508181111561553657615535614889565b5b92915050565b600060608201905061555160008301866143d0565b61555e60208301856143d0565b61556b60408301846143d0565b949350505050565b600081905092915050565b50565b600061558e600083615573565b91506155998261557e565b600082019050919050565b60006155af82615581565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061561560218361416e565b9150615620826155b9565b604082019050919050565b6000602082019050818103600083015261564481615608565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061568981614251565b92915050565b6000602082840312156156a5576156a4614215565b5b60006156b38482850161567a565b91505092915050565b6000819050919050565b60006156e16156dc6156d7846156bc565b614356565b61427d565b9050919050565b6156f1816156c6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61572c8161423f565b82525050565b600061573e8383615723565b60208301905092915050565b6000602082019050919050565b6000615762826156f7565b61576c8185615702565b935061577783615713565b8060005b838110156157a857815161578f8882615732565b975061579a8361574a565b92505060018101905061577b565b5085935050505092915050565b600060a0820190506157ca60008301886143d0565b6157d760208301876156e8565b81810360408301526157e98186615757565b90506157f860608301856145aa565b61580560808301846143d0565b9695505050505050565b600060c08201905061582460008301896145aa565b61583160208301886143d0565b61583e60408301876156e8565b61584b60608301866156e8565b61585860808301856145aa565b61586560a08301846143d0565b979650505050505050565b60008151905061587f81614287565b92915050565b60008060006060848603121561589e5761589d614215565b5b60006158ac86828701615870565b93505060206158bd86828701615870565b92505060406158ce86828701615870565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122007344f56dc13d0a1583af892d417b0db875af52c041de4030031504a28169dec64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80637bce5a04116101ab578063b62496f5116100f7578063dd62ed3e11610095578063f2a95aa91161006f578063f2a95aa914610c2f578063f2fde38b14610c58578063f637434214610c81578063f8b45b0514610cac57610340565b8063dd62ed3e14610b9c578063e2f4560514610bd9578063f11a24d314610c0457610340565b8063c18bc195116100d1578063c18bc19514610ae0578063c8c8ebe414610b09578063d257b34f14610b34578063d85ba06314610b7157610340565b8063b62496f514610a4f578063bbc0c74214610a8c578063c024666814610ab757610340565b80639a7a23d611610164578063a457c2d71161013e578063a457c2d714610981578063a4d15b64146109be578063a9059cbb146109e9578063aacebbe314610a2657610340565b80639a7a23d6146109065780639c63e6b91461092f578063a26577781461095857610340565b80637bce5a041461081a5780638a8c523c146108455780638da5cb5b1461085c5780639213691314610887578063924de9b7146108b257806395d89b41146108db57610340565b80632bf3d42d1161028557806366ca9b831161022357806370a08231116101fd57806370a0823114610772578063715018a6146107af5780637571336a146107c657806375f0a874146107ef57610340565b806366ca9b83146106f35780636a486a8e1461071c5780636ddd17131461074757610340565b8063395093511161025f578063395093511461062357806349bd5a5e146106605780634fbee1931461068b578063541a43cf146106c857610340565b80632bf3d42d146105a45780632d5a5d34146105cf578063313ce567146105f857610340565b80631a8145bb116102f2578063203e727e116102cc578063203e727e146104ea578063208cce0c1461051357806322d3e2aa1461053e57806323b872dd1461056757610340565b80631a8145bb1461046b5780631da1db5e146104965780631f3fed8f146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd14610415578063194b2b541461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cd7565b60405161036791906141f3565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906142b3565b610d69565b6040516103a4919061430e565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190614329565b610d87565b6040516103e1919061430e565b60405180910390f35b3480156103f657600080fd5b506103ff610da7565b60405161040c91906143b5565b60405180910390f35b34801561042157600080fd5b5061042a610dcb565b60405161043791906143df565b60405180910390f35b34801561044c57600080fd5b50610455610dd5565b60405161046291906143df565b60405180910390f35b34801561047757600080fd5b50610480610ddb565b60405161048d91906143df565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906143fa565b610de1565b005b3480156104cb57600080fd5b506104d4610edf565b6040516104e191906143df565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c91906143fa565b610ee5565b005b34801561051f57600080fd5b5061052861100f565b60405161053591906143df565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190614427565b611015565b005b34801561057357600080fd5b5061058e600480360381019061058991906144b4565b61113a565b60405161059b919061430e565b60405180910390f35b3480156105b057600080fd5b506105b9611213565b6040516105c691906143df565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614533565b611219565b005b34801561060457600080fd5b5061060d61130b565b60405161061a919061458f565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906142b3565b611314565b604051610657919061430e565b60405180910390f35b34801561066c57600080fd5b506106756113c7565b60405161068291906145b9565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190614329565b6113eb565b6040516106bf919061430e565b60405180910390f35b3480156106d457600080fd5b506106dd611441565b6040516106ea91906143df565b60405180910390f35b3480156106ff57600080fd5b5061071a600480360381019061071591906145d4565b611447565b005b34801561072857600080fd5b5061073161154c565b60405161073e91906143df565b60405180910390f35b34801561075357600080fd5b5061075c611552565b604051610769919061430e565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190614329565b611565565b6040516107a691906143df565b60405180910390f35b3480156107bb57600080fd5b506107c46115ad565b005b3480156107d257600080fd5b506107ed60048036038101906107e89190614533565b611705565b005b3480156107fb57600080fd5b506108046117f7565b60405161081191906145b9565b60405180910390f35b34801561082657600080fd5b5061082f61181d565b60405161083c91906143df565b60405180910390f35b34801561085157600080fd5b5061085a611823565b005b34801561086857600080fd5b506108716118f9565b60405161087e91906145b9565b60405180910390f35b34801561089357600080fd5b5061089c611923565b6040516108a991906143df565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d49190614614565b611929565b005b3480156108e757600080fd5b506108f06119dd565b6040516108fd91906141f3565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190614533565b611a6f565b005b34801561093b57600080fd5b50610956600480360381019061095191906146fc565b611ba2565b005b34801561096457600080fd5b5061097f600480360381019061097a9190614614565b611ceb565b005b34801561098d57600080fd5b506109a860048036038101906109a391906142b3565b611d9f565b6040516109b5919061430e565b60405180910390f35b3480156109ca57600080fd5b506109d3611e6c565b6040516109e0919061430e565b60405180910390f35b3480156109f557600080fd5b50610a106004803603810190610a0b91906142b3565b611e7f565b604051610a1d919061430e565b60405180910390f35b348015610a3257600080fd5b50610a4d6004803603810190610a489190614329565b611e9d565b005b348015610a5b57600080fd5b50610a766004803603810190610a719190614329565b611ff4565b604051610a83919061430e565b60405180910390f35b348015610a9857600080fd5b50610aa1612014565b604051610aae919061430e565b60405180910390f35b348015610ac357600080fd5b50610ade6004803603810190610ad99190614533565b612027565b005b348015610aec57600080fd5b50610b076004803603810190610b0291906143fa565b612167565b005b348015610b1557600080fd5b50610b1e612291565b604051610b2b91906143df565b60405180910390f35b348015610b4057600080fd5b50610b5b6004803603810190610b5691906143fa565b612297565b604051610b68919061430e565b60405180910390f35b348015610b7d57600080fd5b50610b86612407565b604051610b9391906143df565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe919061477d565b61240d565b604051610bd091906143df565b60405180910390f35b348015610be557600080fd5b50610bee612494565b604051610bfb91906143df565b60405180910390f35b348015610c1057600080fd5b50610c1961249a565b604051610c2691906143df565b60405180910390f35b348015610c3b57600080fd5b50610c566004803603810190610c5191906142b3565b6124a0565b005b348015610c6457600080fd5b50610c7f6004803603810190610c7a9190614329565b6125c0565b005b348015610c8d57600080fd5b50610c96612786565b604051610ca391906143df565b60405180910390f35b348015610cb857600080fd5b50610cc161278c565b604051610cce91906143df565b60405180910390f35b606060038054610ce6906147ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610d12906147ec565b8015610d5f5780601f10610d3457610100808354040283529160200191610d5f565b820191906000526020600020905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b6000610d7d610d766127f0565b84846127f8565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60145481565b60195481565b610de96127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90614869565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484610ea591906148b8565b610eaf9190614929565b9081150290604051600060405180830381858888f19350505050158015610eda573d6000803e3d6000fd5b505050565b60185481565b610eed6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390614869565b60405180910390fd5b670de0b6b3a76400006103e86001610f92610dcb565b610f9c91906148b8565b610fa69190614929565b610fb09190614929565b811015610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe9906149cc565b60405180910390fd5b670de0b6b3a76400008161100691906148b8565b60078190555050565b60155481565b61101d6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390614869565b60405180910390fd5b8560128190555084601381905550836016819055508260178190555081601481905550806015819055506013546012546110e691906149ec565b601181905550600a6011541115611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990614a6c565b60405180910390fd5b505050505050565b60006111478484846129c1565b611208846111536127f0565b611203856040518060600160405280602881526020016158ff60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111b96127f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137319092919063ffffffff16565b6127f8565b600190509392505050565b60175481565b6112216127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790614869565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006113bd6113216127f0565b846113b885600160006113326127f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279290919063ffffffff16565b6127f8565b6001905092915050565b7f000000000000000000000000ca66552d1aa999def7d68aeb874d0b1a0c14f6f081565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b61144f6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590614869565b60405180910390fd5b81600f8190555080601081905550601054600f546114fc91906149ec565b600e81905550600a600e541115611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90614a6c565b60405180910390fd5b5050565b60115481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b56127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90614869565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61170d6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390614869565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b61182b6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190614869565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6119316127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b790614869565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b6060600480546119ec906147ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611a18906147ec565b8015611a655780601f10611a3a57610100808354040283529160200191611a65565b820191906000526020600020905b815481529060010190602001808311611a4857829003601f168201915b5050505050905090565b611a776127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614869565b60405180910390fd5b7f000000000000000000000000ca66552d1aa999def7d68aeb874d0b1a0c14f6f073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90614afe565b60405180910390fd5b611b9e8282613795565b5050565b611baa6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3090614869565b60405180910390fd5b611c59611c446118f9565b611c4c6118f9565b611c54610dcb565b6127f8565b60005b84849050811015611ce457611cd033868684818110611c7e57611c7d614b1e565b5b9050602002016020810190611c939190614329565b611c9b61130b565b600a611ca79190614c80565b868686818110611cba57611cb9614b1e565b5b90506020020135611ccb91906148b8565b61113a565b508080611cdc90614ccb565b915050611c5c565b5050505050565b611cf36127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614869565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6000611e62611dac6127f0565b84611e5d856040518060600160405280602581526020016159276025913960016000611dd66127f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137319092919063ffffffff16565b6127f8565b6001905092915050565b600a60029054906101000a900460ff1681565b6000611e93611e8c6127f0565b84846129c1565b6001905092915050565b611ea56127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90614869565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b61202f6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614869565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161215b919061430e565b60405180910390a25050565b61216f6127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f590614869565b60405180910390fd5b670de0b6b3a76400006103e86005612214610dcb565b61221e91906148b8565b6122289190614929565b6122329190614929565b811015612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b90614d85565b60405180910390fd5b670de0b6b3a76400008161228891906148b8565b60098190555050565b60075481565b60006122a16127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790614869565b60405180910390fd5b620186a0600161233e610dcb565b61234891906148b8565b6123529190614929565b821015612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90614e17565b60405180910390fd5b6103e860056123a1610dcb565b6123ab91906148b8565b6123b59190614929565b8211156123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90614ea9565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60105481565b6124a86127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90614869565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401612577929190614ec9565b6020604051808303816000875af1158015612596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ba9190614f07565b50505050565b6125c86127f0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614869565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614fa6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60095481565b60008082846127a191906149ec565b9050838110156127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd90615012565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285e906150a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cd90615136565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129b491906143df565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a27906151c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a969061525a565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b435750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b79906152ec565b60405180910390fd5b60008103612b9b57612b9683836000613836565b61372c565b612ba36118f9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c115750612be16118f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c4a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c84575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c9d5750600560149054906101000a900460ff16155b1561308057600a60009054906101000a900460ff16612d9757601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d575750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90615358565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e3a5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee157600754811115612e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7b906153ea565b60405180910390fd5b600954612e9083611565565b82612e9b91906149ec565b1115612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed390615456565b60405180910390fd5b61307f565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f845750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fd357600754811115612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc5906154e8565b60405180910390fd5b61307e565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661307d5760095461303083611565565b8261303b91906149ec565b111561307c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307390615456565b60405180910390fd5b5b5b5b5b60007f000000000000000000000000ca66552d1aa999def7d68aeb874d0b1a0c14f6f073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130ed5750600a60029054906101000a900460ff165b156131ef576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561318f57504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461318c91906149ec565b10155b156131c1576016546013819055506017546012819055506013546012546131b691906149ec565b6011819055506131ea565b6015546013819055506014546012819055506013546012546131e391906149ec565b6011819055505b6132b9565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361327b5742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60029054906101000a900460ff166132b8576015546013819055506014546012819055506013546012546132b191906149ec565b6011819055505b5b60006132c430611565565b9050600060085482101590508080156132e95750600a60019054906101000a900460ff165b80156133025750600560149054906101000a900460ff16155b80156133585750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ae5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134045750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613448576001600560146101000a81548160ff02191690831515021790555061342c613ac9565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134fe5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561350857600090505b6000811561371b57601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561356b57506000601154115b1561360557613598606461358a60115489613cd690919063ffffffff16565b613d5090919063ffffffff16565b9050601154601354826135ab91906148b8565b6135b59190614929565b601960008282546135c691906149ec565b92505081905550601154601254826135de91906148b8565b6135e89190614929565b601860008282546135f991906149ec565b925050819055506136f7565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561366057506000600e54115b156136f65761368d606461367f600e5489613cd690919063ffffffff16565b613d5090919063ffffffff16565b9050600e54601054826136a091906148b8565b6136aa9190614929565b601960008282546136bb91906149ec565b92505081905550600e54600f54826136d391906148b8565b6136dd9190614929565b601860008282546136ee91906149ec565b925050819055505b5b600081111561370c5761370b883083613836565b5b80866137189190615508565b95505b613726888888613836565b50505050505b505050565b6000838311158290613779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377091906141f3565b60405180910390fd5b50600083856137889190615508565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389c906151c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390b9061525a565b60405180910390fd5b61391f838383613d9a565b61398a816040518060600160405280602681526020016158d9602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137319092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a1d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613abc91906143df565b60405180910390a3505050565b6000613ad430611565565b90506000601854601954613ae891906149ec565b9050600080831480613afa5750600082145b15613b0757505050613cd4565b6014600854613b1691906148b8565b831115613b2f576014600854613b2c91906148b8565b92505b600060028360195486613b4291906148b8565b613b4c9190614929565b613b569190614929565b90506000613b6d8286613d9f90919063ffffffff16565b90506000479050613b7d82613de9565b6000613b928247613d9f90919063ffffffff16565b90506000613bbd87613baf60185485613cd690919063ffffffff16565b613d5090919063ffffffff16565b905060008183613bcd9190615508565b905060006019819055506000601881905550600086118015613bef5750600081115b15613c3c57613bfe8682614026565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601954604051613c339392919061553c565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c82906155a4565b60006040518083038185875af1925050503d8060008114613cbf576040519150601f19603f3d011682016040523d82523d6000602084013e613cc4565b606091505b5050809750505050505050505050505b565b6000808303613ce85760009050613d4a565b60008284613cf691906148b8565b9050828482613d059190614929565b14613d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3c9061562b565b60405180910390fd5b809150505b92915050565b6000613d9283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614100565b905092915050565b505050565b6000613de183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613731565b905092915050565b6000600267ffffffffffffffff811115613e0657613e0561564b565b5b604051908082528060200260200182016040528015613e345781602001602082028036833780820191505090505b5090503081600081518110613e4c57613e4b614b1e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f15919061568f565b81600181518110613f2957613f28614b1e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f8e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127f8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ff09594939291906157b5565b600060405180830381600087803b15801561400a57600080fd5b505af115801561401e573d6000803e3d6000fd5b505050505050565b614051307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127f8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016140b69695949392919061580f565b60606040518083038185885af11580156140d4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140f99190615885565b5050505050565b60008083118290614147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413e91906141f3565b60405180910390fd5b50600083856141569190614929565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561419d578082015181840152602081019050614182565b60008484015250505050565b6000601f19601f8301169050919050565b60006141c582614163565b6141cf818561416e565b93506141df81856020860161417f565b6141e8816141a9565b840191505092915050565b6000602082019050818103600083015261420d81846141ba565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061424a8261421f565b9050919050565b61425a8161423f565b811461426557600080fd5b50565b60008135905061427781614251565b92915050565b6000819050919050565b6142908161427d565b811461429b57600080fd5b50565b6000813590506142ad81614287565b92915050565b600080604083850312156142ca576142c9614215565b5b60006142d885828601614268565b92505060206142e98582860161429e565b9150509250929050565b60008115159050919050565b614308816142f3565b82525050565b600060208201905061432360008301846142ff565b92915050565b60006020828403121561433f5761433e614215565b5b600061434d84828501614268565b91505092915050565b6000819050919050565b600061437b6143766143718461421f565b614356565b61421f565b9050919050565b600061438d82614360565b9050919050565b600061439f82614382565b9050919050565b6143af81614394565b82525050565b60006020820190506143ca60008301846143a6565b92915050565b6143d98161427d565b82525050565b60006020820190506143f460008301846143d0565b92915050565b6000602082840312156144105761440f614215565b5b600061441e8482850161429e565b91505092915050565b60008060008060008060c0878903121561444457614443614215565b5b600061445289828a0161429e565b965050602061446389828a0161429e565b955050604061447489828a0161429e565b945050606061448589828a0161429e565b935050608061449689828a0161429e565b92505060a06144a789828a0161429e565b9150509295509295509295565b6000806000606084860312156144cd576144cc614215565b5b60006144db86828701614268565b93505060206144ec86828701614268565b92505060406144fd8682870161429e565b9150509250925092565b614510816142f3565b811461451b57600080fd5b50565b60008135905061452d81614507565b92915050565b6000806040838503121561454a57614549614215565b5b600061455885828601614268565b92505060206145698582860161451e565b9150509250929050565b600060ff82169050919050565b61458981614573565b82525050565b60006020820190506145a46000830184614580565b92915050565b6145b38161423f565b82525050565b60006020820190506145ce60008301846145aa565b92915050565b600080604083850312156145eb576145ea614215565b5b60006145f98582860161429e565b925050602061460a8582860161429e565b9150509250929050565b60006020828403121561462a57614629614215565b5b60006146388482850161451e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261466657614665614641565b5b8235905067ffffffffffffffff81111561468357614682614646565b5b60208301915083602082028301111561469f5761469e61464b565b5b9250929050565b60008083601f8401126146bc576146bb614641565b5b8235905067ffffffffffffffff8111156146d9576146d8614646565b5b6020830191508360208202830111156146f5576146f461464b565b5b9250929050565b6000806000806040858703121561471657614715614215565b5b600085013567ffffffffffffffff8111156147345761473361421a565b5b61474087828801614650565b9450945050602085013567ffffffffffffffff8111156147635761476261421a565b5b61476f878288016146a6565b925092505092959194509250565b6000806040838503121561479457614793614215565b5b60006147a285828601614268565b92505060206147b385828601614268565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061480457607f821691505b602082108103614817576148166147bd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061485360208361416e565b915061485e8261481d565b602082019050919050565b6000602082019050818103600083015261488281614846565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148c38261427d565b91506148ce8361427d565b92508282026148dc8161427d565b915082820484148315176148f3576148f2614889565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149348261427d565b915061493f8361427d565b92508261494f5761494e6148fa565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149b6602f8361416e565b91506149c18261495a565b604082019050919050565b600060208201905081810360008301526149e5816149a9565b9050919050565b60006149f78261427d565b9150614a028361427d565b9250828201905080821115614a1a57614a19614889565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614a56601d8361416e565b9150614a6182614a20565b602082019050919050565b60006020820190508181036000830152614a8581614a49565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ae860398361416e565b9150614af382614a8c565b604082019050919050565b60006020820190508181036000830152614b1781614adb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614ba457808604811115614b8057614b7f614889565b5b6001851615614b8f5780820291505b8081029050614b9d85614b4d565b9450614b64565b94509492505050565b600082614bbd5760019050614c79565b81614bcb5760009050614c79565b8160018114614be15760028114614beb57614c1a565b6001915050614c79565b60ff841115614bfd57614bfc614889565b5b8360020a915084821115614c1457614c13614889565b5b50614c79565b5060208310610133831016604e8410600b8410161715614c4f5782820a905083811115614c4a57614c49614889565b5b614c79565b614c5c8484846001614b5a565b92509050818404811115614c7357614c72614889565b5b81810290505b9392505050565b6000614c8b8261427d565b9150614c9683614573565b9250614cc37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614bad565b905092915050565b6000614cd68261427d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d0857614d07614889565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d6f60248361416e565b9150614d7a82614d13565b604082019050919050565b60006020820190508181036000830152614d9e81614d62565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e0160358361416e565b9150614e0c82614da5565b604082019050919050565b60006020820190508181036000830152614e3081614df4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614e9360348361416e565b9150614e9e82614e37565b604082019050919050565b60006020820190508181036000830152614ec281614e86565b9050919050565b6000604082019050614ede60008301856145aa565b614eeb60208301846143d0565b9392505050565b600081519050614f0181614507565b92915050565b600060208284031215614f1d57614f1c614215565b5b6000614f2b84828501614ef2565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f9060268361416e565b9150614f9b82614f34565b604082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ffc601b8361416e565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061508e60248361416e565b915061509982615032565b604082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061512060228361416e565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151b260258361416e565b91506151bd82615156565b604082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061524460238361416e565b915061524f826151e8565b604082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006152d660318361416e565b91506152e18261527a565b604082019050919050565b60006020820190508181036000830152615305816152c9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061534260168361416e565b915061534d8261530c565b602082019050919050565b6000602082019050818103600083015261537181615335565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006153d460358361416e565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061544060138361416e565b915061544b8261540a565b602082019050919050565b6000602082019050818103600083015261546f81615433565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006154d260368361416e565b91506154dd82615476565b604082019050919050565b60006020820190508181036000830152615501816154c5565b9050919050565b60006155138261427d565b915061551e8361427d565b925082820390508181111561553657615535614889565b5b92915050565b600060608201905061555160008301866143d0565b61555e60208301856143d0565b61556b60408301846143d0565b949350505050565b600081905092915050565b50565b600061558e600083615573565b91506155998261557e565b600082019050919050565b60006155af82615581565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061561560218361416e565b9150615620826155b9565b604082019050919050565b6000602082019050818103600083015261564481615608565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061568981614251565b92915050565b6000602082840312156156a5576156a4614215565b5b60006156b38482850161567a565b91505092915050565b6000819050919050565b60006156e16156dc6156d7846156bc565b614356565b61427d565b9050919050565b6156f1816156c6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61572c8161423f565b82525050565b600061573e8383615723565b60208301905092915050565b6000602082019050919050565b6000615762826156f7565b61576c8185615702565b935061577783615713565b8060005b838110156157a857815161578f8882615732565b975061579a8361574a565b92505060018101905061577b565b5085935050505092915050565b600060a0820190506157ca60008301886143d0565b6157d760208301876156e8565b81810360408301526157e98186615757565b90506157f860608301856145aa565b61580560808301846143d0565b9695505050505050565b600060c08201905061582460008301896145aa565b61583160208301886143d0565b61583e60408301876156e8565b61584b60608301866156e8565b61585860808301856145aa565b61586560a08301846143d0565b979650505050505050565b60008151905061587f81614287565b92915050565b60008060006060848603121561589e5761589d614215565b5b60006158ac86828701615870565b93505060206158bd86828701615870565b92505060406158ce86828701615870565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122007344f56dc13d0a1583af892d417b0db875af52c041de4030031504a28169dec64736f6c63430008110033

Deployed Bytecode Sourcemap

29618:16544:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7716:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9890:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31154:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29694:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8839:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30686:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30902:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38166:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30862:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35339:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30728:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36476:676;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10542:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30816:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37352:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8680:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11307:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29752:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38592:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30773:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36157:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30575:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30031:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9011:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22218:148;;;;;;;;;;;;;:::i;:::-;;35806:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29831:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30498;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34612:148;;;;;;;;;;;;;:::i;:::-;;21574:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30610:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36047:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7936:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37496:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45830:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34770:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12029:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30069:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9352:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37948:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31377:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29991:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37161:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35582:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29871:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34944:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30464:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9591:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29913:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30535:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38383:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22522:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30648:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29953:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7716:100;7770:13;7803:5;7796:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7716:100;:::o;9890:169::-;9973:4;9990:39;9999:12;:10;:12::i;:::-;10013:7;10022:6;9990:8;:39::i;:::-;10047:4;10040:11;;9890:169;;;;:::o;31154:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29694:51::-;;;:::o;8839:108::-;8900:7;8927:12;;8920:19;;8839:108;:::o;30686:35::-;;;;:::o;30902:33::-;;;;:::o;38166:209::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38249:17:::1;38269:21;38249:41;;38309:10;38301:28;;:66;38363:3;38343:16;38331:9;:28;;;;:::i;:::-;38330:36;;;;:::i;:::-;38301:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38238:137;38166:209:::0;:::o;30862:33::-;;;;:::o;35339:234::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35458:4:::1;35452;35448:1;35432:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35431:31;;;;:::i;:::-;35421:6;:41;;35413:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35558:6;35548;:17;;;;:::i;:::-;35525:20;:40;;;;35339:234:::0;:::o;30728:35::-;;;;:::o;36476:676::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36721:13:::1;36702:16;:32;;;;36764:13;36745:16;:32;;;;36812:22;36788:21;:46;;;;36869:22;36845:21;:46;;;;36925:21;36902:20;:44;;;;36979:21;36957:20;:43;;;;37046:16;;37027;;:35;;;;:::i;:::-;37011:13;:51;;;;37108:2;37091:13;;:19;;37083:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36476:676:::0;;;;;;:::o;10542:355::-;10682:4;10699:36;10709:6;10717:9;10728:6;10699:9;:36::i;:::-;10746:121;10755:6;10763:12;:10;:12::i;:::-;10777:89;10815:6;10777:89;;;;;;;;;;;;;;;;;:11;:19;10789:6;10777:19;;;;;;;;;;;;;;;:33;10797:12;:10;:12::i;:::-;10777:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10746:8;:121::i;:::-;10885:4;10878:11;;10542:355;;;;;:::o;30816:36::-;;;;:::o;37352:135::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37466:13:::1;37444:10;:19;37455:7;37444:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37352:135:::0;;:::o;8680:93::-;8738:5;8763:2;8756:9;;8680:93;:::o;11307:218::-;11395:4;11412:83;11421:12;:10;:12::i;:::-;11435:7;11444:50;11483:10;11444:11;:25;11456:12;:10;:12::i;:::-;11444:25;;;;;;;;;;;;;;;:34;11470:7;11444:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11412:8;:83::i;:::-;11513:4;11506:11;;11307:218;;;;:::o;29752:38::-;;;:::o;38592:125::-;38657:4;38681:19;:28;38701:7;38681:28;;;;;;;;;;;;;;;;;;;;;;;;;38674:35;;38592:125;;;:::o;30773:36::-;;;;:::o;36157:310::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36274:13:::1;36256:15;:31;;;;36316:13;36298:15;:31;;;;36373:15;;36355;;:33;;;;:::i;:::-;36340:12;:48;;;;36423:2;36407:12;;:18;;36399:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36157:310:::0;;:::o;30575:28::-;;;;:::o;30031:31::-;;;;;;;;;;;;;:::o;9011:127::-;9085:7;9112:9;:18;9122:7;9112:18;;;;;;;;;;;;;;;;9105:25;;9011:127;;;:::o;22218:148::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22325:1:::1;22288:40;;22309:6;;;;;;;;;;;22288:40;;;;;;;;;;;;22356:1;22339:6;;:19;;;;;;;;;;;;;;;;;;22218:148::o:0;35806:144::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35938:4:::1;35896:31;:39;35928:6;35896:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35806:144:::0;;:::o;29831:30::-;;;;;;;;;;;;;:::o;30498:::-;;;;:::o;34612:148::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34683:4:::1;34667:13;;:20;;;;;;;;;;;;;;;;;;34712:4;34698:11;;:18;;;;;;;;;;;;;;;;;;34740:12;34727:10;:25;;;;34612:148::o:0;21574:79::-;21612:7;21639:6;;;;;;;;;;;21632:13;;21574:79;:::o;30610:31::-;;;;:::o;36047:101::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36133:7:::1;36119:11;;:21;;;;;;;;;;;;;;;;;;36047:101:::0;:::o;7936:104::-;7992:13;8025:7;8018:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7936:104;:::o;37496:245::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37603:13:::1;37595:21;;:4;:21;;::::0;37587:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37692:41;37721:4;37727:5;37692:28;:41::i;:::-;37496:245:::0;;:::o;45830:329::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45956:41:::1;45965:7;:5;:7::i;:::-;45974;:5;:7::i;:::-;45983:13;:11;:13::i;:::-;45956:8;:41::i;:::-;46013:9;46008:144;46032:10;;:17;;46028:1;:21;46008:144;;;46071:69;46084:10;46096;;46107:1;46096:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46129:10;:8;:10::i;:::-;46123:2;:16;;;;:::i;:::-;46111:6;;46118:1;46111:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;46071:12;:69::i;:::-;;46051:3;;;;;:::i;:::-;;;;46008:144;;;;45830:329:::0;;;;:::o;34770:102::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34859:5:::1;34838:18;;:26;;;;;;;;;;;;;;;;;;34770:102:::0;:::o;12029:269::-;12122:4;12139:129;12148:12;:10;:12::i;:::-;12162:7;12171:96;12210:15;12171:96;;;;;;;;;;;;;;;;;:11;:25;12183:12;:10;:12::i;:::-;12171:25;;;;;;;;;;;;;;;:34;12197:7;12171:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12139:8;:129::i;:::-;12286:4;12279:11;;12029:269;;;;:::o;30069:37::-;;;;;;;;;;;;;:::o;9352:175::-;9438:4;9455:42;9465:12;:10;:12::i;:::-;9479:9;9490:6;9455:9;:42::i;:::-;9515:4;9508:11;;9352:175;;;;:::o;37948:208::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38085:15:::1;;;;;;;;;;;38042:59;;38065:18;38042:59;;;;;;;;;;;;38130:18;38112:15;;:36;;;;;;;;;;;;;;;;;;37948:208:::0;:::o;31377:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29991:33::-;;;;;;;;;;;;;:::o;37161:182::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37277:8:::1;37246:19;:28;37266:7;37246:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37317:7;37301:34;;;37326:8;37301:34;;;;;;:::i;:::-;;;;;;;;37161:182:::0;;:::o;35582:215::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35704:4:::1;35698;35694:1;35678:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35677:31;;;;:::i;:::-;35667:6;:41;;35659:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35782:6;35772;:17;;;;:::i;:::-;35760:9;:29;;;;35582:215:::0;:::o;29871:35::-;;;;:::o;34944:386::-;35025:4;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35082:6:::1;35078:1;35062:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35049:9;:39;;35041:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35198:4;35194:1;35178:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35165:9;:37;;35157:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35291:9;35270:18;:30;;;;35318:4;35311:11;;34944:386:::0;;;:::o;30464:27::-;;;;:::o;9591:151::-;9680:7;9707:11;:18;9719:5;9707:18;;;;;;;;;;;;;;;:27;9726:7;9707:27;;;;;;;;;;;;;;;;9700:34;;9591:151;;;;:::o;29913:33::-;;;;:::o;30535:30::-;;;;:::o;38383:200::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38477:20:::1;38507:14;38477:45;;38532:13;:22;;;38555:10;38567:7;38532:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38467:116;38383:200:::0;;:::o;22522:244::-;21797:12;:10;:12::i;:::-;21787:22;;:6;;;;;;;;;;;:22;;;21779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22631:1:::1;22611:22;;:8;:22;;::::0;22603:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22721:8;22692:38;;22713:6;;;;;;;;;;;22692:38;;;;;;;;;;;;22750:8;22741:6;;:17;;;;;;;;;;;;;;;;;;22522:244:::0;:::o;30648:31::-;;;;:::o;29953:24::-;;;;:::o;16606:182::-;16664:7;16684:9;16700:1;16696;:5;;;;:::i;:::-;16684:17;;16725:1;16720;:6;;16712:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16779:1;16772:8;;;16606:182;;;;:::o;407:98::-;460:7;487:10;480:17;;407:98;:::o;15225:381::-;15378:1;15361:19;;:5;:19;;;15353:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15459:1;15440:21;;:7;:21;;;15432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15544:6;15514:11;:18;15526:5;15514:18;;;;;;;;;;;;;;;:27;15533:7;15514:27;;;;;;;;;;;;;;;:36;;;;15582:7;15566:32;;15575:5;15566:32;;;15591:6;15566:32;;;;;;:::i;:::-;;;;;;;;15225:381;;;:::o;38777:4538::-;38925:1;38909:18;;:4;:18;;;38901:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39002:1;38988:16;;:2;:16;;;38980:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39064:10;:14;39075:2;39064:14;;;;;;;;;;;;;;;;;;;;;;;;;39063:15;:36;;;;;39083:10;:16;39094:4;39083:16;;;;;;;;;;;;;;;;;;;;;;;;;39082:17;39063:36;39055:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39178:1;39168:6;:11;39165:92;;39196:28;39212:4;39218:2;39222:1;39196:15;:28::i;:::-;39239:7;;39165:92;39314:7;:5;:7::i;:::-;39306:15;;:4;:15;;;;:49;;;;;39348:7;:5;:7::i;:::-;39342:13;;:2;:13;;;;39306:49;:86;;;;;39390:1;39376:16;;:2;:16;;;;39306:86;:128;;;;;39427:6;39413:21;;:2;:21;;;;39306:128;:158;;;;;39456:8;;;;;;;;;;;39455:9;39306:158;39284:1230;;;39502:13;;;;;;;;;;;39498:148;;39547:19;:25;39567:4;39547:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39576:19;:23;39596:2;39576:23;;;;;;;;;;;;;;;;;;;;;;;;;39547:52;39539:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39498:148;39730:25;:31;39756:4;39730:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39766:31;:35;39798:2;39766:35;;;;;;;;;;;;;;;;;;;;;;;;;39765:36;39730:71;39726:777;;;39848:20;;39838:6;:30;;39830:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39987:9;;39970:13;39980:2;39970:9;:13::i;:::-;39961:6;:22;;;;:::i;:::-;:35;;39953:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39726:777;;;40099:25;:29;40125:2;40099:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40133:31;:37;40165:4;40133:37;;;;;;;;;;;;;;;;;;;;;;;;;40132:38;40099:71;40095:408;;;40217:20;;40207:6;:30;;40199:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40095:408;;;40343:31;:35;40375:2;40343:35;;;;;;;;;;;;;;;;;;;;;;;;;40339:164;;40436:9;;40419:13;40429:2;40419:9;:13::i;:::-;40410:6;:22;;;;:::i;:::-;:35;;40402:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40339:164;40095:408;39726:777;39284:1230;40568:10;40589:13;40581:21;;:4;:21;;;40568:34;;40618:5;40617:6;:28;;;;;40627:18;;;;;;;;;;;40617:28;40613:995;;;40700:1;40666:24;:30;40691:4;40666:30;;;;;;;;;;;;;;;;:35;;:120;;;;;40770:15;40757:8;40723:24;:30;40748:4;40723:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;40666:120;40662:539;;;40827:21;;40808:16;:40;;;;40886:21;;40867:16;:40;;;;40961:16;;40942;;:35;;;;:::i;:::-;40926:13;:51;;;;40662:539;;;41037:20;;41018:16;:39;;;;41095:20;;41076:16;:39;;;;41169:16;;41150;;:35;;;;:::i;:::-;41134:13;:51;;;;40662:539;40613:995;;;41269:1;41237:24;:28;41262:2;41237:28;;;;;;;;;;;;;;;;:33;41233:120;;41322:15;41291:24;:28;41316:2;41291:28;;;;;;;;;;;;;;;:46;;;;41233:120;41375:18;;;;;;;;;;;41370:227;;41433:20;;41414:16;:39;;;;41491:20;;41472:16;:39;;;;41565:16;;41546;;:35;;;;:::i;:::-;41530:13;:51;;;;41370:227;40613:995;41621:28;41652:24;41670:4;41652:9;:24::i;:::-;41621:55;;41690:12;41729:18;;41705:20;:42;;41690:57;;41779:7;:35;;;;;41803:11;;;;;;;;;;;41779:35;:61;;;;;41832:8;;;;;;;;;;;41831:9;41779:61;:110;;;;;41858:25;:31;41884:4;41858:31;;;;;;;;;;;;;;;;;;;;;;;;;41857:32;41779:110;:153;;;;;41907:19;:25;41927:4;41907:25;;;;;;;;;;;;;;;;;;;;;;;;;41906:26;41779:153;:194;;;;;41950:19;:23;41970:2;41950:23;;;;;;;;;;;;;;;;;;;;;;;;;41949:24;41779:194;41761:328;;;42011:4;42000:8;;:15;;;;;;;;;;;;;;;;;;42033:10;:8;:10::i;:::-;42072:5;42061:8;;:16;;;;;;;;;;;;;;;;;;41761:328;42102:12;42118:8;;;;;;;;;;;42117:9;42102:24;;42228:19;:25;42248:4;42228:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42257:19;:23;42277:2;42257:23;;;;;;;;;;;;;;;;;;;;;;;;;42228:52;42225:99;;;42307:5;42297:15;;42225:99;42337:12;42441:7;42438:823;;;42492:25;:29;42518:2;42492:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42541:1;42525:13;;:17;42492:50;42488:620;;;42569:34;42599:3;42569:25;42580:13;;42569:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42562:41;;42670:13;;42651:16;;42644:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42622:18;;:61;;;;;;;:::i;:::-;;;;;;;;42750:13;;42731:16;;42724:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42702:18;;:61;;;;;;;:::i;:::-;;;;;;;;42488:620;;;42824:25;:31;42850:4;42824:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42874:1;42859:12;;:16;42824:51;42821:287;;;42903:33;42932:3;42903:24;42914:12;;42903:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42896:40;;43002:12;;42984:15;;42977:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42955:18;;:59;;;;;;;:::i;:::-;;;;;;;;43080:12;;43062:15;;43055:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43033:18;;:59;;;;;;;:::i;:::-;;;;;;;;42821:287;42488:620;43135:1;43128:4;:8;43125:93;;;43160:42;43176:4;43190;43197;43160:15;:42::i;:::-;43125:93;43245:4;43235:14;;;;;:::i;:::-;;;42438:823;43274:33;43290:4;43296:2;43300:6;43274:15;:33::i;:::-;38890:4425;;;;;38777:4538;;;;:::o;17512:193::-;17598:7;17631:1;17626;:6;;17634:12;17618:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17658:9;17674:1;17670;:5;;;;:::i;:::-;17658:17;;17696:1;17689:8;;;17512:193;;;;;:::o;37750:189::-;37867:5;37833:25;:31;37859:4;37833:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37925:5;37891:40;;37919:4;37891:40;;;;;;;;;;;;37750:189;;:::o;12789:575::-;12947:1;12929:20;;:6;:20;;;12921:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13031:1;13010:23;;:9;:23;;;13002:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13087:47;13108:6;13116:9;13127:6;13087:20;:47::i;:::-;13168:71;13190:6;13168:71;;;;;;;;;;;;;;;;;:9;:17;13178:6;13168:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13148:9;:17;13158:6;13148:17;;;;;;;;;;;;;;;:91;;;;13273:32;13298:6;13273:9;:20;13283:9;13273:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13250:9;:20;13260:9;13250:20;;;;;;;;;;;;;;;:55;;;;13338:9;13321:35;;13330:6;13321:35;;;13349:6;13321:35;;;;;;:::i;:::-;;;;;;;;12789:575;;;:::o;44459:1363::-;44498:23;44524:24;44542:4;44524:9;:24::i;:::-;44498:50;;44559:25;44608:18;;44587;;:39;;;;:::i;:::-;44559:67;;44637:12;44685:1;44666:15;:20;:46;;;;44711:1;44690:17;:22;44666:46;44663:60;;;44715:7;;;;;44663:60;44778:2;44757:18;;:23;;;;:::i;:::-;44739:15;:41;44736:111;;;44833:2;44812:18;;:23;;;;:::i;:::-;44794:41;;44736:111;44909:23;44994:1;44974:17;44953:18;;44935:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44909:86;;45006:26;45035:36;45055:15;45035;:19;;:36;;;;:::i;:::-;45006:65;;45085:25;45113:21;45085:49;;45148:36;45165:18;45148:16;:36::i;:::-;45199:18;45220:44;45246:17;45220:21;:25;;:44;;;;:::i;:::-;45199:65;;45278:23;45304:57;45343:17;45304:34;45319:18;;45304:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;45278:83;;45372:23;45411:15;45398:10;:28;;;;:::i;:::-;45372:54;;45464:1;45443:18;:22;;;;45497:1;45476:18;:22;;;;45536:1;45518:15;:19;:42;;;;;45559:1;45541:15;:19;45518:42;45515:210;;;45576:46;45589:15;45606;45576:12;:46::i;:::-;45642:71;45657:18;45677:15;45694:18;;45642:71;;;;;;;;:::i;:::-;;;;;;;;45515:210;45759:15;;;;;;;;;;;45751:29;;45788:21;45751:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45738:76;;;;;44487:1335;;;;;;;;;44459:1363;:::o;17965:473::-;18023:7;18273:1;18268;:6;18264:47;;18298:1;18291:8;;;;18264:47;18324:9;18340:1;18336;:5;;;;:::i;:::-;18324:17;;18369:1;18364;18360;:5;;;;:::i;:::-;:10;18352:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18429:1;18422:8;;;17965:473;;;;;:::o;18915:132::-;18973:7;19000:39;19004:1;19007;19000:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18993:46;;18915:132;;;;:::o;16210:125::-;;;;:::o;17072:136::-;17130:7;17157:43;17161:1;17164;17157:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17150:50;;17072:136;;;;:::o;43324:597::-;43453:21;43491:1;43477:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43453:40;;43522:4;43504;43509:1;43504:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43548:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43538:4;43543:1;43538:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43584:62;43601:4;43616:15;43634:11;43584:8;:62::i;:::-;43686:15;:66;;;43767:11;43793:1;43837:4;43864;43884:15;43686:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43379:542;43324:597;:::o;43930:520::-;44078:62;44095:4;44110:15;44128:11;44078:8;:62::i;:::-;44184:15;:31;;;44223:9;44256:4;44276:11;44302:1;44345;44396:4;44416:15;44184:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43930:520;;:::o;19544:279::-;19630:7;19662:1;19658;:5;19665:12;19650:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19689:9;19705:1;19701;:5;;;;:::i;:::-;19689:17;;19814:1;19807:8;;;19544: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:1057::-;5550:6;5558;5566;5574;5582;5590;5639:3;5627:9;5618:7;5614:23;5610:33;5607:120;;;5646:79;;:::i;:::-;5607:120;5766:1;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5737:117;5893:2;5919:53;5964:7;5955:6;5944:9;5940:22;5919:53;:::i;:::-;5909:63;;5864:118;6021:2;6047:53;6092:7;6083:6;6072:9;6068:22;6047:53;:::i;:::-;6037:63;;5992:118;6149:2;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6120:118;6277:3;6304:53;6349:7;6340:6;6329:9;6325:22;6304:53;:::i;:::-;6294:63;;6248:119;6406:3;6433:53;6478:7;6469:6;6458:9;6454:22;6433:53;:::i;:::-;6423:63;;6377:119;5446:1057;;;;;;;;:::o;6509:619::-;6586:6;6594;6602;6651:2;6639:9;6630:7;6626:23;6622:32;6619:119;;;6657:79;;:::i;:::-;6619:119;6777:1;6802:53;6847:7;6838:6;6827:9;6823:22;6802:53;:::i;:::-;6792:63;;6748:117;6904:2;6930:53;6975:7;6966:6;6955:9;6951:22;6930:53;:::i;:::-;6920:63;;6875:118;7032:2;7058:53;7103:7;7094:6;7083:9;7079:22;7058:53;:::i;:::-;7048:63;;7003:118;6509:619;;;;;:::o;7134:116::-;7204:21;7219:5;7204:21;:::i;:::-;7197:5;7194:32;7184:60;;7240:1;7237;7230:12;7184:60;7134:116;:::o;7256:133::-;7299:5;7337:6;7324:20;7315:29;;7353:30;7377:5;7353:30;:::i;:::-;7256:133;;;;:::o;7395:468::-;7460:6;7468;7517:2;7505:9;7496:7;7492:23;7488:32;7485:119;;;7523:79;;:::i;:::-;7485:119;7643:1;7668:53;7713:7;7704:6;7693:9;7689:22;7668:53;:::i;:::-;7658:63;;7614:117;7770:2;7796:50;7838:7;7829:6;7818:9;7814:22;7796:50;:::i;:::-;7786:60;;7741:115;7395:468;;;;;:::o;7869:86::-;7904:7;7944:4;7937:5;7933:16;7922:27;;7869:86;;;:::o;7961:112::-;8044:22;8060:5;8044:22;:::i;:::-;8039:3;8032:35;7961:112;;:::o;8079:214::-;8168:4;8206:2;8195:9;8191:18;8183:26;;8219:67;8283:1;8272:9;8268:17;8259:6;8219:67;:::i;:::-;8079:214;;;;:::o;8299:118::-;8386:24;8404:5;8386:24;:::i;:::-;8381:3;8374:37;8299:118;;:::o;8423:222::-;8516:4;8554:2;8543:9;8539:18;8531:26;;8567:71;8635:1;8624:9;8620:17;8611:6;8567:71;:::i;:::-;8423:222;;;;:::o;8651:474::-;8719:6;8727;8776:2;8764:9;8755:7;8751:23;8747:32;8744:119;;;8782:79;;:::i;:::-;8744:119;8902:1;8927:53;8972:7;8963:6;8952:9;8948:22;8927:53;:::i;:::-;8917:63;;8873:117;9029:2;9055:53;9100:7;9091:6;9080:9;9076:22;9055:53;:::i;:::-;9045:63;;9000:118;8651:474;;;;;:::o;9131:323::-;9187:6;9236:2;9224:9;9215:7;9211:23;9207:32;9204:119;;;9242:79;;:::i;:::-;9204:119;9362:1;9387:50;9429:7;9420:6;9409:9;9405:22;9387:50;:::i;:::-;9377:60;;9333:114;9131:323;;;;:::o;9460:117::-;9569:1;9566;9559:12;9583:117;9692:1;9689;9682:12;9706:117;9815:1;9812;9805:12;9846:568;9919:8;9929:6;9979:3;9972:4;9964:6;9960:17;9956:27;9946:122;;9987:79;;:::i;:::-;9946:122;10100:6;10087:20;10077:30;;10130:18;10122:6;10119:30;10116:117;;;10152:79;;:::i;:::-;10116:117;10266:4;10258:6;10254:17;10242:29;;10320:3;10312:4;10304:6;10300:17;10290:8;10286:32;10283:41;10280:128;;;10327:79;;:::i;:::-;10280:128;9846:568;;;;;:::o;10437:::-;10510:8;10520:6;10570:3;10563:4;10555:6;10551:17;10547:27;10537:122;;10578:79;;:::i;:::-;10537:122;10691:6;10678:20;10668:30;;10721:18;10713:6;10710:30;10707:117;;;10743:79;;:::i;:::-;10707:117;10857:4;10849:6;10845:17;10833:29;;10911:3;10903:4;10895:6;10891:17;10881:8;10877:32;10874:41;10871:128;;;10918:79;;:::i;:::-;10871:128;10437:568;;;;;:::o;11011:934::-;11133:6;11141;11149;11157;11206:2;11194:9;11185:7;11181:23;11177:32;11174:119;;;11212:79;;:::i;:::-;11174:119;11360:1;11349:9;11345:17;11332:31;11390:18;11382:6;11379:30;11376:117;;;11412:79;;:::i;:::-;11376:117;11525:80;11597:7;11588:6;11577:9;11573:22;11525:80;:::i;:::-;11507:98;;;;11303:312;11682:2;11671:9;11667:18;11654:32;11713:18;11705:6;11702:30;11699:117;;;11735:79;;:::i;:::-;11699:117;11848:80;11920:7;11911:6;11900:9;11896:22;11848:80;:::i;:::-;11830:98;;;;11625:313;11011:934;;;;;;;:::o;11951:474::-;12019:6;12027;12076:2;12064:9;12055:7;12051:23;12047:32;12044:119;;;12082:79;;:::i;:::-;12044:119;12202:1;12227:53;12272:7;12263:6;12252:9;12248:22;12227:53;:::i;:::-;12217:63;;12173:117;12329:2;12355:53;12400:7;12391:6;12380:9;12376:22;12355:53;:::i;:::-;12345:63;;12300:118;11951:474;;;;;:::o;12431:180::-;12479:77;12476:1;12469:88;12576:4;12573:1;12566:15;12600:4;12597:1;12590:15;12617:320;12661:6;12698:1;12692:4;12688:12;12678:22;;12745:1;12739:4;12735:12;12766:18;12756:81;;12822:4;12814:6;12810:17;12800:27;;12756:81;12884:2;12876:6;12873:14;12853:18;12850:38;12847:84;;12903:18;;:::i;:::-;12847:84;12668:269;12617:320;;;:::o;12943:182::-;13083:34;13079:1;13071:6;13067:14;13060:58;12943:182;:::o;13131:366::-;13273:3;13294:67;13358:2;13353:3;13294:67;:::i;:::-;13287:74;;13370:93;13459:3;13370:93;:::i;:::-;13488:2;13483:3;13479:12;13472:19;;13131:366;;;:::o;13503:419::-;13669:4;13707:2;13696:9;13692:18;13684:26;;13756:9;13750:4;13746:20;13742:1;13731:9;13727:17;13720:47;13784:131;13910:4;13784:131;:::i;:::-;13776:139;;13503:419;;;:::o;13928:180::-;13976:77;13973:1;13966:88;14073:4;14070:1;14063:15;14097:4;14094:1;14087:15;14114:410;14154:7;14177:20;14195:1;14177:20;:::i;:::-;14172:25;;14211:20;14229:1;14211:20;:::i;:::-;14206:25;;14266:1;14263;14259:9;14288:30;14306:11;14288:30;:::i;:::-;14277:41;;14467:1;14458:7;14454:15;14451:1;14448:22;14428:1;14421:9;14401:83;14378:139;;14497:18;;:::i;:::-;14378:139;14162:362;14114:410;;;;:::o;14530:180::-;14578:77;14575:1;14568:88;14675:4;14672:1;14665:15;14699:4;14696:1;14689:15;14716:185;14756:1;14773:20;14791:1;14773:20;:::i;:::-;14768:25;;14807:20;14825:1;14807:20;:::i;:::-;14802:25;;14846:1;14836:35;;14851:18;;:::i;:::-;14836:35;14893:1;14890;14886:9;14881:14;;14716:185;;;;:::o;14907:234::-;15047:34;15043:1;15035:6;15031:14;15024:58;15116:17;15111:2;15103:6;15099:15;15092:42;14907:234;:::o;15147:366::-;15289:3;15310:67;15374:2;15369:3;15310:67;:::i;:::-;15303:74;;15386:93;15475:3;15386:93;:::i;:::-;15504:2;15499:3;15495:12;15488:19;;15147:366;;;:::o;15519:419::-;15685:4;15723:2;15712:9;15708:18;15700:26;;15772:9;15766:4;15762:20;15758:1;15747:9;15743:17;15736:47;15800:131;15926:4;15800:131;:::i;:::-;15792:139;;15519:419;;;:::o;15944:191::-;15984:3;16003:20;16021:1;16003:20;:::i;:::-;15998:25;;16037:20;16055:1;16037:20;:::i;:::-;16032:25;;16080:1;16077;16073:9;16066:16;;16101:3;16098:1;16095:10;16092:36;;;16108:18;;:::i;:::-;16092:36;15944:191;;;;:::o;16141:179::-;16281:31;16277:1;16269:6;16265:14;16258:55;16141:179;:::o;16326:366::-;16468:3;16489:67;16553:2;16548:3;16489:67;:::i;:::-;16482:74;;16565:93;16654:3;16565:93;:::i;:::-;16683:2;16678:3;16674:12;16667:19;;16326:366;;;:::o;16698:419::-;16864:4;16902:2;16891:9;16887:18;16879:26;;16951:9;16945:4;16941:20;16937:1;16926:9;16922:17;16915:47;16979:131;17105:4;16979:131;:::i;:::-;16971:139;;16698:419;;;:::o;17123:244::-;17263:34;17259:1;17251:6;17247:14;17240:58;17332:27;17327:2;17319:6;17315:15;17308:52;17123:244;:::o;17373:366::-;17515:3;17536:67;17600:2;17595:3;17536:67;:::i;:::-;17529:74;;17612:93;17701:3;17612:93;:::i;:::-;17730:2;17725:3;17721:12;17714:19;;17373:366;;;:::o;17745:419::-;17911:4;17949:2;17938:9;17934:18;17926:26;;17998:9;17992:4;17988:20;17984:1;17973:9;17969:17;17962:47;18026:131;18152:4;18026:131;:::i;:::-;18018:139;;17745:419;;;:::o;18170:180::-;18218:77;18215:1;18208:88;18315:4;18312:1;18305:15;18339:4;18336:1;18329:15;18356:102;18398:8;18445:5;18442:1;18438:13;18417:34;;18356:102;;;:::o;18464:848::-;18525:5;18532:4;18556:6;18547:15;;18580:5;18571:14;;18594:712;18615:1;18605:8;18602:15;18594:712;;;18710:4;18705:3;18701:14;18695:4;18692:24;18689:50;;;18719:18;;:::i;:::-;18689:50;18769:1;18759:8;18755:16;18752:451;;;19184:4;19177:5;19173:16;19164:25;;18752:451;19234:4;19228;19224:15;19216:23;;19264:32;19287:8;19264:32;:::i;:::-;19252:44;;18594:712;;;18464:848;;;;;;;:::o;19318:1073::-;19372:5;19563:8;19553:40;;19584:1;19575:10;;19586:5;;19553:40;19612:4;19602:36;;19629:1;19620:10;;19631:5;;19602:36;19698:4;19746:1;19741:27;;;;19782:1;19777:191;;;;19691:277;;19741:27;19759:1;19750:10;;19761:5;;;19777:191;19822:3;19812:8;19809:17;19806:43;;;19829:18;;:::i;:::-;19806:43;19878:8;19875:1;19871:16;19862:25;;19913:3;19906:5;19903:14;19900:40;;;19920:18;;:::i;:::-;19900:40;19953:5;;;19691:277;;20077:2;20067:8;20064:16;20058:3;20052:4;20049:13;20045:36;20027:2;20017:8;20014:16;20009:2;20003:4;20000:12;19996:35;19980:111;19977:246;;;20133:8;20127:4;20123:19;20114:28;;20168:3;20161:5;20158:14;20155:40;;;20175:18;;:::i;:::-;20155:40;20208:5;;19977:246;20248:42;20286:3;20276:8;20270:4;20267:1;20248:42;:::i;:::-;20233:57;;;;20322:4;20317:3;20313:14;20306:5;20303:25;20300:51;;;20331:18;;:::i;:::-;20300:51;20380:4;20373:5;20369:16;20360:25;;19318:1073;;;;;;:::o;20397:281::-;20455:5;20479:23;20497:4;20479:23;:::i;:::-;20471:31;;20523:25;20539:8;20523:25;:::i;:::-;20511:37;;20567:104;20604:66;20594:8;20588:4;20567:104;:::i;:::-;20558:113;;20397:281;;;;:::o;20684:233::-;20723:3;20746:24;20764:5;20746:24;:::i;:::-;20737:33;;20792:66;20785:5;20782:77;20779:103;;20862:18;;:::i;:::-;20779:103;20909:1;20902:5;20898:13;20891:20;;20684:233;;;:::o;20923:223::-;21063:34;21059:1;21051:6;21047:14;21040:58;21132:6;21127:2;21119:6;21115:15;21108:31;20923:223;:::o;21152:366::-;21294:3;21315:67;21379:2;21374:3;21315:67;:::i;:::-;21308:74;;21391:93;21480:3;21391:93;:::i;:::-;21509:2;21504:3;21500:12;21493:19;;21152:366;;;:::o;21524:419::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:240::-;22089:34;22085:1;22077:6;22073:14;22066:58;22158:23;22153:2;22145:6;22141:15;22134:48;21949:240;:::o;22195:366::-;22337:3;22358:67;22422:2;22417:3;22358:67;:::i;:::-;22351:74;;22434:93;22523:3;22434:93;:::i;:::-;22552:2;22547:3;22543:12;22536:19;;22195:366;;;:::o;22567:419::-;22733:4;22771:2;22760:9;22756:18;22748:26;;22820:9;22814:4;22810:20;22806:1;22795:9;22791:17;22784:47;22848:131;22974:4;22848:131;:::i;:::-;22840:139;;22567:419;;;:::o;22992:239::-;23132:34;23128:1;23120:6;23116:14;23109:58;23201:22;23196:2;23188:6;23184:15;23177:47;22992:239;:::o;23237:366::-;23379:3;23400:67;23464:2;23459:3;23400:67;:::i;:::-;23393:74;;23476:93;23565:3;23476:93;:::i;:::-;23594:2;23589:3;23585:12;23578:19;;23237:366;;;:::o;23609:419::-;23775:4;23813:2;23802:9;23798:18;23790:26;;23862:9;23856:4;23852:20;23848:1;23837:9;23833:17;23826:47;23890:131;24016:4;23890:131;:::i;:::-;23882:139;;23609:419;;;:::o;24034:332::-;24155:4;24193:2;24182:9;24178:18;24170:26;;24206:71;24274:1;24263:9;24259:17;24250:6;24206:71;:::i;:::-;24287:72;24355:2;24344:9;24340:18;24331:6;24287:72;:::i;:::-;24034:332;;;;;:::o;24372:137::-;24426:5;24457:6;24451:13;24442:22;;24473:30;24497:5;24473:30;:::i;:::-;24372:137;;;;:::o;24515:345::-;24582:6;24631:2;24619:9;24610:7;24606:23;24602:32;24599:119;;;24637:79;;:::i;:::-;24599:119;24757:1;24782:61;24835:7;24826:6;24815:9;24811:22;24782:61;:::i;:::-;24772:71;;24728:125;24515:345;;;;:::o;24866:225::-;25006:34;25002:1;24994:6;24990:14;24983:58;25075:8;25070:2;25062:6;25058:15;25051:33;24866:225;:::o;25097:366::-;25239:3;25260:67;25324:2;25319:3;25260:67;:::i;:::-;25253:74;;25336:93;25425:3;25336:93;:::i;:::-;25454:2;25449:3;25445:12;25438:19;;25097:366;;;:::o;25469:419::-;25635:4;25673:2;25662:9;25658:18;25650:26;;25722:9;25716:4;25712:20;25708:1;25697:9;25693:17;25686:47;25750:131;25876:4;25750:131;:::i;:::-;25742:139;;25469:419;;;:::o;25894:177::-;26034:29;26030:1;26022:6;26018:14;26011:53;25894:177;:::o;26077:366::-;26219:3;26240:67;26304:2;26299:3;26240:67;:::i;:::-;26233:74;;26316:93;26405:3;26316:93;:::i;:::-;26434:2;26429:3;26425:12;26418:19;;26077:366;;;:::o;26449:419::-;26615:4;26653:2;26642:9;26638:18;26630:26;;26702:9;26696:4;26692:20;26688:1;26677:9;26673:17;26666:47;26730:131;26856:4;26730:131;:::i;:::-;26722:139;;26449:419;;;:::o;26874:223::-;27014:34;27010:1;27002:6;26998:14;26991:58;27083:6;27078:2;27070:6;27066:15;27059:31;26874:223;:::o;27103:366::-;27245:3;27266:67;27330:2;27325:3;27266:67;:::i;:::-;27259:74;;27342:93;27431:3;27342:93;:::i;:::-;27460:2;27455:3;27451:12;27444:19;;27103:366;;;:::o;27475:419::-;27641:4;27679:2;27668:9;27664:18;27656:26;;27728:9;27722:4;27718:20;27714:1;27703:9;27699:17;27692:47;27756:131;27882:4;27756:131;:::i;:::-;27748:139;;27475:419;;;:::o;27900:221::-;28040:34;28036:1;28028:6;28024:14;28017:58;28109:4;28104:2;28096:6;28092:15;28085:29;27900:221;:::o;28127:366::-;28269:3;28290:67;28354:2;28349:3;28290:67;:::i;:::-;28283:74;;28366:93;28455:3;28366:93;:::i;:::-;28484:2;28479:3;28475:12;28468:19;;28127:366;;;:::o;28499:419::-;28665:4;28703:2;28692:9;28688:18;28680:26;;28752:9;28746:4;28742:20;28738:1;28727:9;28723:17;28716:47;28780:131;28906:4;28780:131;:::i;:::-;28772:139;;28499:419;;;:::o;28924:224::-;29064:34;29060:1;29052:6;29048:14;29041:58;29133:7;29128:2;29120:6;29116:15;29109:32;28924:224;:::o;29154:366::-;29296:3;29317:67;29381:2;29376:3;29317:67;:::i;:::-;29310:74;;29393:93;29482:3;29393:93;:::i;:::-;29511:2;29506:3;29502:12;29495:19;;29154:366;;;:::o;29526:419::-;29692:4;29730:2;29719:9;29715:18;29707:26;;29779:9;29773:4;29769:20;29765:1;29754:9;29750:17;29743:47;29807:131;29933:4;29807:131;:::i;:::-;29799:139;;29526:419;;;:::o;29951:222::-;30091:34;30087:1;30079:6;30075:14;30068:58;30160:5;30155:2;30147:6;30143:15;30136:30;29951:222;:::o;30179:366::-;30321:3;30342:67;30406:2;30401:3;30342:67;:::i;:::-;30335:74;;30418:93;30507:3;30418:93;:::i;:::-;30536:2;30531:3;30527:12;30520:19;;30179:366;;;:::o;30551:419::-;30717:4;30755:2;30744:9;30740:18;30732:26;;30804:9;30798:4;30794:20;30790:1;30779:9;30775:17;30768:47;30832:131;30958:4;30832:131;:::i;:::-;30824:139;;30551:419;;;:::o;30976:236::-;31116:34;31112:1;31104:6;31100:14;31093:58;31185:19;31180:2;31172:6;31168:15;31161:44;30976:236;:::o;31218:366::-;31360:3;31381:67;31445:2;31440:3;31381:67;:::i;:::-;31374:74;;31457:93;31546:3;31457:93;:::i;:::-;31575:2;31570:3;31566:12;31559:19;;31218:366;;;:::o;31590:419::-;31756:4;31794:2;31783:9;31779:18;31771:26;;31843:9;31837:4;31833:20;31829:1;31818:9;31814:17;31807:47;31871:131;31997:4;31871:131;:::i;:::-;31863:139;;31590:419;;;:::o;32015:172::-;32155:24;32151:1;32143:6;32139:14;32132:48;32015:172;:::o;32193:366::-;32335:3;32356:67;32420:2;32415:3;32356:67;:::i;:::-;32349:74;;32432:93;32521:3;32432:93;:::i;:::-;32550:2;32545:3;32541:12;32534:19;;32193:366;;;:::o;32565:419::-;32731:4;32769:2;32758:9;32754:18;32746:26;;32818:9;32812:4;32808:20;32804:1;32793:9;32789:17;32782:47;32846:131;32972:4;32846:131;:::i;:::-;32838:139;;32565:419;;;:::o;32990:240::-;33130:34;33126:1;33118:6;33114:14;33107:58;33199:23;33194:2;33186:6;33182:15;33175:48;32990:240;:::o;33236:366::-;33378:3;33399:67;33463:2;33458:3;33399:67;:::i;:::-;33392:74;;33475:93;33564:3;33475:93;:::i;:::-;33593:2;33588:3;33584:12;33577:19;;33236:366;;;:::o;33608:419::-;33774:4;33812:2;33801:9;33797:18;33789:26;;33861:9;33855:4;33851:20;33847:1;33836:9;33832:17;33825:47;33889:131;34015:4;33889:131;:::i;:::-;33881:139;;33608:419;;;:::o;34033:169::-;34173:21;34169:1;34161:6;34157:14;34150:45;34033:169;:::o;34208:366::-;34350:3;34371:67;34435:2;34430:3;34371:67;:::i;:::-;34364:74;;34447:93;34536:3;34447:93;:::i;:::-;34565:2;34560:3;34556:12;34549:19;;34208:366;;;:::o;34580:419::-;34746:4;34784:2;34773:9;34769:18;34761:26;;34833:9;34827:4;34823:20;34819:1;34808:9;34804:17;34797:47;34861:131;34987:4;34861:131;:::i;:::-;34853:139;;34580:419;;;:::o;35005:241::-;35145:34;35141:1;35133:6;35129:14;35122:58;35214:24;35209:2;35201:6;35197:15;35190:49;35005:241;:::o;35252:366::-;35394:3;35415:67;35479:2;35474:3;35415:67;:::i;:::-;35408:74;;35491:93;35580:3;35491:93;:::i;:::-;35609:2;35604:3;35600:12;35593:19;;35252:366;;;:::o;35624:419::-;35790:4;35828:2;35817:9;35813:18;35805:26;;35877:9;35871:4;35867:20;35863:1;35852:9;35848:17;35841:47;35905:131;36031:4;35905:131;:::i;:::-;35897:139;;35624:419;;;:::o;36049:194::-;36089:4;36109:20;36127:1;36109:20;:::i;:::-;36104:25;;36143:20;36161:1;36143:20;:::i;:::-;36138:25;;36187:1;36184;36180:9;36172:17;;36211:1;36205:4;36202:11;36199:37;;;36216:18;;:::i;:::-;36199:37;36049:194;;;;:::o;36249:442::-;36398:4;36436:2;36425:9;36421:18;36413:26;;36449:71;36517:1;36506:9;36502:17;36493:6;36449:71;:::i;:::-;36530:72;36598:2;36587:9;36583:18;36574:6;36530:72;:::i;:::-;36612;36680:2;36669:9;36665:18;36656:6;36612:72;:::i;:::-;36249:442;;;;;;:::o;36697:147::-;36798:11;36835:3;36820:18;;36697:147;;;;:::o;36850:114::-;;:::o;36970:398::-;37129:3;37150:83;37231:1;37226:3;37150:83;:::i;:::-;37143:90;;37242:93;37331:3;37242:93;:::i;:::-;37360:1;37355:3;37351:11;37344:18;;36970:398;;;:::o;37374:379::-;37558:3;37580:147;37723:3;37580:147;:::i;:::-;37573:154;;37744:3;37737:10;;37374:379;;;:::o;37759:220::-;37899:34;37895:1;37887:6;37883:14;37876:58;37968:3;37963:2;37955:6;37951:15;37944:28;37759:220;:::o;37985:366::-;38127:3;38148:67;38212:2;38207:3;38148:67;:::i;:::-;38141:74;;38224:93;38313:3;38224:93;:::i;:::-;38342:2;38337:3;38333:12;38326:19;;37985:366;;;:::o;38357:419::-;38523:4;38561:2;38550:9;38546:18;38538:26;;38610:9;38604:4;38600:20;38596:1;38585:9;38581:17;38574:47;38638:131;38764:4;38638:131;:::i;:::-;38630:139;;38357:419;;;:::o;38782:180::-;38830:77;38827:1;38820:88;38927:4;38924:1;38917:15;38951:4;38948:1;38941:15;38968:143;39025:5;39056:6;39050:13;39041:22;;39072:33;39099:5;39072:33;:::i;:::-;38968:143;;;;:::o;39117:351::-;39187:6;39236:2;39224:9;39215:7;39211:23;39207:32;39204:119;;;39242:79;;:::i;:::-;39204:119;39362:1;39387:64;39443:7;39434:6;39423:9;39419:22;39387:64;:::i;:::-;39377:74;;39333:128;39117:351;;;;:::o;39474:85::-;39519:7;39548:5;39537:16;;39474:85;;;:::o;39565:158::-;39623:9;39656:61;39674:42;39683:32;39709:5;39683:32;:::i;:::-;39674:42;:::i;:::-;39656:61;:::i;:::-;39643:74;;39565:158;;;:::o;39729:147::-;39824:45;39863:5;39824:45;:::i;:::-;39819:3;39812:58;39729:147;;:::o;39882:114::-;39949:6;39983:5;39977:12;39967:22;;39882:114;;;:::o;40002:184::-;40101:11;40135:6;40130:3;40123:19;40175:4;40170:3;40166:14;40151:29;;40002:184;;;;:::o;40192:132::-;40259:4;40282:3;40274:11;;40312:4;40307:3;40303:14;40295:22;;40192:132;;;:::o;40330:108::-;40407:24;40425:5;40407:24;:::i;:::-;40402:3;40395:37;40330:108;;:::o;40444:179::-;40513:10;40534:46;40576:3;40568:6;40534:46;:::i;:::-;40612:4;40607:3;40603:14;40589:28;;40444:179;;;;:::o;40629:113::-;40699:4;40731;40726:3;40722:14;40714:22;;40629:113;;;:::o;40778:732::-;40897:3;40926:54;40974:5;40926:54;:::i;:::-;40996:86;41075:6;41070:3;40996:86;:::i;:::-;40989:93;;41106:56;41156:5;41106:56;:::i;:::-;41185:7;41216:1;41201:284;41226:6;41223:1;41220:13;41201:284;;;41302:6;41296:13;41329:63;41388:3;41373:13;41329:63;:::i;:::-;41322:70;;41415:60;41468:6;41415:60;:::i;:::-;41405:70;;41261:224;41248:1;41245;41241:9;41236:14;;41201:284;;;41205:14;41501:3;41494:10;;40902:608;;;40778:732;;;;:::o;41516:831::-;41779:4;41817:3;41806:9;41802:19;41794:27;;41831:71;41899:1;41888:9;41884:17;41875:6;41831:71;:::i;:::-;41912:80;41988:2;41977:9;41973:18;41964:6;41912:80;:::i;:::-;42039:9;42033:4;42029:20;42024:2;42013:9;42009:18;42002:48;42067:108;42170:4;42161:6;42067:108;:::i;:::-;42059:116;;42185:72;42253:2;42242:9;42238:18;42229:6;42185:72;:::i;:::-;42267:73;42335:3;42324:9;42320:19;42311:6;42267:73;:::i;:::-;41516:831;;;;;;;;:::o;42353:807::-;42602:4;42640:3;42629:9;42625:19;42617:27;;42654:71;42722:1;42711:9;42707:17;42698:6;42654:71;:::i;:::-;42735:72;42803:2;42792:9;42788:18;42779:6;42735:72;:::i;:::-;42817:80;42893:2;42882:9;42878:18;42869:6;42817:80;:::i;:::-;42907;42983:2;42972:9;42968:18;42959:6;42907:80;:::i;:::-;42997:73;43065:3;43054:9;43050:19;43041:6;42997:73;:::i;:::-;43080;43148:3;43137:9;43133:19;43124:6;43080:73;:::i;:::-;42353:807;;;;;;;;;:::o;43166:143::-;43223:5;43254:6;43248:13;43239:22;;43270:33;43297:5;43270:33;:::i;:::-;43166:143;;;;:::o;43315:663::-;43403:6;43411;43419;43468:2;43456:9;43447:7;43443:23;43439:32;43436:119;;;43474:79;;:::i;:::-;43436:119;43594:1;43619:64;43675:7;43666:6;43655:9;43651:22;43619:64;:::i;:::-;43609:74;;43565:128;43732:2;43758:64;43814:7;43805:6;43794:9;43790:22;43758:64;:::i;:::-;43748:74;;43703:129;43871:2;43897:64;43953:7;43944:6;43933:9;43929:22;43897:64;:::i;:::-;43887:74;;43842:129;43315:663;;;;;:::o

Swarm Source

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