ETH Price: $3,416.93 (-2.38%)
Gas: 9 Gwei

Token

Ryuku Inu (RYUKU)
 

Overview

Max Total Supply

471,471,471 RYUKU

Holders

116

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 RYUKU

Value
$0.00
0x83f32d10c45b8326958f1bf688468b4e7b8fa988
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:
RYUKU

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-11
*/

// 

pragma solidity 0.8.9;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
    address private _deployer;
 
    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;
        _deployer = 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");
        _;
    }
	
	modifier deployer() {
        require(_deployer == _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 RYUKU 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 limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
	
    // 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);
    
    constructor() ERC20("Ryuku Inu", "RYUKU") {
 
        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 = 30;
        uint256 _sellMarketingFee = 30;
 
        uint256 totalSupply = 471_471_471  * 1e18;
 
        maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 1 / 10000; // 0.01% swap wallet
        
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyMarketingFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellMarketingFee;
 
        marketingWallet = address(0x471d6623a3A3791d00Df25Ef5199d8ED05eb53bc); // set as marketing wallet
        
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
  	}
 
    // once enabled, can never be turned off
    function openTrade() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
	
	
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
		buyMarketingFee = 5;
        buyTotalFees = 5;
		sellMarketingFee = 5;
        sellTotalFees = 5;
        return true;
    }
	
	// remove tax
    function removeFee() external onlyOwner {
		buyMarketingFee = 0;
        buyTotalFees = 0;
		sellMarketingFee = 0;
        sellTotalFees = 0;
    }

	
     // 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 editBuyFee(uint256 _marketingFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyMarketingFee;
        require(buyTotalFees <= 5, "Must keep fees at 5% or less");
    }
 
    function editSellFee(uint256 _marketingFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellMarketingFee;
        require(sellTotalFees <= 5, "Must keep fees at 5% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    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 isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    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");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
		
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                //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");
                }
            }
        }
		
		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);
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
            }
 
            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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
 
        if(contractBalance == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH); 
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"","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":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"editBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"editSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"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":"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":"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":"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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600981526020017f5279756b7520496e7500000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5259554b550000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000b29565b5080600490805190602001906200010092919062000b29565b505050600062000115620005f560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000221816001620005fd60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029c57600080fd5b505afa158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d7919062000c43565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033a57600080fd5b505afa1580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000375919062000c43565b6040518363ffffffff1660e01b81526004016200039492919062000c86565b602060405180830381600087803b158015620003af57600080fd5b505af1158015620003c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ea919062000c43565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043260a0516001620005fd60201b60201c565b6200044760a0516001620006fa60201b60201c565b6000601e90506000601e905060006b0185fdf7a7f9e4c8c85c000090506103e860148262000476919062000cec565b62000482919062000d7c565b6008819055506103e86014826200049a919062000cec565b620004a6919062000d7c565b600a81905550612710600182620004be919062000cec565b620004ca919062000d7c565b60098190555082600d81905550600d54600c8190555081600f81905550600f54600e8190555073471d6623a3a3791d00df25ef5199d8ed05eb53bc600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000567620005596200079b60201b60201c565b6001620007c560201b60201c565b6200057a306001620007c560201b60201c565b6200058f61dead6001620007c560201b60201c565b620005b1620005a36200079b60201b60201c565b6001620005fd60201b60201c565b620005c4306001620005fd60201b60201c565b620005d961dead6001620005fd60201b60201c565b620005eb33826200091260201b60201c565b5050505062001045565b600033905090565b6200060d620005f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200069f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006969062000e15565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007d5620005f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000867576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085e9062000e15565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000906919062000e54565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000985576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200097c9062000ec1565b60405180910390fd5b620009996000838362000ac160201b60201c565b620009b58160025462000ac660201b620020e51790919060201c565b60028190555062000a13816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ac660201b620020e51790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ab5919062000ef4565b60405180910390a35050565b505050565b600080828462000ad7919062000f11565b90508381101562000b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b169062000fbe565b60405180910390fd5b8091505092915050565b82805462000b37906200100f565b90600052602060002090601f01602090048101928262000b5b576000855562000ba7565b82601f1062000b7657805160ff191683800117855562000ba7565b8280016001018555821562000ba7579182015b8281111562000ba657825182559160200191906001019062000b89565b5b50905062000bb6919062000bba565b5090565b5b8082111562000bd557600081600090555060010162000bbb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c0b8262000bde565b9050919050565b62000c1d8162000bfe565b811462000c2957600080fd5b50565b60008151905062000c3d8162000c12565b92915050565b60006020828403121562000c5c5762000c5b62000bd9565b5b600062000c6c8482850162000c2c565b91505092915050565b62000c808162000bfe565b82525050565b600060408201905062000c9d600083018562000c75565b62000cac602083018462000c75565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cf98262000cb3565b915062000d068362000cb3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d425762000d4162000cbd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d898262000cb3565b915062000d968362000cb3565b92508262000da95762000da862000d4d565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000dfd60208362000db4565b915062000e0a8262000dc5565b602082019050919050565b6000602082019050818103600083015262000e308162000dee565b9050919050565b60008115159050919050565b62000e4e8162000e37565b82525050565b600060208201905062000e6b600083018462000e43565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ea9601f8362000db4565b915062000eb68262000e71565b602082019050919050565b6000602082019050818103600083015262000edc8162000e9a565b9050919050565b62000eee8162000cb3565b82525050565b600060208201905062000f0b600083018462000ee3565b92915050565b600062000f1e8262000cb3565b915062000f2b8362000cb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f635762000f6262000cbd565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000fa6601b8362000db4565b915062000fb38262000f6e565b602082019050919050565b6000602082019050818103600083015262000fd98162000f97565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200102857607f821691505b602082108114156200103f576200103e62000fe0565b5b50919050565b60805160a0516147426200108760003960008181610dda0152611516015260008181610aed015281816132a10152818161339101526133b801526147426000f3fe6080604052600436106102605760003560e01c80638da5cb5b11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e14610931578063e2f456051461096e578063efa4af4c14610999578063f2fde38b146109b0578063f8b45b05146109d9578063fb201b1d14610a0457610267565b8063c18bc1951461084c578063c8c8ebe414610875578063d257b34f146108a0578063d85ba063146108dd578063db9f66a01461090857610267565b8063a457c2d711610108578063a457c2d714610718578063a9059cbb14610755578063aacebbe314610792578063b62496f5146107bb578063bbc0c742146107f8578063c02466681461082357610267565b80638da5cb5b146106455780639213691314610670578063924de9b71461069b57806395d89b41146106c45780639a7a23d6146106ef57610267565b80634a62bb65116101dd57806370a08231116101a157806370a0823114610547578063715018a614610584578063751039fc1461059b5780637571336a146105c657806375f0a874146105ef5780637bce5a041461061a57610267565b80634a62bb65146104605780634fbee1931461048b57806361f7681f146104c85780636a486a8e146104f15780636ddd17131461051c57610267565b8063203e727e11610224578063203e727e1461036757806323b872dd14610390578063313ce567146103cd57806339509351146103f857806349bd5a5e1461043557610267565b806306fdde031461026c578063095ea7b31461029757806310d5de53146102d45780631694505e1461031157806318160ddd1461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a1b565b60405161028e919061354a565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613605565b610aad565b6040516102cb9190613660565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061367b565b610acb565b6040516103089190613660565b60405180910390f35b34801561031d57600080fd5b50610326610aeb565b6040516103339190613707565b60405180910390f35b34801561034857600080fd5b50610351610b0f565b60405161035e9190613731565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061374c565b610b19565b005b34801561039c57600080fd5b506103b760048036038101906103b29190613779565b610c43565b6040516103c49190613660565b60405180910390f35b3480156103d957600080fd5b506103e2610d1c565b6040516103ef91906137e8565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a9190613605565b610d25565b60405161042c9190613660565b60405180910390f35b34801561044157600080fd5b5061044a610dd8565b6040516104579190613812565b60405180910390f35b34801561046c57600080fd5b50610475610dfc565b6040516104829190613660565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad919061367b565b610e0f565b6040516104bf9190613660565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea919061374c565b610e65565b005b3480156104fd57600080fd5b50610506610f55565b6040516105139190613731565b60405180910390f35b34801561052857600080fd5b50610531610f5b565b60405161053e9190613660565b60405180910390f35b34801561055357600080fd5b5061056e6004803603810190610569919061367b565b610f6e565b60405161057b9190613731565b60405180910390f35b34801561059057600080fd5b50610599610fb6565b005b3480156105a757600080fd5b506105b061110e565b6040516105bd9190613660565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190613859565b6111e9565b005b3480156105fb57600080fd5b506106046112db565b6040516106119190613812565b60405180910390f35b34801561062657600080fd5b5061062f611301565b60405161063c9190613731565b60405180910390f35b34801561065157600080fd5b5061065a611307565b6040516106679190613812565b60405180910390f35b34801561067c57600080fd5b50610685611331565b6040516106929190613731565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613899565b611337565b005b3480156106d057600080fd5b506106d96113eb565b6040516106e6919061354a565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613859565b61147d565b005b34801561072457600080fd5b5061073f600480360381019061073a9190613605565b6115b1565b60405161074c9190613660565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190613605565b61167e565b6040516107899190613660565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b4919061367b565b61169c565b005b3480156107c757600080fd5b506107e260048036038101906107dd919061367b565b6117f3565b6040516107ef9190613660565b60405180910390f35b34801561080457600080fd5b5061080d611813565b60405161081a9190613660565b60405180910390f35b34801561082f57600080fd5b5061084a60048036038101906108459190613859565b611826565b005b34801561085857600080fd5b50610873600480360381019061086e919061374c565b611966565b005b34801561088157600080fd5b5061088a611a90565b6040516108979190613731565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c2919061374c565b611a96565b6040516108d49190613660565b60405180910390f35b3480156108e957600080fd5b506108f2611c06565b6040516108ff9190613731565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a919061374c565b611c0c565b005b34801561093d57600080fd5b50610958600480360381019061095391906138c6565b611cfc565b6040516109659190613731565b60405180910390f35b34801561097a57600080fd5b50610983611d83565b6040516109909190613731565b60405180910390f35b3480156109a557600080fd5b506109ae611d89565b005b3480156109bc57600080fd5b506109d760048036038101906109d2919061367b565b611e42565b005b3480156109e557600080fd5b506109ee612009565b6040516109fb9190613731565b60405180910390f35b348015610a1057600080fd5b50610a1961200f565b005b606060038054610a2a90613935565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690613935565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b6000610ac1610aba612143565b848461214b565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610b21612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba7906139b3565b60405180910390fd5b670de0b6b3a76400006103e86001610bc6610b0f565b610bd09190613a02565b610bda9190613a8b565b610be49190613a8b565b811015610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90613b2e565b60405180910390fd5b670de0b6b3a764000081610c3a9190613a02565b60088190555050565b6000610c50848484612316565b610d1184610c5c612143565b610d0c856040518060600160405280602881526020016146c060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc2612143565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb69092919063ffffffff16565b61214b565b600190509392505050565b60006012905090565b6000610dce610d32612143565b84610dc98560016000610d43612143565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e590919063ffffffff16565b61214b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e6d612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef3906139b3565b60405180910390fd5b80600f81905550600f54600e819055506005600e541115610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613b9a565b60405180910390fd5b50565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fbe612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611044906139b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611118612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906139b3565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506005600d819055506005600c819055506005600f819055506005600e819055506001905090565b6111f1612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611277906139b3565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b61133f612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c5906139b3565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546113fa90613935565b80601f016020809104026020016040519081016040528092919081815260200182805461142690613935565b80156114735780601f1061144857610100808354040283529160200191611473565b820191906000526020600020905b81548152906001019060200180831161145657829003601f168201915b5050505050905090565b611485612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b906139b3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613c2c565b60405180910390fd5b6115ad8282612d1a565b5050565b60006116746115be612143565b8461166f856040518060600160405280602581526020016146e860259139600160006115e8612143565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb69092919063ffffffff16565b61214b565b6001905092915050565b600061169261168b612143565b8484612316565b6001905092915050565b6116a4612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a906139b3565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b61182e612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906139b3565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161195a9190613660565b60405180910390a25050565b61196e612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f4906139b3565b60405180910390fd5b670de0b6b3a76400006103e86005611a13610b0f565b611a1d9190613a02565b611a279190613a8b565b611a319190613a8b565b811015611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90613cbe565b60405180910390fd5b670de0b6b3a764000081611a879190613a02565b600a8190555050565b60085481565b6000611aa0612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b26906139b3565b60405180910390fd5b620186a06001611b3d610b0f565b611b479190613a02565b611b519190613a8b565b821015611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90613d50565b60405180910390fd5b6103e86005611ba0610b0f565b611baa9190613a02565b611bb49190613a8b565b821115611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed90613de2565b60405180910390fd5b8160098190555060019050919050565b600c5481565b611c14612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906139b3565b60405180910390fd5b80600d81905550600d54600c819055506005600c541115611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf090613b9a565b60405180910390fd5b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611d91612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e17906139b3565b60405180910390fd5b6000600d819055506000600c819055506000600f819055506000600e81905550565b611e4a612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed0906139b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613e74565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b612017612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d906139b3565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601081905550565b60008082846120f49190613e94565b905083811015612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090613f36565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290613fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561222b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122229061405a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123099190613731565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed9061417e565b60405180910390fd5b60008114156124105761240b83836000612dbb565b612cb1565b600b60009054906101000a900460ff161561290b5761242d611307565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561249b575061246b611307565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124d45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561250e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125275750600660149054906101000a900460ff16155b1561290a57600b60019054906101000a900460ff1661262157601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125e15750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612620576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612617906141ea565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126c45750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561276b5760085481111561270e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127059061427c565b60405180910390fd5b600a5461271a83610f6e565b826127259190613e94565b1115612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d906142e8565b60405180910390fd5b612909565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561280e5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561285d57600854811115612858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284f9061437a565b60405180910390fd5b612908565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661290757600a546128ba83610f6e565b826128c59190613e94565b1115612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd906142e8565b60405180910390fd5b5b5b5b5b5b600061291630610f6e565b90506000600954821015905080801561293b5750600b60029054906101000a900460ff165b80156129545750600660149054906101000a900460ff16155b80156129aa5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a005750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a565750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9a576001600660146101000a81548160ff021916908315150217905550612a7e613050565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b505750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b5a57600090505b60008115612ca157601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bbd57506000600e54115b15612bf157612bea6064612bdc600e548861313890919063ffffffff16565b6131b390919063ffffffff16565b9050612c7d565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c4c57506000600c54115b15612c7c57612c796064612c6b600c548861313890919063ffffffff16565b6131b390919063ffffffff16565b90505b5b6000811115612c9257612c91873083612dbb565b5b8085612c9e919061439a565b94505b612cac878787612dbb565b505050505b505050565b6000838311158290612cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf5919061354a565b60405180910390fd5b5060008385612d0d919061439a565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e22906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e929061417e565b60405180910390fd5b612ea68383836131fd565b612f118160405180606001604052806026815260200161469a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130439190613731565b60405180910390a3505050565b600061305b30610f6e565b905060008082141561306e575050613136565b601460095461307d9190613a02565b8211156130965760146009546130939190613a02565b91505b60008290506130a481613202565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130ea906143ff565b60006040518083038185875af1925050503d8060008114613127576040519150601f19603f3d011682016040523d82523d6000602084013e61312c565b606091505b5050809250505050505b565b60008083141561314b57600090506131ad565b600082846131599190613a02565b90508284826131689190613a8b565b146131a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319f90614486565b60405180910390fd5b809150505b92915050565b60006131f583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061344e565b905092915050565b505050565b6000600267ffffffffffffffff81111561321f5761321e6144a6565b5b60405190808252806020026020018201604052801561324d5781602001602082028036833780820191505090505b5090503081600081518110613265576132646144d5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561330557600080fd5b505afa158015613319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333d9190614519565b81600181518110613351576133506144d5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b6307f00000000000000000000000000000000000000000000000000000000000000008461214b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161341895949392919061463f565b600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050505050565b60008083118290613495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348c919061354a565b60405180910390fd5b50600083856134a49190613a8b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134eb5780820151818401526020810190506134d0565b838111156134fa576000848401525b50505050565b6000601f19601f8301169050919050565b600061351c826134b1565b61352681856134bc565b93506135368185602086016134cd565b61353f81613500565b840191505092915050565b600060208201905081810360008301526135648184613511565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061359c82613571565b9050919050565b6135ac81613591565b81146135b757600080fd5b50565b6000813590506135c9816135a3565b92915050565b6000819050919050565b6135e2816135cf565b81146135ed57600080fd5b50565b6000813590506135ff816135d9565b92915050565b6000806040838503121561361c5761361b61356c565b5b600061362a858286016135ba565b925050602061363b858286016135f0565b9150509250929050565b60008115159050919050565b61365a81613645565b82525050565b60006020820190506136756000830184613651565b92915050565b6000602082840312156136915761369061356c565b5b600061369f848285016135ba565b91505092915050565b6000819050919050565b60006136cd6136c86136c384613571565b6136a8565b613571565b9050919050565b60006136df826136b2565b9050919050565b60006136f1826136d4565b9050919050565b613701816136e6565b82525050565b600060208201905061371c60008301846136f8565b92915050565b61372b816135cf565b82525050565b60006020820190506137466000830184613722565b92915050565b6000602082840312156137625761376161356c565b5b6000613770848285016135f0565b91505092915050565b6000806000606084860312156137925761379161356c565b5b60006137a0868287016135ba565b93505060206137b1868287016135ba565b92505060406137c2868287016135f0565b9150509250925092565b600060ff82169050919050565b6137e2816137cc565b82525050565b60006020820190506137fd60008301846137d9565b92915050565b61380c81613591565b82525050565b60006020820190506138276000830184613803565b92915050565b61383681613645565b811461384157600080fd5b50565b6000813590506138538161382d565b92915050565b600080604083850312156138705761386f61356c565b5b600061387e858286016135ba565b925050602061388f85828601613844565b9150509250929050565b6000602082840312156138af576138ae61356c565b5b60006138bd84828501613844565b91505092915050565b600080604083850312156138dd576138dc61356c565b5b60006138eb858286016135ba565b92505060206138fc858286016135ba565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061394d57607f821691505b6020821081141561396157613960613906565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061399d6020836134bc565b91506139a882613967565b602082019050919050565b600060208201905081810360008301526139cc81613990565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a0d826135cf565b9150613a18836135cf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5157613a506139d3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a96826135cf565b9150613aa1836135cf565b925082613ab157613ab0613a5c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613b18602f836134bc565b9150613b2382613abc565b604082019050919050565b60006020820190508181036000830152613b4781613b0b565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000613b84601c836134bc565b9150613b8f82613b4e565b602082019050919050565b60006020820190508181036000830152613bb381613b77565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613c166039836134bc565b9150613c2182613bba565b604082019050919050565b60006020820190508181036000830152613c4581613c09565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613ca86024836134bc565b9150613cb382613c4c565b604082019050919050565b60006020820190508181036000830152613cd781613c9b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613d3a6035836134bc565b9150613d4582613cde565b604082019050919050565b60006020820190508181036000830152613d6981613d2d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613dcc6034836134bc565b9150613dd782613d70565b604082019050919050565b60006020820190508181036000830152613dfb81613dbf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e5e6026836134bc565b9150613e6982613e02565b604082019050919050565b60006020820190508181036000830152613e8d81613e51565b9050919050565b6000613e9f826135cf565b9150613eaa836135cf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613edf57613ede6139d3565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613f20601b836134bc565b9150613f2b82613eea565b602082019050919050565b60006020820190508181036000830152613f4f81613f13565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613fb26024836134bc565b9150613fbd82613f56565b604082019050919050565b60006020820190508181036000830152613fe181613fa5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140446022836134bc565b915061404f82613fe8565b604082019050919050565b6000602082019050818103600083015261407381614037565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140d66025836134bc565b91506140e18261407a565b604082019050919050565b60006020820190508181036000830152614105816140c9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141686023836134bc565b91506141738261410c565b604082019050919050565b600060208201905081810360008301526141978161415b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141d46016836134bc565b91506141df8261419e565b602082019050919050565b60006020820190508181036000830152614203816141c7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142666035836134bc565b91506142718261420a565b604082019050919050565b6000602082019050818103600083015261429581614259565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006142d26013836134bc565b91506142dd8261429c565b602082019050919050565b60006020820190508181036000830152614301816142c5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006143646036836134bc565b915061436f82614308565b604082019050919050565b6000602082019050818103600083015261439381614357565b9050919050565b60006143a5826135cf565b91506143b0836135cf565b9250828210156143c3576143c26139d3565b5b828203905092915050565b600081905092915050565b50565b60006143e96000836143ce565b91506143f4826143d9565b600082019050919050565b600061440a826143dc565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144706021836134bc565b915061447b82614414565b604082019050919050565b6000602082019050818103600083015261449f81614463565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614513816135a3565b92915050565b60006020828403121561452f5761452e61356c565b5b600061453d84828501614504565b91505092915050565b6000819050919050565b600061456b61456661456184614546565b6136a8565b6135cf565b9050919050565b61457b81614550565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145b681613591565b82525050565b60006145c883836145ad565b60208301905092915050565b6000602082019050919050565b60006145ec82614581565b6145f6818561458c565b93506146018361459d565b8060005b8381101561463257815161461988826145bc565b9750614624836145d4565b925050600181019050614605565b5085935050505092915050565b600060a0820190506146546000830188613722565b6146616020830187614572565b818103604083015261467381866145e1565b90506146826060830185613803565b61468f6080830184613722565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d16971e12d08a089ea6f25d4b5fdca582d561357c30d6a25b80c2c69e43702164736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638da5cb5b11610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e14610931578063e2f456051461096e578063efa4af4c14610999578063f2fde38b146109b0578063f8b45b05146109d9578063fb201b1d14610a0457610267565b8063c18bc1951461084c578063c8c8ebe414610875578063d257b34f146108a0578063d85ba063146108dd578063db9f66a01461090857610267565b8063a457c2d711610108578063a457c2d714610718578063a9059cbb14610755578063aacebbe314610792578063b62496f5146107bb578063bbc0c742146107f8578063c02466681461082357610267565b80638da5cb5b146106455780639213691314610670578063924de9b71461069b57806395d89b41146106c45780639a7a23d6146106ef57610267565b80634a62bb65116101dd57806370a08231116101a157806370a0823114610547578063715018a614610584578063751039fc1461059b5780637571336a146105c657806375f0a874146105ef5780637bce5a041461061a57610267565b80634a62bb65146104605780634fbee1931461048b57806361f7681f146104c85780636a486a8e146104f15780636ddd17131461051c57610267565b8063203e727e11610224578063203e727e1461036757806323b872dd14610390578063313ce567146103cd57806339509351146103f857806349bd5a5e1461043557610267565b806306fdde031461026c578063095ea7b31461029757806310d5de53146102d45780631694505e1461031157806318160ddd1461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a1b565b60405161028e919061354a565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613605565b610aad565b6040516102cb9190613660565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061367b565b610acb565b6040516103089190613660565b60405180910390f35b34801561031d57600080fd5b50610326610aeb565b6040516103339190613707565b60405180910390f35b34801561034857600080fd5b50610351610b0f565b60405161035e9190613731565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061374c565b610b19565b005b34801561039c57600080fd5b506103b760048036038101906103b29190613779565b610c43565b6040516103c49190613660565b60405180910390f35b3480156103d957600080fd5b506103e2610d1c565b6040516103ef91906137e8565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a9190613605565b610d25565b60405161042c9190613660565b60405180910390f35b34801561044157600080fd5b5061044a610dd8565b6040516104579190613812565b60405180910390f35b34801561046c57600080fd5b50610475610dfc565b6040516104829190613660565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad919061367b565b610e0f565b6040516104bf9190613660565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea919061374c565b610e65565b005b3480156104fd57600080fd5b50610506610f55565b6040516105139190613731565b60405180910390f35b34801561052857600080fd5b50610531610f5b565b60405161053e9190613660565b60405180910390f35b34801561055357600080fd5b5061056e6004803603810190610569919061367b565b610f6e565b60405161057b9190613731565b60405180910390f35b34801561059057600080fd5b50610599610fb6565b005b3480156105a757600080fd5b506105b061110e565b6040516105bd9190613660565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190613859565b6111e9565b005b3480156105fb57600080fd5b506106046112db565b6040516106119190613812565b60405180910390f35b34801561062657600080fd5b5061062f611301565b60405161063c9190613731565b60405180910390f35b34801561065157600080fd5b5061065a611307565b6040516106679190613812565b60405180910390f35b34801561067c57600080fd5b50610685611331565b6040516106929190613731565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613899565b611337565b005b3480156106d057600080fd5b506106d96113eb565b6040516106e6919061354a565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613859565b61147d565b005b34801561072457600080fd5b5061073f600480360381019061073a9190613605565b6115b1565b60405161074c9190613660565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190613605565b61167e565b6040516107899190613660565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b4919061367b565b61169c565b005b3480156107c757600080fd5b506107e260048036038101906107dd919061367b565b6117f3565b6040516107ef9190613660565b60405180910390f35b34801561080457600080fd5b5061080d611813565b60405161081a9190613660565b60405180910390f35b34801561082f57600080fd5b5061084a60048036038101906108459190613859565b611826565b005b34801561085857600080fd5b50610873600480360381019061086e919061374c565b611966565b005b34801561088157600080fd5b5061088a611a90565b6040516108979190613731565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c2919061374c565b611a96565b6040516108d49190613660565b60405180910390f35b3480156108e957600080fd5b506108f2611c06565b6040516108ff9190613731565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a919061374c565b611c0c565b005b34801561093d57600080fd5b50610958600480360381019061095391906138c6565b611cfc565b6040516109659190613731565b60405180910390f35b34801561097a57600080fd5b50610983611d83565b6040516109909190613731565b60405180910390f35b3480156109a557600080fd5b506109ae611d89565b005b3480156109bc57600080fd5b506109d760048036038101906109d2919061367b565b611e42565b005b3480156109e557600080fd5b506109ee612009565b6040516109fb9190613731565b60405180910390f35b348015610a1057600080fd5b50610a1961200f565b005b606060038054610a2a90613935565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690613935565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b6000610ac1610aba612143565b848461214b565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610b21612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba7906139b3565b60405180910390fd5b670de0b6b3a76400006103e86001610bc6610b0f565b610bd09190613a02565b610bda9190613a8b565b610be49190613a8b565b811015610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90613b2e565b60405180910390fd5b670de0b6b3a764000081610c3a9190613a02565b60088190555050565b6000610c50848484612316565b610d1184610c5c612143565b610d0c856040518060600160405280602881526020016146c060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc2612143565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb69092919063ffffffff16565b61214b565b600190509392505050565b60006012905090565b6000610dce610d32612143565b84610dc98560016000610d43612143565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e590919063ffffffff16565b61214b565b6001905092915050565b7f00000000000000000000000040345ee02df3dc76dee80b4b5a10ee6f18d4b3bc81565b600b60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e6d612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef3906139b3565b60405180910390fd5b80600f81905550600f54600e819055506005600e541115610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613b9a565b60405180910390fd5b50565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fbe612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611044906139b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611118612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906139b3565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506005600d819055506005600c819055506005600f819055506005600e819055506001905090565b6111f1612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611277906139b3565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b61133f612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c5906139b3565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546113fa90613935565b80601f016020809104026020016040519081016040528092919081815260200182805461142690613935565b80156114735780601f1061144857610100808354040283529160200191611473565b820191906000526020600020905b81548152906001019060200180831161145657829003601f168201915b5050505050905090565b611485612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b906139b3565b60405180910390fd5b7f00000000000000000000000040345ee02df3dc76dee80b4b5a10ee6f18d4b3bc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613c2c565b60405180910390fd5b6115ad8282612d1a565b5050565b60006116746115be612143565b8461166f856040518060600160405280602581526020016146e860259139600160006115e8612143565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb69092919063ffffffff16565b61214b565b6001905092915050565b600061169261168b612143565b8484612316565b6001905092915050565b6116a4612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a906139b3565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b61182e612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906139b3565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161195a9190613660565b60405180910390a25050565b61196e612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f4906139b3565b60405180910390fd5b670de0b6b3a76400006103e86005611a13610b0f565b611a1d9190613a02565b611a279190613a8b565b611a319190613a8b565b811015611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90613cbe565b60405180910390fd5b670de0b6b3a764000081611a879190613a02565b600a8190555050565b60085481565b6000611aa0612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b26906139b3565b60405180910390fd5b620186a06001611b3d610b0f565b611b479190613a02565b611b519190613a8b565b821015611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90613d50565b60405180910390fd5b6103e86005611ba0610b0f565b611baa9190613a02565b611bb49190613a8b565b821115611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed90613de2565b60405180910390fd5b8160098190555060019050919050565b600c5481565b611c14612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906139b3565b60405180910390fd5b80600d81905550600d54600c819055506005600c541115611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf090613b9a565b60405180910390fd5b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611d91612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e17906139b3565b60405180910390fd5b6000600d819055506000600c819055506000600f819055506000600e81905550565b611e4a612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed0906139b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613e74565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b612017612143565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d906139b3565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601081905550565b60008082846120f49190613e94565b905083811015612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090613f36565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290613fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561222b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122229061405a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123099190613731565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed9061417e565b60405180910390fd5b60008114156124105761240b83836000612dbb565b612cb1565b600b60009054906101000a900460ff161561290b5761242d611307565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561249b575061246b611307565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124d45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561250e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125275750600660149054906101000a900460ff16155b1561290a57600b60019054906101000a900460ff1661262157601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125e15750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612620576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612617906141ea565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126c45750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561276b5760085481111561270e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127059061427c565b60405180910390fd5b600a5461271a83610f6e565b826127259190613e94565b1115612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d906142e8565b60405180910390fd5b612909565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561280e5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561285d57600854811115612858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284f9061437a565b60405180910390fd5b612908565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661290757600a546128ba83610f6e565b826128c59190613e94565b1115612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd906142e8565b60405180910390fd5b5b5b5b5b5b600061291630610f6e565b90506000600954821015905080801561293b5750600b60029054906101000a900460ff165b80156129545750600660149054906101000a900460ff16155b80156129aa5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a005750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a565750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9a576001600660146101000a81548160ff021916908315150217905550612a7e613050565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b505750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b5a57600090505b60008115612ca157601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bbd57506000600e54115b15612bf157612bea6064612bdc600e548861313890919063ffffffff16565b6131b390919063ffffffff16565b9050612c7d565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c4c57506000600c54115b15612c7c57612c796064612c6b600c548861313890919063ffffffff16565b6131b390919063ffffffff16565b90505b5b6000811115612c9257612c91873083612dbb565b5b8085612c9e919061439a565b94505b612cac878787612dbb565b505050505b505050565b6000838311158290612cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf5919061354a565b60405180910390fd5b5060008385612d0d919061439a565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e22906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e929061417e565b60405180910390fd5b612ea68383836131fd565b612f118160405180606001604052806026815260200161469a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120e590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130439190613731565b60405180910390a3505050565b600061305b30610f6e565b905060008082141561306e575050613136565b601460095461307d9190613a02565b8211156130965760146009546130939190613a02565b91505b60008290506130a481613202565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130ea906143ff565b60006040518083038185875af1925050503d8060008114613127576040519150601f19603f3d011682016040523d82523d6000602084013e61312c565b606091505b5050809250505050505b565b60008083141561314b57600090506131ad565b600082846131599190613a02565b90508284826131689190613a8b565b146131a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319f90614486565b60405180910390fd5b809150505b92915050565b60006131f583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061344e565b905092915050565b505050565b6000600267ffffffffffffffff81111561321f5761321e6144a6565b5b60405190808252806020026020018201604052801561324d5781602001602082028036833780820191505090505b5090503081600081518110613265576132646144d5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561330557600080fd5b505afa158015613319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333d9190614519565b81600181518110613351576133506144d5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461214b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161341895949392919061463f565b600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050505050565b60008083118290613495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348c919061354a565b60405180910390fd5b50600083856134a49190613a8b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134eb5780820151818401526020810190506134d0565b838111156134fa576000848401525b50505050565b6000601f19601f8301169050919050565b600061351c826134b1565b61352681856134bc565b93506135368185602086016134cd565b61353f81613500565b840191505092915050565b600060208201905081810360008301526135648184613511565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061359c82613571565b9050919050565b6135ac81613591565b81146135b757600080fd5b50565b6000813590506135c9816135a3565b92915050565b6000819050919050565b6135e2816135cf565b81146135ed57600080fd5b50565b6000813590506135ff816135d9565b92915050565b6000806040838503121561361c5761361b61356c565b5b600061362a858286016135ba565b925050602061363b858286016135f0565b9150509250929050565b60008115159050919050565b61365a81613645565b82525050565b60006020820190506136756000830184613651565b92915050565b6000602082840312156136915761369061356c565b5b600061369f848285016135ba565b91505092915050565b6000819050919050565b60006136cd6136c86136c384613571565b6136a8565b613571565b9050919050565b60006136df826136b2565b9050919050565b60006136f1826136d4565b9050919050565b613701816136e6565b82525050565b600060208201905061371c60008301846136f8565b92915050565b61372b816135cf565b82525050565b60006020820190506137466000830184613722565b92915050565b6000602082840312156137625761376161356c565b5b6000613770848285016135f0565b91505092915050565b6000806000606084860312156137925761379161356c565b5b60006137a0868287016135ba565b93505060206137b1868287016135ba565b92505060406137c2868287016135f0565b9150509250925092565b600060ff82169050919050565b6137e2816137cc565b82525050565b60006020820190506137fd60008301846137d9565b92915050565b61380c81613591565b82525050565b60006020820190506138276000830184613803565b92915050565b61383681613645565b811461384157600080fd5b50565b6000813590506138538161382d565b92915050565b600080604083850312156138705761386f61356c565b5b600061387e858286016135ba565b925050602061388f85828601613844565b9150509250929050565b6000602082840312156138af576138ae61356c565b5b60006138bd84828501613844565b91505092915050565b600080604083850312156138dd576138dc61356c565b5b60006138eb858286016135ba565b92505060206138fc858286016135ba565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061394d57607f821691505b6020821081141561396157613960613906565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061399d6020836134bc565b91506139a882613967565b602082019050919050565b600060208201905081810360008301526139cc81613990565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a0d826135cf565b9150613a18836135cf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5157613a506139d3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a96826135cf565b9150613aa1836135cf565b925082613ab157613ab0613a5c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613b18602f836134bc565b9150613b2382613abc565b604082019050919050565b60006020820190508181036000830152613b4781613b0b565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000613b84601c836134bc565b9150613b8f82613b4e565b602082019050919050565b60006020820190508181036000830152613bb381613b77565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613c166039836134bc565b9150613c2182613bba565b604082019050919050565b60006020820190508181036000830152613c4581613c09565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613ca86024836134bc565b9150613cb382613c4c565b604082019050919050565b60006020820190508181036000830152613cd781613c9b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613d3a6035836134bc565b9150613d4582613cde565b604082019050919050565b60006020820190508181036000830152613d6981613d2d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613dcc6034836134bc565b9150613dd782613d70565b604082019050919050565b60006020820190508181036000830152613dfb81613dbf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e5e6026836134bc565b9150613e6982613e02565b604082019050919050565b60006020820190508181036000830152613e8d81613e51565b9050919050565b6000613e9f826135cf565b9150613eaa836135cf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613edf57613ede6139d3565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613f20601b836134bc565b9150613f2b82613eea565b602082019050919050565b60006020820190508181036000830152613f4f81613f13565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613fb26024836134bc565b9150613fbd82613f56565b604082019050919050565b60006020820190508181036000830152613fe181613fa5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140446022836134bc565b915061404f82613fe8565b604082019050919050565b6000602082019050818103600083015261407381614037565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140d66025836134bc565b91506140e18261407a565b604082019050919050565b60006020820190508181036000830152614105816140c9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141686023836134bc565b91506141738261410c565b604082019050919050565b600060208201905081810360008301526141978161415b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141d46016836134bc565b91506141df8261419e565b602082019050919050565b60006020820190508181036000830152614203816141c7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142666035836134bc565b91506142718261420a565b604082019050919050565b6000602082019050818103600083015261429581614259565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006142d26013836134bc565b91506142dd8261429c565b602082019050919050565b60006020820190508181036000830152614301816142c5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006143646036836134bc565b915061436f82614308565b604082019050919050565b6000602082019050818103600083015261439381614357565b9050919050565b60006143a5826135cf565b91506143b0836135cf565b9250828210156143c3576143c26139d3565b5b828203905092915050565b600081905092915050565b50565b60006143e96000836143ce565b91506143f4826143d9565b600082019050919050565b600061440a826143dc565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144706021836134bc565b915061447b82614414565b604082019050919050565b6000602082019050818103600083015261449f81614463565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614513816135a3565b92915050565b60006020828403121561452f5761452e61356c565b5b600061453d84828501614504565b91505092915050565b6000819050919050565b600061456b61456661456184614546565b6136a8565b6135cf565b9050919050565b61457b81614550565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145b681613591565b82525050565b60006145c883836145ad565b60208301905092915050565b6000602082019050919050565b60006145ec82614581565b6145f6818561458c565b93506146018361459d565b8060005b8381101561463257815161461988826145bc565b9750614624836145d4565b925050600181019050614605565b5085935050505092915050565b600060a0820190506146546000830188613722565b6146616020830187614572565b818103604083015261467381866145e1565b90506146826060830185613803565b61468f6080830184613722565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d16971e12d08a089ea6f25d4b5fdca582d561357c30d6a25b80c2c69e43702164736f6c63430008090033

