ETH Price: $3,353.51 (+0.16%)
Gas: 9 Gwei

Token

Amber Turd Inu (TURD)
 

Overview

Max Total Supply

1,000,000,000,000 TURD

Holders

11

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,564,749,263.538017157001962969 TURD

Value
$0.00
0xd38182442b0Dfb93278e8c74c62F3f11bbdEEb33
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:
AmberTurdInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-28
*/

// SPDX-License-Identifier: Unlicensed

/*

I shit in Johhny Depps Bed and Blame my Dogs

Telegram: https://t.me/AmberTurdInu

*/

pragma solidity 0.8.9;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract AmberTurdInu is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet;
    address private devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public earlySellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Amber Turd Inu", "TURD") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 3;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 5;
        uint256 _sellDevFee = 0;
 
        uint256 _earlySellLiquidityFee = 5;
        uint256 _earlySellMarketingFee = 10;
	    uint256 _earlySellDevFee = 0
 
    ; uint256 totalSupply = 1 * 1e12 * 1e18;
 
        maxTransactionAmount = totalSupply * 6 / 1000; // .6% maxTransactionAmountTxn
        maxWallet = totalSupply * 18 / 1000; // 1.8% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	earlySellDevFee = _earlySellDevFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }

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


    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
		        sellDevFee = earlySellDevFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 0;
                sellMarketingFee = 10;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 0;
                sellMarketingFee = 10;
		        sellDevFee = 0;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Chire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600e81526020017f416d626572205475726420496e750000000000000000000000000000000000008152506040518060400160405280600481526020017f545552440000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000bf9565b5080600490805190602001906200013692919062000bf9565b50505060006200014b620006c560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000216816001620006cd60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029157600080fd5b505afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc919062000d13565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032f57600080fd5b505afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000d13565b6040518363ffffffff1660e01b81526004016200038992919062000d56565b602060405180830381600087803b158015620003a457600080fd5b505af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000d13565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200042760a0516001620006cd60201b60201c565b6200043c60a0516001620007ca60201b60201c565b60006002905060006003905060008060059050600060059050600080600590506000600a90506000806c0c9f2c9cd04674edea4000000090506103e860068262000487919062000dbc565b62000493919062000e4c565b6008819055506103e8601282620004ab919062000dbc565b620004b7919062000e4c565b600a81905550612710600a82620004cf919062000dbc565b620004db919062000e4c565b6009819055508960118190555088601281905550876013819055506013546012546011546200050b919062000e84565b62000517919062000e84565b60108190555086601581905550856016819055508460178190555060175460165460155462000547919062000e84565b62000553919062000e84565b601481905550836018819055508260198190555081601a819055506200057e6200086b60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005ce6200086b60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000630620006226200086b60201b60201c565b60016200089560201b60201c565b620006433060016200089560201b60201c565b6200065861dead60016200089560201b60201c565b6200067a6200066c6200086b60201b60201c565b6001620006cd60201b60201c565b6200068d306001620006cd60201b60201c565b620006a261dead6001620006cd60201b60201c565b620006b43382620009e260201b60201c565b505050505050505050505062001115565b600033905090565b620006dd620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200076f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007669062000f42565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008a5620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000937576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092e9062000f42565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009d6919062000f81565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4c9062000fee565b60405180910390fd5b62000a696000838362000b9160201b60201c565b62000a858160025462000b9660201b620026551790919060201c565b60028190555062000ae3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b9660201b620026551790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b85919062001021565b60405180910390a35050565b505050565b600080828462000ba7919062000e84565b90508381101562000bef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be6906200108e565b60405180910390fd5b8091505092915050565b82805462000c0790620010df565b90600052602060002090601f01602090048101928262000c2b576000855562000c77565b82601f1062000c4657805160ff191683800117855562000c77565b8280016001018555821562000c77579182015b8281111562000c7657825182559160200191906001019062000c59565b5b50905062000c86919062000c8a565b5090565b5b8082111562000ca557600081600090555060010162000c8b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cdb8262000cae565b9050919050565b62000ced8162000cce565b811462000cf957600080fd5b50565b60008151905062000d0d8162000ce2565b92915050565b60006020828403121562000d2c5762000d2b62000ca9565b5b600062000d3c8482850162000cfc565b91505092915050565b62000d508162000cce565b82525050565b600060408201905062000d6d600083018562000d45565b62000d7c602083018462000d45565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dc98262000d83565b915062000dd68362000d83565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e125762000e1162000d8d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e598262000d83565b915062000e668362000d83565b92508262000e795762000e7862000e1d565b5b828204905092915050565b600062000e918262000d83565b915062000e9e8362000d83565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ed65762000ed562000d8d565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f2a60208362000ee1565b915062000f378262000ef2565b602082019050919050565b6000602082019050818103600083015262000f5d8162000f1b565b9050919050565b60008115159050919050565b62000f7b8162000f64565b82525050565b600060208201905062000f98600083018462000f70565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fd6601f8362000ee1565b915062000fe38262000f9e565b602082019050919050565b60006020820190508181036000830152620010098162000fc7565b9050919050565b6200101b8162000d83565b82525050565b600060208201905062001038600083018462001010565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001076601b8362000ee1565b915062001083826200103e565b602082019050919050565b60006020820190508181036000830152620010a98162001067565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010f857607f821691505b602082108114156200110f576200110e620010b0565b5b50919050565b60805160a051615c2c62001181600039600081816114a101528181611c9d01528181612d2101528181613141015261323e015260008181610e2601528181612cc9015281816141ba015281816142aa015281816142d10152818161436d01526143940152615c2c6000f3fe60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063aacebbe3116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cab578063f2fde38b14610cd6578063f637434214610cff578063f8b45b0514610d2a57610376565b8063dd62ed3e14610c18578063e2f4560514610c55578063e884f26014610c8057610376565b8063c0246668116100d1578063c024666814610b6e578063c876d0b914610b97578063c8c8ebe414610bc2578063d85ba06314610bed57610376565b8063aacebbe314610add578063b62496f514610b06578063bbc0c74214610b4357610376565b80639fccce3211610164578063a457c2d71161013e578063a457c2d714610a0d578063a4d15b6414610a4a578063a7fc9e2114610a75578063a9059cbb14610aa057610376565b80639fccce321461098e578063a0d82dc5146109b9578063a2657778146109e457610376565b806395d89b41116101a057806395d89b41146108e65780639a7a23d6146109115780639c3b4fdc1461093a5780639c63e6b91461096557610376565b80638da5cb5b146108675780639213691314610892578063924de9b7146108bd57610376565b806339509351116102a057806370a082311161023e5780637571336a116102185780637571336a146107d35780637bce5a04146107fc5780638095d564146108275780638a8c523c1461085057610376565b806370a0823114610754578063715018a614610791578063751039fc146107a857610376565b80634fbee1931161027a5780634fbee19314610696578063541a43cf146106d35780636a486a8e146106fe5780636ddd17131461072957610376565b8063395093511461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631f3fed8f1161030d57806323b872dd116102e757806323b872dd146105475780632bf3d42d146105845780632d5a5d34146105af578063313ce567146105d857610376565b80631f3fed8f146104ca578063203e727e146104f557806322d3e2aa1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d55565b60405161039d919061454c565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061460c565b610de7565b6040516103da9190614667565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614682565b610e05565b6040516104179190614667565b60405180910390f35b34801561042c57600080fd5b50610435610e24565b604051610442919061470e565b60405180910390f35b34801561045757600080fd5b50610460610e48565b60405161046d9190614738565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614682565b610e52565b005b3480156104ab57600080fd5b506104b4610fa9565b6040516104c19190614738565b60405180910390f35b3480156104d657600080fd5b506104df610faf565b6040516104ec9190614738565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614753565b610fb5565b005b34801561052a57600080fd5b5061054560048036038101906105409190614780565b6110e0565b005b34801561055357600080fd5b5061056e6004803603810190610569919061480d565b611212565b60405161057b9190614667565b60405180910390f35b34801561059057600080fd5b506105996112eb565b6040516105a69190614738565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d1919061488c565b6112f1565b005b3480156105e457600080fd5b506105ed6113e3565b6040516105fa91906148e8565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061460c565b6113ec565b6040516106379190614667565b60405180910390f35b34801561064c57600080fd5b5061065561149f565b6040516106629190614912565b60405180910390f35b34801561067757600080fd5b506106806114c3565b60405161068d9190614667565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190614682565b6114d6565b6040516106ca9190614667565b60405180910390f35b3480156106df57600080fd5b506106e861152c565b6040516106f59190614738565b60405180910390f35b34801561070a57600080fd5b50610713611532565b6040516107209190614738565b60405180910390f35b34801561073557600080fd5b5061073e611538565b60405161074b9190614667565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190614682565b61154b565b6040516107889190614738565b60405180910390f35b34801561079d57600080fd5b506107a6611593565b005b3480156107b457600080fd5b506107bd6116eb565b6040516107ca9190614667565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f5919061488c565b6117a6565b005b34801561080857600080fd5b50610811611898565b60405161081e9190614738565b60405180910390f35b34801561083357600080fd5b5061084e6004803603810190610849919061492d565b61189e565b005b34801561085c57600080fd5b506108656119b8565b005b34801561087357600080fd5b5061087c611a8e565b6040516108899190614912565b60405180910390f35b34801561089e57600080fd5b506108a7611ab8565b6040516108b49190614738565b60405180910390f35b3480156108c957600080fd5b506108e460048036038101906108df9190614980565b611abe565b005b3480156108f257600080fd5b506108fb611b72565b604051610908919061454c565b60405180910390f35b34801561091d57600080fd5b506109386004803603810190610933919061488c565b611c04565b005b34801561094657600080fd5b5061094f611d38565b60405161095c9190614738565b60405180910390f35b34801561097157600080fd5b5061098c60048036038101906109879190614a68565b611d3e565b005b34801561099a57600080fd5b506109a3611e87565b6040516109b09190614738565b60405180910390f35b3480156109c557600080fd5b506109ce611e8d565b6040516109db9190614738565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a069190614980565b611e93565b005b348015610a1957600080fd5b50610a346004803603810190610a2f919061460c565b611f47565b604051610a419190614667565b60405180910390f35b348015610a5657600080fd5b50610a5f612014565b604051610a6c9190614667565b60405180910390f35b348015610a8157600080fd5b50610a8a612027565b604051610a979190614738565b60405180910390f35b348015610aac57600080fd5b50610ac76004803603810190610ac2919061460c565b61202d565b604051610ad49190614667565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff9190614682565b61204b565b005b348015610b1257600080fd5b50610b2d6004803603810190610b289190614682565b6121a2565b604051610b3a9190614667565b60405180910390f35b348015610b4f57600080fd5b50610b586121c2565b604051610b659190614667565b60405180910390f35b348015610b7a57600080fd5b50610b956004803603810190610b90919061488c565b6121d5565b005b348015610ba357600080fd5b50610bac612315565b604051610bb99190614667565b60405180910390f35b348015610bce57600080fd5b50610bd7612328565b604051610be49190614738565b60405180910390f35b348015610bf957600080fd5b50610c0261232e565b604051610c0f9190614738565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190614ae9565b612334565b604051610c4c9190614738565b60405180910390f35b348015610c6157600080fd5b50610c6a6123bb565b604051610c779190614738565b60405180910390f35b348015610c8c57600080fd5b50610c956123c1565b604051610ca29190614667565b60405180910390f35b348015610cb757600080fd5b50610cc061247c565b604051610ccd9190614738565b60405180910390f35b348015610ce257600080fd5b50610cfd6004803603810190610cf89190614682565b612482565b005b348015610d0b57600080fd5b50610d14612649565b604051610d219190614738565b60405180910390f35b348015610d3657600080fd5b50610d3f61264f565b604051610d4c9190614738565b60405180910390f35b606060038054610d6490614b58565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9090614b58565b8015610ddd5780601f10610db257610100808354040283529160200191610ddd565b820191906000526020600020905b815481529060010190602001808311610dc057829003601f168201915b5050505050905090565b6000610dfb610df46126b3565b84846126bb565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e5a6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090614bd6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b610fbd6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390614bd6565b60405180910390fd5b670de0b6b3a7640000620186a06001611063610e48565b61106d9190614c25565b6110779190614cae565b6110819190614cae565b8110156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614d51565b60405180910390fd5b670de0b6b3a7640000816110d79190614c25565b60088190555050565b6110e86126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90614bd6565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a819055506017546016546015546111b49190614d71565b6111be9190614d71565b6014819055506019601454111561120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190614e13565b60405180910390fd5b505050505050565b600061121f848484612886565b6112e08461122b6126b3565b6112db85604051806060016040528060288152602001615baa60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112916126b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139869092919063ffffffff16565b6126bb565b600190509392505050565b60195481565b6112f96126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90614bd6565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006114956113f96126b3565b84611490856001600061140a6126b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265590919063ffffffff16565b6126bb565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61159b6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190614bd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116f56126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90614bd6565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6117ae6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614bd6565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6118a66126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c90614bd6565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461195d9190614d71565b6119679190614d71565b601081905550601460105411156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614e7f565b60405180910390fd5b505050565b6119c06126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690614bd6565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b611ac66126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c90614bd6565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b8190614b58565b80601f0160208091040260200160405190810160405280929190818152602001828054611bad90614b58565b8015611bfa5780601f10611bcf57610100808354040283529160200191611bfa565b820191906000526020600020905b815481529060010190602001808311611bdd57829003601f168201915b5050505050905090565b611c0c6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290614bd6565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190614f11565b60405180910390fd5b611d3482826139ea565b5050565b60135481565b611d466126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90614bd6565b60405180910390fd5b611df5611de0611a8e565b611de8611a8e565b611df0610e48565b6126bb565b60005b84849050811015611e8057611e6c33868684818110611e1a57611e19614f31565b5b9050602002016020810190611e2f9190614682565b611e376113e3565b600a611e439190615093565b868686818110611e5657611e55614f31565b5b90506020020135611e679190614c25565b611212565b508080611e78906150de565b915050611df8565b5050505050565b601d5481565b60175481565b611e9b6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614bd6565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b600061200a611f546126b3565b8461200585604051806060016040528060258152602001615bd26025913960016000611f7e6126b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139869092919063ffffffff16565b6126bb565b6001905092915050565b600b60039054906101000a900460ff1681565b601a5481565b600061204161203a6126b3565b8484612886565b6001905092915050565b6120536126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d990614bd6565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6121dd6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614bd6565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123099190614667565b60405180910390a25050565b600f60009054906101000a900460ff1681565b60085481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123cb6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190614bd6565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61248a6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614bd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090615199565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b60008082846126649190614d71565b9050838110156126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a090615205565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272290615297565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561279b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279290615329565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128799190614738565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906153bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295d9061544d565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a0a5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a40906154df565b60405180910390fd5b6000811415612a6357612a5e83836000613a8b565b613981565b600b60009054906101000a900460ff161561312657612a80611a8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aee5750612abe611a8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b275750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b61575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7a5750600560149054906101000a900460ff16155b1561312557600b60019054906101000a900460ff16612c7457601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c345750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6a9061554b565b60405180910390fd5b5b600f60009054906101000a900460ff1615612e3c57612c91611a8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d1857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e3b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ded90615603565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612edf5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f8657600854811115612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2090615695565b60405180910390fd5b600a54612f358361154b565b82612f409190614d71565b1115612f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7890615701565b60405180910390fd5b613124565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130295750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561307857600854811115613073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306a90615793565b60405180910390fd5b613123565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661312257600a546130d58361154b565b826130e09190614d71565b1115613121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311890615701565b60405180910390fd5b5b5b5b5b5b6001601e546131359190614d71565b431115801561319057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131dc5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561323a576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156132a75750600b60039054906101000a900460ff165b156133ca576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561334957504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133469190614d71565b10155b1561339157601854601681905550601954601581905550601a5460178190555060175460165460155461337c9190614d71565b6133869190614d71565b6014819055506133c5565b6000601681905550600a6015819055506017546016546015546133b49190614d71565b6133be9190614d71565b6014819055505b6134a8565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156134575742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff166134a7576000601681905550600a60158190555060006017819055506017546016546015546134969190614d71565b6134a09190614d71565b6014819055505b5b60006134b33061154b565b9050600060095482101590508080156134d85750600b60029054906101000a900460ff165b80156134f15750600560149054906101000a900460ff16155b80156135475750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561359d5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135f35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613637576001600560146101000a81548160ff02191690831515021790555061361b613d20565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136ed5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136f757600090505b6000811561397057602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375a57506000601454115b156138275761378760646137796014548961400790919063ffffffff16565b61408290919063ffffffff16565b90506014546016548261379a9190614c25565b6137a49190614cae565b601c60008282546137b59190614d71565b92505081905550601454601754826137cd9190614c25565b6137d79190614cae565b601d60008282546137e89190614d71565b92505081905550601454601554826138009190614c25565b61380a9190614cae565b601b600082825461381b9190614d71565b9250508190555061394c565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561388257506000601054115b1561394b576138af60646138a16010548961400790919063ffffffff16565b61408290919063ffffffff16565b9050601054601254826138c29190614c25565b6138cc9190614cae565b601c60008282546138dd9190614d71565b92505081905550601054601354826138f59190614c25565b6138ff9190614cae565b601d60008282546139109190614d71565b92505081905550601054601154826139289190614c25565b6139329190614cae565b601b60008282546139439190614d71565b925050819055505b5b600081111561396157613960883083613a8b565b5b808661396d91906157b3565b95505b61397b888888613a8b565b50505050505b505050565b60008383111582906139ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c5919061454c565b60405180910390fd5b50600083856139dd91906157b3565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af2906153bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b629061544d565b60405180910390fd5b613b768383836140cc565b613be181604051806060016040528060268152602001615b84602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139869092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c74816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d139190614738565b60405180910390a3505050565b6000613d2b3061154b565b90506000601d54601b54601c54613d429190614d71565b613d4c9190614d71565b9050600080831480613d5e5750600082145b15613d6b57505050614005565b6014600954613d7a9190614c25565b831115613d93576014600954613d909190614c25565b92505b6000600283601c5486613da69190614c25565b613db09190614cae565b613dba9190614cae565b90506000613dd182866140d190919063ffffffff16565b90506000479050613de18261411b565b6000613df682476140d190919063ffffffff16565b90506000613e2187613e13601b548561400790919063ffffffff16565b61408290919063ffffffff16565b90506000613e4c88613e3e601d548661400790919063ffffffff16565b61408290919063ffffffff16565b90506000818385613e5d91906157b3565b613e6791906157b3565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ec790615818565b60006040518083038185875af1925050503d8060008114613f04576040519150601f19603f3d011682016040523d82523d6000602084013e613f09565b606091505b505080985050600087118015613f1f5750600081115b15613f6c57613f2e8782614367565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051613f639392919061582d565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fb290615818565b60006040518083038185875af1925050503d8060008114613fef576040519150601f19603f3d011682016040523d82523d6000602084013e613ff4565b606091505b505080985050505050505050505050505b565b60008083141561401a576000905061407c565b600082846140289190614c25565b90508284826140379190614cae565b14614077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161406e906158d6565b60405180910390fd5b809150505b92915050565b60006140c483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614450565b905092915050565b505050565b600061411383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613986565b905092915050565b6000600267ffffffffffffffff811115614138576141376158f6565b5b6040519080825280602002602001820160405280156141665781602001602082028036833780820191505090505b509050308160008151811061417e5761417d614f31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561421e57600080fd5b505afa158015614232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614256919061593a565b8160018151811061426a57614269614f31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142cf307f0000000000000000000000000000000000000000000000000000000000000000846126bb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614331959493929190615a60565b600060405180830381600087803b15801561434b57600080fd5b505af115801561435f573d6000803e3d6000fd5b505050505050565b614392307f0000000000000000000000000000000000000000000000000000000000000000846126bb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016143f796959493929190615aba565b6060604051808303818588803b15801561441057600080fd5b505af1158015614424573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144499190615b30565b5050505050565b60008083118290614497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448e919061454c565b60405180910390fd5b50600083856144a69190614cae565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144ed5780820151818401526020810190506144d2565b838111156144fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061451e826144b3565b61452881856144be565b93506145388185602086016144cf565b61454181614502565b840191505092915050565b600060208201905081810360008301526145668184614513565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145a382614578565b9050919050565b6145b381614598565b81146145be57600080fd5b50565b6000813590506145d0816145aa565b92915050565b6000819050919050565b6145e9816145d6565b81146145f457600080fd5b50565b600081359050614606816145e0565b92915050565b600080604083850312156146235761462261456e565b5b6000614631858286016145c1565b9250506020614642858286016145f7565b9150509250929050565b60008115159050919050565b6146618161464c565b82525050565b600060208201905061467c6000830184614658565b92915050565b6000602082840312156146985761469761456e565b5b60006146a6848285016145c1565b91505092915050565b6000819050919050565b60006146d46146cf6146ca84614578565b6146af565b614578565b9050919050565b60006146e6826146b9565b9050919050565b60006146f8826146db565b9050919050565b614708816146ed565b82525050565b600060208201905061472360008301846146ff565b92915050565b614732816145d6565b82525050565b600060208201905061474d6000830184614729565b92915050565b6000602082840312156147695761476861456e565b5b6000614777848285016145f7565b91505092915050565b60008060008060008060c0878903121561479d5761479c61456e565b5b60006147ab89828a016145f7565b96505060206147bc89828a016145f7565b95505060406147cd89828a016145f7565b94505060606147de89828a016145f7565b93505060806147ef89828a016145f7565b92505060a061480089828a016145f7565b9150509295509295509295565b6000806000606084860312156148265761482561456e565b5b6000614834868287016145c1565b9350506020614845868287016145c1565b9250506040614856868287016145f7565b9150509250925092565b6148698161464c565b811461487457600080fd5b50565b60008135905061488681614860565b92915050565b600080604083850312156148a3576148a261456e565b5b60006148b1858286016145c1565b92505060206148c285828601614877565b9150509250929050565b600060ff82169050919050565b6148e2816148cc565b82525050565b60006020820190506148fd60008301846148d9565b92915050565b61490c81614598565b82525050565b60006020820190506149276000830184614903565b92915050565b6000806000606084860312156149465761494561456e565b5b6000614954868287016145f7565b9350506020614965868287016145f7565b9250506040614976868287016145f7565b9150509250925092565b6000602082840312156149965761499561456e565b5b60006149a484828501614877565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126149d2576149d16149ad565b5b8235905067ffffffffffffffff8111156149ef576149ee6149b2565b5b602083019150836020820283011115614a0b57614a0a6149b7565b5b9250929050565b60008083601f840112614a2857614a276149ad565b5b8235905067ffffffffffffffff811115614a4557614a446149b2565b5b602083019150836020820283011115614a6157614a606149b7565b5b9250929050565b60008060008060408587031215614a8257614a8161456e565b5b600085013567ffffffffffffffff811115614aa057614a9f614573565b5b614aac878288016149bc565b9450945050602085013567ffffffffffffffff811115614acf57614ace614573565b5b614adb87828801614a12565b925092505092959194509250565b60008060408385031215614b0057614aff61456e565b5b6000614b0e858286016145c1565b9250506020614b1f858286016145c1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b7057607f821691505b60208210811415614b8457614b83614b29565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bc06020836144be565b9150614bcb82614b8a565b602082019050919050565b60006020820190508181036000830152614bef81614bb3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c30826145d6565b9150614c3b836145d6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c7457614c73614bf6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cb9826145d6565b9150614cc4836145d6565b925082614cd457614cd3614c7f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614d3b602f836144be565b9150614d4682614cdf565b604082019050919050565b60006020820190508181036000830152614d6a81614d2e565b9050919050565b6000614d7c826145d6565b9150614d87836145d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dbc57614dbb614bf6565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614dfd601d836144be565b9150614e0882614dc7565b602082019050919050565b60006020820190508181036000830152614e2c81614df0565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e69601d836144be565b9150614e7482614e33565b602082019050919050565b60006020820190508181036000830152614e9881614e5c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614efb6039836144be565b9150614f0682614e9f565b604082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614fb757808604811115614f9357614f92614bf6565b5b6001851615614fa25780820291505b8081029050614fb085614f60565b9450614f77565b94509492505050565b600082614fd0576001905061508c565b81614fde576000905061508c565b8160018114614ff45760028114614ffe5761502d565b600191505061508c565b60ff8411156150105761500f614bf6565b5b8360020a91508482111561502757615026614bf6565b5b5061508c565b5060208310610133831016604e8410600b84101617156150625782820a90508381111561505d5761505c614bf6565b5b61508c565b61506f8484846001614f6d565b9250905081840481111561508657615085614bf6565b5b81810290505b9392505050565b600061509e826145d6565b91506150a9836148cc565b92506150d67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614fc0565b905092915050565b60006150e9826145d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561511c5761511b614bf6565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151836026836144be565b915061518e82615127565b604082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006151ef601b836144be565b91506151fa826151b9565b602082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152816024836144be565b915061528c82615225565b604082019050919050565b600060208201905081810360008301526152b081615274565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153136022836144be565b915061531e826152b7565b604082019050919050565b6000602082019050818103600083015261534281615306565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153a56025836144be565b91506153b082615349565b604082019050919050565b600060208201905081810360008301526153d481615398565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154376023836144be565b9150615442826153db565b604082019050919050565b600060208201905081810360008301526154668161542a565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006154c96031836144be565b91506154d48261546d565b604082019050919050565b600060208201905081810360008301526154f8816154bc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006155356016836144be565b9150615540826154ff565b602082019050919050565b6000602082019050818103600083015261556481615528565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006155ed6049836144be565b91506155f88261556b565b606082019050919050565b6000602082019050818103600083015261561c816155e0565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061567f6035836144be565b915061568a82615623565b604082019050919050565b600060208201905081810360008301526156ae81615672565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006156eb6013836144be565b91506156f6826156b5565b602082019050919050565b6000602082019050818103600083015261571a816156de565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061577d6036836144be565b915061578882615721565b604082019050919050565b600060208201905081810360008301526157ac81615770565b9050919050565b60006157be826145d6565b91506157c9836145d6565b9250828210156157dc576157db614bf6565b5b828203905092915050565b600081905092915050565b50565b60006158026000836157e7565b915061580d826157f2565b600082019050919050565b6000615823826157f5565b9150819050919050565b60006060820190506158426000830186614729565b61584f6020830185614729565b61585c6040830184614729565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006158c06021836144be565b91506158cb82615864565b604082019050919050565b600060208201905081810360008301526158ef816158b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615934816145aa565b92915050565b6000602082840312156159505761594f61456e565b5b600061595e84828501615925565b91505092915050565b6000819050919050565b600061598c61598761598284615967565b6146af565b6145d6565b9050919050565b61599c81615971565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159d781614598565b82525050565b60006159e983836159ce565b60208301905092915050565b6000602082019050919050565b6000615a0d826159a2565b615a1781856159ad565b9350615a22836159be565b8060005b83811015615a53578151615a3a88826159dd565b9750615a45836159f5565b925050600181019050615a26565b5085935050505092915050565b600060a082019050615a756000830188614729565b615a826020830187615993565b8181036040830152615a948186615a02565b9050615aa36060830185614903565b615ab06080830184614729565b9695505050505050565b600060c082019050615acf6000830189614903565b615adc6020830188614729565b615ae96040830187615993565b615af66060830186615993565b615b036080830185614903565b615b1060a0830184614729565b979650505050505050565b600081519050615b2a816145e0565b92915050565b600080600060608486031215615b4957615b4861456e565b5b6000615b5786828701615b1b565b9350506020615b6886828701615b1b565b9250506040615b7986828701615b1b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208cbe5eed5f0e04520104eca18f41df5da22625128c6a7662785ff97972519ea264736f6c63430008090033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063aacebbe3116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cab578063f2fde38b14610cd6578063f637434214610cff578063f8b45b0514610d2a57610376565b8063dd62ed3e14610c18578063e2f4560514610c55578063e884f26014610c8057610376565b8063c0246668116100d1578063c024666814610b6e578063c876d0b914610b97578063c8c8ebe414610bc2578063d85ba06314610bed57610376565b8063aacebbe314610add578063b62496f514610b06578063bbc0c74214610b4357610376565b80639fccce3211610164578063a457c2d71161013e578063a457c2d714610a0d578063a4d15b6414610a4a578063a7fc9e2114610a75578063a9059cbb14610aa057610376565b80639fccce321461098e578063a0d82dc5146109b9578063a2657778146109e457610376565b806395d89b41116101a057806395d89b41146108e65780639a7a23d6146109115780639c3b4fdc1461093a5780639c63e6b91461096557610376565b80638da5cb5b146108675780639213691314610892578063924de9b7146108bd57610376565b806339509351116102a057806370a082311161023e5780637571336a116102185780637571336a146107d35780637bce5a04146107fc5780638095d564146108275780638a8c523c1461085057610376565b806370a0823114610754578063715018a614610791578063751039fc146107a857610376565b80634fbee1931161027a5780634fbee19314610696578063541a43cf146106d35780636a486a8e146106fe5780636ddd17131461072957610376565b8063395093511461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631f3fed8f1161030d57806323b872dd116102e757806323b872dd146105475780632bf3d42d146105845780632d5a5d34146105af578063313ce567146105d857610376565b80631f3fed8f146104ca578063203e727e146104f557806322d3e2aa1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d55565b60405161039d919061454c565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061460c565b610de7565b6040516103da9190614667565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614682565b610e05565b6040516104179190614667565b60405180910390f35b34801561042c57600080fd5b50610435610e24565b604051610442919061470e565b60405180910390f35b34801561045757600080fd5b50610460610e48565b60405161046d9190614738565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614682565b610e52565b005b3480156104ab57600080fd5b506104b4610fa9565b6040516104c19190614738565b60405180910390f35b3480156104d657600080fd5b506104df610faf565b6040516104ec9190614738565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614753565b610fb5565b005b34801561052a57600080fd5b5061054560048036038101906105409190614780565b6110e0565b005b34801561055357600080fd5b5061056e6004803603810190610569919061480d565b611212565b60405161057b9190614667565b60405180910390f35b34801561059057600080fd5b506105996112eb565b6040516105a69190614738565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d1919061488c565b6112f1565b005b3480156105e457600080fd5b506105ed6113e3565b6040516105fa91906148e8565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061460c565b6113ec565b6040516106379190614667565b60405180910390f35b34801561064c57600080fd5b5061065561149f565b6040516106629190614912565b60405180910390f35b34801561067757600080fd5b506106806114c3565b60405161068d9190614667565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190614682565b6114d6565b6040516106ca9190614667565b60405180910390f35b3480156106df57600080fd5b506106e861152c565b6040516106f59190614738565b60405180910390f35b34801561070a57600080fd5b50610713611532565b6040516107209190614738565b60405180910390f35b34801561073557600080fd5b5061073e611538565b60405161074b9190614667565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190614682565b61154b565b6040516107889190614738565b60405180910390f35b34801561079d57600080fd5b506107a6611593565b005b3480156107b457600080fd5b506107bd6116eb565b6040516107ca9190614667565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f5919061488c565b6117a6565b005b34801561080857600080fd5b50610811611898565b60405161081e9190614738565b60405180910390f35b34801561083357600080fd5b5061084e6004803603810190610849919061492d565b61189e565b005b34801561085c57600080fd5b506108656119b8565b005b34801561087357600080fd5b5061087c611a8e565b6040516108899190614912565b60405180910390f35b34801561089e57600080fd5b506108a7611ab8565b6040516108b49190614738565b60405180910390f35b3480156108c957600080fd5b506108e460048036038101906108df9190614980565b611abe565b005b3480156108f257600080fd5b506108fb611b72565b604051610908919061454c565b60405180910390f35b34801561091d57600080fd5b506109386004803603810190610933919061488c565b611c04565b005b34801561094657600080fd5b5061094f611d38565b60405161095c9190614738565b60405180910390f35b34801561097157600080fd5b5061098c60048036038101906109879190614a68565b611d3e565b005b34801561099a57600080fd5b506109a3611e87565b6040516109b09190614738565b60405180910390f35b3480156109c557600080fd5b506109ce611e8d565b6040516109db9190614738565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a069190614980565b611e93565b005b348015610a1957600080fd5b50610a346004803603810190610a2f919061460c565b611f47565b604051610a419190614667565b60405180910390f35b348015610a5657600080fd5b50610a5f612014565b604051610a6c9190614667565b60405180910390f35b348015610a8157600080fd5b50610a8a612027565b604051610a979190614738565b60405180910390f35b348015610aac57600080fd5b50610ac76004803603810190610ac2919061460c565b61202d565b604051610ad49190614667565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff9190614682565b61204b565b005b348015610b1257600080fd5b50610b2d6004803603810190610b289190614682565b6121a2565b604051610b3a9190614667565b60405180910390f35b348015610b4f57600080fd5b50610b586121c2565b604051610b659190614667565b60405180910390f35b348015610b7a57600080fd5b50610b956004803603810190610b90919061488c565b6121d5565b005b348015610ba357600080fd5b50610bac612315565b604051610bb99190614667565b60405180910390f35b348015610bce57600080fd5b50610bd7612328565b604051610be49190614738565b60405180910390f35b348015610bf957600080fd5b50610c0261232e565b604051610c0f9190614738565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190614ae9565b612334565b604051610c4c9190614738565b60405180910390f35b348015610c6157600080fd5b50610c6a6123bb565b604051610c779190614738565b60405180910390f35b348015610c8c57600080fd5b50610c956123c1565b604051610ca29190614667565b60405180910390f35b348015610cb757600080fd5b50610cc061247c565b604051610ccd9190614738565b60405180910390f35b348015610ce257600080fd5b50610cfd6004803603810190610cf89190614682565b612482565b005b348015610d0b57600080fd5b50610d14612649565b604051610d219190614738565b60405180910390f35b348015610d3657600080fd5b50610d3f61264f565b604051610d4c9190614738565b60405180910390f35b606060038054610d6490614b58565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9090614b58565b8015610ddd5780601f10610db257610100808354040283529160200191610ddd565b820191906000526020600020905b815481529060010190602001808311610dc057829003601f168201915b5050505050905090565b6000610dfb610df46126b3565b84846126bb565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e5a6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090614bd6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b610fbd6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390614bd6565b60405180910390fd5b670de0b6b3a7640000620186a06001611063610e48565b61106d9190614c25565b6110779190614cae565b6110819190614cae565b8110156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614d51565b60405180910390fd5b670de0b6b3a7640000816110d79190614c25565b60088190555050565b6110e86126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90614bd6565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a819055506017546016546015546111b49190614d71565b6111be9190614d71565b6014819055506019601454111561120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190614e13565b60405180910390fd5b505050505050565b600061121f848484612886565b6112e08461122b6126b3565b6112db85604051806060016040528060288152602001615baa60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112916126b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139869092919063ffffffff16565b6126bb565b600190509392505050565b60195481565b6112f96126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90614bd6565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006114956113f96126b3565b84611490856001600061140a6126b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265590919063ffffffff16565b6126bb565b6001905092915050565b7f00000000000000000000000098717f6f2b9d0c67ac282dd7c0b441981bf6be3c81565b600b60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61159b6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190614bd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116f56126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90614bd6565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6117ae6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614bd6565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6118a66126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c90614bd6565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461195d9190614d71565b6119679190614d71565b601081905550601460105411156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614e7f565b60405180910390fd5b505050565b6119c06126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690614bd6565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b611ac66126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c90614bd6565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b8190614b58565b80601f0160208091040260200160405190810160405280929190818152602001828054611bad90614b58565b8015611bfa5780601f10611bcf57610100808354040283529160200191611bfa565b820191906000526020600020905b815481529060010190602001808311611bdd57829003601f168201915b5050505050905090565b611c0c6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290614bd6565b60405180910390fd5b7f00000000000000000000000098717f6f2b9d0c67ac282dd7c0b441981bf6be3c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190614f11565b60405180910390fd5b611d3482826139ea565b5050565b60135481565b611d466126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90614bd6565b60405180910390fd5b611df5611de0611a8e565b611de8611a8e565b611df0610e48565b6126bb565b60005b84849050811015611e8057611e6c33868684818110611e1a57611e19614f31565b5b9050602002016020810190611e2f9190614682565b611e376113e3565b600a611e439190615093565b868686818110611e5657611e55614f31565b5b90506020020135611e679190614c25565b611212565b508080611e78906150de565b915050611df8565b5050505050565b601d5481565b60175481565b611e9b6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614bd6565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b600061200a611f546126b3565b8461200585604051806060016040528060258152602001615bd26025913960016000611f7e6126b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139869092919063ffffffff16565b6126bb565b6001905092915050565b600b60039054906101000a900460ff1681565b601a5481565b600061204161203a6126b3565b8484612886565b6001905092915050565b6120536126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d990614bd6565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6121dd6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614bd6565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123099190614667565b60405180910390a25050565b600f60009054906101000a900460ff1681565b60085481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123cb6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190614bd6565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61248a6126b3565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614bd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090615199565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b60008082846126649190614d71565b9050838110156126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a090615205565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272290615297565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561279b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279290615329565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128799190614738565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906153bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295d9061544d565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a0a5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a40906154df565b60405180910390fd5b6000811415612a6357612a5e83836000613a8b565b613981565b600b60009054906101000a900460ff161561312657612a80611a8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aee5750612abe611a8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b275750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b61575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7a5750600560149054906101000a900460ff16155b1561312557600b60019054906101000a900460ff16612c7457601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c345750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6a9061554b565b60405180910390fd5b5b600f60009054906101000a900460ff1615612e3c57612c91611a8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d1857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7057507f00000000000000000000000098717f6f2b9d0c67ac282dd7c0b441981bf6be3c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e3b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ded90615603565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612edf5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f8657600854811115612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2090615695565b60405180910390fd5b600a54612f358361154b565b82612f409190614d71565b1115612f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7890615701565b60405180910390fd5b613124565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130295750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561307857600854811115613073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306a90615793565b60405180910390fd5b613123565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661312257600a546130d58361154b565b826130e09190614d71565b1115613121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311890615701565b60405180910390fd5b5b5b5b5b5b6001601e546131359190614d71565b431115801561319057507f00000000000000000000000098717f6f2b9d0c67ac282dd7c0b441981bf6be3c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131dc5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561323a576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f00000000000000000000000098717f6f2b9d0c67ac282dd7c0b441981bf6be3c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156132a75750600b60039054906101000a900460ff165b156133ca576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561334957504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133469190614d71565b10155b1561339157601854601681905550601954601581905550601a5460178190555060175460165460155461337c9190614d71565b6133869190614d71565b6014819055506133c5565b6000601681905550600a6015819055506017546016546015546133b49190614d71565b6133be9190614d71565b6014819055505b6134a8565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156134575742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff166134a7576000601681905550600a60158190555060006017819055506017546016546015546134969190614d71565b6134a09190614d71565b6014819055505b5b60006134b33061154b565b9050600060095482101590508080156134d85750600b60029054906101000a900460ff165b80156134f15750600560149054906101000a900460ff16155b80156135475750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561359d5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135f35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613637576001600560146101000a81548160ff02191690831515021790555061361b613d20565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136ed5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136f757600090505b6000811561397057602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375a57506000601454115b156138275761378760646137796014548961400790919063ffffffff16565b61408290919063ffffffff16565b90506014546016548261379a9190614c25565b6137a49190614cae565b601c60008282546137b59190614d71565b92505081905550601454601754826137cd9190614c25565b6137d79190614cae565b601d60008282546137e89190614d71565b92505081905550601454601554826138009190614c25565b61380a9190614cae565b601b600082825461381b9190614d71565b9250508190555061394c565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561388257506000601054115b1561394b576138af60646138a16010548961400790919063ffffffff16565b61408290919063ffffffff16565b9050601054601254826138c29190614c25565b6138cc9190614cae565b601c60008282546138dd9190614d71565b92505081905550601054601354826138f59190614c25565b6138ff9190614cae565b601d60008282546139109190614d71565b92505081905550601054601154826139289190614c25565b6139329190614cae565b601b60008282546139439190614d71565b925050819055505b5b600081111561396157613960883083613a8b565b5b808661396d91906157b3565b95505b61397b888888613a8b565b50505050505b505050565b60008383111582906139ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c5919061454c565b60405180910390fd5b50600083856139dd91906157b3565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af2906153bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b629061544d565b60405180910390fd5b613b768383836140cc565b613be181604051806060016040528060268152602001615b84602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139869092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c74816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d139190614738565b60405180910390a3505050565b6000613d2b3061154b565b90506000601d54601b54601c54613d429190614d71565b613d4c9190614d71565b9050600080831480613d5e5750600082145b15613d6b57505050614005565b6014600954613d7a9190614c25565b831115613d93576014600954613d909190614c25565b92505b6000600283601c5486613da69190614c25565b613db09190614cae565b613dba9190614cae565b90506000613dd182866140d190919063ffffffff16565b90506000479050613de18261411b565b6000613df682476140d190919063ffffffff16565b90506000613e2187613e13601b548561400790919063ffffffff16565b61408290919063ffffffff16565b90506000613e4c88613e3e601d548661400790919063ffffffff16565b61408290919063ffffffff16565b90506000818385613e5d91906157b3565b613e6791906157b3565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ec790615818565b60006040518083038185875af1925050503d8060008114613f04576040519150601f19603f3d011682016040523d82523d6000602084013e613f09565b606091505b505080985050600087118015613f1f5750600081115b15613f6c57613f2e8782614367565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051613f639392919061582d565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fb290615818565b60006040518083038185875af1925050503d8060008114613fef576040519150601f19603f3d011682016040523d82523d6000602084013e613ff4565b606091505b505080985050505050505050505050505b565b60008083141561401a576000905061407c565b600082846140289190614c25565b90508284826140379190614cae565b14614077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161406e906158d6565b60405180910390fd5b809150505b92915050565b60006140c483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614450565b905092915050565b505050565b600061411383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613986565b905092915050565b6000600267ffffffffffffffff811115614138576141376158f6565b5b6040519080825280602002602001820160405280156141665781602001602082028036833780820191505090505b509050308160008151811061417e5761417d614f31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561421e57600080fd5b505afa158015614232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614256919061593a565b8160018151811061426a57614269614f31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142cf307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126bb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614331959493929190615a60565b600060405180830381600087803b15801561434b57600080fd5b505af115801561435f573d6000803e3d6000fd5b505050505050565b614392307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126bb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016143f796959493929190615aba565b6060604051808303818588803b15801561441057600080fd5b505af1158015614424573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144499190615b30565b5050505050565b60008083118290614497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448e919061454c565b60405180910390fd5b50600083856144a69190614cae565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144ed5780820151818401526020810190506144d2565b838111156144fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061451e826144b3565b61452881856144be565b93506145388185602086016144cf565b61454181614502565b840191505092915050565b600060208201905081810360008301526145668184614513565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145a382614578565b9050919050565b6145b381614598565b81146145be57600080fd5b50565b6000813590506145d0816145aa565b92915050565b6000819050919050565b6145e9816145d6565b81146145f457600080fd5b50565b600081359050614606816145e0565b92915050565b600080604083850312156146235761462261456e565b5b6000614631858286016145c1565b9250506020614642858286016145f7565b9150509250929050565b60008115159050919050565b6146618161464c565b82525050565b600060208201905061467c6000830184614658565b92915050565b6000602082840312156146985761469761456e565b5b60006146a6848285016145c1565b91505092915050565b6000819050919050565b60006146d46146cf6146ca84614578565b6146af565b614578565b9050919050565b60006146e6826146b9565b9050919050565b60006146f8826146db565b9050919050565b614708816146ed565b82525050565b600060208201905061472360008301846146ff565b92915050565b614732816145d6565b82525050565b600060208201905061474d6000830184614729565b92915050565b6000602082840312156147695761476861456e565b5b6000614777848285016145f7565b91505092915050565b60008060008060008060c0878903121561479d5761479c61456e565b5b60006147ab89828a016145f7565b96505060206147bc89828a016145f7565b95505060406147cd89828a016145f7565b94505060606147de89828a016145f7565b93505060806147ef89828a016145f7565b92505060a061480089828a016145f7565b9150509295509295509295565b6000806000606084860312156148265761482561456e565b5b6000614834868287016145c1565b9350506020614845868287016145c1565b9250506040614856868287016145f7565b9150509250925092565b6148698161464c565b811461487457600080fd5b50565b60008135905061488681614860565b92915050565b600080604083850312156148a3576148a261456e565b5b60006148b1858286016145c1565b92505060206148c285828601614877565b9150509250929050565b600060ff82169050919050565b6148e2816148cc565b82525050565b60006020820190506148fd60008301846148d9565b92915050565b61490c81614598565b82525050565b60006020820190506149276000830184614903565b92915050565b6000806000606084860312156149465761494561456e565b5b6000614954868287016145f7565b9350506020614965868287016145f7565b9250506040614976868287016145f7565b9150509250925092565b6000602082840312156149965761499561456e565b5b60006149a484828501614877565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126149d2576149d16149ad565b5b8235905067ffffffffffffffff8111156149ef576149ee6149b2565b5b602083019150836020820283011115614a0b57614a0a6149b7565b5b9250929050565b60008083601f840112614a2857614a276149ad565b5b8235905067ffffffffffffffff811115614a4557614a446149b2565b5b602083019150836020820283011115614a6157614a606149b7565b5b9250929050565b60008060008060408587031215614a8257614a8161456e565b5b600085013567ffffffffffffffff811115614aa057614a9f614573565b5b614aac878288016149bc565b9450945050602085013567ffffffffffffffff811115614acf57614ace614573565b5b614adb87828801614a12565b925092505092959194509250565b60008060408385031215614b0057614aff61456e565b5b6000614b0e858286016145c1565b9250506020614b1f858286016145c1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b7057607f821691505b60208210811415614b8457614b83614b29565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bc06020836144be565b9150614bcb82614b8a565b602082019050919050565b60006020820190508181036000830152614bef81614bb3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c30826145d6565b9150614c3b836145d6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c7457614c73614bf6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cb9826145d6565b9150614cc4836145d6565b925082614cd457614cd3614c7f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614d3b602f836144be565b9150614d4682614cdf565b604082019050919050565b60006020820190508181036000830152614d6a81614d2e565b9050919050565b6000614d7c826145d6565b9150614d87836145d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dbc57614dbb614bf6565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614dfd601d836144be565b9150614e0882614dc7565b602082019050919050565b60006020820190508181036000830152614e2c81614df0565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e69601d836144be565b9150614e7482614e33565b602082019050919050565b60006020820190508181036000830152614e9881614e5c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614efb6039836144be565b9150614f0682614e9f565b604082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614fb757808604811115614f9357614f92614bf6565b5b6001851615614fa25780820291505b8081029050614fb085614f60565b9450614f77565b94509492505050565b600082614fd0576001905061508c565b81614fde576000905061508c565b8160018114614ff45760028114614ffe5761502d565b600191505061508c565b60ff8411156150105761500f614bf6565b5b8360020a91508482111561502757615026614bf6565b5b5061508c565b5060208310610133831016604e8410600b84101617156150625782820a90508381111561505d5761505c614bf6565b5b61508c565b61506f8484846001614f6d565b9250905081840481111561508657615085614bf6565b5b81810290505b9392505050565b600061509e826145d6565b91506150a9836148cc565b92506150d67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614fc0565b905092915050565b60006150e9826145d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561511c5761511b614bf6565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151836026836144be565b915061518e82615127565b604082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006151ef601b836144be565b91506151fa826151b9565b602082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152816024836144be565b915061528c82615225565b604082019050919050565b600060208201905081810360008301526152b081615274565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153136022836144be565b915061531e826152b7565b604082019050919050565b6000602082019050818103600083015261534281615306565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153a56025836144be565b91506153b082615349565b604082019050919050565b600060208201905081810360008301526153d481615398565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154376023836144be565b9150615442826153db565b604082019050919050565b600060208201905081810360008301526154668161542a565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006154c96031836144be565b91506154d48261546d565b604082019050919050565b600060208201905081810360008301526154f8816154bc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006155356016836144be565b9150615540826154ff565b602082019050919050565b6000602082019050818103600083015261556481615528565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006155ed6049836144be565b91506155f88261556b565b606082019050919050565b6000602082019050818103600083015261561c816155e0565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061567f6035836144be565b915061568a82615623565b604082019050919050565b600060208201905081810360008301526156ae81615672565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006156eb6013836144be565b91506156f6826156b5565b602082019050919050565b6000602082019050818103600083015261571a816156de565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061577d6036836144be565b915061578882615721565b604082019050919050565b600060208201905081810360008301526157ac81615770565b9050919050565b60006157be826145d6565b91506157c9836145d6565b9250828210156157dc576157db614bf6565b5b828203905092915050565b600081905092915050565b50565b60006158026000836157e7565b915061580d826157f2565b600082019050919050565b6000615823826157f5565b9150819050919050565b60006060820190506158426000830186614729565b61584f6020830185614729565b61585c6040830184614729565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006158c06021836144be565b91506158cb82615864565b604082019050919050565b600060208201905081810360008301526158ef816158b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615934816145aa565b92915050565b6000602082840312156159505761594f61456e565b5b600061595e84828501615925565b91505092915050565b6000819050919050565b600061598c61598761598284615967565b6146af565b6145d6565b9050919050565b61599c81615971565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159d781614598565b82525050565b60006159e983836159ce565b60208301905092915050565b6000602082019050919050565b6000615a0d826159a2565b615a1781856159ad565b9350615a22836159be565b8060005b83811015615a53578151615a3a88826159dd565b9750615a45836159f5565b925050600181019050615a26565b5085935050505092915050565b600060a082019050615a756000830188614729565b615a826020830187615993565b8181036040830152615a948186615a02565b9050615aa36060830185614903565b615ab06080830184614729565b9695505050505050565b600060c082019050615acf6000830189614903565b615adc6020830188614729565b615ae96040830187615993565b615af66060830186615993565b615b036080830185614903565b615b1060a0830184614729565b979650505050505050565b600081519050615b2a816145e0565b92915050565b600080600060608486031215615b4957615b4861456e565b5b6000615b5786828701615b1b565b9350506020615b6886828701615b1b565b9250506040615b7986828701615b1b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208cbe5eed5f0e04520104eca18f41df5da22625128c6a7662785ff97972519ea264736f6c63430008090033

