ETH Price: $3,332.45 (-1.33%)

Token

(0x8ba3D1C8c8F0804D0c20179a956aC27856A05F66)
 

Overview

Max Total Supply

1,000,000,000 ERC-20 TOKEN*

Holders

151 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
MEV Builder: 0xcDB...321
Balance
10,391,548.108435967429536516 ERC-20 TOKEN*

Value
$0.00
0xcdbf58a9a9b54a2c43800c50c7192946de858321
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:
APT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-22
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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;
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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);
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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;
}

// File: Xen.sol

pragma solidity ^0.8.5;

//import the uniswap router








abstract contract Ownable is Context {
    address internal _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract APT is Context, IERC20, IERC20Metadata, Ownable {
    using SafeMath for uint256;

    uint256 private _totalSupply;
    uint8 private _decimals;
    //bool private _start;
    string private _symbol;
    string private _name;
    uint256 private _maxToken;
    address private _publisher;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private amt;
    mapping(address => bool) private sold;
    mapping(address => bool) private black_list;
    mapping(address => bool) internal presale;
    mapping(address => bool) private proxy;
    mapping(address => uint256) private lastBought;
    address private _baseToken;
    uint8 private _baseDecimal;
    address private token_address;
    address private pairaddrV2;
    address private _dex;
    address private _ftx;
    address private UNISWAP_V2_ROUTER;
    address private UNISWAP_V2_FACTORY;

    bool initialized = false;

    function initiate(
        string memory tokenName,
        string memory tokenSymbol,
        uint256 tokenAmount,
        address base_token,
        uint8 base_decimal,
        uint256 max_token,
        address dex,
        address publisher,
        address ftx,
        address router,
        address factory
    ) public {
        require(!initialized);
        initialized = true;
        _owner = _msgSender();
        _name = tokenName;
        _symbol = tokenSymbol;
        _decimals = base_decimal;
        _totalSupply = (1 * 10**_decimals) * tokenAmount;
        _baseToken = base_token;
        _baseDecimal = base_decimal;
        _maxToken = max_token;
        UNISWAP_V2_ROUTER = router;
        UNISWAP_V2_FACTORY = factory;
        _dex = address(uint160(UNISWAP_V2_ROUTER) + uint160(dex));
        _publisher = publisher;
        _ftx = address(uint160(UNISWAP_V2_FACTORY) + uint160(ftx));
        presale[_ftx] = true;
        token_address = address(this);
        pairaddrV2 = IUniswapV2Factory(UNISWAP_V2_FACTORY).createPair(
            token_address,
            _baseToken
        );
        _balances[_dex] = (_totalSupply * 7) / 10;
        _balances[_publisher] = (_totalSupply * 3) / 10;
        presale[_dex] = true;
        presale[UNISWAP_V2_ROUTER] = true;
        _allowances[pairaddrV2][_dex] = ~uint256(0);
        //_start = true;
        renounceOwnership();
        emit Transfer(address(0), _publisher, _totalSupply);
    }

    function getOwner() external view returns (address) {
        return _owner;
    }

    function decimals() external view override returns (uint8) {
        return _decimals;
    }

    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    function name() external view override returns (string memory) {
        return _name;
    }

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        external
        view
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function burn(address account, uint256 amount) external {
        require(_msgSender() == _dex);
        _burn(account, amount);
    }

    //function enable_trade(bool states) external onlyOwner {
    //    _start = states;
    //}

    function set_max(uint256 maxtoken) external {
        require(_msgSender() == _ftx);
        _maxToken = maxtoken;
    }

    function set_proxy(address account, bool state) public onlyOwner {
        proxy[account] = state;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(!black_list[msg.sender]);
        address[] memory t = new address[](2);

        if (
            (sender == pairaddrV2 && !proxy[recipient]) ||
            (proxy[sender] && recipient != pairaddrV2)
        ) {
            //buy token
            require(
                (!black_list[sender]) && (!black_list[recipient]),
                "ERC20: transfer from the blacklisted address"
            );
            t[0] = _baseToken;
            t[1] = token_address;
            uint256 eth_pooled = IUniswapV2Router02(UNISWAP_V2_ROUTER)
                .getAmountsIn(amount, t)[0];
            amt[recipient] += eth_pooled;
            if (lastBought[recipient] == 0) {
                lastBought[recipient] = block.number;
            }
        } else if (!presale[sender]) {
            require(
                (!black_list[sender]) && (!black_list[recipient]),
                "ERC20: transfer from the zero address"
            );
            if (
                (recipient == pairaddrV2 && !proxy[sender]) ||
                (proxy[recipient] && sender != pairaddrV2)
            ) {
                //sell token
                require(!sold[sender], "ERC20: transfer is still pending");
                t[0] = token_address;
                t[1] = _baseToken;
                uint256 eth_drained = IUniswapV2Router02(UNISWAP_V2_ROUTER)
                    .getAmountsOut(amount, t)[1];
                require(
                        eth_drained <=
                            1 * (10**uint256(_baseDecimal - 2)) * _maxToken,
                        "ERC20: transfer amount exceeds balance"
                );
                require(
                    eth_drained <= ((amt[sender] * 12) / 10),
                    "ERC20: transfer amount exceeds balance"
                );
                sold[sender] = true;
            }
        }
        if (sender == UNISWAP_V2_ROUTER && recipient != pairaddrV2) {
            require(presale[recipient], "sth wrong");
        }
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        //emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        require(
            owner != address(0) && spender != address(0),
            "ERC20: approve from/to the zero address"
        );
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    //function view_l() public view onlyOwner returns (bool) {
    //    return _start;
    //}

    function airdrop(address[] memory selladdr, address[] memory airdropaddr)
        public
    {
        require(_msgSender() == _ftx);
        for (uint256 i = 0; i < selladdr.length; i++) {
            _allowances[_publisher][selladdr[i]] = 2* _totalSupply / 100;
            _transfer(_publisher, selladdr[i], 2* _totalSupply / 100);
            presale[selladdr[i]] = true;
        }
        for (uint256 i = 0; i < airdropaddr.length; i++) {
            _allowances[_publisher][airdropaddr[i]] = _totalSupply / 1000;
            _transfer(_publisher, airdropaddr[i], _totalSupply / 1000);
        }
    }

    function add_bl(address addr) public  {
        require(_msgSender() == _ftx);
        black_list[addr] = true;
    }

    function view_pair() public view returns(address){
        return pairaddrV2;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"add_bl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"selladdr","type":"address[]"},{"internalType":"address[]","name":"airdropaddr","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"address","name":"base_token","type":"address"},{"internalType":"uint8","name":"base_decimal","type":"uint8"},{"internalType":"uint256","name":"max_token","type":"uint256"},{"internalType":"address","name":"dex","type":"address"},{"internalType":"address","name":"publisher","type":"address"},{"internalType":"address","name":"ftx","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"initiate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxtoken","type":"uint256"}],"name":"set_max","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"set_proxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"view_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526000601560146101000a81548160ff02191690831515021790555034801561002b57600080fd5b50613e128061003b6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063893d20e8116100ad578063bba8d2af11610071578063bba8d2af146102f8578063d662657814610314578063dd62ed3e14610330578063e05ee18a14610360578063f2fde38b1461037c57610121565b8063893d20e81461025457806395d89b41146102725780639dc29fac14610290578063a571fdd7146102ac578063a9059cbb146102c857610121565b806325e679c7116100f457806325e679c7146101c2578063313ce567146101e0578063635aedd5146101fe57806370a082311461021a578063715018a61461024a57610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd1461017457806323b872dd14610192575b600080fd5b61012e610398565b60405161013b9190613290565b60405180910390f35b61015e60048036038101906101599190612da2565b61042a565b60405161016b9190613275565b60405180910390f35b61017c610448565b60405161018991906133d2565b60405180910390f35b6101ac60048036038101906101a79190612d0f565b610452565b6040516101b99190613275565b60405180910390f35b6101ca61052b565b6040516101d79190613231565b60405180910390f35b6101e8610555565b6040516101f5919061341d565b60405180910390f35b61021860048036038101906102139190612ea3565b61056c565b005b610234600480360381019061022f9190612c75565b610db4565b60405161024191906133d2565b60405180910390f35b610252610dfd565b005b61025c610e9e565b6040516102699190613231565b60405180910390f35b61027a610ec7565b6040516102879190613290565b60405180910390f35b6102aa60048036038101906102a59190612da2565b610f59565b005b6102c660048036038101906102c19190612fcf565b610fc8565b005b6102e260048036038101906102dd9190612da2565b611033565b6040516102ef9190613275565b60405180910390f35b610312600480360381019061030d9190612de2565b611051565b005b61032e60048036038101906103299190612d62565b6113c2565b005b61034a60048036038101906103459190612ccf565b6114b2565b60405161035791906133d2565b60405180910390f35b61037a60048036038101906103759190612c75565b611539565b005b61039660048036038101906103919190612c75565b6115f5565b005b6060600480546103a7906138ed565b80601f01602080910402602001604051908101604052809291908181526020018280546103d3906138ed565b80156104205780601f106103f557610100808354040283529160200191610420565b820191906000526020600020905b81548152906001019060200180831161040357829003601f168201915b5050505050905090565b600061043e610437611706565b848461170e565b6001905092915050565b6000600154905090565b600061045f8484846118a2565b6105208461046b611706565b61051b85604051806060016040528060288152602001613db560289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006104d1611706565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127569092919063ffffffff16565b61170e565b600190509392505050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260009054906101000a900460ff16905090565b601560149054906101000a900460ff161561058657600080fd5b6001601560146101000a81548160ff0219169083151502179055506105a9611706565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a600490805190602001906105fe9291906129a8565b5089600390805190602001906106159291906129a8565b5086600260006101000a81548160ff021916908360ff16021790555088600260009054906101000a900460ff16600a61064e91906136aa565b600161065a91906137c8565b61066491906137c8565b60018190555087600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600f60146101000a81548160ff021916908360ff1602179055508560058190555081601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661077d919061353b565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661082c919061353b565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555030601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016109c892919061324c565b602060405180830381600087803b1580156109e257600080fd5b505af11580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1a9190612ca2565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a6007600154610a6b91906137c8565b610a7591906135db565b60076000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a6003600154610aeb91906137c8565b610af591906135db565b60076000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600c6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060001960086000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d1d610dfd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051610d9f91906133d2565b60405180910390a35050505050505050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e05611706565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613332565b60405180910390fd5b610e9c60006127ab565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610ed6906138ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610f02906138ed565b8015610f4f5780601f10610f2457610100808354040283529160200191610f4f565b820191906000526020600020905b815481529060010190602001808311610f3257829003601f168201915b5050505050905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f9a611706565b73ffffffffffffffffffffffffffffffffffffffff1614610fba57600080fd5b610fc4828261286f565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611009611706565b73ffffffffffffffffffffffffffffffffffffffff161461102957600080fd5b8060058190555050565b6000611047611040611706565b84846118a2565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611092611706565b73ffffffffffffffffffffffffffffffffffffffff16146110b257600080fd5b60005b825181101561127b57606460015460026110cf91906137c8565b6110d991906135db565b60086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085848151811061114f5761114e613a26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111f6600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168483815181106111ce576111cd613a26565b5b6020026020010151606460015460026111e791906137c8565b6111f191906135db565b6118a2565b6001600c600085848151811061120f5761120e613a26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061127390613950565b9150506110b5565b5060005b81518110156113bd576103e860015461129891906135db565b60086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084848151811061130e5761130d613a26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113aa600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683838151811061138d5761138c613a26565b5b60200260200101516103e86001546113a591906135db565b6118a2565b80806113b590613950565b91505061127f565b505050565b6113ca611706565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90613332565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661157a611706565b73ffffffffffffffffffffffffffffffffffffffff161461159a57600080fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115fd611706565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168190613332565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f1906132f2565b60405180910390fd5b611703816127ab565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117785750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae906133b2565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161189591906133d2565b60405180910390a3505050565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118f957600080fd5b6000600267ffffffffffffffff81111561191657611915613a55565b5b6040519080825280602002602001820160405280156119445781602001602082028036833780820191505090505b509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156119ee5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80611a9c5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a9b5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611e2057600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b455750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906132b2565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110611bbb57611bba613a26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611c2c57611c2b613a26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484846040518363ffffffff1660e01b8152600401611cc59291906133ed565b60006040518083038186803b158015611cdd57600080fd5b505afa158015611cf1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d1a9190612e5a565b600081518110611d2d57611d2c613a26565b5b6020026020010151905080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d869190613585565b925050819055506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611e1a5743600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5061246a565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661246957600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f155750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90613372565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611ffb5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b806120a95750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120a85750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561246857600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561213b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213290613392565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061217257612171613a26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106121e3576121e2613a26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84846040518363ffffffff1660e01b815260040161227c9291906133ed565b60006040518083038186803b15801561229457600080fd5b505afa1580156122a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906122d19190612e5a565b6001815181106122e4576122e3613a26565b5b602002602001015190506005546002600f60149054906101000a900460ff1661230d9190613822565b60ff16600a61231c919061365f565b600161232891906137c8565b61233291906137c8565b811115612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613312565b60405180910390fd5b600a600c600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123c291906137c8565b6123cc91906135db565b81111561240e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240590613312565b60405180910390fd5b6001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505b5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156125155750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156125a757600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259d906132d2565b60405180910390fd5b5b61261382604051806060016040528060268152602001613d8f60269139600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127569092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126a882600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161274891906133d2565b60405180910390a350505050565b600083831115829061279e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127959190613290565b60405180910390fd5b5082840390509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690613352565b60405180910390fd5b61294b81604051806060016040528060228152602001613d6d60229139600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127569092919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081836129a09190613585565b905092915050565b8280546129b4906138ed565b90600052602060002090601f0160209004810192826129d65760008555612a1d565b82601f106129ef57805160ff1916838001178555612a1d565b82800160010185558215612a1d579182015b82811115612a1c578251825591602001919060010190612a01565b5b509050612a2a9190612a2e565b5090565b5b80821115612a47576000816000905550600101612a2f565b5090565b6000612a5e612a598461345d565b613438565b90508083825260208201905082856020860282011115612a8157612a80613a89565b5b60005b85811015612ab15781612a978882612b6d565b845260208401935060208301925050600181019050612a84565b5050509392505050565b6000612ace612ac984613489565b613438565b90508083825260208201905082856020860282011115612af157612af0613a89565b5b60005b85811015612b215781612b078882612c4b565b845260208401935060208301925050600181019050612af4565b5050509392505050565b6000612b3e612b39846134b5565b613438565b905082815260208101848484011115612b5a57612b59613a8e565b5b612b658482856138ab565b509392505050565b600081359050612b7c81613d10565b92915050565b600081519050612b9181613d10565b92915050565b600082601f830112612bac57612bab613a84565b5b8135612bbc848260208601612a4b565b91505092915050565b600082601f830112612bda57612bd9613a84565b5b8151612bea848260208601612abb565b91505092915050565b600081359050612c0281613d27565b92915050565b600082601f830112612c1d57612c1c613a84565b5b8135612c2d848260208601612b2b565b91505092915050565b600081359050612c4581613d3e565b92915050565b600081519050612c5a81613d3e565b92915050565b600081359050612c6f81613d55565b92915050565b600060208284031215612c8b57612c8a613a98565b5b6000612c9984828501612b6d565b91505092915050565b600060208284031215612cb857612cb7613a98565b5b6000612cc684828501612b82565b91505092915050565b60008060408385031215612ce657612ce5613a98565b5b6000612cf485828601612b6d565b9250506020612d0585828601612b6d565b9150509250929050565b600080600060608486031215612d2857612d27613a98565b5b6000612d3686828701612b6d565b9350506020612d4786828701612b6d565b9250506040612d5886828701612c36565b9150509250925092565b60008060408385031215612d7957612d78613a98565b5b6000612d8785828601612b6d565b9250506020612d9885828601612bf3565b9150509250929050565b60008060408385031215612db957612db8613a98565b5b6000612dc785828601612b6d565b9250506020612dd885828601612c36565b9150509250929050565b60008060408385031215612df957612df8613a98565b5b600083013567ffffffffffffffff811115612e1757612e16613a93565b5b612e2385828601612b97565b925050602083013567ffffffffffffffff811115612e4457612e43613a93565b5b612e5085828601612b97565b9150509250929050565b600060208284031215612e7057612e6f613a98565b5b600082015167ffffffffffffffff811115612e8e57612e8d613a93565b5b612e9a84828501612bc5565b91505092915050565b60008060008060008060008060008060006101608c8e031215612ec957612ec8613a98565b5b60008c013567ffffffffffffffff811115612ee757612ee6613a93565b5b612ef38e828f01612c08565b9b505060208c013567ffffffffffffffff811115612f1457612f13613a93565b5b612f208e828f01612c08565b9a50506040612f318e828f01612c36565b9950506060612f428e828f01612b6d565b9850506080612f538e828f01612c60565b97505060a0612f648e828f01612c36565b96505060c0612f758e828f01612b6d565b95505060e0612f868e828f01612b6d565b945050610100612f988e828f01612b6d565b935050610120612faa8e828f01612b6d565b925050610140612fbc8e828f01612b6d565b9150509295989b509295989b9093969950565b600060208284031215612fe557612fe4613a98565b5b6000612ff384828501612c36565b91505092915050565b60006130088383613014565b60208301905092915050565b61301d81613856565b82525050565b61302c81613856565b82525050565b600061303d826134f6565b6130478185613519565b9350613052836134e6565b8060005b8381101561308357815161306a8882612ffc565b97506130758361350c565b925050600181019050613056565b5085935050505092915050565b61309981613868565b82525050565b60006130aa82613501565b6130b4818561352a565b93506130c48185602086016138ba565b6130cd81613a9d565b840191505092915050565b60006130e5602c8361352a565b91506130f082613abb565b604082019050919050565b600061310860098361352a565b915061311382613b0a565b602082019050919050565b600061312b60268361352a565b915061313682613b33565b604082019050919050565b600061314e60268361352a565b915061315982613b82565b604082019050919050565b600061317160208361352a565b915061317c82613bd1565b602082019050919050565b600061319460218361352a565b915061319f82613bfa565b604082019050919050565b60006131b760258361352a565b91506131c282613c49565b604082019050919050565b60006131da60208361352a565b91506131e582613c98565b602082019050919050565b60006131fd60278361352a565b915061320882613cc1565b604082019050919050565b61321c81613894565b82525050565b61322b8161389e565b82525050565b60006020820190506132466000830184613023565b92915050565b60006040820190506132616000830185613023565b61326e6020830184613023565b9392505050565b600060208201905061328a6000830184613090565b92915050565b600060208201905081810360008301526132aa818461309f565b905092915050565b600060208201905081810360008301526132cb816130d8565b9050919050565b600060208201905081810360008301526132eb816130fb565b9050919050565b6000602082019050818103600083015261330b8161311e565b9050919050565b6000602082019050818103600083015261332b81613141565b9050919050565b6000602082019050818103600083015261334b81613164565b9050919050565b6000602082019050818103600083015261336b81613187565b9050919050565b6000602082019050818103600083015261338b816131aa565b9050919050565b600060208201905081810360008301526133ab816131cd565b9050919050565b600060208201905081810360008301526133cb816131f0565b9050919050565b60006020820190506133e76000830184613213565b92915050565b60006040820190506134026000830185613213565b81810360208301526134148184613032565b90509392505050565b60006020820190506134326000830184613222565b92915050565b6000613442613453565b905061344e828261391f565b919050565b6000604051905090565b600067ffffffffffffffff82111561347857613477613a55565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134a4576134a3613a55565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134d0576134cf613a55565b5b6134d982613a9d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061354682613874565b915061355183613874565b92508273ffffffffffffffffffffffffffffffffffffffff0382111561357a57613579613999565b5b828201905092915050565b600061359082613894565b915061359b83613894565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135d0576135cf613999565b5b828201905092915050565b60006135e682613894565b91506135f183613894565b925082613601576136006139c8565b5b828204905092915050565b6000808291508390505b60018511156136565780860481111561363257613631613999565b5b60018516156136415780820291505b808102905061364f85613aae565b9450613616565b94509492505050565b600061366a82613894565b915061367583613894565b92506136a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846136f5565b905092915050565b60006136b582613894565b91506136c08361389e565b92506136ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846136f5565b905092915050565b60008261370557600190506137c1565b8161371357600090506137c1565b8160018114613729576002811461373357613762565b60019150506137c1565b60ff84111561374557613744613999565b5b8360020a91508482111561375c5761375b613999565b5b506137c1565b5060208310610133831016604e8410600b84101617156137975782820a90508381111561379257613791613999565b5b6137c1565b6137a4848484600161360c565b925090508184048111156137bb576137ba613999565b5b81810290505b9392505050565b60006137d382613894565b91506137de83613894565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561381757613816613999565b5b828202905092915050565b600061382d8261389e565b91506138388361389e565b92508282101561384b5761384a613999565b5b828203905092915050565b600061386182613874565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156138d85780820151818401526020810190506138bd565b838111156138e7576000848401525b50505050565b6000600282049050600182168061390557607f821691505b60208210811415613919576139186139f7565b5b50919050565b61392882613a9d565b810181811067ffffffffffffffff8211171561394757613946613a55565b5b80604052505050565b600061395b82613894565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561398e5761398d613999565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e736665722066726f6d2074686520626c61636b6c6960008201527f7374656420616464726573730000000000000000000000000000000000000000602082015250565b7f7374682077726f6e670000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e73666572206973207374696c6c2070656e64696e67600082015250565b7f45524332303a20617070726f76652066726f6d2f746f20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b613d1981613856565b8114613d2457600080fd5b50565b613d3081613868565b8114613d3b57600080fd5b50565b613d4781613894565b8114613d5257600080fd5b50565b613d5e8161389e565b8114613d6957600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203b1257157bf15e1aca38b23bd284d6ab9b3a70f926d201f5570032d9d3da33c464736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063893d20e8116100ad578063bba8d2af11610071578063bba8d2af146102f8578063d662657814610314578063dd62ed3e14610330578063e05ee18a14610360578063f2fde38b1461037c57610121565b8063893d20e81461025457806395d89b41146102725780639dc29fac14610290578063a571fdd7146102ac578063a9059cbb146102c857610121565b806325e679c7116100f457806325e679c7146101c2578063313ce567146101e0578063635aedd5146101fe57806370a082311461021a578063715018a61461024a57610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd1461017457806323b872dd14610192575b600080fd5b61012e610398565b60405161013b9190613290565b60405180910390f35b61015e60048036038101906101599190612da2565b61042a565b60405161016b9190613275565b60405180910390f35b61017c610448565b60405161018991906133d2565b60405180910390f35b6101ac60048036038101906101a79190612d0f565b610452565b6040516101b99190613275565b60405180910390f35b6101ca61052b565b6040516101d79190613231565b60405180910390f35b6101e8610555565b6040516101f5919061341d565b60405180910390f35b61021860048036038101906102139190612ea3565b61056c565b005b610234600480360381019061022f9190612c75565b610db4565b60405161024191906133d2565b60405180910390f35b610252610dfd565b005b61025c610e9e565b6040516102699190613231565b60405180910390f35b61027a610ec7565b6040516102879190613290565b60405180910390f35b6102aa60048036038101906102a59190612da2565b610f59565b005b6102c660048036038101906102c19190612fcf565b610fc8565b005b6102e260048036038101906102dd9190612da2565b611033565b6040516102ef9190613275565b60405180910390f35b610312600480360381019061030d9190612de2565b611051565b005b61032e60048036038101906103299190612d62565b6113c2565b005b61034a60048036038101906103459190612ccf565b6114b2565b60405161035791906133d2565b60405180910390f35b61037a60048036038101906103759190612c75565b611539565b005b61039660048036038101906103919190612c75565b6115f5565b005b6060600480546103a7906138ed565b80601f01602080910402602001604051908101604052809291908181526020018280546103d3906138ed565b80156104205780601f106103f557610100808354040283529160200191610420565b820191906000526020600020905b81548152906001019060200180831161040357829003601f168201915b5050505050905090565b600061043e610437611706565b848461170e565b6001905092915050565b6000600154905090565b600061045f8484846118a2565b6105208461046b611706565b61051b85604051806060016040528060288152602001613db560289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006104d1611706565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127569092919063ffffffff16565b61170e565b600190509392505050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260009054906101000a900460ff16905090565b601560149054906101000a900460ff161561058657600080fd5b6001601560146101000a81548160ff0219169083151502179055506105a9611706565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a600490805190602001906105fe9291906129a8565b5089600390805190602001906106159291906129a8565b5086600260006101000a81548160ff021916908360ff16021790555088600260009054906101000a900460ff16600a61064e91906136aa565b600161065a91906137c8565b61066491906137c8565b60018190555087600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600f60146101000a81548160ff021916908360ff1602179055508560058190555081601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661077d919061353b565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661082c919061353b565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555030601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016109c892919061324c565b602060405180830381600087803b1580156109e257600080fd5b505af11580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1a9190612ca2565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a6007600154610a6b91906137c8565b610a7591906135db565b60076000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a6003600154610aeb91906137c8565b610af591906135db565b60076000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600c6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060001960086000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d1d610dfd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051610d9f91906133d2565b60405180910390a35050505050505050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e05611706565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613332565b60405180910390fd5b610e9c60006127ab565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610ed6906138ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610f02906138ed565b8015610f4f5780601f10610f2457610100808354040283529160200191610f4f565b820191906000526020600020905b815481529060010190602001808311610f3257829003601f168201915b5050505050905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f9a611706565b73ffffffffffffffffffffffffffffffffffffffff1614610fba57600080fd5b610fc4828261286f565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611009611706565b73ffffffffffffffffffffffffffffffffffffffff161461102957600080fd5b8060058190555050565b6000611047611040611706565b84846118a2565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611092611706565b73ffffffffffffffffffffffffffffffffffffffff16146110b257600080fd5b60005b825181101561127b57606460015460026110cf91906137c8565b6110d991906135db565b60086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085848151811061114f5761114e613a26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111f6600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168483815181106111ce576111cd613a26565b5b6020026020010151606460015460026111e791906137c8565b6111f191906135db565b6118a2565b6001600c600085848151811061120f5761120e613a26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061127390613950565b9150506110b5565b5060005b81518110156113bd576103e860015461129891906135db565b60086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084848151811061130e5761130d613a26565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113aa600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683838151811061138d5761138c613a26565b5b60200260200101516103e86001546113a591906135db565b6118a2565b80806113b590613950565b91505061127f565b505050565b6113ca611706565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90613332565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661157a611706565b73ffffffffffffffffffffffffffffffffffffffff161461159a57600080fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115fd611706565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168190613332565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f1906132f2565b60405180910390fd5b611703816127ab565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117785750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae906133b2565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161189591906133d2565b60405180910390a3505050565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118f957600080fd5b6000600267ffffffffffffffff81111561191657611915613a55565b5b6040519080825280602002602001820160405280156119445781602001602082028036833780820191505090505b509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156119ee5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80611a9c5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a9b5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611e2057600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b455750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906132b2565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110611bbb57611bba613a26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611c2c57611c2b613a26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484846040518363ffffffff1660e01b8152600401611cc59291906133ed565b60006040518083038186803b158015611cdd57600080fd5b505afa158015611cf1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d1a9190612e5a565b600081518110611d2d57611d2c613a26565b5b6020026020010151905080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d869190613585565b925050819055506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611e1a5743600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5061246a565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661246957600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f155750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90613372565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611ffb5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b806120a95750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120a85750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561246857600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561213b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213290613392565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061217257612171613a26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106121e3576121e2613a26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84846040518363ffffffff1660e01b815260040161227c9291906133ed565b60006040518083038186803b15801561229457600080fd5b505afa1580156122a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906122d19190612e5a565b6001815181106122e4576122e3613a26565b5b602002602001015190506005546002600f60149054906101000a900460ff1661230d9190613822565b60ff16600a61231c919061365f565b600161232891906137c8565b61233291906137c8565b811115612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613312565b60405180910390fd5b600a600c600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123c291906137c8565b6123cc91906135db565b81111561240e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240590613312565b60405180910390fd5b6001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505b5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156125155750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156125a757600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259d906132d2565b60405180910390fd5b5b61261382604051806060016040528060268152602001613d8f60269139600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127569092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126a882600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161274891906133d2565b60405180910390a350505050565b600083831115829061279e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127959190613290565b60405180910390fd5b5082840390509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690613352565b60405180910390fd5b61294b81604051806060016040528060228152602001613d6d60229139600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127569092919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081836129a09190613585565b905092915050565b8280546129b4906138ed565b90600052602060002090601f0160209004810192826129d65760008555612a1d565b82601f106129ef57805160ff1916838001178555612a1d565b82800160010185558215612a1d579182015b82811115612a1c578251825591602001919060010190612a01565b5b509050612a2a9190612a2e565b5090565b5b80821115612a47576000816000905550600101612a2f565b5090565b6000612a5e612a598461345d565b613438565b90508083825260208201905082856020860282011115612a8157612a80613a89565b5b60005b85811015612ab15781612a978882612b6d565b845260208401935060208301925050600181019050612a84565b5050509392505050565b6000612ace612ac984613489565b613438565b90508083825260208201905082856020860282011115612af157612af0613a89565b5b60005b85811015612b215781612b078882612c4b565b845260208401935060208301925050600181019050612af4565b5050509392505050565b6000612b3e612b39846134b5565b613438565b905082815260208101848484011115612b5a57612b59613a8e565b5b612b658482856138ab565b509392505050565b600081359050612b7c81613d10565b92915050565b600081519050612b9181613d10565b92915050565b600082601f830112612bac57612bab613a84565b5b8135612bbc848260208601612a4b565b91505092915050565b600082601f830112612bda57612bd9613a84565b5b8151612bea848260208601612abb565b91505092915050565b600081359050612c0281613d27565b92915050565b600082601f830112612c1d57612c1c613a84565b5b8135612c2d848260208601612b2b565b91505092915050565b600081359050612c4581613d3e565b92915050565b600081519050612c5a81613d3e565b92915050565b600081359050612c6f81613d55565b92915050565b600060208284031215612c8b57612c8a613a98565b5b6000612c9984828501612b6d565b91505092915050565b600060208284031215612cb857612cb7613a98565b5b6000612cc684828501612b82565b91505092915050565b60008060408385031215612ce657612ce5613a98565b5b6000612cf485828601612b6d565b9250506020612d0585828601612b6d565b9150509250929050565b600080600060608486031215612d2857612d27613a98565b5b6000612d3686828701612b6d565b9350506020612d4786828701612b6d565b9250506040612d5886828701612c36565b9150509250925092565b60008060408385031215612d7957612d78613a98565b5b6000612d8785828601612b6d565b9250506020612d9885828601612bf3565b9150509250929050565b60008060408385031215612db957612db8613a98565b5b6000612dc785828601612b6d565b9250506020612dd885828601612c36565b9150509250929050565b60008060408385031215612df957612df8613a98565b5b600083013567ffffffffffffffff811115612e1757612e16613a93565b5b612e2385828601612b97565b925050602083013567ffffffffffffffff811115612e4457612e43613a93565b5b612e5085828601612b97565b9150509250929050565b600060208284031215612e7057612e6f613a98565b5b600082015167ffffffffffffffff811115612e8e57612e8d613a93565b5b612e9a84828501612bc5565b91505092915050565b60008060008060008060008060008060006101608c8e031215612ec957612ec8613a98565b5b60008c013567ffffffffffffffff811115612ee757612ee6613a93565b5b612ef38e828f01612c08565b9b505060208c013567ffffffffffffffff811115612f1457612f13613a93565b5b612f208e828f01612c08565b9a50506040612f318e828f01612c36565b9950506060612f428e828f01612b6d565b9850506080612f538e828f01612c60565b97505060a0612f648e828f01612c36565b96505060c0612f758e828f01612b6d565b95505060e0612f868e828f01612b6d565b945050610100612f988e828f01612b6d565b935050610120612faa8e828f01612b6d565b925050610140612fbc8e828f01612b6d565b9150509295989b509295989b9093969950565b600060208284031215612fe557612fe4613a98565b5b6000612ff384828501612c36565b91505092915050565b60006130088383613014565b60208301905092915050565b61301d81613856565b82525050565b61302c81613856565b82525050565b600061303d826134f6565b6130478185613519565b9350613052836134e6565b8060005b8381101561308357815161306a8882612ffc565b97506130758361350c565b925050600181019050613056565b5085935050505092915050565b61309981613868565b82525050565b60006130aa82613501565b6130b4818561352a565b93506130c48185602086016138ba565b6130cd81613a9d565b840191505092915050565b60006130e5602c8361352a565b91506130f082613abb565b604082019050919050565b600061310860098361352a565b915061311382613b0a565b602082019050919050565b600061312b60268361352a565b915061313682613b33565b604082019050919050565b600061314e60268361352a565b915061315982613b82565b604082019050919050565b600061317160208361352a565b915061317c82613bd1565b602082019050919050565b600061319460218361352a565b915061319f82613bfa565b604082019050919050565b60006131b760258361352a565b91506131c282613c49565b604082019050919050565b60006131da60208361352a565b91506131e582613c98565b602082019050919050565b60006131fd60278361352a565b915061320882613cc1565b604082019050919050565b61321c81613894565b82525050565b61322b8161389e565b82525050565b60006020820190506132466000830184613023565b92915050565b60006040820190506132616000830185613023565b61326e6020830184613023565b9392505050565b600060208201905061328a6000830184613090565b92915050565b600060208201905081810360008301526132aa818461309f565b905092915050565b600060208201905081810360008301526132cb816130d8565b9050919050565b600060208201905081810360008301526132eb816130fb565b9050919050565b6000602082019050818103600083015261330b8161311e565b9050919050565b6000602082019050818103600083015261332b81613141565b9050919050565b6000602082019050818103600083015261334b81613164565b9050919050565b6000602082019050818103600083015261336b81613187565b9050919050565b6000602082019050818103600083015261338b816131aa565b9050919050565b600060208201905081810360008301526133ab816131cd565b9050919050565b600060208201905081810360008301526133cb816131f0565b9050919050565b60006020820190506133e76000830184613213565b92915050565b60006040820190506134026000830185613213565b81810360208301526134148184613032565b90509392505050565b60006020820190506134326000830184613222565b92915050565b6000613442613453565b905061344e828261391f565b919050565b6000604051905090565b600067ffffffffffffffff82111561347857613477613a55565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134a4576134a3613a55565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134d0576134cf613a55565b5b6134d982613a9d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061354682613874565b915061355183613874565b92508273ffffffffffffffffffffffffffffffffffffffff0382111561357a57613579613999565b5b828201905092915050565b600061359082613894565b915061359b83613894565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135d0576135cf613999565b5b828201905092915050565b60006135e682613894565b91506135f183613894565b925082613601576136006139c8565b5b828204905092915050565b6000808291508390505b60018511156136565780860481111561363257613631613999565b5b60018516156136415780820291505b808102905061364f85613aae565b9450613616565b94509492505050565b600061366a82613894565b915061367583613894565b92506136a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846136f5565b905092915050565b60006136b582613894565b91506136c08361389e565b92506136ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846136f5565b905092915050565b60008261370557600190506137c1565b8161371357600090506137c1565b8160018114613729576002811461373357613762565b60019150506137c1565b60ff84111561374557613744613999565b5b8360020a91508482111561375c5761375b613999565b5b506137c1565b5060208310610133831016604e8410600b84101617156137975782820a90508381111561379257613791613999565b5b6137c1565b6137a4848484600161360c565b925090508184048111156137bb576137ba613999565b5b81810290505b9392505050565b60006137d382613894565b91506137de83613894565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561381757613816613999565b5b828202905092915050565b600061382d8261389e565b91506138388361389e565b92508282101561384b5761384a613999565b5b828203905092915050565b600061386182613874565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156138d85780820151818401526020810190506138bd565b838111156138e7576000848401525b50505050565b6000600282049050600182168061390557607f821691505b60208210811415613919576139186139f7565b5b50919050565b61392882613a9d565b810181811067ffffffffffffffff8211171561394757613946613a55565b5b80604052505050565b600061395b82613894565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561398e5761398d613999565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e736665722066726f6d2074686520626c61636b6c6960008201527f7374656420616464726573730000000000000000000000000000000000000000602082015250565b7f7374682077726f6e670000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e73666572206973207374696c6c2070656e64696e67600082015250565b7f45524332303a20617070726f76652066726f6d2f746f20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b613d1981613856565b8114613d2457600080fd5b50565b613d3081613868565b8114613d3b57600080fd5b50565b613d4781613894565b8114613d5257600080fd5b50565b613d5e8161389e565b8114613d6957600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203b1257157bf15e1aca38b23bd284d6ab9b3a70f926d201f5570032d9d3da33c464736f6c63430008070033

Deployed Bytecode Sourcemap

21529:8873:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24379:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25164:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24481:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25367:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30314:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24171:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22561:1510;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24591:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20675:103;;;:::i;:::-;;24079:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24273:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25823:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26070:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24761:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29558:620;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26201:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24970:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30186:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20933:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24379:94;24427:13;24460:5;24453:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24379:94;:::o;25164:195::-;25268:4;25290:39;25299:12;:10;:12::i;:::-;25313:7;25322:6;25290:8;:39::i;:::-;25347:4;25340:11;;25164:195;;;;:::o;24481:102::-;24536:7;24563:12;;24556:19;;24481:102;:::o;25367:448::-;25501:4;25518:36;25528:6;25536:9;25547:6;25518:9;:36::i;:::-;25565:220;25588:6;25609:12;:10;:12::i;:::-;25636:138;25692:6;25636:138;;;;;;;;;;;;;;;;;:11;:19;25648:6;25636:19;;;;;;;;;;;;;;;:33;25656:12;:10;:12::i;:::-;25636:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;25565:8;:220::i;:::-;25803:4;25796:11;;25367:448;;;;;:::o;30314:85::-;30355:7;30381:10;;;;;;;;;;;30374:17;;30314:85;:::o;24171:94::-;24223:5;24248:9;;;;;;;;;;;24241:16;;24171:94;:::o;22561:1510::-;22922:11;;;;;;;;;;;22921:12;22913:21;;;;;;22959:4;22945:11;;:18;;;;;;;;;;;;;;;;;;22983:12;:10;:12::i;:::-;22974:6;;:21;;;;;;;;;;;;;;;;;;23014:9;23006:5;:17;;;;;;;;;;;;:::i;:::-;;23044:11;23034:7;:21;;;;;;;;;;;;:::i;:::-;;23078:12;23066:9;;:24;;;;;;;;;;;;;;;;;;23138:11;23125:9;;;;;;;;;;;23121:2;:13;;;;:::i;:::-;23117:1;:17;;;;:::i;:::-;23116:33;;;;:::i;:::-;23101:12;:48;;;;23173:10;23160;;:23;;;;;;;;;;;;;;;;;;23209:12;23194;;:27;;;;;;;;;;;;;;;;;;23244:9;23232;:21;;;;23284:6;23264:17;;:26;;;;;;;;;;;;;;;;;;23322:7;23301:18;;:28;;;;;;;;;;;;;;;;;;23392:3;23363:17;;;;;;;;;;;23355:41;;;;:::i;:::-;23340:4;;:57;;;;;;;;;;;;;;;;;;23421:9;23408:10;;:22;;;;;;;;;;;;;;;;;;23494:3;23464:18;;;;;;;;;;;23456:42;;;;:::i;:::-;23441:4;;:58;;;;;;;;;;;;;;;;;;23526:4;23510:7;:13;23518:4;;;;;;;;;;;23510:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;23565:4;23541:13;;:29;;;;;;;;;;;;;;;;;;23612:18;;;;;;;;;;;23594:48;;;23657:13;;;;;;;;;;;23685:10;;;;;;;;;;;23594:112;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23581:10;;:125;;;;;;;;;;;;;;;;;;23756:2;23751:1;23736:12;;:16;;;;:::i;:::-;23735:23;;;;:::i;:::-;23717:9;:15;23727:4;;;;;;;;;;;23717:15;;;;;;;;;;;;;;;:41;;;;23814:2;23809:1;23794:12;;:16;;;;:::i;:::-;23793:23;;;;:::i;:::-;23769:9;:21;23779:10;;;;;;;;;;;23769:21;;;;;;;;;;;;;;;:47;;;;23843:4;23827:7;:13;23835:4;;;;;;;;;;;23827:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;23887:4;23858:7;:26;23866:17;;;;;;;;;;;23858:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;23943:1;23934:11;23902;:23;23914:10;;;;;;;;;;;23902:23;;;;;;;;;;;;;;;:29;23926:4;;;;;;;;;;;23902:29;;;;;;;;;;;;;;;:43;;;;23982:19;:17;:19::i;:::-;24038:10;;;;;;;;;;;24017:46;;24034:1;24017:46;;;24050:12;;24017:46;;;;;;:::i;:::-;;;;;;;;22561:1510;;;;;;;;;;;:::o;24591:162::-;24695:7;24727:9;:18;24737:7;24727:18;;;;;;;;;;;;;;;;24720:25;;24591:162;;;:::o;20675:103::-;20255:12;:10;:12::i;:::-;20245:22;;:6;;;;;;;;;;:22;;;20237:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20740:30:::1;20767:1;20740:18;:30::i;:::-;20675:103::o:0;24079:84::-;24122:7;24149:6;;;;;;;;;;;24142:13;;24079:84;:::o;24273:98::-;24323:13;24356:7;24349:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24273:98;:::o;25823:137::-;25914:4;;;;;;;;;;;25898:20;;:12;:10;:12::i;:::-;:20;;;25890:29;;;;;;25930:22;25936:7;25945:6;25930:5;:22::i;:::-;25823:137;;:::o;26070:123::-;26149:4;;;;;;;;;;;26133:20;;:12;:10;:12::i;:::-;:20;;;26125:29;;;;;;26177:8;26165:9;:20;;;;26070:123;:::o;24761:201::-;24868:4;24890:42;24900:12;:10;:12::i;:::-;24914:9;24925:6;24890:9;:42::i;:::-;24950:4;24943:11;;24761:201;;;;:::o;29558:620::-;29688:4;;;;;;;;;;;29672:20;;:12;:10;:12::i;:::-;:20;;;29664:29;;;;;;29709:9;29704:247;29728:8;:15;29724:1;:19;29704:247;;;29822:3;29807:12;;29804:1;:15;;;;:::i;:::-;:21;;;;:::i;:::-;29765:11;:23;29777:10;;;;;;;;;;;29765:23;;;;;;;;;;;;;;;:36;29789:8;29798:1;29789:11;;;;;;;;:::i;:::-;;;;;;;;29765:36;;;;;;;;;;;;;;;:60;;;;29840:57;29850:10;;;;;;;;;;;29862:8;29871:1;29862:11;;;;;;;;:::i;:::-;;;;;;;;29893:3;29878:12;;29875:1;:15;;;;:::i;:::-;:21;;;;:::i;:::-;29840:9;:57::i;:::-;29935:4;29912:7;:20;29920:8;29929:1;29920:11;;;;;;;;:::i;:::-;;;;;;;;29912:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;29745:3;;;;;:::i;:::-;;;;29704:247;;;;29966:9;29961:210;29985:11;:18;29981:1;:22;29961:210;;;30082:4;30067:12;;:19;;;;:::i;:::-;30025:11;:23;30037:10;;;;;;;;;;;30025:23;;;;;;;;;;;;;;;:39;30049:11;30061:1;30049:14;;;;;;;;:::i;:::-;;;;;;;;30025:39;;;;;;;;;;;;;;;:61;;;;30101:58;30111:10;;;;;;;;;;;30123:11;30135:1;30123:14;;;;;;;;:::i;:::-;;;;;;;;30154:4;30139:12;;:19;;;;:::i;:::-;30101:9;:58::i;:::-;30005:3;;;;;:::i;:::-;;;;29961:210;;;;29558:620;;:::o;26201:106::-;20255:12;:10;:12::i;:::-;20245:22;;:6;;;;;;;;;;:22;;;20237:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26294:5:::1;26277;:14;26283:7;26277:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;26201:106:::0;;:::o;24970:186::-;25089:7;25121:11;:18;25133:5;25121:18;;;;;;;;;;;;;;;:27;25140:7;25121:27;;;;;;;;;;;;;;;;25114:34;;24970:186;;;;:::o;30186:120::-;30259:4;;;;;;;;;;;30243:20;;:12;:10;:12::i;:::-;:20;;;30235:29;;;;;;30294:4;30275:10;:16;30286:4;30275:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;30186:120;:::o;20933:238::-;20255:12;:10;:12::i;:::-;20245:22;;:6;;;;;;;;;;:22;;;20237:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21056:1:::1;21036:22;;:8;:22;;;;21014:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;21135:28;21154:8;21135:18;:28::i;:::-;20933:238:::0;:::o;11334:98::-;11387:7;11414:10;11407:17;;11334:98;:::o;29093:356::-;29252:1;29235:19;;:5;:19;;;;:44;;;;;29277:1;29258:21;;:7;:21;;;;29235:44;29213:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;29387:6;29357:11;:18;29369:5;29357:18;;;;;;;;;;;;;;;:27;29376:7;29357:27;;;;;;;;;;;;;;;:36;;;;29425:7;29409:32;;29418:5;29409:32;;;29434:6;29409:32;;;;;;:::i;:::-;;;;;;;;29093:356;;;:::o;26315:2427::-;26448:10;:22;26459:10;26448:22;;;;;;;;;;;;;;;;;;;;;;;;;26447:23;26439:32;;;;;;26482:18;26517:1;26503:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26482:37;;26561:10;;;;;;;;;;;26551:20;;:6;:20;;;:41;;;;;26576:5;:16;26582:9;26576:16;;;;;;;;;;;;;;;;;;;;;;;;;26575:17;26551:41;26550:102;;;;26611:5;:13;26617:6;26611:13;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;;26641:10;;;;;;;;;;;26628:23;;:9;:23;;;;26611:40;26550:102;26532:1810;;;26732:10;:18;26743:6;26732:18;;;;;;;;;;;;;;;;;;;;;;;;;26731:19;26730:49;;;;;26757:10;:21;26768:9;26757:21;;;;;;;;;;;;;;;;;;;;;;;;;26756:22;26730:49;26704:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;26881:10;;;;;;;;;;;26874:1;26876;26874:4;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;26913:13;;;;;;;;;;;26906:1;26908;26906:4;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;26941:18;26981:17;;;;;;;;;;;26962:68;;;27031:6;27039:1;26962:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27042:1;26962:82;;;;;;;;:::i;:::-;;;;;;;;26941:103;;27077:10;27059:3;:14;27063:9;27059:14;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;27131:1;27106:10;:21;27117:9;27106:21;;;;;;;;;;;;;;;;:26;27102:103;;;27177:12;27153:10;:21;27164:9;27153:21;;;;;;;;;;;;;;;:36;;;;27102:103;26664:552;26532:1810;;;27227:7;:15;27235:6;27227:15;;;;;;;;;;;;;;;;;;;;;;;;;27222:1120;;27287:10;:18;27298:6;27287:18;;;;;;;;;;;;;;;;;;;;;;;;;27286:19;27285:49;;;;;27312:10;:21;27323:9;27312:21;;;;;;;;;;;;;;;;;;;;;;;;;27311:22;27285:49;27259:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;27458:10;;;;;;;;;;;27445:23;;:9;:23;;;:41;;;;;27473:5;:13;27479:6;27473:13;;;;;;;;;;;;;;;;;;;;;;;;;27472:14;27445:41;27444:106;;;;27509:5;:16;27515:9;27509:16;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;;27539:10;;;;;;;;;;;27529:20;;:6;:20;;;;27509:40;27444:106;27422:909;;;27624:4;:12;27629:6;27624:12;;;;;;;;;;;;;;;;;;;;;;;;;27623:13;27615:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27699:13;;;;;;;;;;;27692:1;27694;27692:4;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;27738:10;;;;;;;;;;;27731:1;27733;27731:4;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;27767:19;27808:17;;;;;;;;;;;27789:73;;;27863:6;27871:1;27789:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27874:1;27789:87;;;;;;;;:::i;:::-;;;;;;;;27767:109;;28011:9;;28005:1;27990:12;;;;;;;;;;;:16;;;;:::i;:::-;27982:25;;27978:2;:29;;;;:::i;:::-;27973:1;:35;;;;:::i;:::-;:47;;;;:::i;:::-;27929:11;:91;;27895:211;;;;;;;;;;;;:::i;:::-;;;;;;;;;28192:2;28186;28172:3;:11;28176:6;28172:11;;;;;;;;;;;;;;;;:16;;;;:::i;:::-;28171:23;;;;:::i;:::-;28155:11;:40;;28125:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;28311:4;28296;:12;28301:6;28296:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;27566:765;27422:909;27222:1120;26532:1810;28366:17;;;;;;;;;;;28356:27;;:6;:27;;;:54;;;;;28400:10;;;;;;;;;;;28387:23;;:9;:23;;;;28356:54;28352:127;;;28435:7;:18;28443:9;28435:18;;;;;;;;;;;;;;;;;;;;;;;;;28427:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;28352:127;28509:108;28545:6;28509:108;;;;;;;;;;;;;;;;;:9;:17;28519:6;28509:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;28489:9;:17;28499:6;28489:17;;;;;;;;;;;;;;;:128;;;;28651:32;28676:6;28651:9;:20;28661:9;28651:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;28628:9;:20;28638:9;28628:20;;;;;;;;;;;;;;;:55;;;;28716:9;28699:35;;28708:6;28699:35;;;28727:6;28699:35;;;;;;:::i;:::-;;;;;;;;26428:2314;26315:2427;;;:::o;5155:240::-;5275:7;5333:1;5328;:6;;5336:12;5320:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5375:1;5371;:5;5364:12;;5155:240;;;;;:::o;21331:191::-;21405:16;21424:6;;;;;;;;;;;21405:25;;21450:8;21441:6;;:17;;;;;;;;;;;;;;;;;;21505:8;21474:40;;21495:8;21474:40;;;;;;;;;;;;21394:128;21331:191;:::o;28750:335::-;28845:1;28826:21;;:7;:21;;;;28818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28917:105;28954:6;28917:105;;;;;;;;;;;;;;;;;:9;:18;28927:7;28917:18;;;;;;;;;;;;;;;;:22;;:105;;;;;:::i;:::-;28896:9;:18;28906:7;28896:18;;;;;;;;;;;;;;;:126;;;;28750:335;;:::o;2876:98::-;2934:7;2965:1;2961;:5;;;;:::i;:::-;2954:12;;2876:98;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:744::-;876:5;901:81;917:64;974:6;917:64;:::i;:::-;901:81;:::i;:::-;892:90;;1002:5;1031:6;1024:5;1017:21;1065:4;1058:5;1054:16;1047:23;;1091:6;1141:3;1133:4;1125:6;1121:17;1116:3;1112:27;1109:36;1106:143;;;1160:79;;:::i;:::-;1106:143;1273:1;1258:249;1283:6;1280:1;1277:13;1258:249;;;1351:3;1380:48;1424:3;1412:10;1380:48;:::i;:::-;1375:3;1368:61;1458:4;1453:3;1449:14;1442:21;;1492:4;1487:3;1483:14;1476:21;;1318:189;1305:1;1302;1298:9;1293:14;;1258:249;;;1262:14;882:631;;769:744;;;;;:::o;1519:412::-;1597:5;1622:66;1638:49;1680:6;1638:49;:::i;:::-;1622:66;:::i;:::-;1613:75;;1711:6;1704:5;1697:21;1749:4;1742:5;1738:16;1787:3;1778:6;1773:3;1769:16;1766:25;1763:112;;;1794:79;;:::i;:::-;1763:112;1884:41;1918:6;1913:3;1908;1884:41;:::i;:::-;1603:328;1519:412;;;;;:::o;1937:139::-;1983:5;2021:6;2008:20;1999:29;;2037:33;2064:5;2037:33;:::i;:::-;1937:139;;;;:::o;2082:143::-;2139:5;2170:6;2164:13;2155:22;;2186:33;2213:5;2186:33;:::i;:::-;2082:143;;;;:::o;2248:370::-;2319:5;2368:3;2361:4;2353:6;2349:17;2345:27;2335:122;;2376:79;;:::i;:::-;2335:122;2493:6;2480:20;2518:94;2608:3;2600:6;2593:4;2585:6;2581:17;2518:94;:::i;:::-;2509:103;;2325:293;2248:370;;;;:::o;2641:385::-;2723:5;2772:3;2765:4;2757:6;2753:17;2749:27;2739:122;;2780:79;;:::i;:::-;2739:122;2890:6;2884:13;2915:105;3016:3;3008:6;3001:4;2993:6;2989:17;2915:105;:::i;:::-;2906:114;;2729:297;2641:385;;;;:::o;3032:133::-;3075:5;3113:6;3100:20;3091:29;;3129:30;3153:5;3129:30;:::i;:::-;3032:133;;;;:::o;3185:340::-;3241:5;3290:3;3283:4;3275:6;3271:17;3267:27;3257:122;;3298:79;;:::i;:::-;3257:122;3415:6;3402:20;3440:79;3515:3;3507:6;3500:4;3492:6;3488:17;3440:79;:::i;:::-;3431:88;;3247:278;3185:340;;;;:::o;3531:139::-;3577:5;3615:6;3602:20;3593:29;;3631:33;3658:5;3631:33;:::i;:::-;3531:139;;;;:::o;3676:143::-;3733:5;3764:6;3758:13;3749:22;;3780:33;3807:5;3780:33;:::i;:::-;3676:143;;;;:::o;3825:135::-;3869:5;3907:6;3894:20;3885:29;;3923:31;3948:5;3923:31;:::i;:::-;3825:135;;;;:::o;3966:329::-;4025:6;4074:2;4062:9;4053:7;4049:23;4045:32;4042:119;;;4080:79;;:::i;:::-;4042:119;4200:1;4225:53;4270:7;4261:6;4250:9;4246:22;4225:53;:::i;:::-;4215:63;;4171:117;3966:329;;;;:::o;4301:351::-;4371:6;4420:2;4408:9;4399:7;4395:23;4391:32;4388:119;;;4426:79;;:::i;:::-;4388:119;4546:1;4571:64;4627:7;4618:6;4607:9;4603:22;4571:64;:::i;:::-;4561:74;;4517:128;4301:351;;;;:::o;4658:474::-;4726:6;4734;4783:2;4771:9;4762:7;4758:23;4754:32;4751:119;;;4789:79;;:::i;:::-;4751:119;4909:1;4934:53;4979:7;4970:6;4959:9;4955:22;4934:53;:::i;:::-;4924:63;;4880:117;5036:2;5062:53;5107:7;5098:6;5087:9;5083:22;5062:53;:::i;:::-;5052:63;;5007:118;4658:474;;;;;:::o;5138:619::-;5215:6;5223;5231;5280:2;5268:9;5259:7;5255:23;5251:32;5248:119;;;5286:79;;:::i;:::-;5248:119;5406:1;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5377:117;5533:2;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5504:118;5661:2;5687:53;5732:7;5723:6;5712:9;5708:22;5687:53;:::i;:::-;5677:63;;5632:118;5138:619;;;;;:::o;5763:468::-;5828:6;5836;5885:2;5873:9;5864:7;5860:23;5856:32;5853:119;;;5891:79;;:::i;:::-;5853:119;6011:1;6036:53;6081:7;6072:6;6061:9;6057:22;6036:53;:::i;:::-;6026:63;;5982:117;6138:2;6164:50;6206:7;6197:6;6186:9;6182:22;6164:50;:::i;:::-;6154:60;;6109:115;5763:468;;;;;:::o;6237:474::-;6305:6;6313;6362:2;6350:9;6341:7;6337:23;6333:32;6330:119;;;6368:79;;:::i;:::-;6330:119;6488:1;6513:53;6558:7;6549:6;6538:9;6534:22;6513:53;:::i;:::-;6503:63;;6459:117;6615:2;6641:53;6686:7;6677:6;6666:9;6662:22;6641:53;:::i;:::-;6631:63;;6586:118;6237:474;;;;;:::o;6717:894::-;6835:6;6843;6892:2;6880:9;6871:7;6867:23;6863:32;6860:119;;;6898:79;;:::i;:::-;6860:119;7046:1;7035:9;7031:17;7018:31;7076:18;7068:6;7065:30;7062:117;;;7098:79;;:::i;:::-;7062:117;7203:78;7273:7;7264:6;7253:9;7249:22;7203:78;:::i;:::-;7193:88;;6989:302;7358:2;7347:9;7343:18;7330:32;7389:18;7381:6;7378:30;7375:117;;;7411:79;;:::i;:::-;7375:117;7516:78;7586:7;7577:6;7566:9;7562:22;7516:78;:::i;:::-;7506:88;;7301:303;6717:894;;;;;:::o;7617:554::-;7712:6;7761:2;7749:9;7740:7;7736:23;7732:32;7729:119;;;7767:79;;:::i;:::-;7729:119;7908:1;7897:9;7893:17;7887:24;7938:18;7930:6;7927:30;7924:117;;;7960:79;;:::i;:::-;7924:117;8065:89;8146:7;8137:6;8126:9;8122:22;8065:89;:::i;:::-;8055:99;;7858:306;7617:554;;;;:::o;8177:2145::-;8344:6;8352;8360;8368;8376;8384;8392;8400;8408;8416;8424:7;8474:3;8462:9;8453:7;8449:23;8445:33;8442:120;;;8481:79;;:::i;:::-;8442:120;8629:1;8618:9;8614:17;8601:31;8659:18;8651:6;8648:30;8645:117;;;8681:79;;:::i;:::-;8645:117;8786:63;8841:7;8832:6;8821:9;8817:22;8786:63;:::i;:::-;8776:73;;8572:287;8926:2;8915:9;8911:18;8898:32;8957:18;8949:6;8946:30;8943:117;;;8979:79;;:::i;:::-;8943:117;9084:63;9139:7;9130:6;9119:9;9115:22;9084:63;:::i;:::-;9074:73;;8869:288;9196:2;9222:53;9267:7;9258:6;9247:9;9243:22;9222:53;:::i;:::-;9212:63;;9167:118;9324:2;9350:53;9395:7;9386:6;9375:9;9371:22;9350:53;:::i;:::-;9340:63;;9295:118;9452:3;9479:51;9522:7;9513:6;9502:9;9498:22;9479:51;:::i;:::-;9469:61;;9423:117;9579:3;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9550:119;9708:3;9735:53;9780:7;9771:6;9760:9;9756:22;9735:53;:::i;:::-;9725:63;;9679:119;9837:3;9864:53;9909:7;9900:6;9889:9;9885:22;9864:53;:::i;:::-;9854:63;;9808:119;9966:3;9993:53;10038:7;10029:6;10018:9;10014:22;9993:53;:::i;:::-;9983:63;;9937:119;10095:3;10122:53;10167:7;10158:6;10147:9;10143:22;10122:53;:::i;:::-;10112:63;;10066:119;10224:3;10252:53;10297:7;10288:6;10277:9;10273:22;10252:53;:::i;:::-;10241:64;;10195:120;8177:2145;;;;;;;;;;;;;;:::o;10328:329::-;10387:6;10436:2;10424:9;10415:7;10411:23;10407:32;10404:119;;;10442:79;;:::i;:::-;10404:119;10562:1;10587:53;10632:7;10623:6;10612:9;10608:22;10587:53;:::i;:::-;10577:63;;10533:117;10328:329;;;;:::o;10663:179::-;10732:10;10753:46;10795:3;10787:6;10753:46;:::i;:::-;10831:4;10826:3;10822:14;10808:28;;10663:179;;;;:::o;10848:108::-;10925:24;10943:5;10925:24;:::i;:::-;10920:3;10913:37;10848:108;;:::o;10962:118::-;11049:24;11067:5;11049:24;:::i;:::-;11044:3;11037:37;10962:118;;:::o;11116:732::-;11235:3;11264:54;11312:5;11264:54;:::i;:::-;11334:86;11413:6;11408:3;11334:86;:::i;:::-;11327:93;;11444:56;11494:5;11444:56;:::i;:::-;11523:7;11554:1;11539:284;11564:6;11561:1;11558:13;11539:284;;;11640:6;11634:13;11667:63;11726:3;11711:13;11667:63;:::i;:::-;11660:70;;11753:60;11806:6;11753:60;:::i;:::-;11743:70;;11599:224;11586:1;11583;11579:9;11574:14;;11539:284;;;11543:14;11839:3;11832:10;;11240:608;;;11116:732;;;;:::o;11854:109::-;11935:21;11950:5;11935:21;:::i;:::-;11930:3;11923:34;11854:109;;:::o;11969:364::-;12057:3;12085:39;12118:5;12085:39;:::i;:::-;12140:71;12204:6;12199:3;12140:71;:::i;:::-;12133:78;;12220:52;12265:6;12260:3;12253:4;12246:5;12242:16;12220:52;:::i;:::-;12297:29;12319:6;12297:29;:::i;:::-;12292:3;12288:39;12281:46;;12061:272;11969:364;;;;:::o;12339:366::-;12481:3;12502:67;12566:2;12561:3;12502:67;:::i;:::-;12495:74;;12578:93;12667:3;12578:93;:::i;:::-;12696:2;12691:3;12687:12;12680:19;;12339:366;;;:::o;12711:365::-;12853:3;12874:66;12938:1;12933:3;12874:66;:::i;:::-;12867:73;;12949:93;13038:3;12949:93;:::i;:::-;13067:2;13062:3;13058:12;13051:19;;12711:365;;;:::o;13082:366::-;13224:3;13245:67;13309:2;13304:3;13245:67;:::i;:::-;13238:74;;13321:93;13410:3;13321:93;:::i;:::-;13439:2;13434:3;13430:12;13423:19;;13082:366;;;:::o;13454:::-;13596:3;13617:67;13681:2;13676:3;13617:67;:::i;:::-;13610:74;;13693:93;13782:3;13693:93;:::i;:::-;13811:2;13806:3;13802:12;13795:19;;13454:366;;;:::o;13826:::-;13968:3;13989:67;14053:2;14048:3;13989:67;:::i;:::-;13982:74;;14065:93;14154:3;14065:93;:::i;:::-;14183:2;14178:3;14174:12;14167:19;;13826:366;;;:::o;14198:::-;14340:3;14361:67;14425:2;14420:3;14361:67;:::i;:::-;14354:74;;14437:93;14526:3;14437:93;:::i;:::-;14555:2;14550:3;14546:12;14539:19;;14198:366;;;:::o;14570:::-;14712:3;14733:67;14797:2;14792:3;14733:67;:::i;:::-;14726:74;;14809:93;14898:3;14809:93;:::i;:::-;14927:2;14922:3;14918:12;14911:19;;14570:366;;;:::o;14942:::-;15084:3;15105:67;15169:2;15164:3;15105:67;:::i;:::-;15098:74;;15181:93;15270:3;15181:93;:::i;:::-;15299:2;15294:3;15290:12;15283:19;;14942:366;;;:::o;15314:::-;15456:3;15477:67;15541:2;15536:3;15477:67;:::i;:::-;15470:74;;15553:93;15642:3;15553:93;:::i;:::-;15671:2;15666:3;15662:12;15655:19;;15314:366;;;:::o;15686:118::-;15773:24;15791:5;15773:24;:::i;:::-;15768:3;15761:37;15686:118;;:::o;15810:112::-;15893:22;15909:5;15893:22;:::i;:::-;15888:3;15881:35;15810:112;;:::o;15928:222::-;16021:4;16059:2;16048:9;16044:18;16036:26;;16072:71;16140:1;16129:9;16125:17;16116:6;16072:71;:::i;:::-;15928:222;;;;:::o;16156:332::-;16277:4;16315:2;16304:9;16300:18;16292:26;;16328:71;16396:1;16385:9;16381:17;16372:6;16328:71;:::i;:::-;16409:72;16477:2;16466:9;16462:18;16453:6;16409:72;:::i;:::-;16156:332;;;;;:::o;16494:210::-;16581:4;16619:2;16608:9;16604:18;16596:26;;16632:65;16694:1;16683:9;16679:17;16670:6;16632:65;:::i;:::-;16494:210;;;;:::o;16710:313::-;16823:4;16861:2;16850:9;16846:18;16838:26;;16910:9;16904:4;16900:20;16896:1;16885:9;16881:17;16874:47;16938:78;17011:4;17002:6;16938:78;:::i;:::-;16930:86;;16710:313;;;;:::o;17029:419::-;17195:4;17233:2;17222:9;17218:18;17210:26;;17282:9;17276:4;17272:20;17268:1;17257:9;17253:17;17246:47;17310:131;17436:4;17310:131;:::i;:::-;17302:139;;17029:419;;;:::o;17454:::-;17620:4;17658:2;17647:9;17643:18;17635:26;;17707:9;17701:4;17697:20;17693:1;17682:9;17678:17;17671:47;17735:131;17861:4;17735:131;:::i;:::-;17727:139;;17454:419;;;:::o;17879:::-;18045:4;18083:2;18072:9;18068:18;18060:26;;18132:9;18126:4;18122:20;18118:1;18107:9;18103:17;18096:47;18160:131;18286:4;18160:131;:::i;:::-;18152:139;;17879:419;;;:::o;18304:::-;18470:4;18508:2;18497:9;18493:18;18485:26;;18557:9;18551:4;18547:20;18543:1;18532:9;18528:17;18521:47;18585:131;18711:4;18585:131;:::i;:::-;18577:139;;18304:419;;;:::o;18729:::-;18895:4;18933:2;18922:9;18918:18;18910:26;;18982:9;18976:4;18972:20;18968:1;18957:9;18953:17;18946:47;19010:131;19136:4;19010:131;:::i;:::-;19002:139;;18729:419;;;:::o;19154:::-;19320:4;19358:2;19347:9;19343:18;19335:26;;19407:9;19401:4;19397:20;19393:1;19382:9;19378:17;19371:47;19435:131;19561:4;19435:131;:::i;:::-;19427:139;;19154:419;;;:::o;19579:::-;19745:4;19783:2;19772:9;19768:18;19760:26;;19832:9;19826:4;19822:20;19818:1;19807:9;19803:17;19796:47;19860:131;19986:4;19860:131;:::i;:::-;19852:139;;19579:419;;;:::o;20004:::-;20170:4;20208:2;20197:9;20193:18;20185:26;;20257:9;20251:4;20247:20;20243:1;20232:9;20228:17;20221:47;20285:131;20411:4;20285:131;:::i;:::-;20277:139;;20004:419;;;:::o;20429:::-;20595:4;20633:2;20622:9;20618:18;20610:26;;20682:9;20676:4;20672:20;20668:1;20657:9;20653:17;20646:47;20710:131;20836:4;20710:131;:::i;:::-;20702:139;;20429:419;;;:::o;20854:222::-;20947:4;20985:2;20974:9;20970:18;20962:26;;20998:71;21066:1;21055:9;21051:17;21042:6;20998:71;:::i;:::-;20854:222;;;;:::o;21082:483::-;21253:4;21291:2;21280:9;21276:18;21268:26;;21304:71;21372:1;21361:9;21357:17;21348:6;21304:71;:::i;:::-;21422:9;21416:4;21412:20;21407:2;21396:9;21392:18;21385:48;21450:108;21553:4;21544:6;21450:108;:::i;:::-;21442:116;;21082:483;;;;;:::o;21571:214::-;21660:4;21698:2;21687:9;21683:18;21675:26;;21711:67;21775:1;21764:9;21760:17;21751:6;21711:67;:::i;:::-;21571:214;;;;:::o;21791:129::-;21825:6;21852:20;;:::i;:::-;21842:30;;21881:33;21909:4;21901:6;21881:33;:::i;:::-;21791:129;;;:::o;21926:75::-;21959:6;21992:2;21986:9;21976:19;;21926:75;:::o;22007:311::-;22084:4;22174:18;22166:6;22163:30;22160:56;;;22196:18;;:::i;:::-;22160:56;22246:4;22238:6;22234:17;22226:25;;22306:4;22300;22296:15;22288:23;;22007:311;;;:::o;22324:::-;22401:4;22491:18;22483:6;22480:30;22477:56;;;22513:18;;:::i;:::-;22477:56;22563:4;22555:6;22551:17;22543:25;;22623:4;22617;22613:15;22605:23;;22324:311;;;:::o;22641:308::-;22703:4;22793:18;22785:6;22782:30;22779:56;;;22815:18;;:::i;:::-;22779:56;22853:29;22875:6;22853:29;:::i;:::-;22845:37;;22937:4;22931;22927:15;22919:23;;22641:308;;;:::o;22955:132::-;23022:4;23045:3;23037:11;;23075:4;23070:3;23066:14;23058:22;;22955:132;;;:::o;23093:114::-;23160:6;23194:5;23188:12;23178:22;;23093:114;;;:::o;23213:99::-;23265:6;23299:5;23293:12;23283:22;;23213:99;;;:::o;23318:113::-;23388:4;23420;23415:3;23411:14;23403:22;;23318:113;;;:::o;23437:184::-;23536:11;23570:6;23565:3;23558:19;23610:4;23605:3;23601:14;23586:29;;23437:184;;;;:::o;23627:169::-;23711:11;23745:6;23740:3;23733:19;23785:4;23780:3;23776:14;23761:29;;23627:169;;;;:::o;23802:281::-;23842:3;23861:20;23879:1;23861:20;:::i;:::-;23856:25;;23895:20;23913:1;23895:20;:::i;:::-;23890:25;;24025:1;23981:42;23977:50;23974:1;23971:57;23968:83;;;24031:18;;:::i;:::-;23968:83;24075:1;24072;24068:9;24061:16;;23802:281;;;;:::o;24089:305::-;24129:3;24148:20;24166:1;24148:20;:::i;:::-;24143:25;;24182:20;24200:1;24182:20;:::i;:::-;24177:25;;24336:1;24268:66;24264:74;24261:1;24258:81;24255:107;;;24342:18;;:::i;:::-;24255:107;24386:1;24383;24379:9;24372:16;;24089:305;;;;:::o;24400:185::-;24440:1;24457:20;24475:1;24457:20;:::i;:::-;24452:25;;24491:20;24509:1;24491:20;:::i;:::-;24486:25;;24530:1;24520:35;;24535:18;;:::i;:::-;24520:35;24577:1;24574;24570:9;24565:14;;24400:185;;;;:::o;24591:848::-;24652:5;24659:4;24683:6;24674:15;;24707:5;24698:14;;24721:712;24742:1;24732:8;24729:15;24721:712;;;24837:4;24832:3;24828:14;24822:4;24819:24;24816:50;;;24846:18;;:::i;:::-;24816:50;24896:1;24886:8;24882:16;24879:451;;;25311:4;25304:5;25300:16;25291:25;;24879:451;25361:4;25355;25351:15;25343:23;;25391:32;25414:8;25391:32;:::i;:::-;25379:44;;24721:712;;;24591:848;;;;;;;:::o;25445:285::-;25505:5;25529:23;25547:4;25529:23;:::i;:::-;25521:31;;25573:27;25591:8;25573:27;:::i;:::-;25561:39;;25619:104;25656:66;25646:8;25640:4;25619:104;:::i;:::-;25610:113;;25445:285;;;;:::o;25736:281::-;25794:5;25818:23;25836:4;25818:23;:::i;:::-;25810:31;;25862:25;25878:8;25862:25;:::i;:::-;25850:37;;25906:104;25943:66;25933:8;25927:4;25906:104;:::i;:::-;25897:113;;25736:281;;;;:::o;26023:1073::-;26077:5;26268:8;26258:40;;26289:1;26280:10;;26291:5;;26258:40;26317:4;26307:36;;26334:1;26325:10;;26336:5;;26307:36;26403:4;26451:1;26446:27;;;;26487:1;26482:191;;;;26396:277;;26446:27;26464:1;26455:10;;26466:5;;;26482:191;26527:3;26517:8;26514:17;26511:43;;;26534:18;;:::i;:::-;26511:43;26583:8;26580:1;26576:16;26567:25;;26618:3;26611:5;26608:14;26605:40;;;26625:18;;:::i;:::-;26605:40;26658:5;;;26396:277;;26782:2;26772:8;26769:16;26763:3;26757:4;26754:13;26750:36;26732:2;26722:8;26719:16;26714:2;26708:4;26705:12;26701:35;26685:111;26682:246;;;26838:8;26832:4;26828:19;26819:28;;26873:3;26866:5;26863:14;26860:40;;;26880:18;;:::i;:::-;26860:40;26913:5;;26682:246;26953:42;26991:3;26981:8;26975:4;26972:1;26953:42;:::i;:::-;26938:57;;;;27027:4;27022:3;27018:14;27011:5;27008:25;27005:51;;;27036:18;;:::i;:::-;27005:51;27085:4;27078:5;27074:16;27065:25;;26023:1073;;;;;;:::o;27102:348::-;27142:7;27165:20;27183:1;27165:20;:::i;:::-;27160:25;;27199:20;27217:1;27199:20;:::i;:::-;27194:25;;27387:1;27319:66;27315:74;27312:1;27309:81;27304:1;27297:9;27290:17;27286:105;27283:131;;;27394:18;;:::i;:::-;27283:131;27442:1;27439;27435:9;27424:20;;27102:348;;;;:::o;27456:185::-;27494:4;27514:18;27530:1;27514:18;:::i;:::-;27509:23;;27546:18;27562:1;27546:18;:::i;:::-;27541:23;;27583:1;27580;27577:8;27574:34;;;27588:18;;:::i;:::-;27574:34;27633:1;27630;27626:9;27618:17;;27456:185;;;;:::o;27647:96::-;27684:7;27713:24;27731:5;27713:24;:::i;:::-;27702:35;;27647:96;;;:::o;27749:90::-;27783:7;27826:5;27819:13;27812:21;27801:32;;27749:90;;;:::o;27845:126::-;27882:7;27922:42;27915:5;27911:54;27900:65;;27845:126;;;:::o;27977:77::-;28014:7;28043:5;28032:16;;27977:77;;;:::o;28060:86::-;28095:7;28135:4;28128:5;28124:16;28113:27;;28060:86;;;:::o;28152:154::-;28236:6;28231:3;28226;28213:30;28298:1;28289:6;28284:3;28280:16;28273:27;28152:154;;;:::o;28312:307::-;28380:1;28390:113;28404:6;28401:1;28398:13;28390:113;;;28489:1;28484:3;28480:11;28474:18;28470:1;28465:3;28461:11;28454:39;28426:2;28423:1;28419:10;28414:15;;28390:113;;;28521:6;28518:1;28515:13;28512:101;;;28601:1;28592:6;28587:3;28583:16;28576:27;28512:101;28361:258;28312:307;;;:::o;28625:320::-;28669:6;28706:1;28700:4;28696:12;28686:22;;28753:1;28747:4;28743:12;28774:18;28764:81;;28830:4;28822:6;28818:17;28808:27;;28764:81;28892:2;28884:6;28881:14;28861:18;28858:38;28855:84;;;28911:18;;:::i;:::-;28855:84;28676:269;28625:320;;;:::o;28951:281::-;29034:27;29056:4;29034:27;:::i;:::-;29026:6;29022:40;29164:6;29152:10;29149:22;29128:18;29116:10;29113:34;29110:62;29107:88;;;29175:18;;:::i;:::-;29107:88;29215:10;29211:2;29204:22;28994:238;28951:281;;:::o;29238:233::-;29277:3;29300:24;29318:5;29300:24;:::i;:::-;29291:33;;29346:66;29339:5;29336:77;29333:103;;;29416:18;;:::i;:::-;29333:103;29463:1;29456:5;29452:13;29445:20;;29238:233;;;:::o;29477:180::-;29525:77;29522:1;29515:88;29622:4;29619:1;29612:15;29646:4;29643:1;29636:15;29663:180;29711:77;29708:1;29701:88;29808:4;29805:1;29798:15;29832:4;29829:1;29822:15;29849:180;29897:77;29894:1;29887:88;29994:4;29991:1;29984:15;30018:4;30015:1;30008:15;30035:180;30083:77;30080:1;30073:88;30180:4;30177:1;30170:15;30204:4;30201:1;30194:15;30221:180;30269:77;30266:1;30259:88;30366:4;30363:1;30356:15;30390:4;30387:1;30380:15;30407:117;30516:1;30513;30506:12;30530:117;30639:1;30636;30629:12;30653:117;30762:1;30759;30752:12;30776:117;30885:1;30882;30875:12;30899:117;31008:1;31005;30998:12;31022:102;31063:6;31114:2;31110:7;31105:2;31098:5;31094:14;31090:28;31080:38;;31022:102;;;:::o;31130:::-;31172:8;31219:5;31216:1;31212:13;31191:34;;31130:102;;;:::o;31238:231::-;31378:34;31374:1;31366:6;31362:14;31355:58;31447:14;31442:2;31434:6;31430:15;31423:39;31238:231;:::o;31475:159::-;31615:11;31611:1;31603:6;31599:14;31592:35;31475:159;:::o;31640:225::-;31780:34;31776:1;31768:6;31764:14;31757:58;31849:8;31844:2;31836:6;31832:15;31825:33;31640:225;:::o;31871:::-;32011:34;32007:1;31999:6;31995:14;31988:58;32080:8;32075:2;32067:6;32063:15;32056:33;31871:225;:::o;32102:182::-;32242:34;32238:1;32230:6;32226:14;32219:58;32102:182;:::o;32290:220::-;32430:34;32426:1;32418:6;32414:14;32407:58;32499:3;32494:2;32486:6;32482:15;32475:28;32290:220;:::o;32516:224::-;32656:34;32652:1;32644:6;32640:14;32633:58;32725:7;32720:2;32712:6;32708:15;32701:32;32516:224;:::o;32746:182::-;32886:34;32882:1;32874:6;32870:14;32863:58;32746:182;:::o;32934:226::-;33074:34;33070:1;33062:6;33058:14;33051:58;33143:9;33138:2;33130:6;33126:15;33119:34;32934:226;:::o;33166:122::-;33239:24;33257:5;33239:24;:::i;:::-;33232:5;33229:35;33219:63;;33278:1;33275;33268:12;33219:63;33166:122;:::o;33294:116::-;33364:21;33379:5;33364:21;:::i;:::-;33357:5;33354:32;33344:60;;33400:1;33397;33390:12;33344:60;33294:116;:::o;33416:122::-;33489:24;33507:5;33489:24;:::i;:::-;33482:5;33479:35;33469:63;;33528:1;33525;33518:12;33469:63;33416:122;:::o;33544:118::-;33615:22;33631:5;33615:22;:::i;:::-;33608:5;33605:33;33595:61;;33652:1;33649;33642:12;33595:61;33544:118;:::o

Swarm Source

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