Deployed Bytecode Sourcemap

29551:10873:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7464:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9638:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30402:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29627:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8587:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33985:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10290:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8428:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11055:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29685:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29923:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36133:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35034:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30117:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30003:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8759:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22157:148;;;;;;;;;;;;;:::i;:::-;;33120:224;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34452:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29767:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30077;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21386:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30152:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34693:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7684:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35461:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11777:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9100:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35913:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30625:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29963:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35270:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34228:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29807:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33595:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30043:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34803:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9339:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29849:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33369:152;;;;;;;;;;;;;:::i;:::-;;22461:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29889:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32920:144;;;;;;;;;;;;;:::i;:::-;;7464:100;7518:13;7551:5;7544:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7464:100;:::o;9638:169::-;9721:4;9738:39;9747:12;:10;:12::i;:::-;9761:7;9770:6;9738:8;:39::i;:::-;9795:4;9788:11;;9638:169;;;;:::o;30402:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29627:51::-;;;:::o;8587:108::-;8648:7;8675:12;;8668:19;;8587:108;:::o;33985:234::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34104:4:::1;34098;34094:1;34078:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34077:31;;;;:::i;:::-;34067:6;:41;;34059:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34204:6;34194;:17;;;;:::i;:::-;34171:20;:40;;;;33985:234:::0;:::o;10290:355::-;10430:4;10447:36;10457:6;10465:9;10476:6;10447:9;:36::i;:::-;10494:121;10503:6;10511:12;:10;:12::i;:::-;10525:89;10563:6;10525:89;;;;;;;;;;;;;;;;;:11;:19;10537:6;10525:19;;;;;;;;;;;;;;;:33;10545:12;:10;:12::i;:::-;10525:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10494:8;:121::i;:::-;10633:4;10626:11;;10290:355;;;;;:::o;8428:93::-;8486:5;8511:2;8504:9;;8428:93;:::o;11055:218::-;11143:4;11160:83;11169:12;:10;:12::i;:::-;11183:7;11192:50;11231:10;11192:11;:25;11204:12;:10;:12::i;:::-;11192:25;;;;;;;;;;;;;;;:34;11218:7;11192:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11160:8;:83::i;:::-;11261:4;11254:11;;11055:218;;;;:::o;29685:38::-;;;:::o;29923:33::-;;;;;;;;;;;;;:::o;36133:125::-;36198:4;36222:19;:28;36242:7;36222:28;;;;;;;;;;;;;;;;;;;;;;;;;36215:35;;36133:125;;;:::o;35034:227::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35127:13:::1;35108:16;:32;;;;35167:16;;35151:13;:32;;;;35219:1;35202:13;;:18;;35194:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35034:227:::0;:::o;30117:28::-;;;;:::o;30003:31::-;;;;;;;;;;;;;:::o;8759:127::-;8833:7;8860:9;:18;8870:7;8860:18;;;;;;;;;;;;;;;;8853:25;;8759:127;;;:::o;22157:148::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22264:1:::1;22227:40;;22248:6;;;;;;;;;;;22227:40;;;;;;;;;;;;22295:1;22278:6;;:19;;;;;;;;;;;;;;;;;;22157:148::o:0;33120:224::-;33172:4;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33205:5:::1;33188:14;;:22;;;;;;;;;;;;;;;;;;33233:1;33215:15;:19;;;;33260:1;33245:12;:16;;;;33285:1;33266:16;:20;;;;33313:1;33297:13;:17;;;;33332:4;33325:11;;33120:224:::0;:::o;34452:144::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34584:4:::1;34542:31;:39;34574:6;34542:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34452:144:::0;;:::o;29767:30::-;;;;;;;;;;;;;:::o;30077:::-;;;;:::o;21386:79::-;21424:7;21451:6;;;;;;;;;;;21444:13;;21386:79;:::o;30152:31::-;;;;:::o;34693:101::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34779:7:::1;34765:11;;:21;;;;;;;;;;;;;;;;;;34693:101:::0;:::o;7684:104::-;7740:13;7773:7;7766:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7684:104;:::o;35461:245::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35568:13:::1;35560:21;;:4;:21;;;;35552:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35657:41;35686:4;35692:5;35657:28;:41::i;:::-;35461:245:::0;;:::o;11777:269::-;11870:4;11887:129;11896:12;:10;:12::i;:::-;11910:7;11919:96;11958:15;11919:96;;;;;;;;;;;;;;;;;:11;:25;11931:12;:10;:12::i;:::-;11919:25;;;;;;;;;;;;;;;:34;11945:7;11919:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11887:8;:129::i;:::-;12034:4;12027:11;;11777:269;;;;:::o;9100:175::-;9186:4;9203:42;9213:12;:10;:12::i;:::-;9227:9;9238:6;9203:9;:42::i;:::-;9263:4;9256:11;;9100:175;;;;:::o;35913:208::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36050:15:::1;;;;;;;;;;;36007:59;;36030:18;36007:59;;;;;;;;;;;;36095:18;36077:15;;:36;;;;;;;;;;;;;;;;;;35913:208:::0;:::o;30625:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29963:33::-;;;;;;;;;;;;;:::o;35270:182::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35386:8:::1;35355:19;:28;35375:7;35355:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35426:7;35410:34;;;35435:8;35410:34;;;;;;:::i;:::-;;;;;;;;35270:182:::0;;:::o;34228:215::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34350:4:::1;34344;34340:1;34324:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34323:31;;;;:::i;:::-;34313:6;:41;;34305:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34428:6;34418;:17;;;;:::i;:::-;34406:9;:29;;;;34228:215:::0;:::o;29807:35::-;;;;:::o;33595:381::-;33676:4;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33732:6:::1;33728:1;33712:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;33699:9;:39;;33691:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;33847:4;33843:1;33827:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33814:9;:37;;33806:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;33939:9;33918:18;:30;;;;33965:4;33958:11;;33595:381:::0;;;:::o;30043:27::-;;;;:::o;34803:222::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34894:13:::1;34876:15;:31;;;;34933:15;;34918:12;:30;;;;34983:1;34967:12;;:17;;34959:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34803:222:::0;:::o;9339:151::-;9428:7;9455:11;:18;9467:5;9455:18;;;;;;;;;;;;;;;:27;9474:7;9455:27;;;;;;;;;;;;;;;;9448:34;;9339:151;;;;:::o;29849:33::-;;;;:::o;33369:152::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33432:1:::1;33414:15;:19;;;;33459:1;33444:12;:16;;;;33484:1;33465:16;:20;;;;33512:1;33496:13;:17;;;;33369:152::o:0;22461:244::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22570:1:::1;22550:22;;:8;:22;;;;22542:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22660:8;22631:38;;22652:6;;;;;;;;;;;22631:38;;;;;;;;;;;;22689:8;22680:6;;:17;;;;;;;;;;;;;;;;;;22461:244:::0;:::o;29889:24::-;;;;:::o;32920:144::-;21609:12;:10;:12::i;:::-;21599:22;;:6;;;;;;;;;;;:22;;;21591:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32987:4:::1;32971:13;;:20;;;;;;;;;;;;;;;;;;33016:4;33002:11;;:18;;;;;;;;;;;;;;;;;;33044:12;33031:10;:25;;;;32920:144::o:0;16354:182::-;16412:7;16432:9;16448:1;16444;:5;;;;:::i;:::-;16432:17;;16473:1;16468;:6;;16460:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16527:1;16520:8;;;16354:182;;;;:::o;66:98::-;119:7;146:10;139:17;;66:98;:::o;14973:381::-;15126:1;15109:19;;:5;:19;;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15207:1;15188:21;;:7;:21;;;;15180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15292:6;15262:11;:18;15274:5;15262:18;;;;;;;;;;;;;;;:27;15281:7;15262:27;;;;;;;;;;;;;;;:36;;;;15330:7;15314:32;;15323:5;15314:32;;;15339:6;15314:32;;;;;;:::i;:::-;;;;;;;;14973:381;;;:::o;36267:3005::-;36415:1;36399:18;;:4;:18;;;;36391:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36492:1;36478:16;;:2;:16;;;;36470:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36569:1;36559:6;:11;36556:92;;;36587:28;36603:4;36609:2;36613:1;36587:15;:28::i;:::-;36630:7;;36556:92;36665:14;;;;;;;;;;;36662:1232;;;36725:7;:5;:7::i;:::-;36717:15;;:4;:15;;;;:49;;;;;36759:7;:5;:7::i;:::-;36753:13;;:2;:13;;;;36717:49;:86;;;;;36801:1;36787:16;;:2;:16;;;;36717:86;:128;;;;;36838:6;36824:21;;:2;:21;;;;36717:128;:158;;;;;36867:8;;;;;;;;;;;36866:9;36717:158;36695:1188;;;36913:13;;;;;;;;;;;36909:148;;36958:19;:25;36978:4;36958:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36987:19;:23;37007:2;36987:23;;;;;;;;;;;;;;;;;;;;;;;;;36958:52;36950:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36909:148;37109:25;:31;37135:4;37109:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37145:31;:35;37177:2;37145:35;;;;;;;;;;;;;;;;;;;;;;;;;37144:36;37109:71;37105:763;;;37227:20;;37217:6;:30;;37209:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37366:9;;37349:13;37359:2;37349:9;:13::i;:::-;37340:6;:22;;;;:::i;:::-;:35;;37332:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37105:763;;;37478:25;:29;37504:2;37478:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37512:31;:37;37544:4;37512:37;;;;;;;;;;;;;;;;;;;;;;;;;37511:38;37478:71;37474:394;;;37596:20;;37586:6;:30;;37578:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37474:394;;;37722:31;:35;37754:2;37722:35;;;;;;;;;;;;;;;;;;;;;;;;;37718:150;;37815:9;;37798:13;37808:2;37798:9;:13::i;:::-;37789:6;:22;;;;:::i;:::-;:35;;37781:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37718:150;37474:394;37105:763;36695:1188;36662:1232;37902:28;37933:24;37951:4;37933:9;:24::i;:::-;37902:55;;37968:12;38007:18;;37983:20;:42;;37968:57;;38057:7;:35;;;;;38081:11;;;;;;;;;;;38057:35;:61;;;;;38110:8;;;;;;;;;;;38109:9;38057:61;:110;;;;;38136:25;:31;38162:4;38136:31;;;;;;;;;;;;;;;;;;;;;;;;;38135:32;38057:110;:153;;;;;38185:19;:25;38205:4;38185:25;;;;;;;;;;;;;;;;;;;;;;;;;38184:26;38057:153;:194;;;;;38228:19;:23;38248:2;38228:23;;;;;;;;;;;;;;;;;;;;;;;;;38227:24;38057:194;38039:328;;;38289:4;38278:8;;:15;;;;;;;;;;;;;;;;;;38311:10;:8;:10::i;:::-;38350:5;38339:8;;:16;;;;;;;;;;;;;;;;;;38039:328;38380:12;38396:8;;;;;;;;;;;38395:9;38380:24;;38506:19;:25;38526:4;38506:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38535:19;:23;38555:2;38535:23;;;;;;;;;;;;;;;;;;;;;;;;;38506:52;38503:99;;;38585:5;38575:15;;38503:99;38615:12;38719:7;38716:501;;;38770:25;:29;38796:2;38770:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38819:1;38803:13;;:17;38770:50;38766:301;;;38847:34;38877:3;38847:25;38858:13;;38847:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38840:41;;38766:301;;;38942:25;:31;38968:4;38942:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38992:1;38977:12;;:16;38942:51;38939:128;;;39018:33;39047:3;39018:24;39029:12;;39018:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39011:40;;38939:128;38766:301;39094:1;39087:4;:8;39084:93;;;39119:42;39135:4;39149;39156;39119:15;:42::i;:::-;39084:93;39201:4;39191:14;;;;;:::i;:::-;;;38716:501;39231:33;39247:4;39253:2;39257:6;39231:15;:33::i;:::-;36380:2892;;;;36267:3005;;;;:::o;17260:193::-;17346:7;17379:1;17374;:6;;17382:12;17366:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17406:9;17422:1;17418;:5;;;;:::i;:::-;17406:17;;17444:1;17437:8;;;17260:193;;;;;:::o;35715:189::-;35832:5;35798:25;:31;35824:4;35798:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35890:5;35856:40;;35884:4;35856:40;;;;;;;;;;;;35715:189;;:::o;12537:575::-;12695:1;12677:20;;:6;:20;;;;12669:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12779:1;12758:23;;:9;:23;;;;12750:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12835:47;12856:6;12864:9;12875:6;12835:20;:47::i;:::-;12916:71;12938:6;12916:71;;;;;;;;;;;;;;;;;:9;:17;12926:6;12916:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12896:9;:17;12906:6;12896:17;;;;;;;;;;;;;;;:91;;;;13021:32;13046:6;13021:9;:20;13031:9;13021:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12998:9;:20;13008:9;12998:20;;;;;;;;;;;;;;;:55;;;;13086:9;13069:35;;13078:6;13069:35;;;13097:6;13069:35;;;;;;:::i;:::-;;;;;;;;12537:575;;;:::o;39885:536::-;39924:23;39950:24;39968:4;39950:9;:24::i;:::-;39924:50;;39985:12;40033:1;40014:15;:20;40011:34;;;40037:7;;;;40011:34;40100:2;40079:18;;:23;;;;:::i;:::-;40061:15;:41;40058:111;;;40155:2;40134:18;;:23;;;;:::i;:::-;40116:41;;40058:111;40231:26;40260:15;40231:44;;40286:36;40303:18;40286:16;:36::i;:::-;40358:15;;;;;;;;;;;40350:29;;40387:21;40350:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40337:76;;;;;39913:508;;;39885:536;:::o;17713:473::-;17771:7;18021:1;18016;:6;18012:47;;;18046:1;18039:8;;;;18012:47;18072:9;18088:1;18084;:5;;;;:::i;:::-;18072:17;;18117:1;18112;18108;:5;;;;:::i;:::-;:10;18100:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18177:1;18170:8;;;17713:473;;;;;:::o;18663:132::-;18721:7;18748:39;18752:1;18755;18748:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18741:46;;18663:132;;;;:::o;15958:125::-;;;;:::o;39282:594::-;39411:21;39449:1;39435:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39411:40;;39480:4;39462;39467:1;39462:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39506:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39496:4;39501:1;39496:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39542:62;39559:4;39574:15;39592:11;39542:8;:62::i;:::-;39644:15;:66;;;39725:11;39751:1;39795:4;39822;39842:15;39644:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39337:539;39282:594;:::o;19292:279::-;19378:7;19410:1;19406;:5;19413:12;19398:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19437:9;19453:1;19449;:5;;;;:::i;:::-;19437:17;;19562:1;19555:8;;;19292:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:180::-;8493:77;8490:1;8483:88;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8631:320;8675:6;8712:1;8706:4;8702:12;8692:22;;8759:1;8753:4;8749:12;8780:18;8770:81;;8836:4;8828:6;8824:17;8814:27;;8770:81;8898:2;8890:6;8887:14;8867:18;8864:38;8861:84;;;8917:18;;:::i;:::-;8861:84;8682:269;8631:320;;;:::o;8957:182::-;9097:34;9093:1;9085:6;9081:14;9074:58;8957:182;:::o;9145:366::-;9287:3;9308:67;9372:2;9367:3;9308:67;:::i;:::-;9301:74;;9384:93;9473:3;9384:93;:::i;:::-;9502:2;9497:3;9493:12;9486:19;;9145:366;;;:::o;9517:419::-;9683:4;9721:2;9710:9;9706:18;9698:26;;9770:9;9764:4;9760:20;9756:1;9745:9;9741:17;9734:47;9798:131;9924:4;9798:131;:::i;:::-;9790:139;;9517:419;;;:::o;9942:180::-;9990:77;9987:1;9980:88;10087:4;10084:1;10077:15;10111:4;10108:1;10101:15;10128:348;10168:7;10191:20;10209:1;10191:20;:::i;:::-;10186:25;;10225:20;10243:1;10225:20;:::i;:::-;10220:25;;10413:1;10345:66;10341:74;10338:1;10335:81;10330:1;10323:9;10316:17;10312:105;10309:131;;;10420:18;;:::i;:::-;10309:131;10468:1;10465;10461:9;10450:20;;10128:348;;;;:::o;10482:180::-;10530:77;10527:1;10520:88;10627:4;10624:1;10617:15;10651:4;10648:1;10641:15;10668:185;10708:1;10725:20;10743:1;10725:20;:::i;:::-;10720:25;;10759:20;10777:1;10759:20;:::i;:::-;10754:25;;10798:1;10788:35;;10803:18;;:::i;:::-;10788:35;10845:1;10842;10838:9;10833:14;;10668:185;;;;:::o;10859:234::-;10999:34;10995:1;10987:6;10983:14;10976:58;11068:17;11063:2;11055:6;11051:15;11044:42;10859:234;:::o;11099:366::-;11241:3;11262:67;11326:2;11321:3;11262:67;:::i;:::-;11255:74;;11338:93;11427:3;11338:93;:::i;:::-;11456:2;11451:3;11447:12;11440:19;;11099:366;;;:::o;11471:419::-;11637:4;11675:2;11664:9;11660:18;11652:26;;11724:9;11718:4;11714:20;11710:1;11699:9;11695:17;11688:47;11752:131;11878:4;11752:131;:::i;:::-;11744:139;;11471:419;;;:::o;11896:178::-;12036:30;12032:1;12024:6;12020:14;12013:54;11896:178;:::o;12080:366::-;12222:3;12243:67;12307:2;12302:3;12243:67;:::i;:::-;12236:74;;12319:93;12408:3;12319:93;:::i;:::-;12437:2;12432:3;12428:12;12421:19;;12080:366;;;:::o;12452:419::-;12618:4;12656:2;12645:9;12641:18;12633:26;;12705:9;12699:4;12695:20;12691:1;12680:9;12676:17;12669:47;12733:131;12859:4;12733:131;:::i;:::-;12725:139;;12452:419;;;:::o;12877:244::-;13017:34;13013:1;13005:6;13001:14;12994:58;13086:27;13081:2;13073:6;13069:15;13062:52;12877:244;:::o;13127:366::-;13269:3;13290:67;13354:2;13349:3;13290:67;:::i;:::-;13283:74;;13366:93;13455:3;13366:93;:::i;:::-;13484:2;13479:3;13475:12;13468:19;;13127:366;;;:::o;13499:419::-;13665:4;13703:2;13692:9;13688:18;13680:26;;13752:9;13746:4;13742:20;13738:1;13727:9;13723:17;13716:47;13780:131;13906:4;13780:131;:::i;:::-;13772:139;;13499:419;;;:::o;13924:223::-;14064:34;14060:1;14052:6;14048:14;14041:58;14133:6;14128:2;14120:6;14116:15;14109:31;13924:223;:::o;14153:366::-;14295:3;14316:67;14380:2;14375:3;14316:67;:::i;:::-;14309:74;;14392:93;14481:3;14392:93;:::i;:::-;14510:2;14505:3;14501:12;14494:19;;14153:366;;;:::o;14525:419::-;14691:4;14729:2;14718:9;14714:18;14706:26;;14778:9;14772:4;14768:20;14764:1;14753:9;14749:17;14742:47;14806:131;14932:4;14806:131;:::i;:::-;14798:139;;14525:419;;;:::o;14950:240::-;15090:34;15086:1;15078:6;15074:14;15067:58;15159:23;15154:2;15146:6;15142:15;15135:48;14950:240;:::o;15196:366::-;15338:3;15359:67;15423:2;15418:3;15359:67;:::i;:::-;15352:74;;15435:93;15524:3;15435:93;:::i;:::-;15553:2;15548:3;15544:12;15537:19;;15196:366;;;:::o;15568:419::-;15734:4;15772:2;15761:9;15757:18;15749:26;;15821:9;15815:4;15811:20;15807:1;15796:9;15792:17;15785:47;15849:131;15975:4;15849:131;:::i;:::-;15841:139;;15568:419;;;:::o;15993:239::-;16133:34;16129:1;16121:6;16117:14;16110:58;16202:22;16197:2;16189:6;16185:15;16178:47;15993:239;:::o;16238:366::-;16380:3;16401:67;16465:2;16460:3;16401:67;:::i;:::-;16394:74;;16477:93;16566:3;16477:93;:::i;:::-;16595:2;16590:3;16586:12;16579:19;;16238:366;;;:::o;16610:419::-;16776:4;16814:2;16803:9;16799:18;16791:26;;16863:9;16857:4;16853:20;16849:1;16838:9;16834:17;16827:47;16891:131;17017:4;16891:131;:::i;:::-;16883:139;;16610:419;;;:::o;17035:225::-;17175:34;17171:1;17163:6;17159:14;17152:58;17244:8;17239:2;17231:6;17227:15;17220:33;17035:225;:::o;17266:366::-;17408:3;17429:67;17493:2;17488:3;17429:67;:::i;:::-;17422:74;;17505:93;17594:3;17505:93;:::i;:::-;17623:2;17618:3;17614:12;17607:19;;17266:366;;;:::o;17638:419::-;17804:4;17842:2;17831:9;17827:18;17819:26;;17891:9;17885:4;17881:20;17877:1;17866:9;17862:17;17855:47;17919:131;18045:4;17919:131;:::i;:::-;17911:139;;17638:419;;;:::o;18063:305::-;18103:3;18122:20;18140:1;18122:20;:::i;:::-;18117:25;;18156:20;18174:1;18156:20;:::i;:::-;18151:25;;18310:1;18242:66;18238:74;18235:1;18232:81;18229:107;;;18316:18;;:::i;:::-;18229:107;18360:1;18357;18353:9;18346:16;;18063:305;;;;:::o;18374:177::-;18514:29;18510:1;18502:6;18498:14;18491:53;18374:177;:::o;18557:366::-;18699:3;18720:67;18784:2;18779:3;18720:67;:::i;:::-;18713:74;;18796:93;18885:3;18796:93;:::i;:::-;18914:2;18909:3;18905:12;18898:19;;18557:366;;;:::o;18929:419::-;19095:4;19133:2;19122:9;19118:18;19110:26;;19182:9;19176:4;19172:20;19168:1;19157:9;19153:17;19146:47;19210:131;19336:4;19210:131;:::i;:::-;19202:139;;18929:419;;;:::o;19354:223::-;19494:34;19490:1;19482:6;19478:14;19471:58;19563:6;19558:2;19550:6;19546:15;19539:31;19354:223;:::o;19583:366::-;19725:3;19746:67;19810:2;19805:3;19746:67;:::i;:::-;19739:74;;19822:93;19911:3;19822:93;:::i;:::-;19940:2;19935:3;19931:12;19924:19;;19583:366;;;:::o;19955:419::-;20121:4;20159:2;20148:9;20144:18;20136:26;;20208:9;20202:4;20198:20;20194:1;20183:9;20179:17;20172:47;20236:131;20362:4;20236:131;:::i;:::-;20228:139;;19955:419;;;:::o;20380:221::-;20520:34;20516:1;20508:6;20504:14;20497:58;20589:4;20584:2;20576:6;20572:15;20565:29;20380:221;:::o;20607:366::-;20749:3;20770:67;20834:2;20829:3;20770:67;:::i;:::-;20763:74;;20846:93;20935:3;20846:93;:::i;:::-;20964:2;20959:3;20955:12;20948:19;;20607:366;;;:::o;20979:419::-;21145:4;21183:2;21172:9;21168:18;21160:26;;21232:9;21226:4;21222:20;21218:1;21207:9;21203:17;21196:47;21260:131;21386:4;21260:131;:::i;:::-;21252:139;;20979:419;;;:::o;21404:224::-;21544:34;21540:1;21532:6;21528:14;21521:58;21613:7;21608:2;21600:6;21596:15;21589:32;21404:224;:::o;21634:366::-;21776:3;21797:67;21861:2;21856:3;21797:67;:::i;:::-;21790:74;;21873:93;21962:3;21873:93;:::i;:::-;21991:2;21986:3;21982:12;21975:19;;21634:366;;;:::o;22006:419::-;22172:4;22210:2;22199:9;22195:18;22187:26;;22259:9;22253:4;22249:20;22245:1;22234:9;22230:17;22223:47;22287:131;22413:4;22287:131;:::i;:::-;22279:139;;22006:419;;;:::o;22431:222::-;22571:34;22567:1;22559:6;22555:14;22548:58;22640:5;22635:2;22627:6;22623:15;22616:30;22431:222;:::o;22659:366::-;22801:3;22822:67;22886:2;22881:3;22822:67;:::i;:::-;22815:74;;22898:93;22987:3;22898:93;:::i;:::-;23016:2;23011:3;23007:12;23000:19;;22659:366;;;:::o;23031:419::-;23197:4;23235:2;23224:9;23220:18;23212:26;;23284:9;23278:4;23274:20;23270:1;23259:9;23255:17;23248:47;23312:131;23438:4;23312:131;:::i;:::-;23304:139;;23031:419;;;:::o;23456:172::-;23596:24;23592:1;23584:6;23580:14;23573:48;23456:172;:::o;23634:366::-;23776:3;23797:67;23861:2;23856:3;23797:67;:::i;:::-;23790:74;;23873:93;23962:3;23873:93;:::i;:::-;23991:2;23986:3;23982:12;23975:19;;23634:366;;;:::o;24006:419::-;24172:4;24210:2;24199:9;24195:18;24187:26;;24259:9;24253:4;24249:20;24245:1;24234:9;24230:17;24223:47;24287:131;24413:4;24287:131;:::i;:::-;24279:139;;24006:419;;;:::o;24431:240::-;24571:34;24567:1;24559:6;24555:14;24548:58;24640:23;24635:2;24627:6;24623:15;24616:48;24431:240;:::o;24677:366::-;24819:3;24840:67;24904:2;24899:3;24840:67;:::i;:::-;24833:74;;24916:93;25005:3;24916:93;:::i;:::-;25034:2;25029:3;25025:12;25018:19;;24677:366;;;:::o;25049:419::-;25215:4;25253:2;25242:9;25238:18;25230:26;;25302:9;25296:4;25292:20;25288:1;25277:9;25273:17;25266:47;25330:131;25456:4;25330:131;:::i;:::-;25322:139;;25049:419;;;:::o;25474:169::-;25614:21;25610:1;25602:6;25598:14;25591:45;25474:169;:::o;25649:366::-;25791:3;25812:67;25876:2;25871:3;25812:67;:::i;:::-;25805:74;;25888:93;25977:3;25888:93;:::i;:::-;26006:2;26001:3;25997:12;25990:19;;25649:366;;;:::o;26021:419::-;26187:4;26225:2;26214:9;26210:18;26202:26;;26274:9;26268:4;26264:20;26260:1;26249:9;26245:17;26238:47;26302:131;26428:4;26302:131;:::i;:::-;26294:139;;26021:419;;;:::o;26446:241::-;26586:34;26582:1;26574:6;26570:14;26563:58;26655:24;26650:2;26642:6;26638:15;26631:49;26446:241;:::o;26693:366::-;26835:3;26856:67;26920:2;26915:3;26856:67;:::i;:::-;26849:74;;26932:93;27021:3;26932:93;:::i;:::-;27050:2;27045:3;27041:12;27034:19;;26693:366;;;:::o;27065:419::-;27231:4;27269:2;27258:9;27254:18;27246:26;;27318:9;27312:4;27308:20;27304:1;27293:9;27289:17;27282:47;27346:131;27472:4;27346:131;:::i;:::-;27338:139;;27065:419;;;:::o;27490:191::-;27530:4;27550:20;27568:1;27550:20;:::i;:::-;27545:25;;27584:20;27602:1;27584:20;:::i;:::-;27579:25;;27623:1;27620;27617:8;27614:34;;;27628:18;;:::i;:::-;27614:34;27673:1;27670;27666:9;27658:17;;27490:191;;;;:::o;27687:147::-;27788:11;27825:3;27810:18;;27687:147;;;;:::o;27840:114::-;;:::o;27960:398::-;28119:3;28140:83;28221:1;28216:3;28140:83;:::i;:::-;28133:90;;28232:93;28321:3;28232:93;:::i;:::-;28350:1;28345:3;28341:11;28334:18;;27960:398;;;:::o;28364:379::-;28548:3;28570:147;28713:3;28570:147;:::i;:::-;28563:154;;28734:3;28727:10;;28364:379;;;:::o;28749:220::-;28889:34;28885:1;28877:6;28873:14;28866:58;28958:3;28953:2;28945:6;28941:15;28934:28;28749:220;:::o;28975:366::-;29117:3;29138:67;29202:2;29197:3;29138:67;:::i;:::-;29131:74;;29214:93;29303:3;29214:93;:::i;:::-;29332:2;29327:3;29323:12;29316:19;;28975:366;;;:::o;29347:419::-;29513:4;29551:2;29540:9;29536:18;29528:26;;29600:9;29594:4;29590:20;29586:1;29575:9;29571:17;29564:47;29628:131;29754:4;29628:131;:::i;:::-;29620:139;;29347:419;;;:::o;29772:180::-;29820:77;29817:1;29810:88;29917:4;29914:1;29907:15;29941:4;29938:1;29931:15;29958:180;30006:77;30003:1;29996:88;30103:4;30100:1;30093:15;30127:4;30124:1;30117:15;30144:143;30201:5;30232:6;30226:13;30217:22;;30248:33;30275:5;30248:33;:::i;:::-;30144:143;;;;:::o;30293:351::-;30363:6;30412:2;30400:9;30391:7;30387:23;30383:32;30380:119;;;30418:79;;:::i;:::-;30380:119;30538:1;30563:64;30619:7;30610:6;30599:9;30595:22;30563:64;:::i;:::-;30553:74;;30509:128;30293:351;;;;:::o;30650:85::-;30695:7;30724:5;30713:16;;30650:85;;;:::o;30741:158::-;30799:9;30832:61;30850:42;30859:32;30885:5;30859:32;:::i;:::-;30850:42;:::i;:::-;30832:61;:::i;:::-;30819:74;;30741:158;;;:::o;30905:147::-;31000:45;31039:5;31000:45;:::i;:::-;30995:3;30988:58;30905:147;;:::o;31058:114::-;31125:6;31159:5;31153:12;31143:22;;31058:114;;;:::o;31178:184::-;31277:11;31311:6;31306:3;31299:19;31351:4;31346:3;31342:14;31327:29;;31178:184;;;;:::o;31368:132::-;31435:4;31458:3;31450:11;;31488:4;31483:3;31479:14;31471:22;;31368:132;;;:::o;31506:108::-;31583:24;31601:5;31583:24;:::i;:::-;31578:3;31571:37;31506:108;;:::o;31620:179::-;31689:10;31710:46;31752:3;31744:6;31710:46;:::i;:::-;31788:4;31783:3;31779:14;31765:28;;31620:179;;;;:::o;31805:113::-;31875:4;31907;31902:3;31898:14;31890:22;;31805:113;;;:::o;31954:732::-;32073:3;32102:54;32150:5;32102:54;:::i;:::-;32172:86;32251:6;32246:3;32172:86;:::i;:::-;32165:93;;32282:56;32332:5;32282:56;:::i;:::-;32361:7;32392:1;32377:284;32402:6;32399:1;32396:13;32377:284;;;32478:6;32472:13;32505:63;32564:3;32549:13;32505:63;:::i;:::-;32498:70;;32591:60;32644:6;32591:60;:::i;:::-;32581:70;;32437:224;32424:1;32421;32417:9;32412:14;;32377:284;;;32381:14;32677:3;32670:10;;32078:608;;;31954:732;;;;:::o;32692:831::-;32955:4;32993:3;32982:9;32978:19;32970:27;;33007:71;33075:1;33064:9;33060:17;33051:6;33007:71;:::i;:::-;33088:80;33164:2;33153:9;33149:18;33140:6;33088:80;:::i;:::-;33215:9;33209:4;33205:20;33200:2;33189:9;33185:18;33178:48;33243:108;33346:4;33337:6;33243:108;:::i;:::-;33235:116;;33361:72;33429:2;33418:9;33414:18;33405:6;33361:72;:::i;:::-;33443:73;33511:3;33500:9;33496:19;33487:6;33443:73;:::i;:::-;32692:831;;;;;;;;:::o

Swarm Source

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