Deployed Bytecode Sourcemap

29412:17354:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7510:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9684:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31120:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29495:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8633:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37839:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30834:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30794;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35227:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36202:624;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10336:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30711:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37026:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8474:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11101:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29553:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29821:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38008:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30668:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30522:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29901:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8805:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22012:148;;;;;;;;;;;;;:::i;:::-;;34792:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35473:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30414:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35824:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34591:148;;;;;;;;;;;;;:::i;:::-;;21368:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30557:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35714:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7730:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37170:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30488:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46434:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30874:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30633:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35117:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11823:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29939:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30754:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9146:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37622:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31343:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29861:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36835:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30331:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29705:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30380:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9385:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29747:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34974:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30451:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22316:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30595:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29787:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7510:100;7564:13;7597:5;7590:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7510:100;:::o;9684:169::-;9767:4;9784:39;9793:12;:10;:12::i;:::-;9807:7;9816:6;9784:8;:39::i;:::-;9841:4;9834:11;;9684:169;;;;:::o;31120:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29495:51::-;;;:::o;8633:108::-;8694:7;8721:12;;8714:19;;8633:108;:::o;37839:157::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37946:9:::1;;;;;;;;;;;37918:38;;37935:9;37918:38;;;;;;;;;;;;37979:9;37967;;:21;;;;;;;;;;;;;;;;;;37839:157:::0;:::o;30834:33::-;;;;:::o;30794:::-;;;;:::o;35227:236::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35348:4:::1;35340:6;35336:1;35320:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35319:33;;;;:::i;:::-;35309:6;:43;;35301:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35448:6;35438;:17;;;;:::i;:::-;35415:20;:40;;;;35227:236:::0;:::o;36202:624::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36428:13:::1;36409:16;:32;;;;36471:13;36452:16;:32;;;;36508:7;36495:10;:20;;;;36550:22;36526:21;:46;;;;36607:22;36583:21;:46;;;;36655:16;36637:15;:34;;;;36736:10;;36717:16;;36698;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;36682:13;:64;;;;36782:2;36765:13;;:19;;36757:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36202:624:::0;;;;;;:::o;10336:355::-;10476:4;10493:36;10503:6;10511:9;10522:6;10493:9;:36::i;:::-;10540:121;10549:6;10557:12;:10;:12::i;:::-;10571:89;10609:6;10571:89;;;;;;;;;;;;;;;;;:11;:19;10583:6;10571:19;;;;;;;;;;;;;;;:33;10591:12;:10;:12::i;:::-;10571:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10540:8;:121::i;:::-;10679:4;10672:11;;10336:355;;;;;:::o;30711:36::-;;;;:::o;37026:135::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37140:13:::1;37118:10;:19;37129:7;37118:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37026:135:::0;;:::o;8474:93::-;8532:5;8557:2;8550:9;;8474:93;:::o;11101:218::-;11189:4;11206:83;11215:12;:10;:12::i;:::-;11229:7;11238:50;11277:10;11238:11;:25;11250:12;:10;:12::i;:::-;11238:25;;;;;;;;;;;;;;;:34;11264:7;11238:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11206:8;:83::i;:::-;11307:4;11300:11;;11101:218;;;;:::o;29553:38::-;;;:::o;29821:33::-;;;;;;;;;;;;;:::o;38008:125::-;38073:4;38097:19;:28;38117:7;38097:28;;;;;;;;;;;;;;;;;;;;;;;;;38090:35;;38008:125;;;:::o;30668:36::-;;;;:::o;30522:28::-;;;;:::o;29901:31::-;;;;;;;;;;;;;:::o;8805:127::-;8879:7;8906:9;:18;8916:7;8906:18;;;;;;;;;;;;;;;;8899:25;;8805:127;;;:::o;22012:148::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22119:1:::1;22082:40;;22103:6;;;;;;;;;;;22082:40;;;;;;;;;;;;22150:1;22133:6;;:19;;;;;;;;;;;;;;;;;;22012:148::o:0;34792:120::-;34844:4;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34877:5:::1;34860:14;;:22;;;;;;;;;;;;;;;;;;34900:4;34893:11;;34792:120:::0;:::o;35473:144::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35605:4:::1;35563:31;:39;35595:6;35563:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35473:144:::0;;:::o;30414:30::-;;;;:::o;35824:369::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35958:13:::1;35940:15;:31;;;;36000:13;35982:15;:31;;;;36036:7;36024:9;:19;;;;36105:9;;36087:15;;36069;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36054:12;:60;;;;36149:2;36133:12;;:18;;36125:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35824:369:::0;;;:::o;34591:148::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34662:4:::1;34646:13;;:20;;;;;;;;;;;;;;;;;;34691:4;34677:11;;:18;;;;;;;;;;;;;;;;;;34719:12;34706:10;:25;;;;34591:148::o:0;21368:79::-;21406:7;21433:6;;;;;;;;;;;21426:13;;21368:79;:::o;30557:31::-;;;;:::o;35714:101::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35800:7:::1;35786:11;;:21;;;;;;;;;;;;;;;;;;35714:101:::0;:::o;7730:104::-;7786:13;7819:7;7812:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7730:104;:::o;37170:245::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37277:13:::1;37269:21;;:4;:21;;;;37261:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37366:41;37395:4;37401:5;37366:28;:41::i;:::-;37170:245:::0;;:::o;30488:24::-;;;;:::o;46434:329::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46560:41:::1;46569:7;:5;:7::i;:::-;46578;:5;:7::i;:::-;46587:13;:11;:13::i;:::-;46560:8;:41::i;:::-;46617:9;46612:144;46636:10;;:17;;46632:1;:21;46612:144;;;46675:69;46688:10;46700;;46711:1;46700:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46733:10;:8;:10::i;:::-;46727:2;:16;;;;:::i;:::-;46715:6;;46722:1;46715:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;46675:12;:69::i;:::-;;46655:3;;;;;:::i;:::-;;;;46612:144;;;;46434:329:::0;;;;:::o;30874:27::-;;;;:::o;30633:25::-;;;;:::o;35117:102::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35206:5:::1;35185:18;;:26;;;;;;;;;;;;;;;;;;35117:102:::0;:::o;11823:269::-;11916:4;11933:129;11942:12;:10;:12::i;:::-;11956:7;11965:96;12004:15;11965:96;;;;;;;;;;;;;;;;;:11;:25;11977:12;:10;:12::i;:::-;11965:25;;;;;;;;;;;;;;;:34;11991:7;11965:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11933:8;:129::i;:::-;12080:4;12073:11;;11823:269;;;;:::o;29939:37::-;;;;;;;;;;;;;:::o;30754:30::-;;;;:::o;9146:175::-;9232:4;9249:42;9259:12;:10;:12::i;:::-;9273:9;9284:6;9249:9;:42::i;:::-;9309:4;9302:11;;9146:175;;;;:::o;37622:208::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37759:15:::1;;;;;;;;;;;37716:59;;37739:18;37716:59;;;;;;;;;;;;37804:18;37786:15;;:36;;;;;;;;;;;;;;;;;;37622:208:::0;:::o;31343:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29861:33::-;;;;;;;;;;;;;:::o;36835:182::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36951:8:::1;36920:19;:28;36940:7;36920:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36991:7;36975:34;;;37000:8;36975:34;;;;;;:::i;:::-;;;;;;;;36835:182:::0;;:::o;30331:39::-;;;;;;;;;;;;;:::o;29705:35::-;;;;:::o;30380:27::-;;;;:::o;9385:151::-;9474:7;9501:11;:18;9513:5;9501:18;;;;;;;;;;;;;;;:27;9520:7;9501:27;;;;;;;;;;;;;;;;9494:34;;9385:151;;;;:::o;29747:33::-;;;;:::o;34974:134::-;35034:4;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35073:5:::1;35050:20;;:28;;;;;;;;;;;;;;;;;;35096:4;35089:11;;34974:134:::0;:::o;30451:30::-;;;;:::o;22316:244::-;21591:12;:10;:12::i;:::-;21581:22;;:6;;;;;;;;;;;:22;;;21573:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22425:1:::1;22405:22;;:8;:22;;;;22397:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22515:8;22486:38;;22507:6;;;;;;;;;;;22486:38;;;;;;;;;;;;22544:8;22535:6;;:17;;;;;;;;;;;;;;;;;;22316:244:::0;:::o;30595:31::-;;;;:::o;29787:24::-;;;;:::o;16400:182::-;16458:7;16478:9;16494:1;16490;:5;;;;:::i;:::-;16478:17;;16519:1;16514;:6;;16506:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16573:1;16566:8;;;16400:182;;;;:::o;201:98::-;254:7;281:10;274:17;;201:98;:::o;15019:381::-;15172:1;15155:19;;:5;:19;;;;15147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15253:1;15234:21;;:7;:21;;;;15226:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15338:6;15308:11;:18;15320:5;15308:18;;;;;;;;;;;;;;;:27;15327:7;15308:27;;;;;;;;;;;;;;;:36;;;;15376:7;15360:32;;15369:5;15360:32;;;15385:6;15360:32;;;;;;:::i;:::-;;;;;;;;15019:381;;;:::o;38193:5521::-;38341:1;38325:18;;:4;:18;;;;38317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38418:1;38404:16;;:2;:16;;;;38396:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38480:10;:14;38491:2;38480:14;;;;;;;;;;;;;;;;;;;;;;;;;38479:15;:36;;;;;38499:10;:16;38510:4;38499:16;;;;;;;;;;;;;;;;;;;;;;;;;38498:17;38479:36;38471:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38594:1;38584:6;:11;38581:92;;;38612:28;38628:4;38634:2;38638:1;38612:15;:28::i;:::-;38655:7;;38581:92;38689:14;;;;;;;;;;;38686:1811;;;38749:7;:5;:7::i;:::-;38741:15;;:4;:15;;;;:49;;;;;38783:7;:5;:7::i;:::-;38777:13;;:2;:13;;;;38741:49;:86;;;;;38825:1;38811:16;;:2;:16;;;;38741:86;:128;;;;;38862:6;38848:21;;:2;:21;;;;38741:128;:158;;;;;38891:8;;;;;;;;;;;38890:9;38741:158;38719:1767;;;38937:13;;;;;;;;;;;38933:148;;38982:19;:25;39002:4;38982:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39011:19;:23;39031:2;39011:23;;;;;;;;;;;;;;;;;;;;;;;;;38982:52;38974:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38933:148;39240:20;;;;;;;;;;;39236:423;;;39294:7;:5;:7::i;:::-;39288:13;;:2;:13;;;;:47;;;;;39319:15;39305:30;;:2;:30;;;;39288:47;:79;;;;;39353:13;39339:28;;:2;:28;;;;39288:79;39284:356;;;39445:12;39403:28;:39;39432:9;39403:39;;;;;;;;;;;;;;;;:54;39395:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39604:12;39562:28;:39;39591:9;39562:39;;;;;;;;;;;;;;;:54;;;;39284:356;39236:423;39712:25;:31;39738:4;39712:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39748:31;:35;39780:2;39748:35;;;;;;;;;;;;;;;;;;;;;;;;;39747:36;39712:71;39708:763;;;39830:20;;39820:6;:30;;39812:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39969:9;;39952:13;39962:2;39952:9;:13::i;:::-;39943:6;:22;;;;:::i;:::-;:35;;39935:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39708:763;;;40081:25;:29;40107:2;40081:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40115:31;:37;40147:4;40115:37;;;;;;;;;;;;;;;;;;;;;;;;;40114:38;40081:71;40077:394;;;40199:20;;40189:6;:30;;40181:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40077:394;;;40325:31;:35;40357:2;40325:35;;;;;;;;;;;;;;;;;;;;;;;;;40321:150;;40418:9;;40401:13;40411:2;40401:9;:13::i;:::-;40392:6;:22;;;;:::i;:::-;:35;;40384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40321:150;40077:394;39708:763;38719:1767;38686:1811;40571:1;40558:10;;:14;;;;:::i;:::-;40541:12;:32;;:73;;;;;40601:13;40595:19;;:2;:19;;;;40541:73;:152;;;;;40650:42;40636:57;;:2;:57;;;;40541:152;40537:221;;;40742:4;40725:10;:14;40736:2;40725:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40537:221;40800:10;40821:13;40813:21;;:4;:21;;;40800:34;;40850:5;40849:6;:28;;;;;40859:18;;;;;;;;;;;40849:28;40845:1028;;;40932:1;40898:24;:30;40923:4;40898:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41002:15;40989:8;40955:24;:30;40980:4;40955:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;40898:120;40894:569;;;41059:21;;41040:16;:40;;;;41118:21;;41099:16;:40;;;;41165:15;;41152:10;:28;;;;41253:10;;41234:16;;41215;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41199:13;:64;;;;40894:569;;;41323:1;41304:16;:20;;;;41362:2;41343:16;:21;;;;41437:10;;41418:16;;41399;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41383:13;:64;;;;40894:569;40845:1028;;;41531:1;41499:24;:28;41524:2;41499:28;;;;;;;;;;;;;;;;:33;41495:120;;;41584:15;41553:24;:28;41578:2;41553:28;;;;;;;;;;;;;;;:46;;;;41495:120;41637:18;;;;;;;;;;;41632:230;;41695:1;41676:16;:20;;;;41734:2;41715:16;:21;;;;41762:1;41749:10;:14;;;;41836:10;;41817:16;;41798;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41782:13;:64;;;;41632:230;40845:1028;41886:28;41917:24;41935:4;41917:9;:24::i;:::-;41886:55;;41955:12;41994:18;;41970:20;:42;;41955:57;;42044:7;:35;;;;;42068:11;;;;;;;;;;;42044:35;:61;;;;;42097:8;;;;;;;;;;;42096:9;42044:61;:110;;;;;42123:25;:31;42149:4;42123:31;;;;;;;;;;;;;;;;;;;;;;;;;42122:32;42044:110;:153;;;;;42172:19;:25;42192:4;42172:25;;;;;;;;;;;;;;;;;;;;;;;;;42171:26;42044:153;:194;;;;;42215:19;:23;42235:2;42215:23;;;;;;;;;;;;;;;;;;;;;;;;;42214:24;42044:194;42026:328;;;42276:4;42265:8;;:15;;;;;;;;;;;;;;;;;;42298:10;:8;:10::i;:::-;42337:5;42326:8;;:16;;;;;;;;;;;;;;;;;;42026:328;42367:12;42383:8;;;;;;;;;;;42382:9;42367:24;;42493:19;:25;42513:4;42493:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42522:19;:23;42542:2;42522:23;;;;;;;;;;;;;;;;;;;;;;;;;42493:52;42490:99;;;42572:5;42562:15;;42490:99;42602:12;42706:7;42703:957;;;42757:25;:29;42783:2;42757:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42806:1;42790:13;;:17;42757:50;42753:754;;;42834:34;42864:3;42834:25;42845:13;;42834:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42827:41;;42935:13;;42916:16;;42909:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42887:18;;:61;;;;;;;:::i;:::-;;;;;;;;43003:13;;42990:10;;42983:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;42967:12;;:49;;;;;;;:::i;:::-;;;;;;;;43083:13;;43064:16;;43057:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43035:18;;:61;;;;;;;:::i;:::-;;;;;;;;42753:754;;;43157:25;:31;43183:4;43157:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43207:1;43192:12;;:16;43157:51;43154:353;;;43236:33;43265:3;43236:24;43247:12;;43236:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43229:40;;43335:12;;43317:15;;43310:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43288:18;;:59;;;;;;;:::i;:::-;;;;;;;;43401:12;;43389:9;;43382:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43366:12;;:47;;;;;;;:::i;:::-;;;;;;;;43479:12;;43461:15;;43454:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43432:18;;:59;;;;;;;:::i;:::-;;;;;;;;43154:353;42753:754;43534:1;43527:4;:8;43524:93;;;43559:42;43575:4;43589;43596;43559:15;:42::i;:::-;43524:93;43644:4;43634:14;;;;;:::i;:::-;;;42703:957;43673:33;43689:4;43695:2;43699:6;43673:15;:33::i;:::-;38306:5408;;;;;38193:5521;;;;:::o;17306:193::-;17392:7;17425:1;17420;:6;;17428:12;17412:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17452:9;17468:1;17464;:5;;;;:::i;:::-;17452:17;;17490:1;17483:8;;;17306:193;;;;;:::o;37424:189::-;37541:5;37507:25;:31;37533:4;37507:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37599:5;37565:40;;37593:4;37565:40;;;;;;;;;;;;37424:189;;:::o;12583:575::-;12741:1;12723:20;;:6;:20;;;;12715:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12825:1;12804:23;;:9;:23;;;;12796:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12881:47;12902:6;12910:9;12921:6;12881:20;:47::i;:::-;12962:71;12984:6;12962:71;;;;;;;;;;;;;;;;;:9;:17;12972:6;12962:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12942:9;:17;12952:6;12942:17;;;;;;;;;;;;;;;:91;;;;13067:32;13092:6;13067:9;:20;13077:9;13067:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13044:9;:20;13054:9;13044:20;;;;;;;;;;;;;;;:55;;;;13132:9;13115:35;;13124:6;13115:35;;;13143:6;13115:35;;;;;;:::i;:::-;;;;;;;;12583:575;;;:::o;44858:1568::-;44897:23;44923:24;44941:4;44923:9;:24::i;:::-;44897:50;;44958:25;45028:12;;45007:18;;44986;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44958:82;;45051:12;45099:1;45080:15;:20;:46;;;;45125:1;45104:17;:22;45080:46;45077:60;;;45129:7;;;;;45077:60;45192:2;45171:18;;:23;;;;:::i;:::-;45153:15;:41;45150:111;;;45247:2;45226:18;;:23;;;;:::i;:::-;45208:41;;45150:111;45323:23;45408:1;45388:17;45367:18;;45349:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45323:86;;45420:26;45449:36;45469:15;45449;:19;;:36;;;;:::i;:::-;45420:65;;45499:25;45527:21;45499:49;;45562:36;45579:18;45562:16;:36::i;:::-;45613:18;45634:44;45660:17;45634:21;:25;;:44;;;;:::i;:::-;45613:65;;45692:23;45718:57;45757:17;45718:34;45733:18;;45718:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;45692:83;;45786:17;45806:51;45839:17;45806:28;45821:12;;45806:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;45786:71;;45868:23;45925:9;45907:15;45894:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;45868:66;;45972:1;45951:18;:22;;;;46005:1;45984:18;:22;;;;46032:1;46017:12;:16;;;;46068:9;;;;;;;;;;;46060:23;;46091:9;46060:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46047:58;;;;;46140:1;46122:15;:19;:42;;;;;46163:1;46145:15;:19;46122:42;46119:210;;;46180:46;46193:15;46210;46180:12;:46::i;:::-;46246:71;46261:18;46281:15;46298:18;;46246:71;;;;;;;;:::i;:::-;;;;;;;;46119:210;46363:15;;;;;;;;;;;46355:29;;46392:21;46355:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46342:76;;;;;44886:1540;;;;;;;;;;44858:1568;:::o;17759:473::-;17817:7;18067:1;18062;:6;18058:47;;;18092:1;18085:8;;;;18058:47;18118:9;18134:1;18130;:5;;;;:::i;:::-;18118:17;;18163:1;18158;18154;:5;;;;:::i;:::-;:10;18146:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18223:1;18216:8;;;17759:473;;;;;:::o;18709:132::-;18767:7;18794:39;18798:1;18801;18794:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18787:46;;18709:132;;;;:::o;16004:125::-;;;;:::o;16866:136::-;16924:7;16951:43;16955:1;16958;16951:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16944:50;;16866:136;;;;:::o;43723:597::-;43852:21;43890:1;43876:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43852:40;;43921:4;43903;43908:1;43903:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43947:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43937:4;43942:1;43937:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43983:62;44000:4;44015:15;44033:11;43983:8;:62::i;:::-;44085:15;:66;;;44166:11;44192:1;44236:4;44263;44283:15;44085:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43778:542;43723:597;:::o;44329:520::-;44477:62;44494:4;44509:15;44527:11;44477:8;:62::i;:::-;44583:15;:31;;;44622:9;44655:4;44675:11;44701:1;44744;44795:4;44815:15;44583:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44329:520;;:::o;19338:279::-;19424:7;19456:1;19452;:5;19459:12;19444:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19483:9;19499:1;19495;:5;;;;:::i;:::-;19483:17;;19608:1;19601:8;;;19338: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;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:1057::-;5598:6;5606;5614;5622;5630;5638;5687:3;5675:9;5666:7;5662:23;5658:33;5655:120;;;5694:79;;:::i;:::-;5655:120;5814:1;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5785:117;5941:2;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5912:118;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;6197:2;6223:53;6268:7;6259:6;6248:9;6244:22;6223:53;:::i;:::-;6213:63;;6168:118;6325:3;6352:53;6397:7;6388:6;6377:9;6373:22;6352:53;:::i;:::-;6342:63;;6296:119;6454:3;6481:53;6526:7;6517:6;6506:9;6502:22;6481:53;:::i;:::-;6471:63;;6425:119;5494:1057;;;;;;;;:::o;6557:619::-;6634:6;6642;6650;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:53;6895:7;6886:6;6875:9;6871:22;6850:53;:::i;:::-;6840:63;;6796:117;6952:2;6978:53;7023:7;7014:6;7003:9;6999:22;6978:53;:::i;:::-;6968:63;;6923:118;7080:2;7106:53;7151:7;7142:6;7131:9;7127:22;7106:53;:::i;:::-;7096:63;;7051:118;6557:619;;;;;:::o;7182:116::-;7252:21;7267:5;7252:21;:::i;:::-;7245:5;7242:32;7232:60;;7288:1;7285;7278:12;7232:60;7182:116;:::o;7304:133::-;7347:5;7385:6;7372:20;7363:29;;7401:30;7425:5;7401:30;:::i;:::-;7304:133;;;;:::o;7443:468::-;7508:6;7516;7565:2;7553:9;7544:7;7540:23;7536:32;7533:119;;;7571:79;;:::i;:::-;7533:119;7691:1;7716:53;7761:7;7752:6;7741:9;7737:22;7716:53;:::i;:::-;7706:63;;7662:117;7818:2;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7789:115;7443:468;;;;;:::o;7917:86::-;7952:7;7992:4;7985:5;7981:16;7970:27;;7917:86;;;:::o;8009:112::-;8092:22;8108:5;8092:22;:::i;:::-;8087:3;8080:35;8009:112;;:::o;8127:214::-;8216:4;8254:2;8243:9;8239:18;8231:26;;8267:67;8331:1;8320:9;8316:17;8307:6;8267:67;:::i;:::-;8127:214;;;;:::o;8347:118::-;8434:24;8452:5;8434:24;:::i;:::-;8429:3;8422:37;8347:118;;:::o;8471:222::-;8564:4;8602:2;8591:9;8587:18;8579:26;;8615:71;8683:1;8672:9;8668:17;8659:6;8615:71;:::i;:::-;8471:222;;;;:::o;8699:619::-;8776:6;8784;8792;8841:2;8829:9;8820:7;8816:23;8812:32;8809:119;;;8847:79;;:::i;:::-;8809:119;8967:1;8992:53;9037:7;9028:6;9017:9;9013:22;8992:53;:::i;:::-;8982:63;;8938:117;9094:2;9120:53;9165:7;9156:6;9145:9;9141:22;9120:53;:::i;:::-;9110:63;;9065:118;9222:2;9248:53;9293:7;9284:6;9273:9;9269:22;9248:53;:::i;:::-;9238:63;;9193:118;8699:619;;;;;:::o;9324:323::-;9380:6;9429:2;9417:9;9408:7;9404:23;9400:32;9397:119;;;9435:79;;:::i;:::-;9397:119;9555:1;9580:50;9622:7;9613:6;9602:9;9598:22;9580:50;:::i;:::-;9570:60;;9526:114;9324:323;;;;:::o;9653:117::-;9762:1;9759;9752:12;9776:117;9885:1;9882;9875:12;9899:117;10008:1;10005;9998:12;10039:568;10112:8;10122:6;10172:3;10165:4;10157:6;10153:17;10149:27;10139:122;;10180:79;;:::i;:::-;10139:122;10293:6;10280:20;10270:30;;10323:18;10315:6;10312:30;10309:117;;;10345:79;;:::i;:::-;10309:117;10459:4;10451:6;10447:17;10435:29;;10513:3;10505:4;10497:6;10493:17;10483:8;10479:32;10476:41;10473:128;;;10520:79;;:::i;:::-;10473:128;10039:568;;;;;:::o;10630:::-;10703:8;10713:6;10763:3;10756:4;10748:6;10744:17;10740:27;10730:122;;10771:79;;:::i;:::-;10730:122;10884:6;10871:20;10861:30;;10914:18;10906:6;10903:30;10900:117;;;10936:79;;:::i;:::-;10900:117;11050:4;11042:6;11038:17;11026:29;;11104:3;11096:4;11088:6;11084:17;11074:8;11070:32;11067:41;11064:128;;;11111:79;;:::i;:::-;11064:128;10630:568;;;;;:::o;11204:934::-;11326:6;11334;11342;11350;11399:2;11387:9;11378:7;11374:23;11370:32;11367:119;;;11405:79;;:::i;:::-;11367:119;11553:1;11542:9;11538:17;11525:31;11583:18;11575:6;11572:30;11569:117;;;11605:79;;:::i;:::-;11569:117;11718:80;11790:7;11781:6;11770:9;11766:22;11718:80;:::i;:::-;11700:98;;;;11496:312;11875:2;11864:9;11860:18;11847:32;11906:18;11898:6;11895:30;11892:117;;;11928:79;;:::i;:::-;11892:117;12041:80;12113:7;12104:6;12093:9;12089:22;12041:80;:::i;:::-;12023:98;;;;11818:313;11204:934;;;;;;;:::o;12144:474::-;12212:6;12220;12269:2;12257:9;12248:7;12244:23;12240:32;12237:119;;;12275:79;;:::i;:::-;12237:119;12395:1;12420:53;12465:7;12456:6;12445:9;12441:22;12420:53;:::i;:::-;12410:63;;12366:117;12522:2;12548:53;12593:7;12584:6;12573:9;12569:22;12548:53;:::i;:::-;12538:63;;12493:118;12144:474;;;;;:::o;12624:180::-;12672:77;12669:1;12662:88;12769:4;12766:1;12759:15;12793:4;12790:1;12783:15;12810:320;12854:6;12891:1;12885:4;12881:12;12871:22;;12938:1;12932:4;12928:12;12959:18;12949:81;;13015:4;13007:6;13003:17;12993:27;;12949:81;13077:2;13069:6;13066:14;13046:18;13043:38;13040:84;;;13096:18;;:::i;:::-;13040:84;12861:269;12810:320;;;:::o;13136:182::-;13276:34;13272:1;13264:6;13260:14;13253:58;13136:182;:::o;13324:366::-;13466:3;13487:67;13551:2;13546:3;13487:67;:::i;:::-;13480:74;;13563:93;13652:3;13563:93;:::i;:::-;13681:2;13676:3;13672:12;13665:19;;13324:366;;;:::o;13696:419::-;13862:4;13900:2;13889:9;13885:18;13877:26;;13949:9;13943:4;13939:20;13935:1;13924:9;13920:17;13913:47;13977:131;14103:4;13977:131;:::i;:::-;13969:139;;13696:419;;;:::o;14121:180::-;14169:77;14166:1;14159:88;14266:4;14263:1;14256:15;14290:4;14287:1;14280:15;14307:348;14347:7;14370:20;14388:1;14370:20;:::i;:::-;14365:25;;14404:20;14422:1;14404:20;:::i;:::-;14399:25;;14592:1;14524:66;14520:74;14517:1;14514:81;14509:1;14502:9;14495:17;14491:105;14488:131;;;14599:18;;:::i;:::-;14488:131;14647:1;14644;14640:9;14629:20;;14307:348;;;;:::o;14661:180::-;14709:77;14706:1;14699:88;14806:4;14803:1;14796:15;14830:4;14827:1;14820:15;14847:185;14887:1;14904:20;14922:1;14904:20;:::i;:::-;14899:25;;14938:20;14956:1;14938:20;:::i;:::-;14933:25;;14977:1;14967:35;;14982:18;;:::i;:::-;14967:35;15024:1;15021;15017:9;15012:14;;14847:185;;;;:::o;15038:234::-;15178:34;15174:1;15166:6;15162:14;15155:58;15247:17;15242:2;15234:6;15230:15;15223:42;15038:234;:::o;15278:366::-;15420:3;15441:67;15505:2;15500:3;15441:67;:::i;:::-;15434:74;;15517:93;15606:3;15517:93;:::i;:::-;15635:2;15630:3;15626:12;15619:19;;15278:366;;;:::o;15650:419::-;15816:4;15854:2;15843:9;15839:18;15831:26;;15903:9;15897:4;15893:20;15889:1;15878:9;15874:17;15867:47;15931:131;16057:4;15931:131;:::i;:::-;15923:139;;15650:419;;;:::o;16075:305::-;16115:3;16134:20;16152:1;16134:20;:::i;:::-;16129:25;;16168:20;16186:1;16168:20;:::i;:::-;16163:25;;16322:1;16254:66;16250:74;16247:1;16244:81;16241:107;;;16328:18;;:::i;:::-;16241:107;16372:1;16369;16365:9;16358:16;;16075:305;;;;:::o;16386:179::-;16526:31;16522:1;16514:6;16510:14;16503:55;16386:179;:::o;16571:366::-;16713:3;16734:67;16798:2;16793:3;16734:67;:::i;:::-;16727:74;;16810:93;16899:3;16810:93;:::i;:::-;16928:2;16923:3;16919:12;16912:19;;16571:366;;;:::o;16943:419::-;17109:4;17147:2;17136:9;17132:18;17124:26;;17196:9;17190:4;17186:20;17182:1;17171:9;17167:17;17160:47;17224:131;17350:4;17224:131;:::i;:::-;17216:139;;16943:419;;;:::o;17368:179::-;17508:31;17504:1;17496:6;17492:14;17485:55;17368:179;:::o;17553:366::-;17695:3;17716:67;17780:2;17775:3;17716:67;:::i;:::-;17709:74;;17792:93;17881:3;17792:93;:::i;:::-;17910:2;17905:3;17901:12;17894:19;;17553:366;;;:::o;17925:419::-;18091:4;18129:2;18118:9;18114:18;18106:26;;18178:9;18172:4;18168:20;18164:1;18153:9;18149:17;18142:47;18206:131;18332:4;18206:131;:::i;:::-;18198:139;;17925:419;;;:::o;18350:244::-;18490:34;18486:1;18478:6;18474:14;18467:58;18559:27;18554:2;18546:6;18542:15;18535:52;18350:244;:::o;18600:366::-;18742:3;18763:67;18827:2;18822:3;18763:67;:::i;:::-;18756:74;;18839:93;18928:3;18839:93;:::i;:::-;18957:2;18952:3;18948:12;18941:19;;18600:366;;;:::o;18972:419::-;19138:4;19176:2;19165:9;19161:18;19153:26;;19225:9;19219:4;19215:20;19211:1;19200:9;19196:17;19189:47;19253:131;19379:4;19253:131;:::i;:::-;19245:139;;18972:419;;;:::o;19397:180::-;19445:77;19442:1;19435:88;19542:4;19539:1;19532:15;19566:4;19563:1;19556:15;19583:102;19625:8;19672:5;19669:1;19665:13;19644:34;;19583:102;;;:::o;19691:848::-;19752:5;19759:4;19783:6;19774:15;;19807:5;19798:14;;19821:712;19842:1;19832:8;19829:15;19821:712;;;19937:4;19932:3;19928:14;19922:4;19919:24;19916:50;;;19946:18;;:::i;:::-;19916:50;19996:1;19986:8;19982:16;19979:451;;;20411:4;20404:5;20400:16;20391:25;;19979:451;20461:4;20455;20451:15;20443:23;;20491:32;20514:8;20491:32;:::i;:::-;20479:44;;19821:712;;;19691:848;;;;;;;:::o;20545:1073::-;20599:5;20790:8;20780:40;;20811:1;20802:10;;20813:5;;20780:40;20839:4;20829:36;;20856:1;20847:10;;20858:5;;20829:36;20925:4;20973:1;20968:27;;;;21009:1;21004:191;;;;20918:277;;20968:27;20986:1;20977:10;;20988:5;;;21004:191;21049:3;21039:8;21036:17;21033:43;;;21056:18;;:::i;:::-;21033:43;21105:8;21102:1;21098:16;21089:25;;21140:3;21133:5;21130:14;21127:40;;;21147:18;;:::i;:::-;21127:40;21180:5;;;20918:277;;21304:2;21294:8;21291:16;21285:3;21279:4;21276:13;21272:36;21254:2;21244:8;21241:16;21236:2;21230:4;21227:12;21223:35;21207:111;21204:246;;;21360:8;21354:4;21350:19;21341:28;;21395:3;21388:5;21385:14;21382:40;;;21402:18;;:::i;:::-;21382:40;21435:5;;21204:246;21475:42;21513:3;21503:8;21497:4;21494:1;21475:42;:::i;:::-;21460:57;;;;21549:4;21544:3;21540:14;21533:5;21530:25;21527:51;;;21558:18;;:::i;:::-;21527:51;21607:4;21600:5;21596:16;21587:25;;20545:1073;;;;;;:::o;21624:281::-;21682:5;21706:23;21724:4;21706:23;:::i;:::-;21698:31;;21750:25;21766:8;21750:25;:::i;:::-;21738:37;;21794:104;21831:66;21821:8;21815:4;21794:104;:::i;:::-;21785:113;;21624:281;;;;:::o;21911:233::-;21950:3;21973:24;21991:5;21973:24;:::i;:::-;21964:33;;22019:66;22012:5;22009:77;22006:103;;;22089:18;;:::i;:::-;22006:103;22136:1;22129:5;22125:13;22118:20;;21911:233;;;:::o;22150:225::-;22290:34;22286:1;22278:6;22274:14;22267:58;22359:8;22354:2;22346:6;22342:15;22335:33;22150:225;:::o;22381:366::-;22523:3;22544:67;22608:2;22603:3;22544:67;:::i;:::-;22537:74;;22620:93;22709:3;22620:93;:::i;:::-;22738:2;22733:3;22729:12;22722:19;;22381:366;;;:::o;22753:419::-;22919:4;22957:2;22946:9;22942:18;22934:26;;23006:9;23000:4;22996:20;22992:1;22981:9;22977:17;22970:47;23034:131;23160:4;23034:131;:::i;:::-;23026:139;;22753:419;;;:::o;23178:177::-;23318:29;23314:1;23306:6;23302:14;23295:53;23178:177;:::o;23361:366::-;23503:3;23524:67;23588:2;23583:3;23524:67;:::i;:::-;23517:74;;23600:93;23689:3;23600:93;:::i;:::-;23718:2;23713:3;23709:12;23702:19;;23361:366;;;:::o;23733:419::-;23899:4;23937:2;23926:9;23922:18;23914:26;;23986:9;23980:4;23976:20;23972:1;23961:9;23957:17;23950:47;24014:131;24140:4;24014:131;:::i;:::-;24006:139;;23733:419;;;:::o;24158:223::-;24298:34;24294:1;24286:6;24282:14;24275:58;24367:6;24362:2;24354:6;24350:15;24343:31;24158:223;:::o;24387:366::-;24529:3;24550:67;24614:2;24609:3;24550:67;:::i;:::-;24543:74;;24626:93;24715:3;24626:93;:::i;:::-;24744:2;24739:3;24735:12;24728:19;;24387:366;;;:::o;24759:419::-;24925:4;24963:2;24952:9;24948:18;24940:26;;25012:9;25006:4;25002:20;24998:1;24987:9;24983:17;24976:47;25040:131;25166:4;25040:131;:::i;:::-;25032:139;;24759:419;;;:::o;25184:221::-;25324:34;25320:1;25312:6;25308:14;25301:58;25393:4;25388:2;25380:6;25376:15;25369:29;25184:221;:::o;25411:366::-;25553:3;25574:67;25638:2;25633:3;25574:67;:::i;:::-;25567:74;;25650:93;25739:3;25650:93;:::i;:::-;25768:2;25763:3;25759:12;25752:19;;25411:366;;;:::o;25783:419::-;25949:4;25987:2;25976:9;25972:18;25964:26;;26036:9;26030:4;26026:20;26022:1;26011:9;26007:17;26000:47;26064:131;26190:4;26064:131;:::i;:::-;26056:139;;25783:419;;;:::o;26208:224::-;26348:34;26344:1;26336:6;26332:14;26325:58;26417:7;26412:2;26404:6;26400:15;26393:32;26208:224;:::o;26438:366::-;26580:3;26601:67;26665:2;26660:3;26601:67;:::i;:::-;26594:74;;26677:93;26766:3;26677:93;:::i;:::-;26795:2;26790:3;26786:12;26779:19;;26438:366;;;:::o;26810:419::-;26976:4;27014:2;27003:9;26999:18;26991:26;;27063:9;27057:4;27053:20;27049:1;27038:9;27034:17;27027:47;27091:131;27217:4;27091:131;:::i;:::-;27083:139;;26810:419;;;:::o;27235:222::-;27375:34;27371:1;27363:6;27359:14;27352:58;27444:5;27439:2;27431:6;27427:15;27420:30;27235:222;:::o;27463:366::-;27605:3;27626:67;27690:2;27685:3;27626:67;:::i;:::-;27619:74;;27702:93;27791:3;27702:93;:::i;:::-;27820:2;27815:3;27811:12;27804:19;;27463:366;;;:::o;27835:419::-;28001:4;28039:2;28028:9;28024:18;28016:26;;28088:9;28082:4;28078:20;28074:1;28063:9;28059:17;28052:47;28116:131;28242:4;28116:131;:::i;:::-;28108:139;;27835:419;;;:::o;28260:236::-;28400:34;28396:1;28388:6;28384:14;28377:58;28469:19;28464:2;28456:6;28452:15;28445:44;28260:236;:::o;28502:366::-;28644:3;28665:67;28729:2;28724:3;28665:67;:::i;:::-;28658:74;;28741:93;28830:3;28741:93;:::i;:::-;28859:2;28854:3;28850:12;28843:19;;28502:366;;;:::o;28874:419::-;29040:4;29078:2;29067:9;29063:18;29055:26;;29127:9;29121:4;29117:20;29113:1;29102:9;29098:17;29091:47;29155:131;29281:4;29155:131;:::i;:::-;29147:139;;28874:419;;;:::o;29299:172::-;29439:24;29435:1;29427:6;29423:14;29416:48;29299:172;:::o;29477:366::-;29619:3;29640:67;29704:2;29699:3;29640:67;:::i;:::-;29633:74;;29716:93;29805:3;29716:93;:::i;:::-;29834:2;29829:3;29825:12;29818:19;;29477:366;;;:::o;29849:419::-;30015:4;30053:2;30042:9;30038:18;30030:26;;30102:9;30096:4;30092:20;30088:1;30077:9;30073:17;30066:47;30130:131;30256:4;30130:131;:::i;:::-;30122:139;;29849:419;;;:::o;30274:297::-;30414:34;30410:1;30402:6;30398:14;30391:58;30483:34;30478:2;30470:6;30466:15;30459:59;30552:11;30547:2;30539:6;30535:15;30528:36;30274:297;:::o;30577:366::-;30719:3;30740:67;30804:2;30799:3;30740:67;:::i;:::-;30733:74;;30816:93;30905:3;30816:93;:::i;:::-;30934:2;30929:3;30925:12;30918:19;;30577:366;;;:::o;30949:419::-;31115:4;31153:2;31142:9;31138:18;31130:26;;31202:9;31196:4;31192:20;31188:1;31177:9;31173:17;31166:47;31230:131;31356:4;31230:131;:::i;:::-;31222:139;;30949:419;;;:::o;31374:240::-;31514:34;31510:1;31502:6;31498:14;31491:58;31583:23;31578:2;31570:6;31566:15;31559:48;31374:240;:::o;31620:366::-;31762:3;31783:67;31847:2;31842:3;31783:67;:::i;:::-;31776:74;;31859:93;31948:3;31859:93;:::i;:::-;31977:2;31972:3;31968:12;31961:19;;31620:366;;;:::o;31992:419::-;32158:4;32196:2;32185:9;32181:18;32173:26;;32245:9;32239:4;32235:20;32231:1;32220:9;32216:17;32209:47;32273:131;32399:4;32273:131;:::i;:::-;32265:139;;31992:419;;;:::o;32417:169::-;32557:21;32553:1;32545:6;32541:14;32534:45;32417:169;:::o;32592:366::-;32734:3;32755:67;32819:2;32814:3;32755:67;:::i;:::-;32748:74;;32831:93;32920:3;32831:93;:::i;:::-;32949:2;32944:3;32940:12;32933:19;;32592:366;;;:::o;32964:419::-;33130:4;33168:2;33157:9;33153:18;33145:26;;33217:9;33211:4;33207:20;33203:1;33192:9;33188:17;33181:47;33245:131;33371:4;33245:131;:::i;:::-;33237:139;;32964:419;;;:::o;33389:241::-;33529:34;33525:1;33517:6;33513:14;33506:58;33598:24;33593:2;33585:6;33581:15;33574:49;33389:241;:::o;33636:366::-;33778:3;33799:67;33863:2;33858:3;33799:67;:::i;:::-;33792:74;;33875:93;33964:3;33875:93;:::i;:::-;33993:2;33988:3;33984:12;33977:19;;33636:366;;;:::o;34008:419::-;34174:4;34212:2;34201:9;34197:18;34189:26;;34261:9;34255:4;34251:20;34247:1;34236:9;34232:17;34225:47;34289:131;34415:4;34289:131;:::i;:::-;34281:139;;34008:419;;;:::o;34433:191::-;34473:4;34493:20;34511:1;34493:20;:::i;:::-;34488:25;;34527:20;34545:1;34527:20;:::i;:::-;34522:25;;34566:1;34563;34560:8;34557:34;;;34571:18;;:::i;:::-;34557:34;34616:1;34613;34609:9;34601:17;;34433:191;;;;:::o;34630:147::-;34731:11;34768:3;34753:18;;34630:147;;;;:::o;34783:114::-;;:::o;34903:398::-;35062:3;35083:83;35164:1;35159:3;35083:83;:::i;:::-;35076:90;;35175:93;35264:3;35175:93;:::i;:::-;35293:1;35288:3;35284:11;35277:18;;34903:398;;;:::o;35307:379::-;35491:3;35513:147;35656:3;35513:147;:::i;:::-;35506:154;;35677:3;35670:10;;35307:379;;;:::o;35692:442::-;35841:4;35879:2;35868:9;35864:18;35856:26;;35892:71;35960:1;35949:9;35945:17;35936:6;35892:71;:::i;:::-;35973:72;36041:2;36030:9;36026:18;36017:6;35973:72;:::i;:::-;36055;36123:2;36112:9;36108:18;36099:6;36055:72;:::i;:::-;35692:442;;;;;;:::o;36140:220::-;36280:34;36276:1;36268:6;36264:14;36257:58;36349:3;36344:2;36336:6;36332:15;36325:28;36140:220;:::o;36366:366::-;36508:3;36529:67;36593:2;36588:3;36529:67;:::i;:::-;36522:74;;36605:93;36694:3;36605:93;:::i;:::-;36723:2;36718:3;36714:12;36707:19;;36366:366;;;:::o;36738:419::-;36904:4;36942:2;36931:9;36927:18;36919:26;;36991:9;36985:4;36981:20;36977:1;36966:9;36962:17;36955:47;37019:131;37145:4;37019:131;:::i;:::-;37011:139;;36738:419;;;:::o;37163:180::-;37211:77;37208:1;37201:88;37308:4;37305:1;37298:15;37332:4;37329:1;37322:15;37349:143;37406:5;37437:6;37431:13;37422:22;;37453:33;37480:5;37453:33;:::i;:::-;37349:143;;;;:::o;37498:351::-;37568:6;37617:2;37605:9;37596:7;37592:23;37588:32;37585:119;;;37623:79;;:::i;:::-;37585:119;37743:1;37768:64;37824:7;37815:6;37804:9;37800:22;37768:64;:::i;:::-;37758:74;;37714:128;37498:351;;;;:::o;37855:85::-;37900:7;37929:5;37918:16;;37855:85;;;:::o;37946:158::-;38004:9;38037:61;38055:42;38064:32;38090:5;38064:32;:::i;:::-;38055:42;:::i;:::-;38037:61;:::i;:::-;38024:74;;37946:158;;;:::o;38110:147::-;38205:45;38244:5;38205:45;:::i;:::-;38200:3;38193:58;38110:147;;:::o;38263:114::-;38330:6;38364:5;38358:12;38348:22;;38263:114;;;:::o;38383:184::-;38482:11;38516:6;38511:3;38504:19;38556:4;38551:3;38547:14;38532:29;;38383:184;;;;:::o;38573:132::-;38640:4;38663:3;38655:11;;38693:4;38688:3;38684:14;38676:22;;38573:132;;;:::o;38711:108::-;38788:24;38806:5;38788:24;:::i;:::-;38783:3;38776:37;38711:108;;:::o;38825:179::-;38894:10;38915:46;38957:3;38949:6;38915:46;:::i;:::-;38993:4;38988:3;38984:14;38970:28;;38825:179;;;;:::o;39010:113::-;39080:4;39112;39107:3;39103:14;39095:22;;39010:113;;;:::o;39159:732::-;39278:3;39307:54;39355:5;39307:54;:::i;:::-;39377:86;39456:6;39451:3;39377:86;:::i;:::-;39370:93;;39487:56;39537:5;39487:56;:::i;:::-;39566:7;39597:1;39582:284;39607:6;39604:1;39601:13;39582:284;;;39683:6;39677:13;39710:63;39769:3;39754:13;39710:63;:::i;:::-;39703:70;;39796:60;39849:6;39796:60;:::i;:::-;39786:70;;39642:224;39629:1;39626;39622:9;39617:14;;39582:284;;;39586:14;39882:3;39875:10;;39283:608;;;39159:732;;;;:::o;39897:831::-;40160:4;40198:3;40187:9;40183:19;40175:27;;40212:71;40280:1;40269:9;40265:17;40256:6;40212:71;:::i;:::-;40293:80;40369:2;40358:9;40354:18;40345:6;40293:80;:::i;:::-;40420:9;40414:4;40410:20;40405:2;40394:9;40390:18;40383:48;40448:108;40551:4;40542:6;40448:108;:::i;:::-;40440:116;;40566:72;40634:2;40623:9;40619:18;40610:6;40566:72;:::i;:::-;40648:73;40716:3;40705:9;40701:19;40692:6;40648:73;:::i;:::-;39897:831;;;;;;;;:::o;40734:807::-;40983:4;41021:3;41010:9;41006:19;40998:27;;41035:71;41103:1;41092:9;41088:17;41079:6;41035:71;:::i;:::-;41116:72;41184:2;41173:9;41169:18;41160:6;41116:72;:::i;:::-;41198:80;41274:2;41263:9;41259:18;41250:6;41198:80;:::i;:::-;41288;41364:2;41353:9;41349:18;41340:6;41288:80;:::i;:::-;41378:73;41446:3;41435:9;41431:19;41422:6;41378:73;:::i;:::-;41461;41529:3;41518:9;41514:19;41505:6;41461:73;:::i;:::-;40734:807;;;;;;;;;:::o;41547:143::-;41604:5;41635:6;41629:13;41620:22;;41651:33;41678:5;41651:33;:::i;:::-;41547:143;;;;:::o;41696:663::-;41784:6;41792;41800;41849:2;41837:9;41828:7;41824:23;41820:32;41817:119;;;41855:79;;:::i;:::-;41817:119;41975:1;42000:64;42056:7;42047:6;42036:9;42032:22;42000:64;:::i;:::-;41990:74;;41946:128;42113:2;42139:64;42195:7;42186:6;42175:9;42171:22;42139:64;:::i;:::-;42129:74;;42084:129;42252:2;42278:64;42334:7;42325:6;42314:9;42310:22;42278:64;:::i;:::-;42268:74;;42223:129;41696:663;;;;;:::o

Swarm Source

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