ETH Price: $3,281.15 (+1.04%)
Gas: 1 Gwei

Token

P0xNZI (P0xNZI)
 

Overview

Max Total Supply

1,000,000 P0xNZI

Holders

60

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.048111524434290531 P0xNZI

Value
$0.00
0xfa6272f75081dcff91c23cd8d85260611ed71c41
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:
P0xNZI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-27
*/

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


// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: @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: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: Ponzi.sol


pragma solidity >=0.6.0 <0.9.0;









contract P0xNZI is ERC20, ERC20Burnable, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;

    uint256 public constant MAX = ~uint256(0);
    uint256 public _tTotal = 1000000 * 1 ether;
    uint256 public _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _tFeeTotal;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address private bAndVAddr;

    bool private inSwapAndLiquify;
    bool private disableSwapAndLiquidity;

    mapping(address => bool) public _isExcludedFromReward;
    mapping (address => bool) public _isExcludedFromFee;
    mapping (address => bool) public _authorizedFromPool;
    address[] private _excluded;
    address[] private _authorized;

    uint256 private _taxFee = 7;
    uint256 private _liquidityFee = 1;
    uint256 private _marketingFee = 4;
    uint256 private _reflectionFee = 2;
    uint256 private _prevTaxFee = 7;
    uint256 private _prevLiquidityFee = 1;
    uint256 private _prevMarketingFee = 4;
    uint256 private _prevReflectionFee = 2;

    address private _marketingAddr;
    
    modifier lockSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(address marketingAddr) ERC20("P0xNZI", "P0xNZI") {
        _rOwned[msg.sender] = _rTotal;
        _marketingAddr = marketingAddr;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[_marketingAddr] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[uniswapV2Pair] = true;
        _isExcludedFromFee[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;

        _isExcludedFromReward[address(0)] = true;
        _isExcludedFromReward[address(this)] = true;
        _isExcludedFromReward[uniswapV2Pair] = true;
        _isExcludedFromReward[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;

        _excluded.push(address(0));
        _excluded.push(address(this));
        _excluded.push(uniswapV2Pair);
        _excluded.push(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _authorizedFromPool[msg.sender] = true;
        _authorized.push(msg.sender);
        _authorizedFromPool[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;
        _authorized.push(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    }

    // Utils functions

    receive() external payable {}

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcludedFromReward[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function removeAllFee() private {        
        _prevTaxFee = _taxFee;
        _prevLiquidityFee = _liquidityFee;
        _prevMarketingFee = _marketingFee;
        _reflectionFee = _reflectionFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _reflectionFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _prevTaxFee;
        _liquidityFee = _prevLiquidityFee;
        _marketingFee = _prevMarketingFee;
        _reflectionFee = _prevReflectionFee;
    }

    function setFees(uint256 marketingFee, uint256 liquidityFee, uint256 relfectionFee) external onlyOwner {
        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        _reflectionFee = relfectionFee;
        _taxFee = _marketingFee.add(_liquidityFee).add(_reflectionFee);
    }

    function setMarketingAddr(address marketingAddr) external onlyOwner {
        _marketingAddr = marketingAddr;
        _isExcludedFromFee[_marketingAddr] = true;
    }

    function setExcludeFromFees(address _addr, bool _value) external onlyOwner {
        _isExcludedFromFee[_addr] = _value;
    }

    function setBandVAddr(address _bandv) external onlyOwner {
        bAndVAddr = _bandv;
        _isExcludedFromFee[_bandv] = true;
        _authorizedFromPool[_bandv] = true;
        _authorized.push(_bandv);
    }

    function setDisableSwapAndLiquidity(bool _value) external onlyOwner {
        disableSwapAndLiquidity = _value;
    }

    function setExcludeFromRewards(address _addr, bool _value) external onlyOwner {
        _isExcludedFromReward[_addr] = _value;

        if (_value) _excluded.push(_addr);
        else {
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == _addr) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _excluded.pop();
                    break;
                }
            }
        }
    }

    function setAuthorizedFromPool(address _addr, bool _value) external onlyOwner {
        _authorizedFromPool[_addr] = _value;

        if (_value) _authorized.push(_addr);
        else {
            for (uint256 i = 0; i < _authorized.length; i++) {
                if (_authorized[i] == _addr) {
                    _authorized[i] = _authorized[_authorized.length - 1];
                    _authorized.pop();
                    break;
                }
            }
        }
    }

    // Reflection calculation

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tReflect) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rReflect) = _getRValues(tAmount, tFee, tReflect, _getRate());
        return (rAmount, rTransferAmount, rFee, rReflect, tTransferAmount, tFee, tReflect);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(_taxFee).div(10**2);
        uint256 tReflect = tAmount.mul(_reflectionFee).div(10**2);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee, tReflect);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tReflect, uint256 currentRate) private pure returns (uint256, uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rReflect = tReflect.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee, rReflect);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) private view returns (uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ,) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _takeFees(uint256 rAmount) private {
        uint256 currentRate = _getRate();

        _rOwned[_marketingAddr] = _rOwned[_marketingAddr].add(rAmount.mul(_marketingFee).div(10**2).mul(currentRate));
        _tOwned[_marketingAddr] = _tOwned[_marketingAddr].add(rAmount.mul(_marketingFee).div(10**2));

        _rOwned[address(this)] = _rOwned[address(this)].add(rAmount.mul(_liquidityFee).div(10**2).mul(currentRate));
        _tOwned[address(this)] = _tOwned[address(this)].add(rAmount.mul(_liquidityFee).div(10**2));
    }

    function _getRate() public view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() public view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    // Add Liq

    function swapAndLiquify(uint256 contractTokenBalance) private lockSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half);
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liq
        _approve(address(this), address(uniswapV2Router), otherHalf);
        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this), otherHalf, 0, 0, _marketingAddr, block.timestamp
        );
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount, 0, path, address(this), block.timestamp
        );
    }

    // Transfers

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (from == uniswapV2Pair && !_authorizedFromPool[to])
            revert("Cannot buy from liquidity pool");

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (!disableSwapAndLiquidity && !inSwapAndLiquify && from != uniswapV2Pair && contractTokenBalance > 0)
            swapAndLiquify(contractTokenBalance);

        bool takeFee = true;
        
        if (_isExcludedFromFee[from]) takeFee = false;
        
        _tokenTransfer(from, to, amount, takeFee);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if (!takeFee)
            removeAllFee();
        
        if (_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if (!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) internal {
        (uint256 rAmount, uint256 rTransferAmount, , uint256 rReflect, uint256 tTransferAmount, uint256 tFee,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        _takeFees(tAmount);
        _reflectFee(rReflect, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) internal {
        (uint256 rAmount, uint256 rTransferAmount, , uint256 rReflect, uint256 tTransferAmount, uint256 tFee,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);     

        _takeFees(tAmount);
        _reflectFee(rReflect, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) internal {
        (uint256 rAmount, uint256 rTransferAmount, , uint256 rReflect, uint256 tTransferAmount, uint256 tFee,) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   

        _takeFees(tAmount);
        _reflectFee(rReflect, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) internal {
        (uint256 rAmount, uint256 rTransferAmount, , uint256 rReflect, uint256 tTransferAmount, uint256 tFee,) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        _takeFees(tAmount);
        _reflectFee(rReflect, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marketingAddr","type":"address"}],"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":[],"name":"MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_authorizedFromPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAuthorizedFromPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bandv","type":"address"}],"name":"setBandVAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setDisableSwapAndLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setExcludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"relfectionFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddr","type":"address"}],"name":"setMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda100000060088190556200002290600019620004fc565b62000030906000196200051f565b600955600760115560016012556004601355600260145560076015556001601655600460175560026018553480156200006857600080fd5b5060405162002aff38038062002aff8339810160408190526200008b9162000547565b6040805180820182526006808252655030784e5a4960d01b6020808401829052845180860190955291845290830152906003620000c983826200061e565b506004620000d882826200061e565b505050620000f5620000ef620004a660201b60201c565b620004aa565b6009543360009081526006602090815260409182902092909255601980546001600160a01b0319166001600160a01b038516179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa15801562000177573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019d919062000547565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000211919062000547565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200025f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000285919062000547565b6001600160a01b0390811660a0819052918116608052336000818152600d602090815260408083208054600160ff1991821681179092556019549096168452818420805487168217905530808552828520805488168317905587855282852080548816831790557fe491d3ddab46a3ddc2b907c015f7e2686859fac31a4f174b9b79a82620b0324e8054881683179055600c84527f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e88054881683179055808552828520805488168317905587855282852080548816831790557f0ec9aca9afadc09fc0bd96ec7d7d6cfbb5408a5bc5bcf87bc0656b65508e559a8054881683179055600f805480840182557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290810180546001600160a01b03199081169091558254808601845582018054821690941790935581548085018355810180548416909a1790995580548084019091559097018054737a250d5630b4cf539739df2c5dacb4c659f2488d9089168117909155858552600e90935290832080548616821790556010805480830182557f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672908101805489169096179095557f37836a7135fae77e265e35732c70286035736c8b57b12590769780e067ead81c8054909616821790955584549081018555939091529101805490921617905550620006ea565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826200051a57634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200054157634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200055a57600080fd5b81516001600160a01b03811681146200057257600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005a457607f821691505b602082108103620005c557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061957600081815260208120601f850160051c81016020861015620005f45750805b601f850160051c820191505b81811015620006155782815560010162000600565b5050505b505050565b81516001600160401b038111156200063a576200063a62000579565b62000652816200064b84546200058f565b84620005cb565b602080601f8311600181146200068a5760008415620006715750858301515b600019600386901b1c1916600185901b17855562000615565b600085815260208120601f198616915b82811015620006bb578886015182559484019460019091019084016200069a565b5085821015620006da5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516123be62000741600039600081816103d0015281816112cd01526113ad0152600081816102810152818161169a015281816117020152818161198601528181611a3f0152611a7b01526123be6000f3fe6080604052600436106102085760003560e01c806379cc679011610118578063bb1224ea116100a0578063dd62ed3e1161006f578063dd62ed3e14610625578063e103856a14610645578063e89864e614610665578063f2fde38b14610685578063fb1eb14b146106a557600080fd5b8063bb1224ea146105af578063cec10c11146105cf578063d49d5181146105ef578063d63cad221461060557600080fd5b806397a9d560116100e757806397a9d5601461050f578063a457c2d714610539578063a7c1d59014610559578063a9059cbb14610579578063af465a271461059957600080fd5b806379cc6790146104a75780638da5cb5b146104c757806394e10784146104e557806395d89b41146104fa57600080fd5b80633c6ca5c11161019b5780636c11e8e31161016a5780636c11e8e3146103f257806370a0823114610412578063715018a614610432578063768dc7101461044757806379b3c52f1461047757600080fd5b80633c6ca5c11461035657806342966c681461038657806345e0b9d4146103a857806349bd5a5e146103be57600080fd5b806323b872dd116101d757806323b872dd146102da5780632d838119146102fa578063313ce5671461031a578063395093511461033657600080fd5b806306fdde0314610214578063095ea7b31461023f5780631694505e1461026f57806318160ddd146102bb57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b506102296106bb565b6040516102369190612008565b60405180910390f35b34801561024b57600080fd5b5061025f61025a36600461206b565b61074d565b6040519015158152602001610236565b34801561027b57600080fd5b506102a37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610236565b3480156102c757600080fd5b506008545b604051908152602001610236565b3480156102e657600080fd5b5061025f6102f5366004612097565b610767565b34801561030657600080fd5b506102cc6103153660046120d8565b61078b565b34801561032657600080fd5b5060405160128152602001610236565b34801561034257600080fd5b5061025f61035136600461206b565b610814565b34801561036257600080fd5b5061025f6103713660046120f1565b600c6020526000908152604090205460ff1681565b34801561039257600080fd5b506103a66103a13660046120d8565b610836565b005b3480156103b457600080fd5b506102cc60095481565b3480156103ca57600080fd5b506102a37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103fe57600080fd5b506103a661040d366004612123565b610843565b34801561041e57600080fd5b506102cc61042d3660046120f1565b6109d7565b34801561043e57600080fd5b506103a6610a36565b34801561045357600080fd5b5061025f6104623660046120f1565b600d6020526000908152604090205460ff1681565b34801561048357600080fd5b5061025f6104923660046120f1565b600e6020526000908152604090205460ff1681565b3480156104b357600080fd5b506103a66104c236600461206b565b610a4a565b3480156104d357600080fd5b506005546001600160a01b03166102a3565b3480156104f157600080fd5b506102cc610a5f565b34801561050657600080fd5b50610229610a82565b34801561051b57600080fd5b50610524610a91565b60408051928352602083019190915201610236565b34801561054557600080fd5b5061025f61055436600461206b565b610c13565b34801561056557600080fd5b506103a66105743660046120f1565b610c8e565b34801561058557600080fd5b5061025f61059436600461206b565b610cd0565b3480156105a557600080fd5b506102cc60085481565b3480156105bb57600080fd5b506103a66105ca366004612123565b610cde565b3480156105db57600080fd5b506103a66105ea366004612158565b610e45565b3480156105fb57600080fd5b506102cc60001981565b34801561061157600080fd5b506103a6610620366004612123565b610e78565b34801561063157600080fd5b506102cc610640366004612184565b610eab565b34801561065157600080fd5b506103a66106603660046120f1565b610ed6565b34801561067157600080fd5b506103a66106803660046121bd565b610f69565b34801561069157600080fd5b506103a66106a03660046120f1565b610f8f565b3480156106b157600080fd5b506102cc600a5481565b6060600380546106ca906121d8565b80601f01602080910402602001604051908101604052809291908181526020018280546106f6906121d8565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b5050505050905090565b60003361075b818585611005565b60019150505b92915050565b600033610775858285611129565b6107808585856111a3565b506001949350505050565b60006009548211156107f75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610801610a5f565b905061080d8382611437565b9392505050565b60003361075b8185856108278383610eab565b6108319190612228565b611005565b6108403382611443565b50565b61084b611588565b6001600160a01b0382166000908152600e60205260409020805460ff191682158015919091179091556108c957601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0384166001600160a01b03199091161790555050565b60005b6010548110156109d157826001600160a01b0316601082815481106108f3576108f361223b565b6000918252602090912001546001600160a01b0316036109bf576010805461091d90600190612251565b8154811061092d5761092d61223b565b600091825260209091200154601080546001600160a01b0390921691839081106109595761095961223b565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601080548061099857610998612264565b600082815260209020810160001990810180546001600160a01b03191690550190556109d1565b806109c98161227a565b9150506108cc565b505b5050565b6001600160a01b0381166000908152600c602052604081205460ff1615610a1457506001600160a01b031660009081526007602052604090205490565b6001600160a01b0382166000908152600660205260409020546107619061078b565b610a3e611588565b610a4860006115e2565b565b610a55823383611129565b6109d38282611443565b6000806000610a6c610a91565b9092509050610a7b8282611437565b9250505090565b6060600480546106ca906121d8565b6009546008546000918291825b600f54811015610be3578260066000600f8481548110610ac057610ac061223b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180610b2b57508160076000600f8481548110610b0457610b0461223b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15610b4157600954600854945094505050509091565b610b8760066000600f8481548110610b5b57610b5b61223b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611634565b9250610bcf60076000600f8481548110610ba357610ba361223b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611634565b915080610bdb8161227a565b915050610a9e565b50600854600954610bf391611437565b821015610c0a576009546008549350935050509091565b90939092509050565b60003381610c218286610eab565b905083811015610c815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107ee565b6107808286868403611005565b610c96611588565b601980546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b60003361075b8185856111a3565b610ce6611588565b6001600160a01b0382166000908152600c60205260409020805460ff19168215801591909117909155610d6457600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0384166001600160a01b03199091161790555050565b60005b600f548110156109d157826001600160a01b0316600f8281548110610d8e57610d8e61223b565b6000918252602090912001546001600160a01b031603610e3357600f8054610db890600190612251565b81548110610dc857610dc861223b565b600091825260209091200154600f80546001600160a01b039092169183908110610df457610df461223b565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f80548061099857610998612264565b80610e3d8161227a565b915050610d67565b610e4d611588565b601383905560128290556014819055610e7081610e6a8585611640565b90611640565b601155505050565b610e80611588565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610ede611588565b600b80546001600160a01b039092166001600160a01b031992831681179091556000818152600d60209081526040808320805460ff199081166001908117909255600e909352908320805490921681179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672018054909216179055565b610f71611588565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b610f97611588565b6001600160a01b038116610ffc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ee565b610840816115e2565b6001600160a01b0383166110675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107ee565b6001600160a01b0382166110c85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107ee565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006111358484610eab565b9050600019811461119d57818110156111905760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107ee565b61119d8484848403611005565b50505050565b6001600160a01b0383166112075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107ee565b6001600160a01b0382166112695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107ee565b600081116112cb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561132557506001600160a01b0382166000908152600e602052604090205460ff16155b156113725760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206275792066726f6d206c697175696469747920706f6f6c000060448201526064016107ee565b600061137d306109d7565b600b54909150600160a81b900460ff161580156113a45750600b54600160a01b900460ff16155b80156113e257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b80156113ee5750600081115b156113fc576113fc8161164c565b6001600160a01b0384166000908152600d602052604090205460019060ff1615611424575060005b6114308585858461178a565b5050505050565b600061080d8284612293565b6001600160a01b0382166114a35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ee565b6114af826000836109d1565b6001600160a01b038216600090815260208190526040902054818110156115235760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107ee565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109d1836000846109d1565b6005546001600160a01b03163314610a485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ee565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061080d8284612251565b600061080d8284612228565b600b805460ff60a01b1916600160a01b179055600061166c826002611437565b9050600061167a8383611634565b9050476116868361192f565b60006116924783611634565b90506116bf307f000000000000000000000000000000000000000000000000000000000000000085611005565b60195460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af115801561174e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061177391906122b5565b5050600b805460ff60a01b19169055505050505050565b806117b9576117b960118054601555601280546016556013805460175560009283905590829055819055601455565b6001600160a01b0384166000908152600c602052604090205460ff1680156117fa57506001600160a01b0383166000908152600c602052604090205460ff16155b1561180f5761180a848484611aef565b61190d565b6001600160a01b0384166000908152600c602052604090205460ff1615801561185057506001600160a01b0383166000908152600c602052604090205460ff165b156118605761180a848484611c15565b6001600160a01b0384166000908152600c602052604090205460ff161580156118a257506001600160a01b0383166000908152600c602052604090205460ff16155b156118b25761180a848484611cbf565b6001600160a01b0384166000908152600c602052604090205460ff1680156118f257506001600160a01b0383166000908152600c602052604090205460ff165b156119025761180a848484611d04565b61190d848484611cbf565b8061119d5761119d601554601155601654601255601754601355601854601455565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106119645761196461223b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0691906122e3565b81600181518110611a1957611a1961223b565b60200260200101906001600160a01b031690816001600160a01b031681525050611a64307f000000000000000000000000000000000000000000000000000000000000000084611005565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611ab9908590600090869030904290600401612300565b600060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505050505050565b6000806000806000611b0086611d78565b506001600160a01b038e16600090815260076020526040902054959a509398509096509450909250611b3491905087611634565b6001600160a01b038916600090815260076020908152604080832093909355600690522054611b639086611634565b6001600160a01b03808a166000908152600660205260408082209390935590891681522054611b929085611640565b6001600160a01b038816600090815260066020526040902055611bb486611dde565b611bbe8382611f30565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c0391815260200190565b60405180910390a35050505050505050565b6000806000806000611c2686611d78565b506001600160a01b038e16600090815260066020526040902054959a509398509096509450909250611c5a91905086611634565b6001600160a01b03808a16600090815260066020908152604080832094909455918a16815260079091522054611c909083611640565b6001600160a01b038816600090815260076020908152604080832093909355600690522054611b929085611640565b6000806000806000611cd086611d78565b506001600160a01b038e16600090815260066020526040902054959a509398509096509450909250611b6391905086611634565b6000806000806000611d1586611d78565b506001600160a01b038e16600090815260076020526040902054959a509398509096509450909250611d4991905087611634565b6001600160a01b038916600090815260076020908152604080832093909355600690522054611c5a9086611634565b600080600080600080600080600080611d908b611f54565b925092509250600080600080611daf8f8787611daa610a5f565b611fae565b9350935093509350838383838a8a8a9d509d509d509d509d509d509d5050505050505050919395979092949650565b6000611de8610a5f565b9050611e38611e1782611e116064611e0b60135488611ffc90919063ffffffff16565b90611437565b90611ffc565b6019546001600160a01b031660009081526006602052604090205490611640565b6019546001600160a01b0316600090815260066020526040902055601354611e8d90611e6c90606490611e0b908690611ffc565b6019546001600160a01b031660009081526007602052604090205490611640565b6019546001600160a01b0316600090815260076020526040902055601254611edd90611ec7908390611e1190606490611e0b908890611ffc565b3060009081526006602052604090205490611640565b30600090815260066020526040902055601254611f1c90611f0690606490611e0b908690611ffc565b3060009081526007602052604090205490611640565b306000908152600760205260409020555050565b600954611f3d9083611634565b600955600a54611f4d9082611640565b600a555050565b600080600080611f746064611e0b60115488611ffc90919063ffffffff16565b90506000611f926064611e0b60145489611ffc90919063ffffffff16565b90506000611fa08784611634565b979296509094509092505050565b600080808080611fbe8987611ffc565b90506000611fcc8988611ffc565b90506000611fda8989611ffc565b90506000611fe88484611634565b939c939b5091995097509095505050505050565b600061080d8284612371565b600060208083528351808285015260005b8181101561203557858101830151858201604001528201612019565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461084057600080fd5b6000806040838503121561207e57600080fd5b823561208981612056565b946020939093013593505050565b6000806000606084860312156120ac57600080fd5b83356120b781612056565b925060208401356120c781612056565b929592945050506040919091013590565b6000602082840312156120ea57600080fd5b5035919050565b60006020828403121561210357600080fd5b813561080d81612056565b8035801515811461211e57600080fd5b919050565b6000806040838503121561213657600080fd5b823561214181612056565b915061214f6020840161210e565b90509250929050565b60008060006060848603121561216d57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561219757600080fd5b82356121a281612056565b915060208301356121b281612056565b809150509250929050565b6000602082840312156121cf57600080fd5b61080d8261210e565b600181811c908216806121ec57607f821691505b60208210810361220c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561076157610761612212565b634e487b7160e01b600052603260045260246000fd5b8181038181111561076157610761612212565b634e487b7160e01b600052603160045260246000fd5b60006001820161228c5761228c612212565b5060010190565b6000826122b057634e487b7160e01b600052601260045260246000fd5b500490565b6000806000606084860312156122ca57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156122f557600080fd5b815161080d81612056565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123505784516001600160a01b03168352938301939183019160010161232b565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107615761076161221256fea2646970667358221220afec4a0fe4562ec7cfa390057f8edea057255d0061c32f785abd0696089d099f64736f6c63430008120033000000000000000000000000233f49ce16428a6805ae6385bc6b667062829e09

Deployed Bytecode

0x6080604052600436106102085760003560e01c806379cc679011610118578063bb1224ea116100a0578063dd62ed3e1161006f578063dd62ed3e14610625578063e103856a14610645578063e89864e614610665578063f2fde38b14610685578063fb1eb14b146106a557600080fd5b8063bb1224ea146105af578063cec10c11146105cf578063d49d5181146105ef578063d63cad221461060557600080fd5b806397a9d560116100e757806397a9d5601461050f578063a457c2d714610539578063a7c1d59014610559578063a9059cbb14610579578063af465a271461059957600080fd5b806379cc6790146104a75780638da5cb5b146104c757806394e10784146104e557806395d89b41146104fa57600080fd5b80633c6ca5c11161019b5780636c11e8e31161016a5780636c11e8e3146103f257806370a0823114610412578063715018a614610432578063768dc7101461044757806379b3c52f1461047757600080fd5b80633c6ca5c11461035657806342966c681461038657806345e0b9d4146103a857806349bd5a5e146103be57600080fd5b806323b872dd116101d757806323b872dd146102da5780632d838119146102fa578063313ce5671461031a578063395093511461033657600080fd5b806306fdde0314610214578063095ea7b31461023f5780631694505e1461026f57806318160ddd146102bb57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b506102296106bb565b6040516102369190612008565b60405180910390f35b34801561024b57600080fd5b5061025f61025a36600461206b565b61074d565b6040519015158152602001610236565b34801561027b57600080fd5b506102a37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610236565b3480156102c757600080fd5b506008545b604051908152602001610236565b3480156102e657600080fd5b5061025f6102f5366004612097565b610767565b34801561030657600080fd5b506102cc6103153660046120d8565b61078b565b34801561032657600080fd5b5060405160128152602001610236565b34801561034257600080fd5b5061025f61035136600461206b565b610814565b34801561036257600080fd5b5061025f6103713660046120f1565b600c6020526000908152604090205460ff1681565b34801561039257600080fd5b506103a66103a13660046120d8565b610836565b005b3480156103b457600080fd5b506102cc60095481565b3480156103ca57600080fd5b506102a37f00000000000000000000000013a3419833dffbbbc1264f1271566a1ae76889a381565b3480156103fe57600080fd5b506103a661040d366004612123565b610843565b34801561041e57600080fd5b506102cc61042d3660046120f1565b6109d7565b34801561043e57600080fd5b506103a6610a36565b34801561045357600080fd5b5061025f6104623660046120f1565b600d6020526000908152604090205460ff1681565b34801561048357600080fd5b5061025f6104923660046120f1565b600e6020526000908152604090205460ff1681565b3480156104b357600080fd5b506103a66104c236600461206b565b610a4a565b3480156104d357600080fd5b506005546001600160a01b03166102a3565b3480156104f157600080fd5b506102cc610a5f565b34801561050657600080fd5b50610229610a82565b34801561051b57600080fd5b50610524610a91565b60408051928352602083019190915201610236565b34801561054557600080fd5b5061025f61055436600461206b565b610c13565b34801561056557600080fd5b506103a66105743660046120f1565b610c8e565b34801561058557600080fd5b5061025f61059436600461206b565b610cd0565b3480156105a557600080fd5b506102cc60085481565b3480156105bb57600080fd5b506103a66105ca366004612123565b610cde565b3480156105db57600080fd5b506103a66105ea366004612158565b610e45565b3480156105fb57600080fd5b506102cc60001981565b34801561061157600080fd5b506103a6610620366004612123565b610e78565b34801561063157600080fd5b506102cc610640366004612184565b610eab565b34801561065157600080fd5b506103a66106603660046120f1565b610ed6565b34801561067157600080fd5b506103a66106803660046121bd565b610f69565b34801561069157600080fd5b506103a66106a03660046120f1565b610f8f565b3480156106b157600080fd5b506102cc600a5481565b6060600380546106ca906121d8565b80601f01602080910402602001604051908101604052809291908181526020018280546106f6906121d8565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b5050505050905090565b60003361075b818585611005565b60019150505b92915050565b600033610775858285611129565b6107808585856111a3565b506001949350505050565b60006009548211156107f75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610801610a5f565b905061080d8382611437565b9392505050565b60003361075b8185856108278383610eab565b6108319190612228565b611005565b6108403382611443565b50565b61084b611588565b6001600160a01b0382166000908152600e60205260409020805460ff191682158015919091179091556108c957601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0384166001600160a01b03199091161790555050565b60005b6010548110156109d157826001600160a01b0316601082815481106108f3576108f361223b565b6000918252602090912001546001600160a01b0316036109bf576010805461091d90600190612251565b8154811061092d5761092d61223b565b600091825260209091200154601080546001600160a01b0390921691839081106109595761095961223b565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601080548061099857610998612264565b600082815260209020810160001990810180546001600160a01b03191690550190556109d1565b806109c98161227a565b9150506108cc565b505b5050565b6001600160a01b0381166000908152600c602052604081205460ff1615610a1457506001600160a01b031660009081526007602052604090205490565b6001600160a01b0382166000908152600660205260409020546107619061078b565b610a3e611588565b610a4860006115e2565b565b610a55823383611129565b6109d38282611443565b6000806000610a6c610a91565b9092509050610a7b8282611437565b9250505090565b6060600480546106ca906121d8565b6009546008546000918291825b600f54811015610be3578260066000600f8481548110610ac057610ac061223b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180610b2b57508160076000600f8481548110610b0457610b0461223b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15610b4157600954600854945094505050509091565b610b8760066000600f8481548110610b5b57610b5b61223b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611634565b9250610bcf60076000600f8481548110610ba357610ba361223b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611634565b915080610bdb8161227a565b915050610a9e565b50600854600954610bf391611437565b821015610c0a576009546008549350935050509091565b90939092509050565b60003381610c218286610eab565b905083811015610c815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107ee565b6107808286868403611005565b610c96611588565b601980546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b60003361075b8185856111a3565b610ce6611588565b6001600160a01b0382166000908152600c60205260409020805460ff19168215801591909117909155610d6457600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0384166001600160a01b03199091161790555050565b60005b600f548110156109d157826001600160a01b0316600f8281548110610d8e57610d8e61223b565b6000918252602090912001546001600160a01b031603610e3357600f8054610db890600190612251565b81548110610dc857610dc861223b565b600091825260209091200154600f80546001600160a01b039092169183908110610df457610df461223b565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f80548061099857610998612264565b80610e3d8161227a565b915050610d67565b610e4d611588565b601383905560128290556014819055610e7081610e6a8585611640565b90611640565b601155505050565b610e80611588565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610ede611588565b600b80546001600160a01b039092166001600160a01b031992831681179091556000818152600d60209081526040808320805460ff199081166001908117909255600e909352908320805490921681179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672018054909216179055565b610f71611588565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b610f97611588565b6001600160a01b038116610ffc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ee565b610840816115e2565b6001600160a01b0383166110675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107ee565b6001600160a01b0382166110c85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107ee565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006111358484610eab565b9050600019811461119d57818110156111905760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107ee565b61119d8484848403611005565b50505050565b6001600160a01b0383166112075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107ee565b6001600160a01b0382166112695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107ee565b600081116112cb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ee565b7f00000000000000000000000013a3419833dffbbbc1264f1271566a1ae76889a36001600160a01b0316836001600160a01b031614801561132557506001600160a01b0382166000908152600e602052604090205460ff16155b156113725760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206275792066726f6d206c697175696469747920706f6f6c000060448201526064016107ee565b600061137d306109d7565b600b54909150600160a81b900460ff161580156113a45750600b54600160a01b900460ff16155b80156113e257507f00000000000000000000000013a3419833dffbbbc1264f1271566a1ae76889a36001600160a01b0316846001600160a01b031614155b80156113ee5750600081115b156113fc576113fc8161164c565b6001600160a01b0384166000908152600d602052604090205460019060ff1615611424575060005b6114308585858461178a565b5050505050565b600061080d8284612293565b6001600160a01b0382166114a35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ee565b6114af826000836109d1565b6001600160a01b038216600090815260208190526040902054818110156115235760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107ee565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109d1836000846109d1565b6005546001600160a01b03163314610a485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ee565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061080d8284612251565b600061080d8284612228565b600b805460ff60a01b1916600160a01b179055600061166c826002611437565b9050600061167a8383611634565b9050476116868361192f565b60006116924783611634565b90506116bf307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85611005565b60195460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af115801561174e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061177391906122b5565b5050600b805460ff60a01b19169055505050505050565b806117b9576117b960118054601555601280546016556013805460175560009283905590829055819055601455565b6001600160a01b0384166000908152600c602052604090205460ff1680156117fa57506001600160a01b0383166000908152600c602052604090205460ff16155b1561180f5761180a848484611aef565b61190d565b6001600160a01b0384166000908152600c602052604090205460ff1615801561185057506001600160a01b0383166000908152600c602052604090205460ff165b156118605761180a848484611c15565b6001600160a01b0384166000908152600c602052604090205460ff161580156118a257506001600160a01b0383166000908152600c602052604090205460ff16155b156118b25761180a848484611cbf565b6001600160a01b0384166000908152600c602052604090205460ff1680156118f257506001600160a01b0383166000908152600c602052604090205460ff165b156119025761180a848484611d04565b61190d848484611cbf565b8061119d5761119d601554601155601654601255601754601355601854601455565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106119645761196461223b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0691906122e3565b81600181518110611a1957611a1961223b565b60200260200101906001600160a01b031690816001600160a01b031681525050611a64307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611005565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611ab9908590600090869030904290600401612300565b600060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505050505050565b6000806000806000611b0086611d78565b506001600160a01b038e16600090815260076020526040902054959a509398509096509450909250611b3491905087611634565b6001600160a01b038916600090815260076020908152604080832093909355600690522054611b639086611634565b6001600160a01b03808a166000908152600660205260408082209390935590891681522054611b929085611640565b6001600160a01b038816600090815260066020526040902055611bb486611dde565b611bbe8382611f30565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c0391815260200190565b60405180910390a35050505050505050565b6000806000806000611c2686611d78565b506001600160a01b038e16600090815260066020526040902054959a509398509096509450909250611c5a91905086611634565b6001600160a01b03808a16600090815260066020908152604080832094909455918a16815260079091522054611c909083611640565b6001600160a01b038816600090815260076020908152604080832093909355600690522054611b929085611640565b6000806000806000611cd086611d78565b506001600160a01b038e16600090815260066020526040902054959a509398509096509450909250611b6391905086611634565b6000806000806000611d1586611d78565b506001600160a01b038e16600090815260076020526040902054959a509398509096509450909250611d4991905087611634565b6001600160a01b038916600090815260076020908152604080832093909355600690522054611c5a9086611634565b600080600080600080600080600080611d908b611f54565b925092509250600080600080611daf8f8787611daa610a5f565b611fae565b9350935093509350838383838a8a8a9d509d509d509d509d509d509d5050505050505050919395979092949650565b6000611de8610a5f565b9050611e38611e1782611e116064611e0b60135488611ffc90919063ffffffff16565b90611437565b90611ffc565b6019546001600160a01b031660009081526006602052604090205490611640565b6019546001600160a01b0316600090815260066020526040902055601354611e8d90611e6c90606490611e0b908690611ffc565b6019546001600160a01b031660009081526007602052604090205490611640565b6019546001600160a01b0316600090815260076020526040902055601254611edd90611ec7908390611e1190606490611e0b908890611ffc565b3060009081526006602052604090205490611640565b30600090815260066020526040902055601254611f1c90611f0690606490611e0b908690611ffc565b3060009081526007602052604090205490611640565b306000908152600760205260409020555050565b600954611f3d9083611634565b600955600a54611f4d9082611640565b600a555050565b600080600080611f746064611e0b60115488611ffc90919063ffffffff16565b90506000611f926064611e0b60145489611ffc90919063ffffffff16565b90506000611fa08784611634565b979296509094509092505050565b600080808080611fbe8987611ffc565b90506000611fcc8988611ffc565b90506000611fda8989611ffc565b90506000611fe88484611634565b939c939b5091995097509095505050505050565b600061080d8284612371565b600060208083528351808285015260005b8181101561203557858101830151858201604001528201612019565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461084057600080fd5b6000806040838503121561207e57600080fd5b823561208981612056565b946020939093013593505050565b6000806000606084860312156120ac57600080fd5b83356120b781612056565b925060208401356120c781612056565b929592945050506040919091013590565b6000602082840312156120ea57600080fd5b5035919050565b60006020828403121561210357600080fd5b813561080d81612056565b8035801515811461211e57600080fd5b919050565b6000806040838503121561213657600080fd5b823561214181612056565b915061214f6020840161210e565b90509250929050565b60008060006060848603121561216d57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561219757600080fd5b82356121a281612056565b915060208301356121b281612056565b809150509250929050565b6000602082840312156121cf57600080fd5b61080d8261210e565b600181811c908216806121ec57607f821691505b60208210810361220c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561076157610761612212565b634e487b7160e01b600052603260045260246000fd5b8181038181111561076157610761612212565b634e487b7160e01b600052603160045260246000fd5b60006001820161228c5761228c612212565b5060010190565b6000826122b057634e487b7160e01b600052601260045260246000fd5b500490565b6000806000606084860312156122ca57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156122f557600080fd5b815161080d81612056565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123505784516001600160a01b03168352938301939183019160010161232b565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107615761076161221256fea2646970667358221220afec4a0fe4562ec7cfa390057f8edea057255d0061c32f785abd0696089d099f64736f6c63430008120033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000233f49ce16428a6805ae6385bc6b667062829e09

-----Decoded View---------------
Arg [0] : marketingAddr (address): 0x233F49Ce16428A6805aE6385bc6b667062829E09

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000233f49ce16428a6805ae6385bc6b667062829e09


Deployed Bytecode Sourcemap

46519:14182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34092:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36443:201;;;;;;;;;;-1:-1:-1;36443:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;36443:201:0;1023:187:1;46930:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;46930:51:0;1215:230:1;49343:95:0;;;;;;;;;;-1:-1:-1;49423:7:0;;49343:95;;;1596:25:1;;;1584:2;1569:18;49343:95:0;1450:177:1;37224:295:0;;;;;;;;;;-1:-1:-1;37224:295:0;;;;;:::i;:::-;;:::i;53897:253::-;;;;;;;;;;-1:-1:-1;53897:253:0;;;;;:::i;:::-;;:::i;35054:93::-;;;;;;;;;;-1:-1:-1;35054:93:0;;35137:2;2420:36:1;;2408:2;2393:18;35054:93:0;2278:184:1;37928:238:0;;;;;;;;;;-1:-1:-1;37928:238:0;;;;;:::i;:::-;;:::i;47148:53::-;;;;;;;;;;-1:-1:-1;47148:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45863:91;;;;;;;;;;-1:-1:-1;45863:91:0;;;;;:::i;:::-;;:::i;:::-;;46841:48;;;;;;;;;;;;;;;;46988:38;;;;;;;;;;;;;;;51677:496;;;;;;;;;;-1:-1:-1;51677:496:0;;;;;:::i;:::-;;:::i;49446:208::-;;;;;;;;;;-1:-1:-1;49446:208:0;;;;;:::i;:::-;;:::i;27517:103::-;;;;;;;;;;;;;:::i;47208:51::-;;;;;;;;;;-1:-1:-1;47208:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;47266:52;;;;;;;;;;-1:-1:-1;47266:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46273:164;;;;;;;;;;-1:-1:-1;46273:164:0;;;;;:::i;:::-;;:::i;26869:87::-;;;;;;;;;;-1:-1:-1;26942:6:0;;-1:-1:-1;;;;;26942:6:0;26869:87;;54862:163;;;;;;;;;;;;;:::i;34311:104::-;;;;;;;;;;;;;:::i;55033:560::-;;;;;;;;;;;;;:::i;:::-;;;;3586:25:1;;;3642:2;3627:18;;3620:34;;;;3559:18;55033:560:0;3412:248:1;38669:436:0;;;;;;;;;;-1:-1:-1;38669:436:0;;;;;:::i;:::-;;:::i;50519:169::-;;;;;;;;;;-1:-1:-1;50519:169:0;;;;;:::i;:::-;;:::i;35716:193::-;;;;;;;;;;-1:-1:-1;35716:193:0;;;;;:::i;:::-;;:::i;46792:42::-;;;;;;;;;;;;;;;;51185:484;;;;;;;;;;-1:-1:-1;51185:484:0;;;;;:::i;:::-;;:::i;50208:303::-;;;;;;;;;;-1:-1:-1;50208:303:0;;;;;:::i;:::-;;:::i;46744:41::-;;;;;;;;;;-1:-1:-1;46744:41:0;-1:-1:-1;;46744:41:0;;50696:128;;;;;;;;;;-1:-1:-1;50696:128:0;;;;;:::i;:::-;;:::i;35972:151::-;;;;;;;;;;-1:-1:-1;35972:151:0;;;;;:::i;:::-;;:::i;50832:218::-;;;;;;;;;;-1:-1:-1;50832:218:0;;;;;:::i;:::-;;:::i;51058:119::-;;;;;;;;;;-1:-1:-1;51058:119:0;;;;;:::i;:::-;;:::i;27775:201::-;;;;;;;;;;-1:-1:-1;27775:201:0;;;;;:::i;:::-;;:::i;46896:25::-;;;;;;;;;;;;;;;;34092:100;34146:13;34179:5;34172:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34092:100;:::o;36443:201::-;36526:4;25500:10;36582:32;25500:10;36598:7;36607:6;36582:8;:32::i;:::-;36632:4;36625:11;;;36443:201;;;;;:::o;37224:295::-;37355:4;25500:10;37413:38;37429:4;25500:10;37444:6;37413:15;:38::i;:::-;37462:27;37472:4;37478:2;37482:6;37462:9;:27::i;:::-;-1:-1:-1;37507:4:0;;37224:295;-1:-1:-1;;;;37224:295:0:o;53897:253::-;53964:7;54003;;53992;:18;;53984:73;;;;-1:-1:-1;;;53984:73:0;;5151:2:1;53984:73:0;;;5133:21:1;5190:2;5170:18;;;5163:30;5229:34;5209:18;;;5202:62;-1:-1:-1;;;5280:18:1;;;5273:40;5330:19;;53984:73:0;;;;;;;;;54068:19;54090:10;:8;:10::i;:::-;54068:32;-1:-1:-1;54118:24:0;:7;54068:32;54118:11;:24::i;:::-;54111:31;53897:253;-1:-1:-1;;;53897:253:0:o;37928:238::-;38016:4;25500:10;38072:64;25500:10;38088:7;38125:10;38097:25;25500:10;38088:7;38097:9;:25::i;:::-;:38;;;;:::i;:::-;38072:8;:64::i;45863:91::-;45919:27;25500:10;45939:6;45919:5;:27::i;:::-;45863:91;:::o;51677:496::-;26755:13;:11;:13::i;:::-;-1:-1:-1;;;;;51766:26:0;::::1;;::::0;;;:19:::1;:26;::::0;;;;:35;;-1:-1:-1;;51766:35:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;51814:352:::1;;51826:11;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;51826:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;51826:23:0;::::1;-1:-1:-1::0;;;;;;51826:23:0;;::::1;;::::0;;51677:496;;:::o;51814:352::-:1;51885:9;51880:275;51904:11;:18:::0;51900:22;::::1;51880:275;;;51970:5;-1:-1:-1::0;;;;;51952:23:0::1;:11;51964:1;51952:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;51952:14:0::1;:23:::0;51948:192:::1;;52017:11;52029:18:::0;;:22:::1;::::0;52050:1:::1;::::0;52029:22:::1;:::i;:::-;52017:35;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;52000:11:::1;:14:::0;;-1:-1:-1;;;;;52017:35:0;;::::1;::::0;52012:1;;52000:14;::::1;;;;;:::i;:::-;;;;;;;;;:52;;;;;-1:-1:-1::0;;;;;52000:52:0::1;;;;;-1:-1:-1::0;;;;;52000:52:0::1;;;;;;52075:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;52075:17:0;;;;;-1:-1:-1;;;;;;52075:17:0::1;::::0;;;;;52115:5:::1;;51948:192;51924:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51880:275;;;;51814:352;51677:496:::0;;:::o;49446:208::-;-1:-1:-1;;;;;49536:30:0;;49512:7;49536:30;;;:21;:30;;;;;;;;49532:59;;;-1:-1:-1;;;;;;49575:16:0;;;;;:7;:16;;;;;;;49446:208::o;49532:59::-;-1:-1:-1;;;;;49629:16:0;;;;;;:7;:16;;;;;;49609:37;;:19;:37::i;27517:103::-;26755:13;:11;:13::i;:::-;27582:30:::1;27609:1;27582:18;:30::i;:::-;27517:103::o:0;46273:164::-;46350:46;46366:7;25500:10;46389:6;46350:15;:46::i;:::-;46407:22;46413:7;46422:6;46407:5;:22::i;54862:163::-;54903:7;54924:15;54941;54960:19;:17;:19::i;:::-;54923:56;;-1:-1:-1;54923:56:0;-1:-1:-1;54997:20:0;54923:56;;54997:11;:20::i;:::-;54990:27;;;;54862:163;:::o;34311:104::-;34367:13;34400:7;34393:14;;;;;:::i;55033:560::-;55129:7;;55165;;55082;;;;;55189:289;55213:9;:16;55209:20;;55189:289;;;55279:7;55255;:21;55263:9;55273:1;55263:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;55263:12:0;55255:21;;;;;;;;;;;;;:31;;:66;;;55314:7;55290;:21;55298:9;55308:1;55298:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;55298:12:0;55290:21;;;;;;;;;;;;;:31;55255:66;55251:97;;;55331:7;;55340;;55323:25;;;;;;;55033:560;;:::o;55251:97::-;55373:34;55385:7;:21;55393:9;55403:1;55393:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;55393:12:0;55385:21;;;;;;;;;;;;;55373:7;;:11;:34::i;:::-;55363:44;;55432:34;55444:7;:21;55452:9;55462:1;55452:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;55452:12:0;55444:21;;;;;;;;;;;;;55432:7;;:11;:34::i;:::-;55422:44;-1:-1:-1;55231:3:0;;;;:::i;:::-;;;;55189:289;;;-1:-1:-1;55514:7:0;;55502;;:20;;:11;:20::i;:::-;55492:7;:30;55488:61;;;55532:7;;55541;;55524:25;;;;;;55033:560;;:::o;55488:61::-;55568:7;;55577;;-1:-1:-1;55033:560:0;-1:-1:-1;55033:560:0:o;38669:436::-;38762:4;25500:10;38762:4;38845:25;25500:10;38862:7;38845:9;:25::i;:::-;38818:52;;38909:15;38889:16;:35;;38881:85;;;;-1:-1:-1;;;38881:85:0;;6361:2:1;38881:85:0;;;6343:21:1;6400:2;6380:18;;;6373:30;6439:34;6419:18;;;6412:62;-1:-1:-1;;;6490:18:1;;;6483:35;6535:19;;38881:85:0;6159:401:1;38881:85:0;39002:60;39011:5;39018:7;39046:15;39027:16;:34;39002:8;:60::i;50519:169::-;26755:13;:11;:13::i;:::-;50598:14:::1;:30:::0;;-1:-1:-1;;;;;50598:30:0;;::::1;-1:-1:-1::0;;;;;;50598:30:0;;::::1;::::0;::::1;::::0;;:14:::1;50639:34:::0;;;:18:::1;:34;::::0;;;;:41;;-1:-1:-1;;50639:41:0::1;50598:30:::0;50639:41:::1;::::0;;50519:169::o;35716:193::-;35795:4;25500:10;35851:28;25500:10;35868:2;35872:6;35851:9;:28::i;51185:484::-;26755:13;:11;:13::i;:::-;-1:-1:-1;;;;;51274:28:0;::::1;;::::0;;;:21:::1;:28;::::0;;;;:37;;-1:-1:-1;;51274:37:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;51324:338:::1;;51336:9;:21:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;51336:21:0;;;;;::::1;::::0;;-1:-1:-1;;;;;51336:21:0;::::1;-1:-1:-1::0;;;;;;51336:21:0;;::::1;;::::0;;51677:496;;:::o;51324:338::-:1;51393:9;51388:263;51412:9;:16:::0;51408:20;::::1;51388:263;;;51474:5;-1:-1:-1::0;;;;;51458:21:0::1;:9;51468:1;51458:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;51458:12:0::1;:21:::0;51454:182:::1;;51519:9;51529:16:::0;;:20:::1;::::0;51548:1:::1;::::0;51529:20:::1;:::i;:::-;51519:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;51504:9:::1;:12:::0;;-1:-1:-1;;;;;51519:31:0;;::::1;::::0;51514:1;;51504:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;51504:46:0::1;;;;;-1:-1:-1::0;;;;;51504:46:0::1;;;;;;51573:9;:15;;;;;;;:::i;51454:182::-;51430:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51388:263;;50208:303:::0;26755:13;:11;:13::i;:::-;50322::::1;:28:::0;;;50361:13:::1;:28:::0;;;50400:14:::1;:30:::0;;;50451:52:::1;50417:13:::0;50451:32:::1;50338:12:::0;50377;50451:17:::1;:32::i;:::-;:36:::0;::::1;:52::i;:::-;50441:7;:62:::0;-1:-1:-1;;;50208:303:0:o;50696:128::-;26755:13;:11;:13::i;:::-;-1:-1:-1;;;;;50782:25:0;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:34;;-1:-1:-1;;50782:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50696:128::o;35972:151::-;-1:-1:-1;;;;;36088:18:0;;;36061:7;36088:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;35972:151::o;50832:218::-;26755:13;:11;:13::i;:::-;50900:9:::1;:18:::0;;-1:-1:-1;;;;;50900:18:0;;::::1;-1:-1:-1::0;;;;;;50900:18:0;;::::1;::::0;::::1;::::0;;;:9:::1;50929:26:::0;;;:18:::1;:26;::::0;;;;;;;:33;;-1:-1:-1;;50929:33:0;;::::1;50900:18:::0;50929:33;;::::1;::::0;;;50973:19:::1;:27:::0;;;;;;:34;;;;::::1;::::0;::::1;::::0;;;51018:11:::1;:24:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;;::::0;;50832:218::o;51058:119::-;26755:13;:11;:13::i;:::-;51137:23:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;51137:32:0::1;-1:-1:-1::0;;;;51137:32:0;;::::1;::::0;;;::::1;::::0;;51058:119::o;27775:201::-;26755:13;:11;:13::i;:::-;-1:-1:-1;;;;;27864:22:0;::::1;27856:73;;;::::0;-1:-1:-1;;;27856:73:0;;6767:2:1;27856:73:0::1;::::0;::::1;6749:21:1::0;6806:2;6786:18;;;6779:30;6845:34;6825:18;;;6818:62;-1:-1:-1;;;6896:18:1;;;6889:36;6942:19;;27856:73:0::1;6565:402:1::0;27856:73:0::1;27940:28;27959:8;27940:18;:28::i;42696:380::-:0;-1:-1:-1;;;;;42832:19:0;;42824:68;;;;-1:-1:-1;;;42824:68:0;;7174:2:1;42824:68:0;;;7156:21:1;7213:2;7193:18;;;7186:30;7252:34;7232:18;;;7225:62;-1:-1:-1;;;7303:18:1;;;7296:34;7347:19;;42824:68:0;6972:400:1;42824:68:0;-1:-1:-1;;;;;42911:21:0;;42903:68;;;;-1:-1:-1;;;42903:68:0;;7579:2:1;42903:68:0;;;7561:21:1;7618:2;7598:18;;;7591:30;7657:34;7637:18;;;7630:62;-1:-1:-1;;;7708:18:1;;;7701:32;7750:19;;42903:68:0;7377:398:1;42903:68:0;-1:-1:-1;;;;;42984:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43036:32;;1596:25:1;;;43036:32:0;;1569:18:1;43036:32:0;;;;;;;42696:380;;;:::o;43367:453::-;43502:24;43529:25;43539:5;43546:7;43529:9;:25::i;:::-;43502:52;;-1:-1:-1;;43569:16:0;:37;43565:248;;43651:6;43631:16;:26;;43623:68;;;;-1:-1:-1;;;43623:68:0;;7982:2:1;43623:68:0;;;7964:21:1;8021:2;8001:18;;;7994:30;8060:31;8040:18;;;8033:59;8109:18;;43623:68:0;7780:353:1;43623:68:0;43735:51;43744:5;43751:7;43779:6;43760:16;:25;43735:8;:51::i;:::-;43491:329;43367:453;;;:::o;56679:837::-;-1:-1:-1;;;;;56777:18:0;;56769:68;;;;-1:-1:-1;;;56769:68:0;;8340:2:1;56769:68:0;;;8322:21:1;8379:2;8359:18;;;8352:30;8418:34;8398:18;;;8391:62;-1:-1:-1;;;8469:18:1;;;8462:35;8514:19;;56769:68:0;8138:401:1;56769:68:0;-1:-1:-1;;;;;56856:16:0;;56848:64;;;;-1:-1:-1;;;56848:64:0;;8746:2:1;56848:64:0;;;8728:21:1;8785:2;8765:18;;;8758:30;8824:34;8804:18;;;8797:62;-1:-1:-1;;;8875:18:1;;;8868:33;8918:19;;56848:64:0;8544:399:1;56848:64:0;56940:1;56931:6;:10;56923:64;;;;-1:-1:-1;;;56923:64:0;;9150:2:1;56923:64:0;;;9132:21:1;9189:2;9169:18;;;9162:30;9228:34;9208:18;;;9201:62;-1:-1:-1;;;9279:18:1;;;9272:39;9328:19;;56923:64:0;8948:405:1;56923:64:0;57010:13;-1:-1:-1;;;;;57002:21:0;:4;-1:-1:-1;;;;;57002:21:0;;:49;;;;-1:-1:-1;;;;;;57028:23:0;;;;;;:19;:23;;;;;;;;57027:24;57002:49;56998:108;;;57066:40;;-1:-1:-1;;;57066:40:0;;9560:2:1;57066:40:0;;;9542:21:1;9599:2;9579:18;;;9572:30;9638:32;9618:18;;;9611:60;9688:18;;57066:40:0;9358:354:1;56998:108:0;57119:28;57150:24;57168:4;57150:9;:24::i;:::-;57200:23;;57119:55;;-1:-1:-1;;;;57200:23:0;;;;57199:24;:45;;;;-1:-1:-1;57228:16:0;;-1:-1:-1;;;57228:16:0;;;;57227:17;57199:45;:70;;;;;57256:13;-1:-1:-1;;;;;57248:21:0;:4;-1:-1:-1;;;;;57248:21:0;;;57199:70;:98;;;;;57296:1;57273:20;:24;57199:98;57195:153;;;57312:36;57327:20;57312:14;:36::i;:::-;-1:-1:-1;;;;;57405:24:0;;57361:12;57405:24;;;:18;:24;;;;;;57376:4;;57405:24;;57401:45;;;-1:-1:-1;57441:5:0;57401:45;57467:41;57482:4;57488:2;57492:6;57500:7;57467:14;:41::i;:::-;56758:758;;56679:837;;;:::o;13441:98::-;13499:7;13526:5;13530:1;13526;:5;:::i;41583:675::-;-1:-1:-1;;;;;41667:21:0;;41659:67;;;;-1:-1:-1;;;41659:67:0;;10141:2:1;41659:67:0;;;10123:21:1;10180:2;10160:18;;;10153:30;10219:34;10199:18;;;10192:62;-1:-1:-1;;;10270:18:1;;;10263:31;10311:19;;41659:67:0;9939:397:1;41659:67:0;41739:49;41760:7;41777:1;41781:6;41739:20;:49::i;:::-;-1:-1:-1;;;;;41826:18:0;;41801:22;41826:18;;;;;;;;;;;41863:24;;;;41855:71;;;;-1:-1:-1;;;41855:71:0;;10543:2:1;41855:71:0;;;10525:21:1;10582:2;10562:18;;;10555:30;10621:34;10601:18;;;10594:62;-1:-1:-1;;;10672:18:1;;;10665:32;10714:19;;41855:71:0;10341:398:1;41855:71:0;-1:-1:-1;;;;;41962:18:0;;:9;:18;;;;;;;;;;;41983:23;;;41962:44;;42101:12;:22;;;;;;;42152:37;1596:25:1;;;41962:9:0;;:18;42152:37;;1569:18:1;42152:37:0;;;;;;;42202:48;42222:7;42239:1;42243:6;42202:19;:48::i;27034:132::-;26942:6;;-1:-1:-1;;;;;26942:6:0;25500:10;27098:23;27090:68;;;;-1:-1:-1;;;27090:68:0;;10946:2:1;27090:68:0;;;10928:21:1;;;10965:18;;;10958:30;11024:34;11004:18;;;10997:62;11076:18;;27090:68:0;10744:356:1;28136:191:0;28229:6;;;-1:-1:-1;;;;;28246:17:0;;;-1:-1:-1;;;;;;28246:17:0;;;;;;;28279:40;;28229:6;;;28246:17;28229:6;;28279:40;;28210:16;;28279:40;28199:128;28136:191;:::o;12685:98::-;12743:7;12770:5;12774:1;12770;:5;:::i;12304:98::-;12362:7;12389:5;12393:1;12389;:5;:::i;55619:601::-;47797:16;:23;;-1:-1:-1;;;;47797:23:0;-1:-1:-1;;;47797:23:0;;;;55716:27:::1;:20:::0;55741:1:::1;55716:24;:27::i;:::-;55701:42:::0;-1:-1:-1;55754:17:0::1;55774:30;:20:::0;55701:42;55774:24:::1;:30::i;:::-;55754:50:::0;-1:-1:-1;55842:21:0::1;55874:22;55891:4:::0;55874:16:::1;:22::i;:::-;55907:18;55928:41;:21;55954:14:::0;55928:25:::1;:41::i;:::-;55907:62;;56002:60;56019:4;56034:15;56052:9;56002:8;:60::i;:::-;56170:14;::::0;56073:139:::1;::::0;-1:-1:-1;;;56073:139:0;;56146:4:::1;56073:139;::::0;::::1;11446:34:1::0;11496:18;;;11489:34;;;56164:1:0::1;11539:18:1::0;;;11532:34;;;11582:18;;;11575:34;-1:-1:-1;;;;;56170:14:0;;::::1;11625:19:1::0;;;11618:44;56186:15:0::1;11678:19:1::0;;;11671:35;56073:15:0::1;:31:::0;;::::1;::::0;::::1;::::0;56112:10;;11380:19:1;;56073:139:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;47843:16:0;:24;;-1:-1:-1;;;;47843:24:0;;;-1:-1:-1;;;;;;55619:601:0:o;57524:916::-;57636:7;57631:41;;57658:14;49727:7;;;49713:11;:21;49765:13;;;49745:17;:33;49809:13;;;49789:17;:33;-1:-1:-1;49877:11:0;;;;49899:17;;;;49927;;;49850:14;49955:18;49662:319;57658:14;-1:-1:-1;;;;;57697:29:0;;;;;;:21;:29;;;;;;;;:66;;;;-1:-1:-1;;;;;;57731:32:0;;;;;;:21;:32;;;;;;;;57730:33;57697:66;57693:677;;;57780:48;57802:6;57810:9;57821:6;57780:21;:48::i;:::-;57693:677;;;-1:-1:-1;;;;;57851:29:0;;;;;;:21;:29;;;;;;;;57850:30;:66;;;;-1:-1:-1;;;;;;57884:32:0;;;;;;:21;:32;;;;;;;;57850:66;57846:524;;;57933:46;57953:6;57961:9;57972:6;57933:19;:46::i;57846:524::-;-1:-1:-1;;;;;58002:29:0;;;;;;:21;:29;;;;;;;;58001:30;:67;;;;-1:-1:-1;;;;;;58036:32:0;;;;;;:21;:32;;;;;;;;58035:33;58001:67;57997:373;;;58085:44;58103:6;58111:9;58122:6;58085:17;:44::i;57997:373::-;-1:-1:-1;;;;;58151:29:0;;;;;;:21;:29;;;;;;;;:65;;;;-1:-1:-1;;;;;;58184:32:0;;;;;;:21;:32;;;;;;;;58151:65;58147:223;;;58233:48;58255:6;58263:9;58274:6;58233:21;:48::i;58147:223::-;58314:44;58332:6;58340:9;58351:6;58314:17;:44::i;:::-;58395:7;58390:42;;58417:15;50047:11;;50037:7;:21;50085:17;;50069:13;:33;50129:17;;50113:13;:33;50174:18;;50157:14;:35;49993:207;56228:423;56318:16;;;56332:1;56318:16;;;;;;;;56294:21;;56318:16;;;;;;;;;;-1:-1:-1;56318:16:0;56294:40;;56363:4;56345;56350:1;56345:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;56345:23:0;;;-1:-1:-1;;;;;56345:23:0;;;;;56389:15;-1:-1:-1;;;;;56389:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56379:4;56384:1;56379:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;56379:32:0;;;-1:-1:-1;;;;;56379:32:0;;;;;56424:62;56441:4;56456:15;56474:11;56424:8;:62::i;:::-;56499:144;;-1:-1:-1;;;56499:144:0;;-1:-1:-1;;;;;56499:15:0;:66;;;;:144;;56580:11;;56593:1;;56596:4;;56610;;56617:15;;56499:144;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56283:368;56228:423;:::o;59518:552::-;59622:15;59639:23;59666:16;59684:23;59709:12;59726:19;59737:7;59726:10;:19::i;:::-;-1:-1:-1;;;;;;59774:15:0;;;;;;:7;:15;;;;;;59621:124;;-1:-1:-1;59621:124:0;;-1:-1:-1;59621:124:0;;-1:-1:-1;59621:124:0;-1:-1:-1;59621:124:0;;-1:-1:-1;59774:28:0;;:15;-1:-1:-1;59794:7:0;59774:19;:28::i;:::-;-1:-1:-1;;;;;59756:15:0;;;;;;:7;:15;;;;;;;;:46;;;;59831:7;:15;;;;:28;;59851:7;59831:19;:28::i;:::-;-1:-1:-1;;;;;59813:15:0;;;;;;;:7;:15;;;;;;:46;;;;59891:18;;;;;;;:39;;59914:15;59891:22;:39::i;:::-;-1:-1:-1;;;;;59870:18:0;;;;;;:7;:18;;;;;:60;59946:18;59956:7;59946:9;:18::i;:::-;59975:27;59987:8;59997:4;59975:11;:27::i;:::-;60035:9;-1:-1:-1;;;;;60018:44:0;60027:6;-1:-1:-1;;;;;60018:44:0;;60046:15;60018:44;;;;1596:25:1;;1584:2;1569:18;;1450:177;60018:44:0;;;;;;;;59610:460;;;;;59518:552;;;:::o;58944:566::-;59046:15;59063:23;59090:16;59108:23;59133:12;59150:19;59161:7;59150:10;:19::i;:::-;-1:-1:-1;;;;;;59198:15:0;;;;;;:7;:15;;;;;;59045:124;;-1:-1:-1;59045:124:0;;-1:-1:-1;59045:124:0;;-1:-1:-1;59045:124:0;-1:-1:-1;59045:124:0;;-1:-1:-1;59198:28:0;;:15;-1:-1:-1;59045:124:0;59198:19;:28::i;:::-;-1:-1:-1;;;;;59180:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;59258:18;;;;;:7;:18;;;;;:39;;59281:15;59258:22;:39::i;:::-;-1:-1:-1;;;;;59237:18:0;;;;;;:7;:18;;;;;;;;:60;;;;59329:7;:18;;;;:39;;59352:15;59329:22;:39::i;58448:488::-;58548:15;58565:23;58592:16;58610:23;58635:12;58652:19;58663:7;58652:10;:19::i;:::-;-1:-1:-1;;;;;;58700:15:0;;;;;;:7;:15;;;;;;58547:124;;-1:-1:-1;58547:124:0;;-1:-1:-1;58547:124:0;;-1:-1:-1;58547:124:0;-1:-1:-1;58547:124:0;;-1:-1:-1;58700:28:0;;:15;-1:-1:-1;58547:124:0;58700:19;:28::i;60078:620::-;60182:15;60199:23;60226:16;60244:23;60269:12;60286:19;60297:7;60286:10;:19::i;:::-;-1:-1:-1;;;;;;60334:15:0;;;;;;:7;:15;;;;;;60181:124;;-1:-1:-1;60181:124:0;;-1:-1:-1;60181:124:0;;-1:-1:-1;60181:124:0;-1:-1:-1;60181:124:0;;-1:-1:-1;60334:28:0;;:15;-1:-1:-1;60354:7:0;60334:19;:28::i;:::-;-1:-1:-1;;;;;60316:15:0;;;;;;:7;:15;;;;;;;;:46;;;;60391:7;:15;;;;:28;;60411:7;60391:19;:28::i;52214:450::-;52273:7;52282;52291;52300;52309;52318;52327;52348:23;52373:12;52387:16;52407:20;52419:7;52407:11;:20::i;:::-;52347:80;;;;;;52439:15;52456:23;52481:12;52495:16;52515:48;52527:7;52536:4;52542:8;52552:10;:8;:10::i;:::-;52515:11;:48::i;:::-;52438:125;;;;;;;;52582:7;52591:15;52608:4;52614:8;52624:15;52641:4;52647:8;52574:82;;;;;;;;;;;;;;;;;;;;;52214:450;;;;;;;;;:::o;54313:541::-;54368:19;54390:10;:8;:10::i;:::-;54368:32;;54439:83;54467:54;54509:11;54467:37;54498:5;54467:26;54479:13;;54467:7;:11;;:26;;;;:::i;:::-;:30;;:37::i;:::-;:41;;:54::i;:::-;54447:14;;-1:-1:-1;;;;;54447:14:0;54439:23;;;;:7;:23;;;;;;;:27;:83::i;:::-;54421:14;;-1:-1:-1;;;;;54421:14:0;54413:23;;;;:7;:23;;;;;:109;54599:13;;54559:66;;54587:37;;54618:5;;54587:26;;:7;;:11;:26::i;:37::-;54567:14;;-1:-1:-1;;;;;54567:14:0;54559:23;;;;:7;:23;;;;;;;:27;:66::i;:::-;54541:14;;-1:-1:-1;;;;;54541:14:0;54533:23;;;;:7;:23;;;;;:92;54702:13;;54663:82;;54690:54;;54732:11;;54690:37;;54721:5;;54690:26;;:7;;:11;:26::i;:54::-;54679:4;54663:22;;;;:7;:22;;;;;;;:26;:82::i;:::-;54654:4;54638:22;;;;:7;:22;;;;;:107;54820:13;;54781:65;;54808:37;;54839:5;;54808:26;;:7;;:11;:26::i;:37::-;54797:4;54781:22;;;;:7;:22;;;;;;;:26;:65::i;:::-;54772:4;54756:22;;;;:7;:22;;;;;:90;-1:-1:-1;;54313:541:0:o;54158:147::-;54236:7;;:17;;54248:4;54236:11;:17::i;:::-;54226:7;:27;54277:10;;:20;;54292:4;54277:14;:20::i;:::-;54264:10;:33;-1:-1:-1;;54158:147:0:o;52672:325::-;52732:7;52741;52750;52770:12;52785:31;52810:5;52785:20;52797:7;;52785;:11;;:20;;;;:::i;:31::-;52770:46;;52827:16;52846:38;52878:5;52846:27;52858:14;;52846:7;:11;;:27;;;;:::i;:38::-;52827:57;-1:-1:-1;52895:23:0;52921:17;:7;52933:4;52921:11;:17::i;:::-;52895:43;52974:4;;-1:-1:-1;52980:8:0;;-1:-1:-1;52672:325:0;;-1:-1:-1;;;52672:325:0:o;53005:426::-;53118:7;;;;;53183:24;:7;53195:11;53183;:24::i;:::-;53165:42;-1:-1:-1;53218:12:0;53233:21;:4;53242:11;53233:8;:21::i;:::-;53218:36;-1:-1:-1;53265:16:0;53284:25;:8;53297:11;53284:12;:25::i;:::-;53265:44;-1:-1:-1;53320:23:0;53346:17;:7;53358:4;53346:11;:17::i;:::-;53382:7;;;;-1:-1:-1;53408:4:0;;-1:-1:-1;53408:4:0;-1:-1:-1;53005:426:0;;-1:-1:-1;;;;;;53005:426:0:o;13042:98::-;13100:7;13127:5;13131:1;13127;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2093:180::-;2152:6;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;-1:-1:-1;2244:23:1;;2093:180;-1:-1:-1;2093:180:1:o;2467:247::-;2526:6;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2634:9;2621:23;2653:31;2678:5;2653:31;:::i;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3021:60;2927:160;;;:::o;3092:315::-;3157:6;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;3273:9;3260:23;3292:31;3317:5;3292:31;:::i;:::-;3342:5;-1:-1:-1;3366:35:1;3397:2;3382:18;;3366:35;:::i;:::-;3356:45;;3092:315;;;;;:::o;3665:316::-;3742:6;3750;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;-1:-1:-1;;3850:23:1;;;3920:2;3905:18;;3892:32;;-1:-1:-1;3971:2:1;3956:18;;;3943:32;;3665:316;-1:-1:-1;3665:316:1:o;3986:388::-;4054:6;4062;4115:2;4103:9;4094:7;4090:23;4086:32;4083:52;;;4131:1;4128;4121:12;4083:52;4170:9;4157:23;4189:31;4214:5;4189:31;:::i;:::-;4239:5;-1:-1:-1;4296:2:1;4281:18;;4268:32;4309:33;4268:32;4309:33;:::i;:::-;4361:7;4351:17;;;3986:388;;;;;:::o;4379:180::-;4435:6;4488:2;4476:9;4467:7;4463:23;4459:32;4456:52;;;4504:1;4501;4494:12;4456:52;4527:26;4543:9;4527:26;:::i;4564:380::-;4643:1;4639:12;;;;4686;;;4707:61;;4761:4;4753:6;4749:17;4739:27;;4707:61;4814:2;4806:6;4803:14;4783:18;4780:38;4777:161;;4860:10;4855:3;4851:20;4848:1;4841:31;4895:4;4892:1;4885:15;4923:4;4920:1;4913:15;4777:161;;4564:380;;;:::o;5360:127::-;5421:10;5416:3;5412:20;5409:1;5402:31;5452:4;5449:1;5442:15;5476:4;5473:1;5466:15;5492:125;5557:9;;;5578:10;;;5575:36;;;5591:18;;:::i;5622:127::-;5683:10;5678:3;5674:20;5671:1;5664:31;5714:4;5711:1;5704:15;5738:4;5735:1;5728:15;5754:128;5821:9;;;5842:11;;;5839:37;;;5856:18;;:::i;5887:127::-;5948:10;5943:3;5939:20;5936:1;5929:31;5979:4;5976:1;5969:15;6003:4;6000:1;5993:15;6019:135;6058:3;6079:17;;;6076:43;;6099:18;;:::i;:::-;-1:-1:-1;6146:1:1;6135:13;;6019:135::o;9717:217::-;9757:1;9783;9773:132;;9827:10;9822:3;9818:20;9815:1;9808:31;9862:4;9859:1;9852:15;9890:4;9887:1;9880:15;9773:132;-1:-1:-1;9919:9:1;;9717:217::o;11717:306::-;11805:6;11813;11821;11874:2;11862:9;11853:7;11849:23;11845:32;11842:52;;;11890:1;11887;11880:12;11842:52;11919:9;11913:16;11903:26;;11969:2;11958:9;11954:18;11948:25;11938:35;;12013:2;12002:9;11998:18;11992:25;11982:35;;11717:306;;;;;:::o;12160:251::-;12230:6;12283:2;12271:9;12262:7;12258:23;12254:32;12251:52;;;12299:1;12296;12289:12;12251:52;12331:9;12325:16;12350:31;12375:5;12350:31;:::i;12416:980::-;12678:4;12726:3;12715:9;12711:19;12757:6;12746:9;12739:25;12783:2;12821:6;12816:2;12805:9;12801:18;12794:34;12864:3;12859:2;12848:9;12844:18;12837:31;12888:6;12923;12917:13;12954:6;12946;12939:22;12992:3;12981:9;12977:19;12970:26;;13031:2;13023:6;13019:15;13005:29;;13052:1;13062:195;13076:6;13073:1;13070:13;13062:195;;;13141:13;;-1:-1:-1;;;;;13137:39:1;13125:52;;13232:15;;;;13197:12;;;;13173:1;13091:9;13062:195;;;-1:-1:-1;;;;;;;13313:32:1;;;;13308:2;13293:18;;13286:60;-1:-1:-1;;;13377:3:1;13362:19;13355:35;13274:3;12416:980;-1:-1:-1;;;12416:980:1:o;13401:168::-;13474:9;;;13505;;13522:15;;;13516:22;;13502:37;13492:71;;13543:18;;:::i

Swarm Source

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