ETH Price: $2,534.06 (+3.97%)

Token

afk (AFK)
 

Overview

Max Total Supply

5,000,000,000 AFK

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.834730128145669611 AFK

Value
$0.00
0x6956e953d6d0fd786b8494271a4b73d90943b779
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:
AFK

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// $AFK COIN
// Twitter: https://twitter.com/afkcoineth
// Telegram: https://t.me/afkportal

pragma solidity ^0.8.0;
// SPDX-License-Identifier: UNLICENSED

// 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: interfaces/IUniswapV2Factory.sol


pragma solidity ^0.8.11;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}
// File: interfaces/IUniswapV2Router01.sol


pragma solidity ^0.8.11;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
// File: interfaces/IUniswapV2Router02.sol


pragma solidity ^0.8.11;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}


// 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: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

// 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/token/ERC20/ERC20.sol


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: AFK.sol



pragma solidity ^0.8.11;

contract AFK is ERC20, Ownable {
    using SafeMath for uint256;


    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public buyTotalFees;

    uint256 public sellBurnFee;
    uint256 public sellDevFee;
    uint256 public sellTotalFees;

    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public supply;

    address public devWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;

    // Digit is a %
    uint256 public walletDigit = 4;
    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    constructor() ERC20("afk", "AFK") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D 
        );

        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 5_000_000_000 * 1e18;
        supply = totalSupply;

        swapTokensAtAmount = (supply * 5) / 10000; // 0.05% swap wallet;
        maxWallet = (supply * walletDigit) / 100;

        devWallet = owner();

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);


        buyBurnFee = 0;
        buyDevFee = 0;
        buyTotalFees = buyBurnFee + buyDevFee;

        sellBurnFee = 0;
        sellDevFee = 30;
        sellTotalFees = sellBurnFee + sellDevFee;

        _approve(owner(), address(uniswapV2Router), totalSupply);
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
    }

    function updateWalletDigit(uint256 newNum) external onlyOwner {
        walletDigit = newNum;
        updateLimits();
    }


    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }

    function updateLimits() private {
        // Due to burn, we have to update limits at each swap

        swapTokensAtAmount = (supply * 1) / 10000; // 0.01% swap wallet;
        maxWallet = (supply * walletDigit) / 100;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function estimateFees(
        bool _isSelling,
        bool _isBuying,
        uint256 _amount
    ) internal view returns (uint256, uint256) {
        uint256 fees = 0;
        uint256 tokensForBurn = 0;

        // On sell
        if (_isSelling && sellTotalFees > 0) {
            fees = _amount.mul(sellTotalFees).div(100);
            tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
        }
        // On buy
        else if (_isBuying && buyTotalFees > 0) {
            fees = _amount.mul(buyTotalFees).div(100);
            tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
        }

        return (fees, tokensForBurn);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] 
                ) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] 
                ) {
                } 
            }
        }

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            swapEnabled &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool isSelling = automatedMarketMakerPairs[to];
        bool isBuying = automatedMarketMakerPairs[from];

        uint256 fees = 0;
        uint256 tokensForBurn = 0;

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        // If take fees
        if (takeFee) {
            // (no variable needed) : tokensForDev  = fees - tokensForBurn
            (fees, tokensForBurn) = estimateFees(isSelling, isBuying, amount);

            if (fees > 0) {
                super._transfer(from, address(this), fees);
                if (tokensForBurn > 0) {
                    _burn(address(this), tokensForBurn);
                    supply = totalSupply();
                    updateLimits();
                    tokensForBurn = 0;
                }
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        swapTokensForEth(contractBalance);

        // Send ethereum to dev wallet
        (success, ) = address(devWallet).call{value: address(this).balance}("");
    }

    function updateBuyFees(
        uint256 _burnFee,
        uint256 _devFee
    ) external onlyOwner {
        buyBurnFee = _burnFee;
        buyDevFee = _devFee;
        buyTotalFees = buyBurnFee + buyDevFee;
        require(buyTotalFees <= 100, "Must keep fees at 100% or less");
    }

    function updateSellFees(
        uint256 _burnFee,
        uint256 _devFee
    ) external onlyOwner {
        sellBurnFee = _burnFee;
        sellDevFee = _devFee;
        sellTotalFees = sellBurnFee + sellDevFee;
        require(sellTotalFees <= 100, "Must keep fees at 100% or less");
    }

    mapping(address => bool) public botsBlacklist;

    function addToBlacklist(address _address) external onlyOwner {
        botsBlacklist[_address] = true;
    }

    function removeFromBlacklist(address _address) external onlyOwner {
        botsBlacklist[_address] = false;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        require(!botsBlacklist[from], "No mev bot allowed!");
        super._beforeTokenTransfer(from, to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_address","type":"address"}],"name":"addToBlacklist","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"botsBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateWalletDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600f60146101000a81548160ff0219169083151502179055506000600f60156101000a81548160ff0219169083151502179055506001600f60166101000a81548160ff02191690831515021790555060046010553480156200006757600080fd5b506040518060400160405280600381526020017f61666b00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f41464b00000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000ec92919062000af5565b5080600490805190602001906200010592919062000af5565b505050620001286200011c620004ae60201b60201c565b620004b660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e7919062000c0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000c0f565b6040518363ffffffff1660e01b81526004016200029492919062000c52565b6020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000c0f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032260a05160016200057c60201b60201c565b60006b1027e72f1f12813088000000905080600e819055506127106005600e546200034e919062000cb8565b6200035a919062000d48565b600c819055506064601054600e5462000374919062000cb8565b62000380919062000d48565b600d8190555062000396620005d760201b60201c565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003f8620003ea620005d760201b60201c565b60016200060160201b60201c565b6200040b3060016200060160201b60201c565b6200042061dead60016200060160201b60201c565b6000600681905550600060078190555060075460065462000442919062000d80565b6008819055506000600981905550601e600a81905550600a546009546200046a919062000d80565b600b819055506200049462000484620005d760201b60201c565b608051836200066c60201b60201c565b620004a633826200083f60201b60201c565b505062001107565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000611620009ad60201b60201c565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620006df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d69062000e64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007499062000efc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000832919062000f2f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a99062000f9c565b60405180910390fd5b620008c66000838362000a3e60201b60201c565b8060026000828254620008da919062000d80565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200098d919062000f2f565b60405180910390a3620009a96000838362000aeb60201b60201c565b5050565b620009bd620004ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009e3620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a33906200100e565b60405180910390fd5b565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac59062001080565b60405180910390fd5b62000ae683838362000af060201b620012ce1760201c565b505050565b505050565b505050565b82805462000b0390620010d1565b90600052602060002090601f01602090048101928262000b27576000855562000b73565b82601f1062000b4257805160ff191683800117855562000b73565b8280016001018555821562000b73579182015b8281111562000b7257825182559160200191906001019062000b55565b5b50905062000b82919062000b86565b5090565b5b8082111562000ba157600081600090555060010162000b87565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bd78262000baa565b9050919050565b62000be98162000bca565b811462000bf557600080fd5b50565b60008151905062000c098162000bde565b92915050565b60006020828403121562000c285762000c2762000ba5565b5b600062000c388482850162000bf8565b91505092915050565b62000c4c8162000bca565b82525050565b600060408201905062000c69600083018562000c41565b62000c78602083018462000c41565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cc58262000c7f565b915062000cd28362000c7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d0e5762000d0d62000c89565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d558262000c7f565b915062000d628362000c7f565b92508262000d755762000d7462000d19565b5b828204905092915050565b600062000d8d8262000c7f565b915062000d9a8362000c7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dd25762000dd162000c89565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000e4c60248362000ddd565b915062000e598262000dee565b604082019050919050565b6000602082019050818103600083015262000e7f8162000e3d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000ee460228362000ddd565b915062000ef18262000e86565b604082019050919050565b6000602082019050818103600083015262000f178162000ed5565b9050919050565b62000f298162000c7f565b82525050565b600060208201905062000f46600083018462000f1e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f84601f8362000ddd565b915062000f918262000f4c565b602082019050919050565b6000602082019050818103600083015262000fb78162000f75565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ff660208362000ddd565b9150620010038262000fbe565b602082019050919050565b60006020820190508181036000830152620010298162000fe7565b9050919050565b7f4e6f206d657620626f7420616c6c6f7765642100000000000000000000000000600082015250565b60006200106860138362000ddd565b9150620010758262001030565b602082019050919050565b600060208201905081810360008301526200109b8162001059565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ea57607f821691505b60208210811415620011015762001100620010a2565b5b50919050565b60805160a0516138936200114960003960008181610cbe0152610fae015260008181610b6c015281816125e2015281816126c301526126ea01526138936000f3fe6080604052600436106102605760003560e01c8063715018a611610144578063adb873bd116100b6578063dd62ed3e1161007a578063dd62ed3e146108fb578063e2b2568414610938578063e2f4560514610975578063e71dc3f5146109a0578063f2fde38b146109cb578063f8b45b05146109f457610267565b8063adb873bd14610814578063b62496f51461083f578063bbc0c7421461087c578063c0246668146108a7578063d85ba063146108d057610267565b806395d89b411161010857806395d89b41146106f05780639a7a23d61461071b5780639c3b4fdc14610744578063a0d82dc51461076f578063a457c2d71461079a578063a9059cbb146107d757610267565b8063715018a6146106415780637ab43983146106585780638a8c523c146106835780638da5cb5b1461069a5780638ea5220f146106c557610267565b8063313ce567116101dd5780634fbee193116101a15780634fbee1931461051f578063537df3b61461055c57806366ca9b83146105855780636a486a8e146105ae5780636ddd1713146105d957806370a082311461060457610267565b8063313ce56714610438578063395093511461046357806344337ea1146104a057806349bd5a5e146104c95780634a62bb65146104f457610267565b80631694505e116102245780631694505e1461035157806318160ddd1461037c5780631816467f146103a757806323b872dd146103d057806327c8f8351461040d57610267565b806302dbd8f81461026c578063047fc9aa1461029557806306fdde03146102c0578063095ea7b3146102eb578063150de0bb1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906127e7565b610a1f565b005b3480156102a157600080fd5b506102aa610a95565b6040516102b79190612836565b60405180910390f35b3480156102cc57600080fd5b506102d5610a9b565b6040516102e291906128ea565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d919061296a565b610b2d565b60405161031f91906129c5565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a91906129e0565b610b50565b005b34801561035d57600080fd5b50610366610b6a565b6040516103739190612a6c565b60405180910390f35b34801561038857600080fd5b50610391610b8e565b60405161039e9190612836565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190612a87565b610b98565b005b3480156103dc57600080fd5b506103f760048036038101906103f29190612ab4565b610be4565b60405161040491906129c5565b60405180910390f35b34801561041957600080fd5b50610422610c13565b60405161042f9190612b16565b60405180910390f35b34801561044457600080fd5b5061044d610c19565b60405161045a9190612b4d565b60405180910390f35b34801561046f57600080fd5b5061048a6004803603810190610485919061296a565b610c22565b60405161049791906129c5565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612a87565b610c59565b005b3480156104d557600080fd5b506104de610cbc565b6040516104eb9190612b16565b60405180910390f35b34801561050057600080fd5b50610509610ce0565b60405161051691906129c5565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190612a87565b610cf3565b60405161055391906129c5565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190612a87565b610d49565b005b34801561059157600080fd5b506105ac60048036038101906105a791906127e7565b610dac565b005b3480156105ba57600080fd5b506105c3610e22565b6040516105d09190612836565b60405180910390f35b3480156105e557600080fd5b506105ee610e28565b6040516105fb91906129c5565b60405180910390f35b34801561061057600080fd5b5061062b60048036038101906106269190612a87565b610e3b565b6040516106389190612836565b60405180910390f35b34801561064d57600080fd5b50610656610e83565b005b34801561066457600080fd5b5061066d610e97565b60405161067a9190612836565b60405180910390f35b34801561068f57600080fd5b50610698610e9d565b005b3480156106a657600080fd5b506106af610ec2565b6040516106bc9190612b16565b60405180910390f35b3480156106d157600080fd5b506106da610eec565b6040516106e79190612b16565b60405180910390f35b3480156106fc57600080fd5b50610705610f12565b60405161071291906128ea565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190612b94565b610fa4565b005b34801561075057600080fd5b50610759611049565b6040516107669190612836565b60405180910390f35b34801561077b57600080fd5b5061078461104f565b6040516107919190612836565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc919061296a565b611055565b6040516107ce91906129c5565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f9919061296a565b6110cc565b60405161080b91906129c5565b60405180910390f35b34801561082057600080fd5b506108296110ef565b6040516108369190612836565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190612a87565b6110f5565b60405161087391906129c5565b60405180910390f35b34801561088857600080fd5b50610891611115565b60405161089e91906129c5565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190612b94565b611128565b005b3480156108dc57600080fd5b506108e561118b565b6040516108f29190612836565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190612bd4565b611191565b60405161092f9190612836565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190612a87565b611218565b60405161096c91906129c5565b60405180910390f35b34801561098157600080fd5b5061098a611238565b6040516109979190612836565b60405180910390f35b3480156109ac57600080fd5b506109b561123e565b6040516109c29190612836565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190612a87565b611244565b005b348015610a0057600080fd5b50610a096112c8565b604051610a169190612836565b60405180910390f35b610a276112d3565b8160098190555080600a81905550600a54600954610a459190612c43565b600b819055506064600b541115610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890612ce5565b60405180910390fd5b5050565b600e5481565b606060038054610aaa90612d34565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad690612d34565b8015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050505050905090565b600080610b38611351565b9050610b45818585611359565b600191505092915050565b610b586112d3565b80601081905550610b67611524565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610ba06112d3565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610bef611351565b9050610bfc85828561156a565b610c078585856115f6565b60019150509392505050565b61dead81565b60006012905090565b600080610c2d611351565b9050610c4e818585610c3f8589611191565b610c499190612c43565b611359565b600191505092915050565b610c616112d3565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60149054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d516112d3565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db46112d3565b8160068190555080600781905550600754600654610dd29190612c43565b60088190555060646008541115610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590612ce5565b60405180910390fd5b5050565b600b5481565b600f60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e8b6112d3565b610e956000611d6f565b565b60105481565b610ea56112d3565b6001600f60156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610f2190612d34565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4d90612d34565b8015610f9a5780601f10610f6f57610100808354040283529160200191610f9a565b820191906000526020600020905b815481529060010190602001808311610f7d57829003601f168201915b5050505050905090565b610fac6112d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290612dd8565b60405180910390fd5b6110458282611e35565b5050565b60075481565b600a5481565b600080611060611351565b9050600061106e8286611191565b9050838110156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90612e6a565b60405180910390fd5b6110c08286868403611359565b60019250505092915050565b6000806110d7611351565b90506110e48185856115f6565b600191505092915050565b60095481565b60126020528060005260406000206000915054906101000a900460ff1681565b600f60159054906101000a900460ff1681565b6111306112d3565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60065481565b61124c6112d3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b390612efc565b60405180910390fd5b6112c581611d6f565b50565b600d5481565b505050565b6112db611351565b73ffffffffffffffffffffffffffffffffffffffff166112f9610ec2565b73ffffffffffffffffffffffffffffffffffffffff161461134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134690612f68565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090612ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114309061308c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115179190612836565b60405180910390a3505050565b6127106001600e5461153691906130ac565b6115409190613135565b600c819055506064601054600e5461155891906130ac565b6115629190613135565b600d81905550565b60006115768484611191565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115f057818110156115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d9906131b2565b60405180910390fd5b6115ef8484848403611359565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613244565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd906132d6565b60405180910390fd5b60008114156116f0576116eb83836000611e90565b611d6a565b600f60149054906101000a900460ff16156119fe5761170d610ec2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561177b575061174b610ec2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117b45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117ee575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118075750600560149054906101000a900460ff16155b156119fd57600f60159054906101000a900460ff1661190157601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118c15750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790613342565b60405180910390fd5b5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119b057600d5461195f83610e3b565b8261196a9190612c43565b11156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a2906133ae565b60405180910390fd5b6119fc565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a9050505b5b5b6000600c54611a0c30610e3b565b10159050808015611a2a5750600560149054906101000a900460ff16155b8015611a425750600f60169054906101000a900460ff165b8015611a985750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611aee5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b445750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b88576001600560146101000a81548160ff021916908315150217905550611b6c612108565b6000600560146101000a81548160ff0219169083151502179055505b6000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000806000600560149054906101000a900460ff16159050601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ce35750601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ced57600090505b8015611d5857611cfe8585896121ea565b80935081945050506000831115611d4957611d1a893085611e90565b6000821115611d4857611d2d30836122d3565b611d35610b8e565b600e81905550611d43611524565b600091505b5b8287611d5591906133ce565b96505b611d63898989611e90565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790613244565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f67906132d6565b60405180910390fd5b611f7b8383836124a1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890613474565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120ef9190612836565b60405180910390a361210284848461253e565b50505050565b600061211330610e3b565b90506000808214156121265750506121e8565b6014600c5461213591906130ac565b82111561214e576014600c5461214b91906130ac565b91505b61215782612543565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161219d906134c5565b60006040518083038185875af1925050503d80600081146121da576040519150601f19603f3d011682016040523d82523d6000602084013e6121df565b606091505b50508091505050505b565b6000806000808680156121ff57506000600b54115b1561225b5761222c606461221e600b548861278090919063ffffffff16565b61279690919063ffffffff16565b9150600b546009548361223f91906130ac565b6122499190613135565b816122549190612c43565b90506122c3565b85801561226a57506000600854115b156122c25761229760646122896008548861278090919063ffffffff16565b61279690919063ffffffff16565b9150600854600654836122aa91906130ac565b6122b49190613135565b816122bf9190612c43565b90505b5b8181935093505050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a9061354c565b60405180910390fd5b61234f826000836124a1565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906135de565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124889190612836565b60405180910390a361249c8360008461253e565b505050565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561252e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125259061364a565b60405180910390fd5b6125398383836112ce565b505050565b505050565b6000600267ffffffffffffffff8111156125605761255f61366a565b5b60405190808252806020026020018201604052801561258e5781602001602082028036833780820191505090505b50905030816000815181106125a6576125a5613699565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561264b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266f91906136dd565b8160018151811061268357612682613699565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506126e8307f000000000000000000000000000000000000000000000000000000000000000084611359565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161274a959493929190613803565b600060405180830381600087803b15801561276457600080fd5b505af1158015612778573d6000803e3d6000fd5b505050505050565b6000818361278e91906130ac565b905092915050565b600081836127a49190613135565b905092915050565b600080fd5b6000819050919050565b6127c4816127b1565b81146127cf57600080fd5b50565b6000813590506127e1816127bb565b92915050565b600080604083850312156127fe576127fd6127ac565b5b600061280c858286016127d2565b925050602061281d858286016127d2565b9150509250929050565b612830816127b1565b82525050565b600060208201905061284b6000830184612827565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561288b578082015181840152602081019050612870565b8381111561289a576000848401525b50505050565b6000601f19601f8301169050919050565b60006128bc82612851565b6128c6818561285c565b93506128d681856020860161286d565b6128df816128a0565b840191505092915050565b6000602082019050818103600083015261290481846128b1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129378261290c565b9050919050565b6129478161292c565b811461295257600080fd5b50565b6000813590506129648161293e565b92915050565b60008060408385031215612981576129806127ac565b5b600061298f85828601612955565b92505060206129a0858286016127d2565b9150509250929050565b60008115159050919050565b6129bf816129aa565b82525050565b60006020820190506129da60008301846129b6565b92915050565b6000602082840312156129f6576129f56127ac565b5b6000612a04848285016127d2565b91505092915050565b6000819050919050565b6000612a32612a2d612a288461290c565b612a0d565b61290c565b9050919050565b6000612a4482612a17565b9050919050565b6000612a5682612a39565b9050919050565b612a6681612a4b565b82525050565b6000602082019050612a816000830184612a5d565b92915050565b600060208284031215612a9d57612a9c6127ac565b5b6000612aab84828501612955565b91505092915050565b600080600060608486031215612acd57612acc6127ac565b5b6000612adb86828701612955565b9350506020612aec86828701612955565b9250506040612afd868287016127d2565b9150509250925092565b612b108161292c565b82525050565b6000602082019050612b2b6000830184612b07565b92915050565b600060ff82169050919050565b612b4781612b31565b82525050565b6000602082019050612b626000830184612b3e565b92915050565b612b71816129aa565b8114612b7c57600080fd5b50565b600081359050612b8e81612b68565b92915050565b60008060408385031215612bab57612baa6127ac565b5b6000612bb985828601612955565b9250506020612bca85828601612b7f565b9150509250929050565b60008060408385031215612beb57612bea6127ac565b5b6000612bf985828601612955565b9250506020612c0a85828601612955565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c4e826127b1565b9150612c59836127b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c8e57612c8d612c14565b5b828201905092915050565b7f4d757374206b65657020666565732061742031303025206f72206c6573730000600082015250565b6000612ccf601e8361285c565b9150612cda82612c99565b602082019050919050565b60006020820190508181036000830152612cfe81612cc2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d4c57607f821691505b60208210811415612d6057612d5f612d05565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612dc260398361285c565b9150612dcd82612d66565b604082019050919050565b60006020820190508181036000830152612df181612db5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e5460258361285c565b9150612e5f82612df8565b604082019050919050565b60006020820190508181036000830152612e8381612e47565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ee660268361285c565b9150612ef182612e8a565b604082019050919050565b60006020820190508181036000830152612f1581612ed9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f5260208361285c565b9150612f5d82612f1c565b602082019050919050565b60006020820190508181036000830152612f8181612f45565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fe460248361285c565b9150612fef82612f88565b604082019050919050565b6000602082019050818103600083015261301381612fd7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061307660228361285c565b91506130818261301a565b604082019050919050565b600060208201905081810360008301526130a581613069565b9050919050565b60006130b7826127b1565b91506130c2836127b1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130fb576130fa612c14565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613140826127b1565b915061314b836127b1565b92508261315b5761315a613106565b5b828204905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061319c601d8361285c565b91506131a782613166565b602082019050919050565b600060208201905081810360008301526131cb8161318f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061322e60258361285c565b9150613239826131d2565b604082019050919050565b6000602082019050818103600083015261325d81613221565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006132c060238361285c565b91506132cb82613264565b604082019050919050565b600060208201905081810360008301526132ef816132b3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061332c60168361285c565b9150613337826132f6565b602082019050919050565b6000602082019050818103600083015261335b8161331f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061339860138361285c565b91506133a382613362565b602082019050919050565b600060208201905081810360008301526133c78161338b565b9050919050565b60006133d9826127b1565b91506133e4836127b1565b9250828210156133f7576133f6612c14565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061345e60268361285c565b915061346982613402565b604082019050919050565b6000602082019050818103600083015261348d81613451565b9050919050565b600081905092915050565b50565b60006134af600083613494565b91506134ba8261349f565b600082019050919050565b60006134d0826134a2565b9150819050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061353660218361285c565b9150613541826134da565b604082019050919050565b6000602082019050818103600083015261356581613529565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006135c860228361285c565b91506135d38261356c565b604082019050919050565b600060208201905081810360008301526135f7816135bb565b9050919050565b7f4e6f206d657620626f7420616c6c6f7765642100000000000000000000000000600082015250565b600061363460138361285c565b915061363f826135fe565b602082019050919050565b6000602082019050818103600083015261366381613627565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506136d78161293e565b92915050565b6000602082840312156136f3576136f26127ac565b5b6000613701848285016136c8565b91505092915050565b6000819050919050565b600061372f61372a6137258461370a565b612a0d565b6127b1565b9050919050565b61373f81613714565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61377a8161292c565b82525050565b600061378c8383613771565b60208301905092915050565b6000602082019050919050565b60006137b082613745565b6137ba8185613750565b93506137c583613761565b8060005b838110156137f65781516137dd8882613780565b97506137e883613798565b9250506001810190506137c9565b5085935050505092915050565b600060a0820190506138186000830188612827565b6138256020830187613736565b818103604083015261383781866137a5565b90506138466060830185612b07565b6138536080830184612827565b969550505050505056fea2646970667358221220ea678051fe174811a5b6b26f52b749bd52215bbc73649cb2bf5a387fde98b19c64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063715018a611610144578063adb873bd116100b6578063dd62ed3e1161007a578063dd62ed3e146108fb578063e2b2568414610938578063e2f4560514610975578063e71dc3f5146109a0578063f2fde38b146109cb578063f8b45b05146109f457610267565b8063adb873bd14610814578063b62496f51461083f578063bbc0c7421461087c578063c0246668146108a7578063d85ba063146108d057610267565b806395d89b411161010857806395d89b41146106f05780639a7a23d61461071b5780639c3b4fdc14610744578063a0d82dc51461076f578063a457c2d71461079a578063a9059cbb146107d757610267565b8063715018a6146106415780637ab43983146106585780638a8c523c146106835780638da5cb5b1461069a5780638ea5220f146106c557610267565b8063313ce567116101dd5780634fbee193116101a15780634fbee1931461051f578063537df3b61461055c57806366ca9b83146105855780636a486a8e146105ae5780636ddd1713146105d957806370a082311461060457610267565b8063313ce56714610438578063395093511461046357806344337ea1146104a057806349bd5a5e146104c95780634a62bb65146104f457610267565b80631694505e116102245780631694505e1461035157806318160ddd1461037c5780631816467f146103a757806323b872dd146103d057806327c8f8351461040d57610267565b806302dbd8f81461026c578063047fc9aa1461029557806306fdde03146102c0578063095ea7b3146102eb578063150de0bb1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906127e7565b610a1f565b005b3480156102a157600080fd5b506102aa610a95565b6040516102b79190612836565b60405180910390f35b3480156102cc57600080fd5b506102d5610a9b565b6040516102e291906128ea565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d919061296a565b610b2d565b60405161031f91906129c5565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a91906129e0565b610b50565b005b34801561035d57600080fd5b50610366610b6a565b6040516103739190612a6c565b60405180910390f35b34801561038857600080fd5b50610391610b8e565b60405161039e9190612836565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190612a87565b610b98565b005b3480156103dc57600080fd5b506103f760048036038101906103f29190612ab4565b610be4565b60405161040491906129c5565b60405180910390f35b34801561041957600080fd5b50610422610c13565b60405161042f9190612b16565b60405180910390f35b34801561044457600080fd5b5061044d610c19565b60405161045a9190612b4d565b60405180910390f35b34801561046f57600080fd5b5061048a6004803603810190610485919061296a565b610c22565b60405161049791906129c5565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190612a87565b610c59565b005b3480156104d557600080fd5b506104de610cbc565b6040516104eb9190612b16565b60405180910390f35b34801561050057600080fd5b50610509610ce0565b60405161051691906129c5565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190612a87565b610cf3565b60405161055391906129c5565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190612a87565b610d49565b005b34801561059157600080fd5b506105ac60048036038101906105a791906127e7565b610dac565b005b3480156105ba57600080fd5b506105c3610e22565b6040516105d09190612836565b60405180910390f35b3480156105e557600080fd5b506105ee610e28565b6040516105fb91906129c5565b60405180910390f35b34801561061057600080fd5b5061062b60048036038101906106269190612a87565b610e3b565b6040516106389190612836565b60405180910390f35b34801561064d57600080fd5b50610656610e83565b005b34801561066457600080fd5b5061066d610e97565b60405161067a9190612836565b60405180910390f35b34801561068f57600080fd5b50610698610e9d565b005b3480156106a657600080fd5b506106af610ec2565b6040516106bc9190612b16565b60405180910390f35b3480156106d157600080fd5b506106da610eec565b6040516106e79190612b16565b60405180910390f35b3480156106fc57600080fd5b50610705610f12565b60405161071291906128ea565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190612b94565b610fa4565b005b34801561075057600080fd5b50610759611049565b6040516107669190612836565b60405180910390f35b34801561077b57600080fd5b5061078461104f565b6040516107919190612836565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc919061296a565b611055565b6040516107ce91906129c5565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f9919061296a565b6110cc565b60405161080b91906129c5565b60405180910390f35b34801561082057600080fd5b506108296110ef565b6040516108369190612836565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190612a87565b6110f5565b60405161087391906129c5565b60405180910390f35b34801561088857600080fd5b50610891611115565b60405161089e91906129c5565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190612b94565b611128565b005b3480156108dc57600080fd5b506108e561118b565b6040516108f29190612836565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190612bd4565b611191565b60405161092f9190612836565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190612a87565b611218565b60405161096c91906129c5565b60405180910390f35b34801561098157600080fd5b5061098a611238565b6040516109979190612836565b60405180910390f35b3480156109ac57600080fd5b506109b561123e565b6040516109c29190612836565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190612a87565b611244565b005b348015610a0057600080fd5b50610a096112c8565b604051610a169190612836565b60405180910390f35b610a276112d3565b8160098190555080600a81905550600a54600954610a459190612c43565b600b819055506064600b541115610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890612ce5565b60405180910390fd5b5050565b600e5481565b606060038054610aaa90612d34565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad690612d34565b8015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050505050905090565b600080610b38611351565b9050610b45818585611359565b600191505092915050565b610b586112d3565b80601081905550610b67611524565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610ba06112d3565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610bef611351565b9050610bfc85828561156a565b610c078585856115f6565b60019150509392505050565b61dead81565b60006012905090565b600080610c2d611351565b9050610c4e818585610c3f8589611191565b610c499190612c43565b611359565b600191505092915050565b610c616112d3565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000002bd25456e2c98a113330d992570fa0655b03951281565b600f60149054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d516112d3565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db46112d3565b8160068190555080600781905550600754600654610dd29190612c43565b60088190555060646008541115610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590612ce5565b60405180910390fd5b5050565b600b5481565b600f60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e8b6112d3565b610e956000611d6f565b565b60105481565b610ea56112d3565b6001600f60156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610f2190612d34565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4d90612d34565b8015610f9a5780601f10610f6f57610100808354040283529160200191610f9a565b820191906000526020600020905b815481529060010190602001808311610f7d57829003601f168201915b5050505050905090565b610fac6112d3565b7f0000000000000000000000002bd25456e2c98a113330d992570fa0655b03951273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290612dd8565b60405180910390fd5b6110458282611e35565b5050565b60075481565b600a5481565b600080611060611351565b9050600061106e8286611191565b9050838110156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90612e6a565b60405180910390fd5b6110c08286868403611359565b60019250505092915050565b6000806110d7611351565b90506110e48185856115f6565b600191505092915050565b60095481565b60126020528060005260406000206000915054906101000a900460ff1681565b600f60159054906101000a900460ff1681565b6111306112d3565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60065481565b61124c6112d3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b390612efc565b60405180910390fd5b6112c581611d6f565b50565b600d5481565b505050565b6112db611351565b73ffffffffffffffffffffffffffffffffffffffff166112f9610ec2565b73ffffffffffffffffffffffffffffffffffffffff161461134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134690612f68565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090612ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114309061308c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115179190612836565b60405180910390a3505050565b6127106001600e5461153691906130ac565b6115409190613135565b600c819055506064601054600e5461155891906130ac565b6115629190613135565b600d81905550565b60006115768484611191565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115f057818110156115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d9906131b2565b60405180910390fd5b6115ef8484848403611359565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613244565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd906132d6565b60405180910390fd5b60008114156116f0576116eb83836000611e90565b611d6a565b600f60149054906101000a900460ff16156119fe5761170d610ec2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561177b575061174b610ec2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117b45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117ee575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118075750600560149054906101000a900460ff16155b156119fd57600f60159054906101000a900460ff1661190157601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118c15750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790613342565b60405180910390fd5b5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119b057600d5461195f83610e3b565b8261196a9190612c43565b11156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a2906133ae565b60405180910390fd5b6119fc565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a9050505b5b5b6000600c54611a0c30610e3b565b10159050808015611a2a5750600560149054906101000a900460ff16155b8015611a425750600f60169054906101000a900460ff165b8015611a985750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611aee5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b445750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b88576001600560146101000a81548160ff021916908315150217905550611b6c612108565b6000600560146101000a81548160ff0219169083151502179055505b6000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000806000600560149054906101000a900460ff16159050601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ce35750601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ced57600090505b8015611d5857611cfe8585896121ea565b80935081945050506000831115611d4957611d1a893085611e90565b6000821115611d4857611d2d30836122d3565b611d35610b8e565b600e81905550611d43611524565b600091505b5b8287611d5591906133ce565b96505b611d63898989611e90565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790613244565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f67906132d6565b60405180910390fd5b611f7b8383836124a1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890613474565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120ef9190612836565b60405180910390a361210284848461253e565b50505050565b600061211330610e3b565b90506000808214156121265750506121e8565b6014600c5461213591906130ac565b82111561214e576014600c5461214b91906130ac565b91505b61215782612543565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161219d906134c5565b60006040518083038185875af1925050503d80600081146121da576040519150601f19603f3d011682016040523d82523d6000602084013e6121df565b606091505b50508091505050505b565b6000806000808680156121ff57506000600b54115b1561225b5761222c606461221e600b548861278090919063ffffffff16565b61279690919063ffffffff16565b9150600b546009548361223f91906130ac565b6122499190613135565b816122549190612c43565b90506122c3565b85801561226a57506000600854115b156122c25761229760646122896008548861278090919063ffffffff16565b61279690919063ffffffff16565b9150600854600654836122aa91906130ac565b6122b49190613135565b816122bf9190612c43565b90505b5b8181935093505050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a9061354c565b60405180910390fd5b61234f826000836124a1565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906135de565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124889190612836565b60405180910390a361249c8360008461253e565b505050565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561252e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125259061364a565b60405180910390fd5b6125398383836112ce565b505050565b505050565b6000600267ffffffffffffffff8111156125605761255f61366a565b5b60405190808252806020026020018201604052801561258e5781602001602082028036833780820191505090505b50905030816000815181106125a6576125a5613699565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561264b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266f91906136dd565b8160018151811061268357612682613699565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506126e8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611359565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161274a959493929190613803565b600060405180830381600087803b15801561276457600080fd5b505af1158015612778573d6000803e3d6000fd5b505050505050565b6000818361278e91906130ac565b905092915050565b600081836127a49190613135565b905092915050565b600080fd5b6000819050919050565b6127c4816127b1565b81146127cf57600080fd5b50565b6000813590506127e1816127bb565b92915050565b600080604083850312156127fe576127fd6127ac565b5b600061280c858286016127d2565b925050602061281d858286016127d2565b9150509250929050565b612830816127b1565b82525050565b600060208201905061284b6000830184612827565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561288b578082015181840152602081019050612870565b8381111561289a576000848401525b50505050565b6000601f19601f8301169050919050565b60006128bc82612851565b6128c6818561285c565b93506128d681856020860161286d565b6128df816128a0565b840191505092915050565b6000602082019050818103600083015261290481846128b1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129378261290c565b9050919050565b6129478161292c565b811461295257600080fd5b50565b6000813590506129648161293e565b92915050565b60008060408385031215612981576129806127ac565b5b600061298f85828601612955565b92505060206129a0858286016127d2565b9150509250929050565b60008115159050919050565b6129bf816129aa565b82525050565b60006020820190506129da60008301846129b6565b92915050565b6000602082840312156129f6576129f56127ac565b5b6000612a04848285016127d2565b91505092915050565b6000819050919050565b6000612a32612a2d612a288461290c565b612a0d565b61290c565b9050919050565b6000612a4482612a17565b9050919050565b6000612a5682612a39565b9050919050565b612a6681612a4b565b82525050565b6000602082019050612a816000830184612a5d565b92915050565b600060208284031215612a9d57612a9c6127ac565b5b6000612aab84828501612955565b91505092915050565b600080600060608486031215612acd57612acc6127ac565b5b6000612adb86828701612955565b9350506020612aec86828701612955565b9250506040612afd868287016127d2565b9150509250925092565b612b108161292c565b82525050565b6000602082019050612b2b6000830184612b07565b92915050565b600060ff82169050919050565b612b4781612b31565b82525050565b6000602082019050612b626000830184612b3e565b92915050565b612b71816129aa565b8114612b7c57600080fd5b50565b600081359050612b8e81612b68565b92915050565b60008060408385031215612bab57612baa6127ac565b5b6000612bb985828601612955565b9250506020612bca85828601612b7f565b9150509250929050565b60008060408385031215612beb57612bea6127ac565b5b6000612bf985828601612955565b9250506020612c0a85828601612955565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c4e826127b1565b9150612c59836127b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c8e57612c8d612c14565b5b828201905092915050565b7f4d757374206b65657020666565732061742031303025206f72206c6573730000600082015250565b6000612ccf601e8361285c565b9150612cda82612c99565b602082019050919050565b60006020820190508181036000830152612cfe81612cc2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d4c57607f821691505b60208210811415612d6057612d5f612d05565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612dc260398361285c565b9150612dcd82612d66565b604082019050919050565b60006020820190508181036000830152612df181612db5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e5460258361285c565b9150612e5f82612df8565b604082019050919050565b60006020820190508181036000830152612e8381612e47565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ee660268361285c565b9150612ef182612e8a565b604082019050919050565b60006020820190508181036000830152612f1581612ed9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f5260208361285c565b9150612f5d82612f1c565b602082019050919050565b60006020820190508181036000830152612f8181612f45565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fe460248361285c565b9150612fef82612f88565b604082019050919050565b6000602082019050818103600083015261301381612fd7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061307660228361285c565b91506130818261301a565b604082019050919050565b600060208201905081810360008301526130a581613069565b9050919050565b60006130b7826127b1565b91506130c2836127b1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130fb576130fa612c14565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613140826127b1565b915061314b836127b1565b92508261315b5761315a613106565b5b828204905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061319c601d8361285c565b91506131a782613166565b602082019050919050565b600060208201905081810360008301526131cb8161318f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061322e60258361285c565b9150613239826131d2565b604082019050919050565b6000602082019050818103600083015261325d81613221565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006132c060238361285c565b91506132cb82613264565b604082019050919050565b600060208201905081810360008301526132ef816132b3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061332c60168361285c565b9150613337826132f6565b602082019050919050565b6000602082019050818103600083015261335b8161331f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061339860138361285c565b91506133a382613362565b602082019050919050565b600060208201905081810360008301526133c78161338b565b9050919050565b60006133d9826127b1565b91506133e4836127b1565b9250828210156133f7576133f6612c14565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061345e60268361285c565b915061346982613402565b604082019050919050565b6000602082019050818103600083015261348d81613451565b9050919050565b600081905092915050565b50565b60006134af600083613494565b91506134ba8261349f565b600082019050919050565b60006134d0826134a2565b9150819050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061353660218361285c565b9150613541826134da565b604082019050919050565b6000602082019050818103600083015261356581613529565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006135c860228361285c565b91506135d38261356c565b604082019050919050565b600060208201905081810360008301526135f7816135bb565b9050919050565b7f4e6f206d657620626f7420616c6c6f7765642100000000000000000000000000600082015250565b600061363460138361285c565b915061363f826135fe565b602082019050919050565b6000602082019050818103600083015261366381613627565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506136d78161293e565b92915050565b6000602082840312156136f3576136f26127ac565b5b6000613701848285016136c8565b91505092915050565b6000819050919050565b600061372f61372a6137258461370a565b612a0d565b6127b1565b9050919050565b61373f81613714565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61377a8161292c565b82525050565b600061378c8383613771565b60208301905092915050565b6000602082019050919050565b60006137b082613745565b6137ba8185613750565b93506137c583613761565b8060005b838110156137f65781516137dd8882613780565b97506137e883613798565b9250506001810190506137c9565b5085935050505092915050565b600060a0820190506138186000830188612827565b6138256020830187613736565b818103604083015261383781866137a5565b90506138466060830185612b07565b6138536080830184612827565b969550505050505056fea2646970667358221220ea678051fe174811a5b6b26f52b749bd52215bbc73649cb2bf5a387fde98b19c64736f6c634300080b0033

Deployed Bytecode Sourcemap

34280:9297:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42712:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34824:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23040:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25391:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36690:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34355:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24160:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36826:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26172:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34458:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24002:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26876:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43074:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34413:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34887:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37767:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43192:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42411:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34714:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34967:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24331:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16465:103;;;;;;;;;;;;;:::i;:::-;;35027:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36599:83;;;;;;;;;;;;;:::i;:::-;;15817:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34854:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23259:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37315:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34582:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34682:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27617:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24664:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34649:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35355:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34927:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36937:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34613:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24920:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43020:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34751:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34550:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16723:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34791:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42712:300;15703:13;:11;:13::i;:::-;42840:8:::1;42826:11;:22;;;;42872:7;42859:10;:20;;;;42920:10;;42906:11;;:24;;;;:::i;:::-;42890:13;:40;;;;42966:3;42949:13;;:20;;42941:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42712:300:::0;;:::o;34824:21::-;;;;:::o;23040:100::-;23094:13;23127:5;23120:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23040:100;:::o;25391:201::-;25474:4;25491:13;25507:12;:10;:12::i;:::-;25491:28;;25530:32;25539:5;25546:7;25555:6;25530:8;:32::i;:::-;25580:4;25573:11;;;25391:201;;;;:::o;36690:126::-;15703:13;:11;:13::i;:::-;36777:6:::1;36763:11;:20;;;;36794:14;:12;:14::i;:::-;36690:126:::0;:::o;34355:51::-;;;:::o;24160:108::-;24221:7;24248:12;;24241:19;;24160:108;:::o;36826:103::-;15703:13;:11;:13::i;:::-;36912:9:::1;36900;;:21;;;;;;;;;;;;;;;;;;36826:103:::0;:::o;26172:295::-;26303:4;26320:15;26338:12;:10;:12::i;:::-;26320:30;;26361:38;26377:4;26383:7;26392:6;26361:15;:38::i;:::-;26410:27;26420:4;26426:2;26430:6;26410:9;:27::i;:::-;26455:4;26448:11;;;26172:295;;;;;:::o;34458:53::-;34504:6;34458:53;:::o;24002:93::-;24060:5;24085:2;24078:9;;24002:93;:::o;26876:238::-;26964:4;26981:13;26997:12;:10;:12::i;:::-;26981:28;;27020:64;27029:5;27036:7;27073:10;27045:25;27055:5;27062:7;27045:9;:25::i;:::-;:38;;;;:::i;:::-;27020:8;:64::i;:::-;27102:4;27095:11;;;26876:238;;;;:::o;43074:110::-;15703:13;:11;:13::i;:::-;43172:4:::1;43146:13;:23;43160:8;43146:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;43074:110:::0;:::o;34413:38::-;;;:::o;34887:33::-;;;;;;;;;;;;;:::o;37767:126::-;37833:4;37857:19;:28;37877:7;37857:28;;;;;;;;;;;;;;;;;;;;;;;;;37850:35;;37767:126;;;:::o;43192:116::-;15703:13;:11;:13::i;:::-;43295:5:::1;43269:13;:23;43283:8;43269:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;43192:116:::0;:::o;42411:293::-;15703:13;:11;:13::i;:::-;42537:8:::1;42524:10;:21;;;;42568:7;42556:9;:19;;;;42614:9;;42601:10;;:22;;;;:::i;:::-;42586:12;:37;;;;42658:3;42642:12;;:19;;42634:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42411:293:::0;;:::o;34714:28::-;;;;:::o;34967:30::-;;;;;;;;;;;;;:::o;24331:127::-;24405:7;24432:9;:18;24442:7;24432:18;;;;;;;;;;;;;;;;24425:25;;24331:127;;;:::o;16465:103::-;15703:13;:11;:13::i;:::-;16530:30:::1;16557:1;16530:18;:30::i;:::-;16465:103::o:0;35027:30::-;;;;:::o;36599:83::-;15703:13;:11;:13::i;:::-;36670:4:::1;36654:13;;:20;;;;;;;;;;;;;;;;;;36599:83::o:0;15817:87::-;15863:7;15890:6;;;;;;;;;;;15883:13;;15817:87;:::o;34854:24::-;;;;;;;;;;;;;:::o;23259:104::-;23315:13;23348:7;23341:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23259:104;:::o;37315:306::-;15703:13;:11;:13::i;:::-;37461::::1;37453:21;;:4;:21;;;;37431:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;37572:41;37601:4;37607:5;37572:28;:41::i;:::-;37315:306:::0;;:::o;34582:24::-;;;;:::o;34682:25::-;;;;:::o;27617:436::-;27710:4;27727:13;27743:12;:10;:12::i;:::-;27727:28;;27766:24;27793:25;27803:5;27810:7;27793:9;:25::i;:::-;27766:52;;27857:15;27837:16;:35;;27829:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27950:60;27959:5;27966:7;27994:15;27975:16;:34;27950:8;:60::i;:::-;28041:4;28034:11;;;;27617:436;;;;:::o;24664:193::-;24743:4;24760:13;24776:12;:10;:12::i;:::-;24760:28;;24799;24809:5;24816:2;24820:6;24799:9;:28::i;:::-;24845:4;24838:11;;;24664:193;;;;:::o;34649:26::-;;;;:::o;35355:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34927:33::-;;;;;;;;;;;;;:::o;36937:132::-;15703:13;:11;:13::i;:::-;37053:8:::1;37022:19;:28;37042:7;37022:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36937:132:::0;;:::o;34613:27::-;;;;:::o;24920:151::-;25009:7;25036:11;:18;25048:5;25036:18;;;;;;;;;;;;;;;:27;25055:7;25036:27;;;;;;;;;;;;;;;;25029:34;;24920:151;;;;:::o;43020:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;34751:33::-;;;;:::o;34550:25::-;;;;:::o;16723:201::-;15703:13;:11;:13::i;:::-;16832:1:::1;16812:22;;:8;:22;;;;16804:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16888:28;16907:8;16888:18;:28::i;:::-;16723:201:::0;:::o;34791:24::-;;;;:::o;33368:125::-;;;;:::o;15982:132::-;16057:12;:10;:12::i;:::-;16046:23;;:7;:5;:7::i;:::-;:23;;;16038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15982:132::o;14368:98::-;14421:7;14448:10;14441:17;;14368:98;:::o;31644:380::-;31797:1;31780:19;;:5;:19;;;;31772:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31878:1;31859:21;;:7;:21;;;;31851:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31962:6;31932:11;:18;31944:5;31932:18;;;;;;;;;;;;;;;:27;31951:7;31932:27;;;;;;;;;;;;;;;:36;;;;32000:7;31984:32;;31993:5;31984:32;;;32009:6;31984:32;;;;;;:::i;:::-;;;;;;;;31644:380;;;:::o;37077:230::-;37221:5;37216:1;37207:6;;:10;;;;:::i;:::-;37206:20;;;;:::i;:::-;37185:18;:41;;;;37296:3;37281:11;;37272:6;;:20;;;;:::i;:::-;37271:28;;;;:::i;:::-;37259:9;:40;;;;37077:230::o;32315:453::-;32450:24;32477:25;32487:5;32494:7;32477:9;:25::i;:::-;32450:52;;32537:17;32517:16;:37;32513:248;;32599:6;32579:16;:26;;32571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32683:51;32692:5;32699:7;32727:6;32708:16;:25;32683:8;:51::i;:::-;32513:248;32439:329;32315:453;;;:::o;38577:2735::-;38725:1;38709:18;;:4;:18;;;;38701:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38802:1;38788:16;;:2;:16;;;;38780:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38871:1;38861:6;:11;38857:93;;;38889:28;38905:4;38911:2;38915:1;38889:15;:28::i;:::-;38932:7;;38857:93;38966:14;;;;;;;;;;;38962:957;;;39027:7;:5;:7::i;:::-;39019:15;;:4;:15;;;;:49;;;;;39061:7;:5;:7::i;:::-;39055:13;;:2;:13;;;;39019:49;:86;;;;;39103:1;39089:16;;:2;:16;;;;39019:86;:128;;;;;39140:6;39126:21;;:2;:21;;;;39019:128;:158;;;;;39169:8;;;;;;;;;;;39168:9;39019:158;38997:911;;;39217:13;;;;;;;;;;;39212:223;;39289:19;:25;39309:4;39289:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39318:19;:23;39338:2;39318:23;;;;;;;;;;;;;;;;;;;;;;;;;39289:52;39255:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;39212:223;39509:25;:31;39535:4;39509:31;;;;;;;;;;;;;;;;;;;;;;;;;39483:409;;;39644:9;;39627:13;39637:2;39627:9;:13::i;:::-;39618:6;:22;;;;:::i;:::-;:35;;39584:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39483:409;;;39822:25;:29;39848:2;39822:29;;;;;;;;;;;;;;;;;;;;;;;;39483:409;38997:911;38962:957;39931:12;39974:18;;39946:24;39964:4;39946:9;:24::i;:::-;:46;;39931:61;;40023:7;:33;;;;;40048:8;;;;;;;;;;;40047:9;40023:33;:61;;;;;40073:11;;;;;;;;;;;40023:61;:110;;;;;40102:25;:31;40128:4;40102:31;;;;;;;;;;;;;;;;;;;;;;;;;40101:32;40023:110;:153;;;;;40151:19;:25;40171:4;40151:25;;;;;;;;;;;;;;;;;;;;;;;;;40150:26;40023:153;:194;;;;;40194:19;:23;40214:2;40194:23;;;;;;;;;;;;;;;;;;;;;;;;;40193:24;40023:194;40005:326;;;40255:4;40244:8;;:15;;;;;;;;;;;;;;;;;;40276:10;:8;:10::i;:::-;40314:5;40303:8;;:16;;;;;;;;;;;;;;;;;;40005:326;40343:14;40360:25;:29;40386:2;40360:29;;;;;;;;;;;;;;;;;;;;;;;;;40343:46;;40400:13;40416:25;:31;40442:4;40416:31;;;;;;;;;;;;;;;;;;;;;;;;;40400:47;;40460:12;40487:21;40525:12;40541:8;;;;;;;;;;;40540:9;40525:24;;40566:19;:25;40586:4;40566:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40595:19;:23;40615:2;40595:23;;;;;;;;;;;;;;;;;;;;;;;;;40566:52;40562:100;;;40645:5;40635:15;;40562:100;40703:7;40699:560;;;40827:41;40840:9;40851:8;40861:6;40827:12;:41::i;:::-;40803:65;;;;;;;;40896:1;40889:4;:8;40885:332;;;40918:42;40934:4;40948;40955;40918:15;:42::i;:::-;40999:1;40983:13;:17;40979:223;;;41025:35;41039:4;41046:13;41025:5;:35::i;:::-;41092:13;:11;:13::i;:::-;41083:6;:22;;;;41128:14;:12;:14::i;:::-;41181:1;41165:17;;40979:223;40885:332;41243:4;41233:14;;;;;:::i;:::-;;;40699:560;41271:33;41287:4;41293:2;41297:6;41271:15;:33::i;:::-;38690:2622;;;;;;38577:2735;;;;:::o;17084:191::-;17158:16;17177:6;;;;;;;;;;;17158:25;;17203:8;17194:6;;:17;;;;;;;;;;;;;;;;;;17258:8;17227:40;;17248:8;17227:40;;;;;;;;;;;;17147:128;17084:191;:::o;37629:130::-;37746:5;37712:25;:31;37738:4;37712:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37629:130;;:::o;28523:840::-;28670:1;28654:18;;:4;:18;;;;28646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28747:1;28733:16;;:2;:16;;;;28725:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28802:38;28823:4;28829:2;28833:6;28802:20;:38::i;:::-;28853:19;28875:9;:15;28885:4;28875:15;;;;;;;;;;;;;;;;28853:37;;28924:6;28909:11;:21;;28901:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;29041:6;29027:11;:20;29009:9;:15;29019:4;29009:15;;;;;;;;;;;;;;;:38;;;;29244:6;29227:9;:13;29237:2;29227:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;29294:2;29279:26;;29288:4;29279:26;;;29298:6;29279:26;;;;;;:::i;:::-;;;;;;;;29318:37;29338:4;29344:2;29348:6;29318:19;:37::i;:::-;28635:728;28523:840;;;:::o;41917:486::-;41956:23;41982:24;42000:4;41982:9;:24::i;:::-;41956:50;;42017:12;42063:1;42044:15;:20;42040:59;;;42081:7;;;;42040:59;42154:2;42133:18;;:23;;;;:::i;:::-;42115:15;:41;42111:115;;;42212:2;42191:18;;:23;;;;:::i;:::-;42173:41;;42111:115;42238:33;42255:15;42238:16;:33::i;:::-;42346:9;;;;;;;;;;;42338:23;;42369:21;42338:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42324:71;;;;;41945:458;;41917:486;:::o;37901:668::-;38030:7;38039;38059:12;38086:21;38148:10;:31;;;;;38178:1;38162:13;;:17;38148:31;38144:377;;;38203:35;38234:3;38203:26;38215:13;;38203:7;:11;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;38196:42;;38293:13;;38278:11;;38271:4;:18;;;;:::i;:::-;38270:36;;;;:::i;:::-;38253:53;;;;;:::i;:::-;;;38144:377;;;38356:9;:29;;;;;38384:1;38369:12;;:16;38356:29;38352:169;;;38409:34;38439:3;38409:25;38421:12;;38409:7;:11;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38402:41;;38497:12;;38483:10;;38476:4;:17;;;;:::i;:::-;38475:34;;;;:::i;:::-;38458:51;;;;;:::i;:::-;;;38352:169;38144:377;38541:4;38547:13;38533:28;;;;;;37901:668;;;;;;:::o;30531:675::-;30634:1;30615:21;;:7;:21;;;;30607:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30687:49;30708:7;30725:1;30729:6;30687:20;:49::i;:::-;30749:22;30774:9;:18;30784:7;30774:18;;;;;;;;;;;;;;;;30749:43;;30829:6;30811:14;:24;;30803:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30948:6;30931:14;:23;30910:9;:18;30920:7;30910:18;;;;;;;;;;;;;;;:44;;;;31065:6;31049:12;;:22;;;;;;;;;;;31126:1;31100:37;;31109:7;31100:37;;;31130:6;31100:37;;;;;;:::i;:::-;;;;;;;;31150:48;31170:7;31187:1;31191:6;31150:19;:48::i;:::-;30596:610;30531:675;;:::o;43316:258::-;43468:13;:19;43482:4;43468:19;;;;;;;;;;;;;;;;;;;;;;;;;43467:20;43459:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43522:44;43549:4;43555:2;43559:6;43522:26;:44::i;:::-;43316:258;;;:::o;34097:124::-;;;;:::o;41320:589::-;41446:21;41484:1;41470:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41446:40;;41515:4;41497;41502:1;41497:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41541:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41531:4;41536:1;41531:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41576:62;41593:4;41608:15;41626:11;41576:8;:62::i;:::-;41677:15;:66;;;41758:11;41784:1;41828:4;41855;41875:15;41677:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41375:534;41320:589;:::o;3612:98::-;3670:7;3701:1;3697;:5;;;;:::i;:::-;3690:12;;3612:98;;;;:::o;4011:::-;4069:7;4100:1;4096;:5;;;;:::i;:::-;4089:12;;4011:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:307::-;1870:1;1880:113;1894:6;1891:1;1888:13;1880:113;;;1979:1;1974:3;1970:11;1964:18;1960:1;1955:3;1951:11;1944:39;1916:2;1913:1;1909:10;1904:15;;1880:113;;;2011:6;2008:1;2005:13;2002:101;;;2091:1;2082:6;2077:3;2073:16;2066:27;2002:101;1851:258;1802:307;;;:::o;2115:102::-;2156:6;2207:2;2203:7;2198:2;2191:5;2187:14;2183:28;2173:38;;2115:102;;;:::o;2223:364::-;2311:3;2339:39;2372:5;2339:39;:::i;:::-;2394:71;2458:6;2453:3;2394:71;:::i;:::-;2387:78;;2474:52;2519:6;2514:3;2507:4;2500:5;2496:16;2474:52;:::i;:::-;2551:29;2573:6;2551:29;:::i;:::-;2546:3;2542:39;2535:46;;2315:272;2223:364;;;;:::o;2593:313::-;2706:4;2744:2;2733:9;2729:18;2721:26;;2793:9;2787:4;2783:20;2779:1;2768:9;2764:17;2757:47;2821:78;2894:4;2885:6;2821:78;:::i;:::-;2813:86;;2593:313;;;;:::o;2912:126::-;2949:7;2989:42;2982:5;2978:54;2967:65;;2912:126;;;:::o;3044:96::-;3081:7;3110:24;3128:5;3110:24;:::i;:::-;3099:35;;3044:96;;;:::o;3146:122::-;3219:24;3237:5;3219:24;:::i;:::-;3212:5;3209:35;3199:63;;3258:1;3255;3248:12;3199:63;3146:122;:::o;3274:139::-;3320:5;3358:6;3345:20;3336:29;;3374:33;3401:5;3374:33;:::i;:::-;3274:139;;;;:::o;3419:474::-;3487:6;3495;3544:2;3532:9;3523:7;3519:23;3515:32;3512:119;;;3550:79;;:::i;:::-;3512:119;3670:1;3695:53;3740:7;3731:6;3720:9;3716:22;3695:53;:::i;:::-;3685:63;;3641:117;3797:2;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3768:118;3419:474;;;;;:::o;3899:90::-;3933:7;3976:5;3969:13;3962:21;3951:32;;3899:90;;;:::o;3995:109::-;4076:21;4091:5;4076:21;:::i;:::-;4071:3;4064:34;3995:109;;:::o;4110:210::-;4197:4;4235:2;4224:9;4220:18;4212:26;;4248:65;4310:1;4299:9;4295:17;4286:6;4248:65;:::i;:::-;4110:210;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:60::-;4689:3;4710:5;4703:12;;4661:60;;;:::o;4727:142::-;4777:9;4810:53;4828:34;4837:24;4855:5;4837:24;:::i;:::-;4828:34;:::i;:::-;4810:53;:::i;:::-;4797:66;;4727:142;;;:::o;4875:126::-;4925:9;4958:37;4989:5;4958:37;:::i;:::-;4945:50;;4875:126;;;:::o;5007:152::-;5083:9;5116:37;5147:5;5116:37;:::i;:::-;5103:50;;5007:152;;;:::o;5165:183::-;5278:63;5335:5;5278:63;:::i;:::-;5273:3;5266:76;5165:183;;:::o;5354:274::-;5473:4;5511:2;5500:9;5496:18;5488:26;;5524:97;5618:1;5607:9;5603:17;5594:6;5524:97;:::i;:::-;5354:274;;;;:::o;5634:329::-;5693:6;5742:2;5730:9;5721:7;5717:23;5713:32;5710:119;;;5748:79;;:::i;:::-;5710:119;5868:1;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5839:117;5634:329;;;;:::o;5969:619::-;6046:6;6054;6062;6111:2;6099:9;6090:7;6086:23;6082:32;6079:119;;;6117:79;;:::i;:::-;6079:119;6237:1;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6208:117;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;6492:2;6518:53;6563:7;6554:6;6543:9;6539:22;6518:53;:::i;:::-;6508:63;;6463:118;5969:619;;;;;:::o;6594:118::-;6681:24;6699:5;6681:24;:::i;:::-;6676:3;6669:37;6594:118;;:::o;6718:222::-;6811:4;6849:2;6838:9;6834:18;6826:26;;6862:71;6930:1;6919:9;6915:17;6906:6;6862:71;:::i;:::-;6718:222;;;;:::o;6946:86::-;6981:7;7021:4;7014:5;7010:16;6999:27;;6946:86;;;:::o;7038:112::-;7121:22;7137:5;7121:22;:::i;:::-;7116:3;7109:35;7038:112;;:::o;7156:214::-;7245:4;7283:2;7272:9;7268:18;7260:26;;7296:67;7360:1;7349:9;7345:17;7336:6;7296:67;:::i;:::-;7156:214;;;;:::o;7376:116::-;7446:21;7461:5;7446:21;:::i;:::-;7439:5;7436:32;7426:60;;7482:1;7479;7472:12;7426:60;7376:116;:::o;7498:133::-;7541:5;7579:6;7566:20;7557:29;;7595:30;7619:5;7595:30;:::i;:::-;7498:133;;;;:::o;7637:468::-;7702:6;7710;7759:2;7747:9;7738:7;7734:23;7730:32;7727:119;;;7765:79;;:::i;:::-;7727:119;7885:1;7910:53;7955:7;7946:6;7935:9;7931:22;7910:53;:::i;:::-;7900:63;;7856:117;8012:2;8038:50;8080:7;8071:6;8060:9;8056:22;8038:50;:::i;:::-;8028:60;;7983:115;7637:468;;;;;:::o;8111:474::-;8179:6;8187;8236:2;8224:9;8215:7;8211:23;8207:32;8204:119;;;8242:79;;:::i;:::-;8204:119;8362:1;8387:53;8432:7;8423:6;8412:9;8408:22;8387:53;:::i;:::-;8377:63;;8333:117;8489:2;8515:53;8560:7;8551:6;8540:9;8536:22;8515:53;:::i;:::-;8505:63;;8460:118;8111:474;;;;;:::o;8591:180::-;8639:77;8636:1;8629:88;8736:4;8733:1;8726:15;8760:4;8757:1;8750:15;8777:305;8817:3;8836:20;8854:1;8836:20;:::i;:::-;8831:25;;8870:20;8888:1;8870:20;:::i;:::-;8865:25;;9024:1;8956:66;8952:74;8949:1;8946:81;8943:107;;;9030:18;;:::i;:::-;8943:107;9074:1;9071;9067:9;9060:16;;8777:305;;;;:::o;9088:180::-;9228:32;9224:1;9216:6;9212:14;9205:56;9088:180;:::o;9274:366::-;9416:3;9437:67;9501:2;9496:3;9437:67;:::i;:::-;9430:74;;9513:93;9602:3;9513:93;:::i;:::-;9631:2;9626:3;9622:12;9615:19;;9274:366;;;:::o;9646:419::-;9812:4;9850:2;9839:9;9835:18;9827:26;;9899:9;9893:4;9889:20;9885:1;9874:9;9870:17;9863:47;9927:131;10053:4;9927:131;:::i;:::-;9919:139;;9646:419;;;:::o;10071:180::-;10119:77;10116:1;10109:88;10216:4;10213:1;10206:15;10240:4;10237:1;10230:15;10257:320;10301:6;10338:1;10332:4;10328:12;10318:22;;10385:1;10379:4;10375:12;10406:18;10396:81;;10462:4;10454:6;10450:17;10440:27;;10396:81;10524:2;10516:6;10513:14;10493:18;10490:38;10487:84;;;10543:18;;:::i;:::-;10487:84;10308:269;10257:320;;;:::o;10583:244::-;10723:34;10719:1;10711:6;10707:14;10700:58;10792:27;10787:2;10779:6;10775:15;10768:52;10583:244;:::o;10833:366::-;10975:3;10996:67;11060:2;11055:3;10996:67;:::i;:::-;10989:74;;11072:93;11161:3;11072:93;:::i;:::-;11190:2;11185:3;11181:12;11174:19;;10833:366;;;:::o;11205:419::-;11371:4;11409:2;11398:9;11394:18;11386:26;;11458:9;11452:4;11448:20;11444:1;11433:9;11429:17;11422:47;11486:131;11612:4;11486:131;:::i;:::-;11478:139;;11205:419;;;:::o;11630:224::-;11770:34;11766:1;11758:6;11754:14;11747:58;11839:7;11834:2;11826:6;11822:15;11815:32;11630:224;:::o;11860:366::-;12002:3;12023:67;12087:2;12082:3;12023:67;:::i;:::-;12016:74;;12099:93;12188:3;12099:93;:::i;:::-;12217:2;12212:3;12208:12;12201:19;;11860:366;;;:::o;12232:419::-;12398:4;12436:2;12425:9;12421:18;12413:26;;12485:9;12479:4;12475:20;12471:1;12460:9;12456:17;12449:47;12513:131;12639:4;12513:131;:::i;:::-;12505:139;;12232:419;;;:::o;12657:225::-;12797:34;12793:1;12785:6;12781:14;12774:58;12866:8;12861:2;12853:6;12849:15;12842:33;12657:225;:::o;12888:366::-;13030:3;13051:67;13115:2;13110:3;13051:67;:::i;:::-;13044:74;;13127:93;13216:3;13127:93;:::i;:::-;13245:2;13240:3;13236:12;13229:19;;12888:366;;;:::o;13260:419::-;13426:4;13464:2;13453:9;13449:18;13441:26;;13513:9;13507:4;13503:20;13499:1;13488:9;13484:17;13477:47;13541:131;13667:4;13541:131;:::i;:::-;13533:139;;13260:419;;;:::o;13685:182::-;13825:34;13821:1;13813:6;13809:14;13802:58;13685:182;:::o;13873:366::-;14015:3;14036:67;14100:2;14095:3;14036:67;:::i;:::-;14029:74;;14112:93;14201:3;14112:93;:::i;:::-;14230:2;14225:3;14221:12;14214:19;;13873:366;;;:::o;14245:419::-;14411:4;14449:2;14438:9;14434:18;14426:26;;14498:9;14492:4;14488:20;14484:1;14473:9;14469:17;14462:47;14526:131;14652:4;14526:131;:::i;:::-;14518:139;;14245:419;;;:::o;14670:223::-;14810:34;14806:1;14798:6;14794:14;14787:58;14879:6;14874:2;14866:6;14862:15;14855:31;14670:223;:::o;14899:366::-;15041:3;15062:67;15126:2;15121:3;15062:67;:::i;:::-;15055:74;;15138:93;15227:3;15138:93;:::i;:::-;15256:2;15251:3;15247:12;15240:19;;14899:366;;;:::o;15271:419::-;15437:4;15475:2;15464:9;15460:18;15452:26;;15524:9;15518:4;15514:20;15510:1;15499:9;15495:17;15488:47;15552:131;15678:4;15552:131;:::i;:::-;15544:139;;15271:419;;;:::o;15696:221::-;15836:34;15832:1;15824:6;15820:14;15813:58;15905:4;15900:2;15892:6;15888:15;15881:29;15696:221;:::o;15923:366::-;16065:3;16086:67;16150:2;16145:3;16086:67;:::i;:::-;16079:74;;16162:93;16251:3;16162:93;:::i;:::-;16280:2;16275:3;16271:12;16264:19;;15923:366;;;:::o;16295:419::-;16461:4;16499:2;16488:9;16484:18;16476:26;;16548:9;16542:4;16538:20;16534:1;16523:9;16519:17;16512:47;16576:131;16702:4;16576:131;:::i;:::-;16568:139;;16295:419;;;:::o;16720:348::-;16760:7;16783:20;16801:1;16783:20;:::i;:::-;16778:25;;16817:20;16835:1;16817:20;:::i;:::-;16812:25;;17005:1;16937:66;16933:74;16930:1;16927:81;16922:1;16915:9;16908:17;16904:105;16901:131;;;17012:18;;:::i;:::-;16901:131;17060:1;17057;17053:9;17042:20;;16720:348;;;;:::o;17074:180::-;17122:77;17119:1;17112:88;17219:4;17216:1;17209:15;17243:4;17240:1;17233:15;17260:185;17300:1;17317:20;17335:1;17317:20;:::i;:::-;17312:25;;17351:20;17369:1;17351:20;:::i;:::-;17346:25;;17390:1;17380:35;;17395:18;;:::i;:::-;17380:35;17437:1;17434;17430:9;17425:14;;17260:185;;;;:::o;17451:179::-;17591:31;17587:1;17579:6;17575:14;17568:55;17451:179;:::o;17636:366::-;17778:3;17799:67;17863:2;17858:3;17799:67;:::i;:::-;17792:74;;17875:93;17964:3;17875:93;:::i;:::-;17993:2;17988:3;17984:12;17977:19;;17636:366;;;:::o;18008:419::-;18174:4;18212:2;18201:9;18197:18;18189:26;;18261:9;18255:4;18251:20;18247:1;18236:9;18232:17;18225:47;18289:131;18415:4;18289:131;:::i;:::-;18281:139;;18008:419;;;:::o;18433:224::-;18573:34;18569:1;18561:6;18557:14;18550:58;18642:7;18637:2;18629:6;18625:15;18618:32;18433:224;:::o;18663:366::-;18805:3;18826:67;18890:2;18885:3;18826:67;:::i;:::-;18819:74;;18902:93;18991:3;18902:93;:::i;:::-;19020:2;19015:3;19011:12;19004:19;;18663:366;;;:::o;19035:419::-;19201:4;19239:2;19228:9;19224:18;19216:26;;19288:9;19282:4;19278:20;19274:1;19263:9;19259:17;19252:47;19316:131;19442:4;19316:131;:::i;:::-;19308:139;;19035:419;;;:::o;19460:222::-;19600:34;19596:1;19588:6;19584:14;19577:58;19669:5;19664:2;19656:6;19652:15;19645:30;19460:222;:::o;19688:366::-;19830:3;19851:67;19915:2;19910:3;19851:67;:::i;:::-;19844:74;;19927:93;20016:3;19927:93;:::i;:::-;20045:2;20040:3;20036:12;20029:19;;19688:366;;;:::o;20060:419::-;20226:4;20264:2;20253:9;20249:18;20241:26;;20313:9;20307:4;20303:20;20299:1;20288:9;20284:17;20277:47;20341:131;20467:4;20341:131;:::i;:::-;20333:139;;20060:419;;;:::o;20485:172::-;20625:24;20621:1;20613:6;20609:14;20602:48;20485:172;:::o;20663:366::-;20805:3;20826:67;20890:2;20885:3;20826:67;:::i;:::-;20819:74;;20902:93;20991:3;20902:93;:::i;:::-;21020:2;21015:3;21011:12;21004:19;;20663:366;;;:::o;21035:419::-;21201:4;21239:2;21228:9;21224:18;21216:26;;21288:9;21282:4;21278:20;21274:1;21263:9;21259:17;21252:47;21316:131;21442:4;21316:131;:::i;:::-;21308:139;;21035:419;;;:::o;21460:169::-;21600:21;21596:1;21588:6;21584:14;21577:45;21460:169;:::o;21635:366::-;21777:3;21798:67;21862:2;21857:3;21798:67;:::i;:::-;21791:74;;21874:93;21963:3;21874:93;:::i;:::-;21992:2;21987:3;21983:12;21976:19;;21635:366;;;:::o;22007:419::-;22173:4;22211:2;22200:9;22196:18;22188:26;;22260:9;22254:4;22250:20;22246:1;22235:9;22231:17;22224:47;22288:131;22414:4;22288:131;:::i;:::-;22280:139;;22007:419;;;:::o;22432:191::-;22472:4;22492:20;22510:1;22492:20;:::i;:::-;22487:25;;22526:20;22544:1;22526:20;:::i;:::-;22521:25;;22565:1;22562;22559:8;22556:34;;;22570:18;;:::i;:::-;22556:34;22615:1;22612;22608:9;22600:17;;22432:191;;;;:::o;22629:225::-;22769:34;22765:1;22757:6;22753:14;22746:58;22838:8;22833:2;22825:6;22821:15;22814:33;22629:225;:::o;22860:366::-;23002:3;23023:67;23087:2;23082:3;23023:67;:::i;:::-;23016:74;;23099:93;23188:3;23099:93;:::i;:::-;23217:2;23212:3;23208:12;23201:19;;22860:366;;;:::o;23232:419::-;23398:4;23436:2;23425:9;23421:18;23413:26;;23485:9;23479:4;23475:20;23471:1;23460:9;23456:17;23449:47;23513:131;23639:4;23513:131;:::i;:::-;23505:139;;23232:419;;;:::o;23657:147::-;23758:11;23795:3;23780:18;;23657:147;;;;:::o;23810:114::-;;:::o;23930:398::-;24089:3;24110:83;24191:1;24186:3;24110:83;:::i;:::-;24103:90;;24202:93;24291:3;24202:93;:::i;:::-;24320:1;24315:3;24311:11;24304:18;;23930:398;;;:::o;24334:379::-;24518:3;24540:147;24683:3;24540:147;:::i;:::-;24533:154;;24704:3;24697:10;;24334:379;;;:::o;24719:220::-;24859:34;24855:1;24847:6;24843:14;24836:58;24928:3;24923:2;24915:6;24911:15;24904:28;24719:220;:::o;24945:366::-;25087:3;25108:67;25172:2;25167:3;25108:67;:::i;:::-;25101:74;;25184:93;25273:3;25184:93;:::i;:::-;25302:2;25297:3;25293:12;25286:19;;24945:366;;;:::o;25317:419::-;25483:4;25521:2;25510:9;25506:18;25498:26;;25570:9;25564:4;25560:20;25556:1;25545:9;25541:17;25534:47;25598:131;25724:4;25598:131;:::i;:::-;25590:139;;25317:419;;;:::o;25742:221::-;25882:34;25878:1;25870:6;25866:14;25859:58;25951:4;25946:2;25938:6;25934:15;25927:29;25742:221;:::o;25969:366::-;26111:3;26132:67;26196:2;26191:3;26132:67;:::i;:::-;26125:74;;26208:93;26297:3;26208:93;:::i;:::-;26326:2;26321:3;26317:12;26310:19;;25969:366;;;:::o;26341:419::-;26507:4;26545:2;26534:9;26530:18;26522:26;;26594:9;26588:4;26584:20;26580:1;26569:9;26565:17;26558:47;26622:131;26748:4;26622:131;:::i;:::-;26614:139;;26341:419;;;:::o;26766:169::-;26906:21;26902:1;26894:6;26890:14;26883:45;26766:169;:::o;26941:366::-;27083:3;27104:67;27168:2;27163:3;27104:67;:::i;:::-;27097:74;;27180:93;27269:3;27180:93;:::i;:::-;27298:2;27293:3;27289:12;27282:19;;26941:366;;;:::o;27313:419::-;27479:4;27517:2;27506:9;27502:18;27494:26;;27566:9;27560:4;27556:20;27552:1;27541:9;27537:17;27530:47;27594:131;27720:4;27594:131;:::i;:::-;27586:139;;27313:419;;;:::o;27738:180::-;27786:77;27783:1;27776:88;27883:4;27880:1;27873:15;27907:4;27904:1;27897:15;27924:180;27972:77;27969:1;27962:88;28069:4;28066:1;28059:15;28093:4;28090:1;28083:15;28110:143;28167:5;28198:6;28192:13;28183:22;;28214:33;28241:5;28214:33;:::i;:::-;28110:143;;;;:::o;28259:351::-;28329:6;28378:2;28366:9;28357:7;28353:23;28349:32;28346:119;;;28384:79;;:::i;:::-;28346:119;28504:1;28529:64;28585:7;28576:6;28565:9;28561:22;28529:64;:::i;:::-;28519:74;;28475:128;28259:351;;;;:::o;28616:85::-;28661:7;28690:5;28679:16;;28616:85;;;:::o;28707:158::-;28765:9;28798:61;28816:42;28825:32;28851:5;28825:32;:::i;:::-;28816:42;:::i;:::-;28798:61;:::i;:::-;28785:74;;28707:158;;;:::o;28871:147::-;28966:45;29005:5;28966:45;:::i;:::-;28961:3;28954:58;28871:147;;:::o;29024:114::-;29091:6;29125:5;29119:12;29109:22;;29024:114;;;:::o;29144:184::-;29243:11;29277:6;29272:3;29265:19;29317:4;29312:3;29308:14;29293:29;;29144:184;;;;:::o;29334:132::-;29401:4;29424:3;29416:11;;29454:4;29449:3;29445:14;29437:22;;29334:132;;;:::o;29472:108::-;29549:24;29567:5;29549:24;:::i;:::-;29544:3;29537:37;29472:108;;:::o;29586:179::-;29655:10;29676:46;29718:3;29710:6;29676:46;:::i;:::-;29754:4;29749:3;29745:14;29731:28;;29586:179;;;;:::o;29771:113::-;29841:4;29873;29868:3;29864:14;29856:22;;29771:113;;;:::o;29920:732::-;30039:3;30068:54;30116:5;30068:54;:::i;:::-;30138:86;30217:6;30212:3;30138:86;:::i;:::-;30131:93;;30248:56;30298:5;30248:56;:::i;:::-;30327:7;30358:1;30343:284;30368:6;30365:1;30362:13;30343:284;;;30444:6;30438:13;30471:63;30530:3;30515:13;30471:63;:::i;:::-;30464:70;;30557:60;30610:6;30557:60;:::i;:::-;30547:70;;30403:224;30390:1;30387;30383:9;30378:14;;30343:284;;;30347:14;30643:3;30636:10;;30044:608;;;29920:732;;;;:::o;30658:831::-;30921:4;30959:3;30948:9;30944:19;30936:27;;30973:71;31041:1;31030:9;31026:17;31017:6;30973:71;:::i;:::-;31054:80;31130:2;31119:9;31115:18;31106:6;31054:80;:::i;:::-;31181:9;31175:4;31171:20;31166:2;31155:9;31151:18;31144:48;31209:108;31312:4;31303:6;31209:108;:::i;:::-;31201:116;;31327:72;31395:2;31384:9;31380:18;31371:6;31327:72;:::i;:::-;31409:73;31477:3;31466:9;31462:19;31453:6;31409:73;:::i;:::-;30658:831;;;;;;;;:::o

Swarm Source

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