ETH Price: $2,479.20 (-7.74%)

Token

Onedation (OND)
 

Overview

Max Total Supply

100,000,000,000 OND

Holders

31

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 7 Decimals)

Balance
157,588,398.7172309 OND

Value
$0.00
0xdd694d29110025b11b5650836ff4e398c73a8c91
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:
Onedation

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-21
*/

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

//
//░█████╗░███╗░░██╗███████╗██████╗░░█████╗░████████╗██╗░█████╗░███╗░░██╗
//██╔══██╗████╗░██║██╔════╝██╔══██╗██╔══██╗╚══██╔══╝██║██╔══██╗████╗░██║
//██║░░██║██╔██╗██║█████╗░░██║░░██║███████║░░░██║░░░██║██║░░██║██╔██╗██║
//██║░░██║██║╚████║██╔══╝░░██║░░██║██╔══██║░░░██║░░░██║██║░░██║██║╚████║
//╚█████╔╝██║░╚███║███████╗██████╔╝██║░░██║░░░██║░░░██║╚█████╔╝██║░╚███║
//░╚════╝░╚═╝░░╚══╝╚══════╝╚═════╝░╚═╝░░╚═╝░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝

//████████╗░█████╗░██╗░░██╗███████╗███╗░░██╗
//╚══██╔══╝██╔══██╗██║░██╔╝██╔════╝████╗░██║
//░░░██║░░░██║░░██║█████═╝░█████╗░░██╔██╗██║
//░░░██║░░░██║░░██║██╔═██╗░██╔══╝░░██║╚████║
//░░░██║░░░╚█████╔╝██║░╚██╗███████╗██║░╚███║
//░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚══╝



// https://t.me/Onedation
// 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapRouter02 is IUniswapRouter01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

abstract contract Context {
    //function _msgSender() internal view virtual returns (address payable) {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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);
    }
}

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 functionCall(target, data, "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"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason 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 {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            // Return data is optional
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) public _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 `sender` to `recipient`.
     *
     * 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;
        }
        _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;
        _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;
        }
        _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 {}
}

interface uniswapV2Pair {
    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );
}

contract Onedation is ERC20, Ownable {
    address payable public marketingFeeAddress;
    address payable public devFeeAddress;

    address public immutable deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public maxWallet;
    uint16 constant maxFeeLimit = 900;

    bool public tradingActive;

    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public isExcludedFromMaxWallet;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _devFee;
    uint256 private _previousDevFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee;

    uint256 private _marketingFee;
    uint256 private _previousMarketingFee;

    uint256 private _burnFee;
    uint256 private _previousBurnFee;

    uint16 public buyDevFee = 50;
    uint16 public buyLiquidityFee = 0;
    uint16 public buyMarketingFee = 50;
    uint16 public buyBurnFee = 0;

    uint16 public sellDevFee = 850;
    uint16 public sellLiquidityFee = 0;
    uint16 public sellMarketingFee = 50;
    uint16 public sellBurnFee = 0;

    uint16 public transferDevFee = 0;
    uint16 public transferLiquidityFee = 0;
    uint16 public transferMarketingFee = 0;
    uint16 public transferBurnFee = 0;

    uint256 private _liquidityTokensToSwap;
    uint256 private _marketingFeeTokensToSwap;
    uint256 private _devFeeTokens;
    uint256 private _burnFeeTokens;

    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 public minimumFeeTokensToTake;

    IUniswapRouter02 public immutable uniswapRouter;
    address public immutable uniswapPair;

    bool inSwapAndLiquify;

    address public bridge = address(0x123);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() ERC20("Onedation", "OND") {
        _mint(msg.sender, 1e11 * 10**decimals());
        
        marketingFeeAddress = payable(
            0x111111D8C4878480d1A46c539Cc6840883bffc2a
        );
        devFeeAddress = payable(0x111111D8C4878480d1A46c539Cc6840883bffc2a);

        minimumFeeTokensToTake = 1e9 * 10**decimals();
        address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        //address routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        uniswapRouter = IUniswapRouter02(payable(routerAddress));

        uniswapPair = IFactory(uniswapRouter.factory()).createPair(
            address(this),
            uniswapRouter.WETH()
        );

        isExcludedFromFee[_msgSender()] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[marketingFeeAddress] = true;
        isExcludedFromFee[devFeeAddress] = true;
        maxWallet = totalSupply() * 2 / 100;
        _approve(msg.sender, routerAddress, ~uint256(0));
        _setAutomatedMarketMakerPair(uniswapPair, true);
        bridge = 0x27F63B82e68c21452247Ba65b87c4f0Fb7508f44;
        isExcludedFromFee[bridge] = true;
        isExcludedFromMaxWallet[bridge] = true;
    }

    function setBridge(address _bridge) external onlyOwner {
        bridge = _bridge;
        isExcludedFromFee[bridge] = true;
        isExcludedFromMaxWallet[bridge] = true;
    }

    function setMaxWallet(uint256 _maxWallet) external onlyOwner {
        maxWallet = _maxWallet * 10**decimals();
        require(maxWallet > totalSupply() / 100, "Max wallet must be greater than 1%");
    }

    function decimals() public pure override returns (uint8) {
        return 7;
    }

    function bridgeBalance() public view returns (uint256) {
        return _balances[bridge];
    }

    function totalSupply() public view override returns (uint256) {
        return super.totalSupply() - bridgeBalance();
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (account == bridge) {
            return 0;
        }
        return super.balanceOf(account);
    }

    function setTradeStatus(bool status) external onlyOwner {
        tradingActive = status;
    }

    function updateMinimumTokensBeforeFeeTaken(uint256 _minimumFeeTokensToTake)
        external
        onlyOwner
    {
        minimumFeeTokensToTake = _minimumFeeTokensToTake * (10**decimals());
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        onlyOwner
    {
        require(pair != uniswapPair, "The pair cannot be removed");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    function excludeFromFee(address account) external onlyOwner {
        isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        isExcludedFromFee[account] = false;
    }
    
    function excludeFromMaxWallet(address account) external onlyOwner {
        isExcludedFromMaxWallet[account] = true;
    }

    function includeInMaxWallet(address account) external onlyOwner {
        isExcludedFromMaxWallet[account] = false;
    }

    function updateBuyFee(
        uint16 _buyDevFee,
        uint16 _buyLiquidityFee,
        uint16 _buyMarketingFee,
        uint16 _buyBurnFee
    ) external onlyOwner {
        buyDevFee = _buyDevFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyBurnFee = _buyBurnFee;
        require(
            _buyDevFee + _buyLiquidityFee + _buyMarketingFee + _buyBurnFee <=
                maxFeeLimit,
            "Must keep fees below 90%"
        );
    }

    function updateSellFee(
        uint16 _sellDevFee,
        uint16 _sellLiquidityFee,
        uint16 _sellMarketingFee,
        uint16 _sellBurnFee
    ) external onlyOwner {
        sellDevFee = _sellDevFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellBurnFee = _sellBurnFee;
        require(
            _sellDevFee + _sellLiquidityFee + _sellMarketingFee + _sellBurnFee <=
                maxFeeLimit,
            "Must keep fees <= 90%"
        );
    }

    function updateTransferFee(
        uint16 _transferDevFee,
        uint16 _transferLiquidityFee,
        uint16 _transferMarketingFee,
        uint16 _transferBurnFee
    ) external onlyOwner {
        transferDevFee = _transferDevFee;
        transferLiquidityFee = _transferLiquidityFee;
        transferMarketingFee = _transferMarketingFee;
        transferBurnFee = _transferBurnFee;
        require(
            _transferDevFee +
                _transferLiquidityFee +
                _transferMarketingFee + _transferBurnFee <= maxFeeLimit,
            "Must keep fees <= 90%"
        );
    }

    function updateMarketingFeeAddress(address a) external onlyOwner {
        require(a != address(0), "Can't set 0");
        marketingFeeAddress = payable(a);
    }

    function updateDevAddress(address a) external onlyOwner {
        require(a != address(0), "Can't set 0");
        devFeeAddress = payable(a);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (!tradingActive) {
            require(
                isExcludedFromFee[from] || isExcludedFromFee[to],
                "Trading is not active yet."
            );
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumFeeTokensToTake;

        // Take Fee
        if (
            !inSwapAndLiquify &&
            overMinimumTokenBalance &&
            automatedMarketMakerPairs[to]
        ) {
            takeFee();
        }

        removeAllFee();

        // If any account belongs to isExcludedFromFee account then remove the fee
        if (!isExcludedFromFee[from] && !isExcludedFromFee[to]) {
            // High tax period

            // Buy
            if (automatedMarketMakerPairs[from]) {
                _devFee = (amount * buyDevFee) / 1000;
                _liquidityFee = (amount * buyLiquidityFee) / 1000;
                _marketingFee = (amount * buyMarketingFee) / 1000;
                _burnFee = (amount * buyBurnFee) / 1000;
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {

                _devFee = (amount * sellDevFee) / 1000;
                _liquidityFee = (amount * sellLiquidityFee) / 1000;
                _marketingFee = (amount * sellMarketingFee) / 1000;
                _burnFee = (amount * sellBurnFee) / 1000;
            } else {
                _devFee = (amount * transferDevFee) / 1000;
                _liquidityFee = (amount * transferLiquidityFee) / 1000;
                _marketingFee = (amount * transferMarketingFee) / 1000;
                _burnFee = (amount * transferBurnFee) / 1000;
            }
        }

        uint256 _transferAmount = amount -
            _devFee -
            _liquidityFee -
            _marketingFee -
            _burnFee;
        super._transfer(from, to, _transferAmount);
        if (!isExcludedFromFee[from] && !isExcludedFromFee[to] && to != deadWallet && !automatedMarketMakerPairs[to] && !isExcludedFromMaxWallet[to]) {
            require(balanceOf(to) <= maxWallet, "Max wallet limit reached");
        }

        uint256 _feeTotal = _devFee + _liquidityFee + _marketingFee + _burnFee;
        if (_feeTotal > 0) {
            super._transfer(from, address(this), _feeTotal);
            _liquidityTokensToSwap += _liquidityFee;
            _marketingFeeTokensToSwap += _marketingFee;
            _devFeeTokens += _devFee;
            _burnFeeTokens += _burnFee;
        }
        restoreAllFee();
    }

    function removeAllFee() private {
        if (
            _devFee == 0 &&
            _liquidityFee == 0 &&
            _marketingFee == 0 && 
            _burnFee == 0
        ) return;

        _previousDevFee = _devFee;
        _previousLiquidityFee = _liquidityFee;
        _previousMarketingFee = _marketingFee;
        _previousBurnFee = _burnFee;

        _devFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _burnFee = 0;
    }

    function restoreAllFee() private {
        _devFee = _previousDevFee;
        _liquidityFee = _previousLiquidityFee;
        _marketingFee = _previousMarketingFee;
        _burnFee = _previousBurnFee;
    }

    function takeFee() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensTaken = _liquidityTokensToSwap +
            _marketingFeeTokensToSwap +
            _devFeeTokens;
        if (totalTokensTaken == 0 || contractBalance - _burnFeeTokens < totalTokensTaken) {
            return;
        }

        uint256 tokensForLiquidity = _liquidityTokensToSwap / 2;
        uint256 initialETHBalance = address(this).balance;
        uint256 toSwap = tokensForLiquidity +
            _marketingFeeTokensToSwap +
            _devFeeTokens;
        swapTokensForETH(toSwap);
        uint256 ethBalance = address(this).balance - initialETHBalance;

        uint256 ethForMarketing = (ethBalance * _marketingFeeTokensToSwap) /
            toSwap;
        uint256 ethForLiquidity = (ethBalance * tokensForLiquidity) / toSwap;
        uint256 ethForDev = (ethBalance * _devFeeTokens) / toSwap;

        if (tokensForLiquidity > 0 && ethForLiquidity > 0) {
            addLiquidity(tokensForLiquidity, ethForLiquidity);
        }
        bool success;

        (success, ) = address(marketingFeeAddress).call{
            value: ethForMarketing,
            gas:50000
        }("");
        (success, ) = address(devFeeAddress).call{
            value: ethForDev,
            gas:50000
        }("");

        // send burn tokens to dead wallet
        if (_burnFeeTokens > 0) {
            super._transfer(address(this), deadWallet, _burnFeeTokens);
        }

        _liquidityTokensToSwap = 0;
        _marketingFeeTokensToSwap = 0;
        _devFeeTokens = 0;
        _burnFeeTokens = 0;
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();
        _approve(address(this), address(uniswapRouter), tokenAmount);
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapRouter), tokenAmount);
        uniswapRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    receive() external payable {}
 
    function withdrawETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function withdrawTokens(IERC20 tokenAddress, address walletAddress)
        external
        onlyOwner
    {
        require(
            walletAddress != address(0),
            "walletAddress can't be 0 address"
        );
        SafeERC20.safeTransfer(
            tokenAddress,
            walletAddress,
            tokenAddress.balanceOf(address(this))
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeeAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumFeeTokensToTake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setTradeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferDevFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","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":[],"name":"transferLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_buyDevFee","type":"uint16"},{"internalType":"uint16","name":"_buyLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"_buyMarketingFee","type":"uint16"},{"internalType":"uint16","name":"_buyBurnFee","type":"uint16"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"updateMarketingFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumFeeTokensToTake","type":"uint256"}],"name":"updateMinimumTokensBeforeFeeTaken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellDevFee","type":"uint16"},{"internalType":"uint16","name":"_sellLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"_sellMarketingFee","type":"uint16"},{"internalType":"uint16","name":"_sellBurnFee","type":"uint16"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_transferDevFee","type":"uint16"},{"internalType":"uint16","name":"_transferLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"_transferMarketingFee","type":"uint16"},{"internalType":"uint16","name":"_transferBurnFee","type":"uint16"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletAddress","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405261dead608052601480546001600160c01b0319166c32000003520000003200000032179055601b805462012300610100600160a81b03199091161790553480156200004e57600080fd5b506040518060400160405280600981526020016827b732b230ba34b7b760b91b8152506040518060400160405280600381526020016213d39160ea1b81525081600390816200009e919062000742565b506004620000ad828262000742565b505050620000ca620000c4620003e660201b60201c565b620003ea565b620000f433620000dd6007600a62000923565b620000ee9064174876e8006200093b565b6200043c565b6006805473111111d8c4878480d1a46c539cc6840883bffc2a6001600160a01b031991821681179092556007805490911690911781556200013790600a62000923565b6200014790633b9aca006200093b565b601a55737a250d5630b4cf539739df2c5dacb4c659f2488d60a08190526040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c7919062000955565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d919062000955565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000955565b6001600160a01b0390811660c052336000908152600a60205260408082208054600160ff199182168117909255308452828420805482168317905560065485168452828420805482168317905560075490941683529120805490921617905560646200031c62000525565b620003299060026200093b565b62000335919062000980565b6008556200034733826000196200056b565b60c0516001600160a01b03166000908152601960205260409020805460ff1916600117905550601b8054610100600160a81b0319167427f63b82e68c21452247ba65b87c4f0fb7508f4400178082556001600160a01b036101009182900481166000908152600a60209081526040808320805460ff1990811660019081179092559654959095049093168252600b9052208054909216179055620009cf565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620004985760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620004ac9190620009a3565b90915550506001600160a01b03821660009081526020819052604081208054839290620004db908490620009a3565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b601b5461010090046001600160a01b03166000908152602081905260408120546200055a6200069860201b620017051760201c565b620005669190620009b9565b905090565b6001600160a01b038316620005cf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200048f565b6001600160a01b038216620006325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200048f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b60025490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006c957607f821691505b602082108103620006ea57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200069357600081815260208120601f850160051c81016020861015620007195750805b601f850160051c820191505b818110156200073a5782815560010162000725565b505050505050565b81516001600160401b038111156200075e576200075e6200069e565b62000776816200076f8454620006b4565b84620006f0565b602080601f831160018114620007ae5760008415620007955750858301515b600019600386901b1c1916600185901b1785556200073a565b600085815260208120601f198616915b82811015620007df57888601518255948401946001909101908401620007be565b5085821015620007fe5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008655781600019048211156200084957620008496200080e565b808516156200085757918102915b93841c939080029062000829565b509250929050565b6000826200087e575060016200091d565b816200088d575060006200091d565b8160018114620008a65760028114620008b157620008d1565b60019150506200091d565b60ff841115620008c557620008c56200080e565b50506001821b6200091d565b5060208310610133831016604e8410600b8410161715620008f6575081810a6200091d565b62000902838362000824565b80600019048211156200091957620009196200080e565b0290505b92915050565b60006200093460ff8416836200086d565b9392505050565b80820281158282048414176200091d576200091d6200080e565b6000602082840312156200096857600080fd5b81516001600160a01b03811681146200093457600080fd5b6000826200099e57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200091d576200091d6200080e565b818103818111156200091d576200091d6200080e565b60805160a05160c051612db762000a37600039600081816109b501526112c401526000818161070801528181612468015281816125210152818161255d015281816125d701526125fe01526000818161077f01528181611c8c01526120c40152612db76000f3fe60806040526004361061036f5760003560e01c806385c5b319116101c6578063bbc0c742116100f7578063e71dc3f511610095578063f11a24d31161006f578063f11a24d314610aa9578063f2fde38b14610aca578063f637434214610aea578063f8b45b0514610b0c57600080fd5b8063e71dc3f514610a42578063e78cea9214610a64578063ea2f0b3714610a8957600080fd5b8063c85817f9116100d1578063c85817f9146109d7578063dc9c30ca146109ed578063dd62ed3e14610a0d578063e086e5ec14610a2d57600080fd5b8063bbc0c74214610969578063c090709914610983578063c816841b146109a357600080fd5b80639c3b4fdc11610164578063a522ad251161013e578063a522ad25146108d7578063a9059cbb146108f7578063adb873bd14610917578063b62496f51461093957600080fd5b80639c3b4fdc1461087a578063a0d82dc514610895578063a457c2d7146108b757600080fd5b806392136913116101a0578063921369131461080157806395d89b41146108235780639a7a23d6146108385780639bb19a321461085857600080fd5b806385c5b319146107a15780638da5cb5b146107c35780638dd14802146107e157600080fd5b8063437823ec116102a05780636ebcf6071161023e578063735de9f711610218578063735de9f7146106f65780637bce5a041461072a578063850337621461074d57806385141a771461076d57600080fd5b80636ebcf6071461069457806370a08231146106c1578063715018a6146106e157600080fd5b80635b700d911161027a5780635b700d91146106045780635d0044ca14610624578063660d0af4146106445780636dd3d39f1461066457600080fd5b8063437823ec1461059457806352664423146105b45780635342acb4146105d457600080fd5b8063300ea7821161030d57806339509351116102e757806339509351146105005780633b1f6a01146105205780633f33e90914610552578063434339f31461057257600080fd5b8063300ea782146104a4578063313ce567146104c4578063392d6af7146104e057600080fd5b806318160ddd1161034957806318160ddd1461040a5780631c8a6adc1461042d578063239bda491461046257806323b872dd1461048457600080fd5b8063053e39a31461037b57806306fdde03146103b8578063095ea7b3146103da57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5060065461039b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103c457600080fd5b506103cd610b22565b6040516103af919061287c565b3480156103e657600080fd5b506103fa6103f53660046128c4565b610bb4565b60405190151581526020016103af565b34801561041657600080fd5b5061041f610bce565b6040519081526020016103af565b34801561043957600080fd5b5060145461044f90600160b01b900461ffff1681565b60405161ffff90911681526020016103af565b34801561046e57600080fd5b5061048261047d366004612907565b610c00565b005b34801561049057600080fd5b506103fa61049f36600461295b565b610d04565b3480156104b057600080fd5b506104826104bf3660046129aa565b610d2a565b3480156104d057600080fd5b50604051600781526020016103af565b3480156104ec57600080fd5b506104826104fb366004612907565b610d67565b34801561050c57600080fd5b506103fa61051b3660046128c4565b610e56565b34801561052c57600080fd5b50601b5461010090046001600160a01b031660009081526020819052604090205461041f565b34801561055e57600080fd5b5061048261056d3660046129c7565b610e78565b34801561057e57600080fd5b5060145461044f90600160801b900461ffff1681565b3480156105a057600080fd5b506104826105af3660046129c7565b610ec3565b3480156105c057600080fd5b506104826105cf3660046129e4565b610f11565b3480156105e057600080fd5b506103fa6105ef3660046129c7565b600a6020526000908152604090205460ff1681565b34801561061057600080fd5b5061048261061f3660046129c7565b610f57565b34801561063057600080fd5b5061048261063f3660046129e4565b610fa5565b34801561065057600080fd5b5061048261065f3660046129c7565b61105a565b34801561067057600080fd5b506103fa61067f3660046129c7565b600b6020526000908152604090205460ff1681565b3480156106a057600080fd5b5061041f6106af3660046129c7565b60006020819052908152604090205481565b3480156106cd57600080fd5b5061041f6106dc3660046129c7565b6110ea565b3480156106ed57600080fd5b5061048261112e565b34801561070257600080fd5b5061039b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073657600080fd5b5060145461044f90640100000000900461ffff1681565b34801561075957600080fd5b506104826107683660046129c7565b611164565b34801561077957600080fd5b5061039b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ad57600080fd5b5060145461044f90600160a01b900461ffff1681565b3480156107cf57600080fd5b506005546001600160a01b031661039b565b3480156107ed57600080fd5b506104826107fc3660046129c7565b6111f4565b34801561080d57600080fd5b5060145461044f90600160601b900461ffff1681565b34801561082f57600080fd5b506103cd611289565b34801561084457600080fd5b506104826108533660046129fd565b611298565b34801561086457600080fd5b5060145461044f90600160901b900461ffff1681565b34801561088657600080fd5b5060145461044f9061ffff1681565b3480156108a157600080fd5b5060145461044f90600160401b900461ffff1681565b3480156108c357600080fd5b506103fa6108d23660046128c4565b61136f565b3480156108e357600080fd5b506104826108f2366004612a36565b6113f5565b34801561090357600080fd5b506103fa6109123660046128c4565b6114ea565b34801561092357600080fd5b5060145461044f90600160701b900461ffff1681565b34801561094557600080fd5b506103fa6109543660046129c7565b60196020526000908152604090205460ff1681565b34801561097557600080fd5b506009546103fa9060ff1681565b34801561098f57600080fd5b5060075461039b906001600160a01b031681565b3480156109af57600080fd5b5061039b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109e357600080fd5b5061041f601a5481565b3480156109f957600080fd5b50610482610a08366004612907565b6114f8565b348015610a1957600080fd5b5061041f610a28366004612a36565b611594565b348015610a3957600080fd5b506104826115bf565b348015610a4e57600080fd5b5060145461044f90600160301b900461ffff1681565b348015610a7057600080fd5b50601b5461039b9061010090046001600160a01b031681565b348015610a9557600080fd5b50610482610aa43660046129c7565b611622565b348015610ab557600080fd5b5060145461044f9062010000900461ffff1681565b348015610ad657600080fd5b50610482610ae53660046129c7565b61166d565b348015610af657600080fd5b5060145461044f90600160501b900461ffff1681565b348015610b1857600080fd5b5061041f60085481565b606060038054610b3190612a64565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5d90612a64565b8015610baa5780601f10610b7f57610100808354040283529160200191610baa565b820191906000526020600020905b815481529060010190602001808311610b8d57829003601f168201915b5050505050905090565b600033610bc281858561170b565b60019150505b92915050565b601b5461010090046001600160a01b0316600090815260208190526040812054600254610bfb9190612ab4565b905090565b6005546001600160a01b03163314610c335760405162461bcd60e51b8152600401610c2a90612ac7565b60405180910390fd5b6014805463ffffffff60801b1916600160801b61ffff8781169190910261ffff60901b191691909117600160901b868316021763ffffffff60a01b1916600160a01b8583160261ffff60b01b191617600160b01b918416919091021790556103848183610ca08688612afc565b610caa9190612afc565b610cb49190612afc565b61ffff161115610cfe5760405162461bcd60e51b81526020600482015260156024820152744d757374206b6565702066656573203c3d2039302560581b6044820152606401610c2a565b50505050565b600033610d1285828561182f565b610d1d8585856118a3565b60019150505b9392505050565b6005546001600160a01b03163314610d545760405162461bcd60e51b8152600401610c2a90612ac7565b6009805460ff1916911515919091179055565b6005546001600160a01b03163314610d915760405162461bcd60e51b8152600401610c2a90612ac7565b6014805461ffff86811663ffffffff199092169190911762010000868316021767ffffffff0000000019166401000000008583160267ffff000000000000191617600160301b918416919091021790556103848183610df08688612afc565b610dfa9190612afc565b610e049190612afc565b61ffff161115610cfe5760405162461bcd60e51b815260206004820152601860248201527f4d757374206b65657020666565732062656c6f772039302500000000000000006044820152606401610c2a565b600033610bc2818585610e698383611594565b610e739190612b1e565b61170b565b6005546001600160a01b03163314610ea25760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6005546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6005546001600160a01b03163314610f3b5760405162461bcd60e51b8152600401610c2a90612ac7565b610f476007600a612c15565b610f519082612c24565b601a5550565b6005546001600160a01b03163314610f815760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6005546001600160a01b03163314610fcf5760405162461bcd60e51b8152600401610c2a90612ac7565b610fdb6007600a612c15565b610fe59082612c24565b6008556064610ff2610bce565b610ffc9190612c3b565b600854116110575760405162461bcd60e51b815260206004820152602260248201527f4d61782077616c6c6574206d7573742062652067726561746572207468616e20604482015261312560f01b6064820152608401610c2a565b50565b6005546001600160a01b031633146110845760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b0381166110c85760405162461bcd60e51b815260206004820152600b60248201526a043616e27742073657420360ac1b6044820152606401610c2a565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b601b546000906001600160a01b0361010090910481169083160361111057506000919050565b6001600160a01b038216600090815260208190526040902054610bc8565b6005546001600160a01b031633146111585760405162461bcd60e51b8152600401610c2a90612ac7565b6111626000611e37565b565b6005546001600160a01b0316331461118e5760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b0381166111d25760405162461bcd60e51b815260206004820152600b60248201526a043616e27742073657420360ac1b6044820152606401610c2a565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610c2a90612ac7565b601b8054610100600160a81b0319166101006001600160a01b0393841681029190911780835581900483166000908152600a60209081526040808320805460ff1990811660019081179092559554949094049095168252600b90529290922080549091169091179055565b606060048054610b3190612a64565b6005546001600160a01b031633146112c25760405162461bcd60e51b8152600401610c2a90612ac7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113435760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610c2a565b6001600160a01b0382166000908152601960205260409020805460ff19168215151790555050565b5050565b6000338161137d8286611594565b9050838110156113dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c2a565b6113ea828686840361170b565b506001949350505050565b6005546001600160a01b0316331461141f5760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b0381166114755760405162461bcd60e51b815260206004820181905260248201527f77616c6c6574416464726573732063616e2774206265203020616464726573736044820152606401610c2a565b6040516370a0823160e01b815230600482015261136b90839083906001600160a01b038316906370a0823190602401602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190612c5d565b611e89565b600033610bc28185856118a3565b6005546001600160a01b031633146115225760405162461bcd60e51b8152600401610c2a90612ac7565b601480546bffffffff00000000000000001916600160401b61ffff8781169190910261ffff60501b191691909117600160501b868316021763ffffffff60601b1916600160601b8583160261ffff60701b191617600160701b918416919091021790556103848183610ca08688612afc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146115e95760405162461bcd60e51b8152600401610c2a90612ac7565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611057573d6000803e3d6000fd5b6005546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6005546001600160a01b031633146116975760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b0381166116fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2a565b61105781611e37565b60025490565b6001600160a01b03831661176d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2a565b6001600160a01b0382166117ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061183b8484611594565b90506000198114610cfe57818110156118965760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c2a565b610cfe848484840361170b565b60095460ff16611938576001600160a01b0383166000908152600a602052604090205460ff16806118ec57506001600160a01b0382166000908152600a602052604090205460ff165b6119385760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c2a565b6000611943306110ea565b601a54601b549192508210159060ff1615801561195d5750805b801561198157506001600160a01b03841660009081526019602052604090205460ff165b1561198e5761198e611ee0565b611996612116565b6001600160a01b0385166000908152600a602052604090205460ff161580156119d857506001600160a01b0384166000908152600a602052604090205460ff16155b15611bfd576001600160a01b03851660009081526019602052604090205460ff1615611aa0576014546103e890611a139061ffff1685612c24565b611a1d9190612c3b565b600c556014546103e890611a3b9062010000900461ffff1685612c24565b611a459190612c3b565b600e556014546103e890611a6590640100000000900461ffff1685612c24565b611a6f9190612c3b565b6010556014546103e890611a8e90600160301b900461ffff1685612c24565b611a989190612c3b565b601255611bfd565b6001600160a01b03841660009081526019602052604090205460ff1615611b58576014546103e890611add90600160401b900461ffff1685612c24565b611ae79190612c3b565b600c556014546103e890611b0690600160501b900461ffff1685612c24565b611b109190612c3b565b600e556014546103e890611b2f90600160601b900461ffff1685612c24565b611b399190612c3b565b6010556014546103e890611a8e90600160701b900461ffff1685612c24565b6014546103e890611b7490600160801b900461ffff1685612c24565b611b7e9190612c3b565b600c556014546103e890611b9d90600160901b900461ffff1685612c24565b611ba79190612c3b565b600e556014546103e890611bc690600160a01b900461ffff1685612c24565b611bd09190612c3b565b6010556014546103e890611bef90600160b01b900461ffff1685612c24565b611bf99190612c3b565b6012555b6000601254601054600e54600c5487611c169190612ab4565b611c209190612ab4565b611c2a9190612ab4565b611c349190612ab4565b9050611c41868683612171565b6001600160a01b0386166000908152600a602052604090205460ff16158015611c8357506001600160a01b0385166000908152600a602052604090205460ff16155b8015611cc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611ce657506001600160a01b03851660009081526019602052604090205460ff16155b8015611d0b57506001600160a01b0385166000908152600b602052604090205460ff16155b15611d6a57600854611d1c866110ea565b1115611d6a5760405162461bcd60e51b815260206004820152601860248201527f4d61782077616c6c6574206c696d6974207265616368656400000000000000006044820152606401610c2a565b6000601254601054600e54600c54611d829190612b1e565b611d8c9190612b1e565b611d969190612b1e565b90508015611e1157611da9873083612171565b600e5460156000828254611dbd9190612b1e565b909155505060105460168054600090611dd7908490612b1e565b9091555050600c5460178054600090611df1908490612b1e565b909155505060125460188054600090611e0b908490612b1e565b90915550505b611e2e600d54600c55600f54600e55601154601055601354601255565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611edb90849061233f565b505050565b601b805460ff191660011790556000611ef8306110ea565b90506000601754601654601554611f0f9190612b1e565b611f199190612b1e565b9050801580611f3457508060185483611f329190612ab4565b105b15611f4057505061210a565b60006002601554611f519190612c3b565b90506000479050600060175460165484611f6b9190612b1e565b611f759190612b1e565b9050611f8081612411565b6000611f8c8347612ab4565b905060008260165483611f9f9190612c24565b611fa99190612c3b565b9050600083611fb88785612c24565b611fc29190612c3b565b905060008460175485611fd59190612c24565b611fdf9190612c3b565b9050600087118015611ff15750600082115b156120005761200087836125d1565b6006546040516000916001600160a01b03169061c35090869084818181858888f193505050503d8060008114612052576040519150601f19603f3d011682016040523d82523d6000602084013e612057565b606091505b50506007546040519192506001600160a01b03169061c3509084906000818181858888f193505050503d80600081146120ac576040519150601f19603f3d011682016040523d82523d6000602084013e6120b1565b606091505b5050601854909150156120eb576120eb307f0000000000000000000000000000000000000000000000000000000000000000601854612171565b5050600060158190556016819055601781905560185550505050505050505b601b805460ff19169055565b600c541580156121265750600e54155b80156121325750601054155b801561213e5750601254155b1561214557565b600c8054600d55600e8054600f5560108054601155601280546013556000938490559183905582905555565b6001600160a01b0383166121d55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2a565b6001600160a01b0382166122375760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2a565b6001600160a01b038316600090815260208190526040902054818110156122af5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c2a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122e6908490612b1e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161233291815260200190565b60405180910390a3610cfe565b6000612394826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126d79092919063ffffffff16565b805190915015611edb57808060200190518101906123b29190612c76565b611edb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c2a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061244657612446612c93565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e89190612ca9565b816001815181106124fb576124fb612c93565b60200260200101906001600160a01b031690816001600160a01b031681525050612546307f00000000000000000000000000000000000000000000000000000000000000008461170b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061259b908590600090869030904290600401612cc6565b600060405180830381600087803b1580156125b557600080fd5b505af11580156125c9573d6000803e3d6000fd5b505050505050565b6125fc307f00000000000000000000000000000000000000000000000000000000000000008461170b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806126436005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156126ab573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126d09190612d37565b5050505050565b60606126e684846000856126ee565b949350505050565b60608247101561274f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c2a565b6001600160a01b0385163b6127a65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c2a565b600080866001600160a01b031685876040516127c29190612d65565b60006040518083038185875af1925050503d80600081146127ff576040519150601f19603f3d011682016040523d82523d6000602084013e612804565b606091505b509150915061281482828661281f565b979650505050505050565b6060831561282e575081610d23565b82511561283e5782518084602001fd5b8160405162461bcd60e51b8152600401610c2a919061287c565b60005b8381101561287357818101518382015260200161285b565b50506000910152565b602081526000825180602084015261289b816040850160208701612858565b601f01601f19169190910160400192915050565b6001600160a01b038116811461105757600080fd5b600080604083850312156128d757600080fd5b82356128e2816128af565b946020939093013593505050565b803561ffff8116811461290257600080fd5b919050565b6000806000806080858703121561291d57600080fd5b612926856128f0565b9350612934602086016128f0565b9250612942604086016128f0565b9150612950606086016128f0565b905092959194509250565b60008060006060848603121561297057600080fd5b833561297b816128af565b9250602084013561298b816128af565b929592945050506040919091013590565b801515811461105757600080fd5b6000602082840312156129bc57600080fd5b8135610d238161299c565b6000602082840312156129d957600080fd5b8135610d23816128af565b6000602082840312156129f657600080fd5b5035919050565b60008060408385031215612a1057600080fd5b8235612a1b816128af565b91506020830135612a2b8161299c565b809150509250929050565b60008060408385031215612a4957600080fd5b8235612a54816128af565b91506020830135612a2b816128af565b600181811c90821680612a7857607f821691505b602082108103612a9857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610bc857610bc8612a9e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b61ffff818116838216019080821115612b1757612b17612a9e565b5092915050565b80820180821115610bc857610bc8612a9e565b600181815b80851115612b6c578160001904821115612b5257612b52612a9e565b80851615612b5f57918102915b93841c9390800290612b36565b509250929050565b600082612b8357506001610bc8565b81612b9057506000610bc8565b8160018114612ba65760028114612bb057612bcc565b6001915050610bc8565b60ff841115612bc157612bc1612a9e565b50506001821b610bc8565b5060208310610133831016604e8410600b8410161715612bef575081810a610bc8565b612bf98383612b31565b8060001904821115612c0d57612c0d612a9e565b029392505050565b6000610d2360ff841683612b74565b8082028115828204841417610bc857610bc8612a9e565b600082612c5857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612c6f57600080fd5b5051919050565b600060208284031215612c8857600080fd5b8151610d238161299c565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612cbb57600080fd5b8151610d23816128af565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d165784516001600160a01b031683529383019391830191600101612cf1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d4c57600080fd5b8351925060208401519150604084015190509250925092565b60008251612d77818460208701612858565b919091019291505056fea2646970667358221220b131b505d9cb1dc969c74cc4ad62e14c1556c4186a332f46fde446df4856ddfc64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806385c5b319116101c6578063bbc0c742116100f7578063e71dc3f511610095578063f11a24d31161006f578063f11a24d314610aa9578063f2fde38b14610aca578063f637434214610aea578063f8b45b0514610b0c57600080fd5b8063e71dc3f514610a42578063e78cea9214610a64578063ea2f0b3714610a8957600080fd5b8063c85817f9116100d1578063c85817f9146109d7578063dc9c30ca146109ed578063dd62ed3e14610a0d578063e086e5ec14610a2d57600080fd5b8063bbc0c74214610969578063c090709914610983578063c816841b146109a357600080fd5b80639c3b4fdc11610164578063a522ad251161013e578063a522ad25146108d7578063a9059cbb146108f7578063adb873bd14610917578063b62496f51461093957600080fd5b80639c3b4fdc1461087a578063a0d82dc514610895578063a457c2d7146108b757600080fd5b806392136913116101a0578063921369131461080157806395d89b41146108235780639a7a23d6146108385780639bb19a321461085857600080fd5b806385c5b319146107a15780638da5cb5b146107c35780638dd14802146107e157600080fd5b8063437823ec116102a05780636ebcf6071161023e578063735de9f711610218578063735de9f7146106f65780637bce5a041461072a578063850337621461074d57806385141a771461076d57600080fd5b80636ebcf6071461069457806370a08231146106c1578063715018a6146106e157600080fd5b80635b700d911161027a5780635b700d91146106045780635d0044ca14610624578063660d0af4146106445780636dd3d39f1461066457600080fd5b8063437823ec1461059457806352664423146105b45780635342acb4146105d457600080fd5b8063300ea7821161030d57806339509351116102e757806339509351146105005780633b1f6a01146105205780633f33e90914610552578063434339f31461057257600080fd5b8063300ea782146104a4578063313ce567146104c4578063392d6af7146104e057600080fd5b806318160ddd1161034957806318160ddd1461040a5780631c8a6adc1461042d578063239bda491461046257806323b872dd1461048457600080fd5b8063053e39a31461037b57806306fdde03146103b8578063095ea7b3146103da57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5060065461039b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103c457600080fd5b506103cd610b22565b6040516103af919061287c565b3480156103e657600080fd5b506103fa6103f53660046128c4565b610bb4565b60405190151581526020016103af565b34801561041657600080fd5b5061041f610bce565b6040519081526020016103af565b34801561043957600080fd5b5060145461044f90600160b01b900461ffff1681565b60405161ffff90911681526020016103af565b34801561046e57600080fd5b5061048261047d366004612907565b610c00565b005b34801561049057600080fd5b506103fa61049f36600461295b565b610d04565b3480156104b057600080fd5b506104826104bf3660046129aa565b610d2a565b3480156104d057600080fd5b50604051600781526020016103af565b3480156104ec57600080fd5b506104826104fb366004612907565b610d67565b34801561050c57600080fd5b506103fa61051b3660046128c4565b610e56565b34801561052c57600080fd5b50601b5461010090046001600160a01b031660009081526020819052604090205461041f565b34801561055e57600080fd5b5061048261056d3660046129c7565b610e78565b34801561057e57600080fd5b5060145461044f90600160801b900461ffff1681565b3480156105a057600080fd5b506104826105af3660046129c7565b610ec3565b3480156105c057600080fd5b506104826105cf3660046129e4565b610f11565b3480156105e057600080fd5b506103fa6105ef3660046129c7565b600a6020526000908152604090205460ff1681565b34801561061057600080fd5b5061048261061f3660046129c7565b610f57565b34801561063057600080fd5b5061048261063f3660046129e4565b610fa5565b34801561065057600080fd5b5061048261065f3660046129c7565b61105a565b34801561067057600080fd5b506103fa61067f3660046129c7565b600b6020526000908152604090205460ff1681565b3480156106a057600080fd5b5061041f6106af3660046129c7565b60006020819052908152604090205481565b3480156106cd57600080fd5b5061041f6106dc3660046129c7565b6110ea565b3480156106ed57600080fd5b5061048261112e565b34801561070257600080fd5b5061039b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561073657600080fd5b5060145461044f90640100000000900461ffff1681565b34801561075957600080fd5b506104826107683660046129c7565b611164565b34801561077957600080fd5b5061039b7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156107ad57600080fd5b5060145461044f90600160a01b900461ffff1681565b3480156107cf57600080fd5b506005546001600160a01b031661039b565b3480156107ed57600080fd5b506104826107fc3660046129c7565b6111f4565b34801561080d57600080fd5b5060145461044f90600160601b900461ffff1681565b34801561082f57600080fd5b506103cd611289565b34801561084457600080fd5b506104826108533660046129fd565b611298565b34801561086457600080fd5b5060145461044f90600160901b900461ffff1681565b34801561088657600080fd5b5060145461044f9061ffff1681565b3480156108a157600080fd5b5060145461044f90600160401b900461ffff1681565b3480156108c357600080fd5b506103fa6108d23660046128c4565b61136f565b3480156108e357600080fd5b506104826108f2366004612a36565b6113f5565b34801561090357600080fd5b506103fa6109123660046128c4565b6114ea565b34801561092357600080fd5b5060145461044f90600160701b900461ffff1681565b34801561094557600080fd5b506103fa6109543660046129c7565b60196020526000908152604090205460ff1681565b34801561097557600080fd5b506009546103fa9060ff1681565b34801561098f57600080fd5b5060075461039b906001600160a01b031681565b3480156109af57600080fd5b5061039b7f000000000000000000000000988faa91c6ea792924ae9a129ff92c86e7b9667781565b3480156109e357600080fd5b5061041f601a5481565b3480156109f957600080fd5b50610482610a08366004612907565b6114f8565b348015610a1957600080fd5b5061041f610a28366004612a36565b611594565b348015610a3957600080fd5b506104826115bf565b348015610a4e57600080fd5b5060145461044f90600160301b900461ffff1681565b348015610a7057600080fd5b50601b5461039b9061010090046001600160a01b031681565b348015610a9557600080fd5b50610482610aa43660046129c7565b611622565b348015610ab557600080fd5b5060145461044f9062010000900461ffff1681565b348015610ad657600080fd5b50610482610ae53660046129c7565b61166d565b348015610af657600080fd5b5060145461044f90600160501b900461ffff1681565b348015610b1857600080fd5b5061041f60085481565b606060038054610b3190612a64565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5d90612a64565b8015610baa5780601f10610b7f57610100808354040283529160200191610baa565b820191906000526020600020905b815481529060010190602001808311610b8d57829003601f168201915b5050505050905090565b600033610bc281858561170b565b60019150505b92915050565b601b5461010090046001600160a01b0316600090815260208190526040812054600254610bfb9190612ab4565b905090565b6005546001600160a01b03163314610c335760405162461bcd60e51b8152600401610c2a90612ac7565b60405180910390fd5b6014805463ffffffff60801b1916600160801b61ffff8781169190910261ffff60901b191691909117600160901b868316021763ffffffff60a01b1916600160a01b8583160261ffff60b01b191617600160b01b918416919091021790556103848183610ca08688612afc565b610caa9190612afc565b610cb49190612afc565b61ffff161115610cfe5760405162461bcd60e51b81526020600482015260156024820152744d757374206b6565702066656573203c3d2039302560581b6044820152606401610c2a565b50505050565b600033610d1285828561182f565b610d1d8585856118a3565b60019150505b9392505050565b6005546001600160a01b03163314610d545760405162461bcd60e51b8152600401610c2a90612ac7565b6009805460ff1916911515919091179055565b6005546001600160a01b03163314610d915760405162461bcd60e51b8152600401610c2a90612ac7565b6014805461ffff86811663ffffffff199092169190911762010000868316021767ffffffff0000000019166401000000008583160267ffff000000000000191617600160301b918416919091021790556103848183610df08688612afc565b610dfa9190612afc565b610e049190612afc565b61ffff161115610cfe5760405162461bcd60e51b815260206004820152601860248201527f4d757374206b65657020666565732062656c6f772039302500000000000000006044820152606401610c2a565b600033610bc2818585610e698383611594565b610e739190612b1e565b61170b565b6005546001600160a01b03163314610ea25760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6005546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6005546001600160a01b03163314610f3b5760405162461bcd60e51b8152600401610c2a90612ac7565b610f476007600a612c15565b610f519082612c24565b601a5550565b6005546001600160a01b03163314610f815760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6005546001600160a01b03163314610fcf5760405162461bcd60e51b8152600401610c2a90612ac7565b610fdb6007600a612c15565b610fe59082612c24565b6008556064610ff2610bce565b610ffc9190612c3b565b600854116110575760405162461bcd60e51b815260206004820152602260248201527f4d61782077616c6c6574206d7573742062652067726561746572207468616e20604482015261312560f01b6064820152608401610c2a565b50565b6005546001600160a01b031633146110845760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b0381166110c85760405162461bcd60e51b815260206004820152600b60248201526a043616e27742073657420360ac1b6044820152606401610c2a565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b601b546000906001600160a01b0361010090910481169083160361111057506000919050565b6001600160a01b038216600090815260208190526040902054610bc8565b6005546001600160a01b031633146111585760405162461bcd60e51b8152600401610c2a90612ac7565b6111626000611e37565b565b6005546001600160a01b0316331461118e5760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b0381166111d25760405162461bcd60e51b815260206004820152600b60248201526a043616e27742073657420360ac1b6044820152606401610c2a565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610c2a90612ac7565b601b8054610100600160a81b0319166101006001600160a01b0393841681029190911780835581900483166000908152600a60209081526040808320805460ff1990811660019081179092559554949094049095168252600b90529290922080549091169091179055565b606060048054610b3190612a64565b6005546001600160a01b031633146112c25760405162461bcd60e51b8152600401610c2a90612ac7565b7f000000000000000000000000988faa91c6ea792924ae9a129ff92c86e7b966776001600160a01b0316826001600160a01b0316036113435760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610c2a565b6001600160a01b0382166000908152601960205260409020805460ff19168215151790555050565b5050565b6000338161137d8286611594565b9050838110156113dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c2a565b6113ea828686840361170b565b506001949350505050565b6005546001600160a01b0316331461141f5760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b0381166114755760405162461bcd60e51b815260206004820181905260248201527f77616c6c6574416464726573732063616e2774206265203020616464726573736044820152606401610c2a565b6040516370a0823160e01b815230600482015261136b90839083906001600160a01b038316906370a0823190602401602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190612c5d565b611e89565b600033610bc28185856118a3565b6005546001600160a01b031633146115225760405162461bcd60e51b8152600401610c2a90612ac7565b601480546bffffffff00000000000000001916600160401b61ffff8781169190910261ffff60501b191691909117600160501b868316021763ffffffff60601b1916600160601b8583160261ffff60701b191617600160701b918416919091021790556103848183610ca08688612afc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146115e95760405162461bcd60e51b8152600401610c2a90612ac7565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611057573d6000803e3d6000fd5b6005546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6005546001600160a01b031633146116975760405162461bcd60e51b8152600401610c2a90612ac7565b6001600160a01b0381166116fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2a565b61105781611e37565b60025490565b6001600160a01b03831661176d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2a565b6001600160a01b0382166117ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061183b8484611594565b90506000198114610cfe57818110156118965760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c2a565b610cfe848484840361170b565b60095460ff16611938576001600160a01b0383166000908152600a602052604090205460ff16806118ec57506001600160a01b0382166000908152600a602052604090205460ff165b6119385760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c2a565b6000611943306110ea565b601a54601b549192508210159060ff1615801561195d5750805b801561198157506001600160a01b03841660009081526019602052604090205460ff165b1561198e5761198e611ee0565b611996612116565b6001600160a01b0385166000908152600a602052604090205460ff161580156119d857506001600160a01b0384166000908152600a602052604090205460ff16155b15611bfd576001600160a01b03851660009081526019602052604090205460ff1615611aa0576014546103e890611a139061ffff1685612c24565b611a1d9190612c3b565b600c556014546103e890611a3b9062010000900461ffff1685612c24565b611a459190612c3b565b600e556014546103e890611a6590640100000000900461ffff1685612c24565b611a6f9190612c3b565b6010556014546103e890611a8e90600160301b900461ffff1685612c24565b611a989190612c3b565b601255611bfd565b6001600160a01b03841660009081526019602052604090205460ff1615611b58576014546103e890611add90600160401b900461ffff1685612c24565b611ae79190612c3b565b600c556014546103e890611b0690600160501b900461ffff1685612c24565b611b109190612c3b565b600e556014546103e890611b2f90600160601b900461ffff1685612c24565b611b399190612c3b565b6010556014546103e890611a8e90600160701b900461ffff1685612c24565b6014546103e890611b7490600160801b900461ffff1685612c24565b611b7e9190612c3b565b600c556014546103e890611b9d90600160901b900461ffff1685612c24565b611ba79190612c3b565b600e556014546103e890611bc690600160a01b900461ffff1685612c24565b611bd09190612c3b565b6010556014546103e890611bef90600160b01b900461ffff1685612c24565b611bf99190612c3b565b6012555b6000601254601054600e54600c5487611c169190612ab4565b611c209190612ab4565b611c2a9190612ab4565b611c349190612ab4565b9050611c41868683612171565b6001600160a01b0386166000908152600a602052604090205460ff16158015611c8357506001600160a01b0385166000908152600a602052604090205460ff16155b8015611cc157507f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316856001600160a01b031614155b8015611ce657506001600160a01b03851660009081526019602052604090205460ff16155b8015611d0b57506001600160a01b0385166000908152600b602052604090205460ff16155b15611d6a57600854611d1c866110ea565b1115611d6a5760405162461bcd60e51b815260206004820152601860248201527f4d61782077616c6c6574206c696d6974207265616368656400000000000000006044820152606401610c2a565b6000601254601054600e54600c54611d829190612b1e565b611d8c9190612b1e565b611d969190612b1e565b90508015611e1157611da9873083612171565b600e5460156000828254611dbd9190612b1e565b909155505060105460168054600090611dd7908490612b1e565b9091555050600c5460178054600090611df1908490612b1e565b909155505060125460188054600090611e0b908490612b1e565b90915550505b611e2e600d54600c55600f54600e55601154601055601354601255565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611edb90849061233f565b505050565b601b805460ff191660011790556000611ef8306110ea565b90506000601754601654601554611f0f9190612b1e565b611f199190612b1e565b9050801580611f3457508060185483611f329190612ab4565b105b15611f4057505061210a565b60006002601554611f519190612c3b565b90506000479050600060175460165484611f6b9190612b1e565b611f759190612b1e565b9050611f8081612411565b6000611f8c8347612ab4565b905060008260165483611f9f9190612c24565b611fa99190612c3b565b9050600083611fb88785612c24565b611fc29190612c3b565b905060008460175485611fd59190612c24565b611fdf9190612c3b565b9050600087118015611ff15750600082115b156120005761200087836125d1565b6006546040516000916001600160a01b03169061c35090869084818181858888f193505050503d8060008114612052576040519150601f19603f3d011682016040523d82523d6000602084013e612057565b606091505b50506007546040519192506001600160a01b03169061c3509084906000818181858888f193505050503d80600081146120ac576040519150601f19603f3d011682016040523d82523d6000602084013e6120b1565b606091505b5050601854909150156120eb576120eb307f000000000000000000000000000000000000000000000000000000000000dead601854612171565b5050600060158190556016819055601781905560185550505050505050505b601b805460ff19169055565b600c541580156121265750600e54155b80156121325750601054155b801561213e5750601254155b1561214557565b600c8054600d55600e8054600f5560108054601155601280546013556000938490559183905582905555565b6001600160a01b0383166121d55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2a565b6001600160a01b0382166122375760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2a565b6001600160a01b038316600090815260208190526040902054818110156122af5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c2a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122e6908490612b1e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161233291815260200190565b60405180910390a3610cfe565b6000612394826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126d79092919063ffffffff16565b805190915015611edb57808060200190518101906123b29190612c76565b611edb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c2a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061244657612446612c93565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e89190612ca9565b816001815181106124fb576124fb612c93565b60200260200101906001600160a01b031690816001600160a01b031681525050612546307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461170b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061259b908590600090869030904290600401612cc6565b600060405180830381600087803b1580156125b557600080fd5b505af11580156125c9573d6000803e3d6000fd5b505050505050565b6125fc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461170b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806126436005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156126ab573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126d09190612d37565b5050505050565b60606126e684846000856126ee565b949350505050565b60608247101561274f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c2a565b6001600160a01b0385163b6127a65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c2a565b600080866001600160a01b031685876040516127c29190612d65565b60006040518083038185875af1925050503d80600081146127ff576040519150601f19603f3d011682016040523d82523d6000602084013e612804565b606091505b509150915061281482828661281f565b979650505050505050565b6060831561282e575081610d23565b82511561283e5782518084602001fd5b8160405162461bcd60e51b8152600401610c2a919061287c565b60005b8381101561287357818101518382015260200161285b565b50506000910152565b602081526000825180602084015261289b816040850160208701612858565b601f01601f19169190910160400192915050565b6001600160a01b038116811461105757600080fd5b600080604083850312156128d757600080fd5b82356128e2816128af565b946020939093013593505050565b803561ffff8116811461290257600080fd5b919050565b6000806000806080858703121561291d57600080fd5b612926856128f0565b9350612934602086016128f0565b9250612942604086016128f0565b9150612950606086016128f0565b905092959194509250565b60008060006060848603121561297057600080fd5b833561297b816128af565b9250602084013561298b816128af565b929592945050506040919091013590565b801515811461105757600080fd5b6000602082840312156129bc57600080fd5b8135610d238161299c565b6000602082840312156129d957600080fd5b8135610d23816128af565b6000602082840312156129f657600080fd5b5035919050565b60008060408385031215612a1057600080fd5b8235612a1b816128af565b91506020830135612a2b8161299c565b809150509250929050565b60008060408385031215612a4957600080fd5b8235612a54816128af565b91506020830135612a2b816128af565b600181811c90821680612a7857607f821691505b602082108103612a9857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610bc857610bc8612a9e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b61ffff818116838216019080821115612b1757612b17612a9e565b5092915050565b80820180821115610bc857610bc8612a9e565b600181815b80851115612b6c578160001904821115612b5257612b52612a9e565b80851615612b5f57918102915b93841c9390800290612b36565b509250929050565b600082612b8357506001610bc8565b81612b9057506000610bc8565b8160018114612ba65760028114612bb057612bcc565b6001915050610bc8565b60ff841115612bc157612bc1612a9e565b50506001821b610bc8565b5060208310610133831016604e8410600b8410161715612bef575081810a610bc8565b612bf98383612b31565b8060001904821115612c0d57612c0d612a9e565b029392505050565b6000610d2360ff841683612b74565b8082028115828204841417610bc857610bc8612a9e565b600082612c5857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612c6f57600080fd5b5051919050565b600060208284031215612c8857600080fd5b8151610d238161299c565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612cbb57600080fd5b8151610d23816128af565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d165784516001600160a01b031683529383019391830191600101612cf1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d4c57600080fd5b8351925060208401519150604084015190509250925092565b60008251612d77818460208701612858565b919091019291505056fea2646970667358221220b131b505d9cb1dc969c74cc4ad62e14c1556c4186a332f46fde446df4856ddfc64736f6c63430008110033

Deployed Bytecode Sourcemap

38354:13966:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38398:42;;;;;;;;;;-1:-1:-1;38398:42:0;;;;-1:-1:-1;;;;;38398:42:0;;;;;;-1:-1:-1;;;;;194:32:1;;;176:51;;164:2;149:18;38398:42:0;;;;;;;;26966:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29458:242::-;;;;;;;;;;-1:-1:-1;29458:242:0;;;;;:::i;:::-;;:::i;:::-;;;1515:14:1;;1508:22;1490:41;;1478:2;1463:18;29458:242:0;1350:187:1;42183:125:0;;;;;;;;;;;;;:::i;:::-;;;1688:25:1;;;1676:2;1661:18;42183:125:0;1542:177:1;39708:33:0;;;;;;;;;;-1:-1:-1;39708:33:0;;;;-1:-1:-1;;;39708:33:0;;;;;;;;;1898:6:1;1886:19;;;1868:38;;1856:2;1841:18;39708:33:0;1724:188:1;44788:617:0;;;;;;;;;;-1:-1:-1;44788:617:0;;;;;:::i;:::-;;:::i;:::-;;30280:295;;;;;;;;;;-1:-1:-1;30280:295:0;;;;;:::i;:::-;;:::i;42517:97::-;;;;;;;;;;-1:-1:-1;42517:97:0;;;;;:::i;:::-;;:::i;41985:84::-;;;;;;;;;;-1:-1:-1;41985:84:0;;42060:1;3459:36:1;;3447:2;3432:18;41985:84:0;3317:184:1;43722:518:0;;;;;;;;;;-1:-1:-1;43722:518:0;;;;;:::i;:::-;;:::i;30984:270::-;;;;;;;;;;-1:-1:-1;30984:270:0;;;;;:::i;:::-;;:::i;42077:98::-;;;;;;;;;;-1:-1:-1;42160:6:0;;;;;-1:-1:-1;;;;;42160:6:0;42123:7;42150:17;;;;;;;;;;;42077:98;;43591:123;;;;;;;;;;-1:-1:-1;43591:123:0;;;;;:::i;:::-;;:::i;39579:32::-;;;;;;;;;;-1:-1:-1;39579:32:0;;;;-1:-1:-1;;;39579:32:0;;;;;;43216:112;;;;;;;;;;-1:-1:-1;43216:112:0;;;;;:::i;:::-;;:::i;42622:204::-;;;;;;;;;;-1:-1:-1;42622:204:0;;;;;:::i;:::-;;:::i;38686:49::-;;;;;;;;;;-1:-1:-1;38686:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43459:124;;;;;;;;;;-1:-1:-1;43459:124:0;;;;;:::i;:::-;;:::i;41769:208::-;;;;;;;;;;-1:-1:-1;41769:208:0;;;;;:::i;:::-;;:::i;45413:166::-;;;;;;;;;;-1:-1:-1;45413:166:0;;;;;:::i;:::-;;:::i;38742:55::-;;;;;;;;;;-1:-1:-1;38742:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26244:44;;;;;;;;;;-1:-1:-1;26244:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;42316:193;;;;;;;;;;-1:-1:-1;42316:193:0;;;;;:::i;:::-;;:::i;9627:103::-;;;;;;;;;;;;;:::i;40030:47::-;;;;;;;;;;;;;;;39343:34;;;;;;;;;;-1:-1:-1;39343:34:0;;;;;;;;;;;45587:151;;;;;;;;;;-1:-1:-1;45587:151:0;;;;;:::i;:::-;;:::i;38492:80::-;;;;;;;;;;;;;;;39663:38;;;;;;;;;;-1:-1:-1;39663:38:0;;;;-1:-1:-1;;;39663:38:0;;;;;;8976:87;;;;;;;;;;-1:-1:-1;9049:6:0;;-1:-1:-1;;;;;9049:6:0;8976:87;;41579:182;;;;;;;;;;-1:-1:-1;41579:182:0;;;;;:::i;:::-;;:::i;39499:35::-;;;;;;;;;;-1:-1:-1;39499:35:0;;;;-1:-1:-1;;;39499:35:0;;;;;;27185:104;;;;;;;;;;;;;:::i;42834:236::-;;;;;;;;;;-1:-1:-1;42834:236:0;;;;;:::i;:::-;;:::i;39618:38::-;;;;;;;;;;-1:-1:-1;39618:38:0;;;;-1:-1:-1;;;39618:38:0;;;;;;39268:28;;;;;;;;;;-1:-1:-1;39268:28:0;;;;;;;;39421:30;;;;;;;;;;-1:-1:-1;39421:30:0;;;;-1:-1:-1;;;39421:30:0;;;;;;31757:505;;;;;;;;;;-1:-1:-1;31757:505:0;;;;;:::i;:::-;;:::i;51928:389::-;;;;;;;;;;-1:-1:-1;51928:389:0;;;;;:::i;:::-;;:::i;28640:234::-;;;;;;;;;;-1:-1:-1;28640:234:0;;;;;:::i;:::-;;:::i;39541:29::-;;;;;;;;;;-1:-1:-1;39541:29:0;;;;-1:-1:-1;;;39541:29:0;;;;;;39918:57;;;;;;;;;;-1:-1:-1;39918:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38652:25;;;;;;;;;;-1:-1:-1;38652:25:0;;;;;;;;38447:36;;;;;;;;;;-1:-1:-1;38447:36:0;;;;-1:-1:-1;;;;;38447:36:0;;;40084;;;;;;;;;;;;;;;39984:37;;;;;;;;;;;;;;;;44248:532;;;;;;;;;;-1:-1:-1;44248:532:0;;;;;:::i;:::-;;:::i;28937:201::-;;;;;;;;;;-1:-1:-1;28937:201:0;;;;;:::i;:::-;;:::i;51811:109::-;;;;;;;;;;;;;:::i;39384:28::-;;;;;;;;;;-1:-1:-1;39384:28:0;;;;-1:-1:-1;;;39384:28:0;;;;;;40159:38;;;;;;;;;;-1:-1:-1;40159:38:0;;;;;;;-1:-1:-1;;;;;40159:38:0;;;43336:111;;;;;;;;;;-1:-1:-1;43336:111:0;;;;;:::i;:::-;;:::i;39303:33::-;;;;;;;;;;-1:-1:-1;39303:33:0;;;;;;;;;;;9885:238;;;;;;;;;;-1:-1:-1;9885:238:0;;;;;:::i;:::-;;:::i;39458:34::-;;;;;;;;;;-1:-1:-1;39458:34:0;;;;-1:-1:-1;;;39458:34:0;;;;;;38579:24;;;;;;;;;;;;;;;;26966:100;27020:13;27053:5;27046:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26966:100;:::o;29458:242::-;29577:4;8273:10;29638:32;8273:10;29654:7;29663:6;29638:8;:32::i;:::-;29688:4;29681:11;;;29458:242;;;;;:::o;42183:125::-;42160:6;;;;;-1:-1:-1;;;;;42160:6:0;42236:7;42150:17;;;;;;;;;;;28174:12;;42263:37;;;;:::i;:::-;42256:44;;42183:125;:::o;44788:617::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;;;;;;;;;44997:14:::1;:32:::0;;-1:-1:-1;;;;45040:44:0;-1:-1:-1;;;44997:32:0::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;45040:44:0;;;;;-1:-1:-1;;;45040:44:0;;::::1;;;-1:-1:-1::0;;;;45150:34:0;-1:-1:-1;;;45095:44:0;;::::1;;-1:-1:-1::0;;;;45150:34:0;;-1:-1:-1;;;45150:34:0;;::::1;::::0;;;::::1;;::::0;;38640:3:::1;45150:34:::0;45095:44;45217:56:::1;45040:44:::0;44997:32;45217:56:::1;:::i;:::-;:97;;;;:::i;:::-;:116;;;;:::i;:::-;:131;;;;45195:202;;;::::0;-1:-1:-1;;;45195:202:0;;6957:2:1;45195:202:0::1;::::0;::::1;6939:21:1::0;6996:2;6976:18;;;6969:30;-1:-1:-1;;;7015:18:1;;;7008:51;7076:18;;45195:202:0::1;6755:345:1::0;45195:202:0::1;44788:617:::0;;;;:::o;30280:295::-;30411:4;8273:10;30469:38;30485:4;8273:10;30500:6;30469:15;:38::i;:::-;30518:27;30528:4;30534:2;30538:6;30518:9;:27::i;:::-;30563:4;30556:11;;;30280:295;;;;;;:::o;42517:97::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;42584:13:::1;:22:::0;;-1:-1:-1;;42584:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42517:97::o;43722:518::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;43906:9:::1;:22:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;43939:34:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;44029:24:0;43984:34;;;::::1;;-1:-1:-1::0;;44029:24:0;;-1:-1:-1;;;44029:24:0;;::::1;::::0;;;::::1;;::::0;;38640:3:::1;44029:24:::0;43984:34;44086:29:::1;43939:34:::0;43906:22;44086:29:::1;:::i;:::-;:48;;;;:::i;:::-;:62;;;;:::i;:::-;:94;;;;44064:168;;;::::0;-1:-1:-1;;;44064:168:0;;7307:2:1;44064:168:0::1;::::0;::::1;7289:21:1::0;7346:2;7326:18;;;7319:30;7385:26;7365:18;;;7358:54;7429:18;;44064:168:0::1;7105:348:1::0;30984:270:0;31099:4;8273:10;31160:64;8273:10;31176:7;31213:10;31185:25;8273:10;31176:7;31185:9;:25::i;:::-;:38;;;;:::i;:::-;31160:8;:64::i;43591:123::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43666:32:0::1;43701:5;43666:32:::0;;;:23:::1;:32;::::0;;;;:40;;-1:-1:-1;;43666:40:0::1;::::0;;43591:123::o;43216:112::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43287:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;43287:33:0::1;43316:4;43287:33;::::0;;43216:112::o;42622:204::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;42803:14:::1;42060:1:::0;42803:2:::1;:14;:::i;:::-;42776:42;::::0;:23;:42:::1;:::i;:::-;42751:22;:67:::0;-1:-1:-1;42622:204:0:o;43459:124::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43536:32:0::1;;::::0;;;:23:::1;:32;::::0;;;;:39;;-1:-1:-1;;43536:39:0::1;43571:4;43536:39;::::0;;43459:124::o;41769:208::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;41866:14:::1;42060:1:::0;41866:2:::1;:14;:::i;:::-;41853:27;::::0;:10;:27:::1;:::i;:::-;41841:9;:39:::0;41927:3:::1;41911:13;:11;:13::i;:::-;:19;;;;:::i;:::-;41899:9;;:31;41891:78;;;::::0;-1:-1:-1;;;41891:78:0;;9568:2:1;41891:78:0::1;::::0;::::1;9550:21:1::0;9607:2;9587:18;;;9580:30;9646:34;9626:18;;;9619:62;-1:-1:-1;;;9697:18:1;;;9690:32;9739:19;;41891:78:0::1;9366:398:1::0;41891:78:0::1;41769:208:::0;:::o;45413:166::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45497:15:0;::::1;45489:39;;;::::0;-1:-1:-1;;;45489:39:0;;9971:2:1;45489:39:0::1;::::0;::::1;9953:21:1::0;10010:2;9990:18;;;9983:30;-1:-1:-1;;;10029:18:1;;;10022:41;10080:18;;45489:39:0::1;9769:335:1::0;45489:39:0::1;45539:19;:32:::0;;-1:-1:-1;;;;;;45539:32:0::1;-1:-1:-1::0;;;;;45539:32:0;;;::::1;::::0;;;::::1;::::0;;45413:166::o;42316:193::-;42417:6;;42382:7;;-1:-1:-1;;;;;42417:6:0;;;;;;42406:17;;;;42402:58;;-1:-1:-1;42447:1:0;;42316:193;-1:-1:-1;42316:193:0:o;42402:58::-;-1:-1:-1;;;;;28408:18:0;;28376:7;28408:18;;;;;;;;;;;42477:24;28257:177;9627:103;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;9692:30:::1;9719:1;9692:18;:30::i;:::-;9627:103::o:0;45587:151::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45662:15:0;::::1;45654:39;;;::::0;-1:-1:-1;;;45654:39:0;;9971:2:1;45654:39:0::1;::::0;::::1;9953:21:1::0;10010:2;9990:18;;;9983:30;-1:-1:-1;;;10029:18:1;;;10022:41;10080:18;;45654:39:0::1;9769:335:1::0;45654:39:0::1;45704:13;:26:::0;;-1:-1:-1;;;;;;45704:26:0::1;-1:-1:-1::0;;;;;45704:26:0;;;::::1;::::0;;;::::1;::::0;;45587:151::o;41579:182::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;41645:6:::1;:16:::0;;-1:-1:-1;;;;;;41645:16:0::1;;-1:-1:-1::0;;;;;41645:16:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;41690:6;;::::1;::::0;::::1;-1:-1:-1::0;41672:25:0;;;:17:::1;:25;::::0;;;;;;;:32;;-1:-1:-1;;41672:32:0;;::::1;-1:-1:-1::0;41672:32:0;;::::1;::::0;;;41739:6;;;;;::::1;::::0;;::::1;41715:31:::0;;:23:::1;:31:::0;;;;;;:38;;;;::::1;::::0;;::::1;::::0;;41579:182::o;27185:104::-;27241:13;27274:7;27267:14;;;;;:::i;42834:236::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;42966:11:::1;-1:-1:-1::0;;;;;42958:19:0::1;:4;-1:-1:-1::0;;;;;42958:19:0::1;::::0;42950:58:::1;;;::::0;-1:-1:-1;;;42950:58:0;;10311:2:1;42950:58:0::1;::::0;::::1;10293:21:1::0;10350:2;10330:18;;;10323:30;10389:28;10369:18;;;10362:56;10435:18;;42950:58:0::1;10109:350:1::0;42950:58:0::1;-1:-1:-1::0;;;;;43161:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;43161:39:0;;;;;;;42834:236;;:::o;43021:41::-:1;42834:236:::0;;:::o;31757:505::-;31877:4;8273:10;31877:4;31965:25;8273:10;31982:7;31965:9;:25::i;:::-;31938:52;;32043:15;32023:16;:35;;32001:122;;;;-1:-1:-1;;;32001:122:0;;10666:2:1;32001:122:0;;;10648:21:1;10705:2;10685:18;;;10678:30;10744:34;10724:18;;;10717:62;-1:-1:-1;;;10795:18:1;;;10788:35;10840:19;;32001:122:0;10464:401:1;32001:122:0;32159:60;32168:5;32175:7;32203:15;32184:16;:34;32159:8;:60::i;:::-;-1:-1:-1;32250:4:0;;31757:505;-1:-1:-1;;;;31757:505:0:o;51928:389::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52071:27:0;::::1;52049:109;;;::::0;-1:-1:-1;;;52049:109:0;;11072:2:1;52049:109:0::1;::::0;::::1;11054:21:1::0;;;11091:18;;;11084:30;11150:34;11130:18;;;11123:62;11202:18;;52049:109:0::1;10870:356:1::0;52049:109:0::1;52261:37;::::0;-1:-1:-1;;;52261:37:0;;52292:4:::1;52261:37;::::0;::::1;176:51:1::0;52169:140:0::1;::::0;52206:12;;52233:13;;-1:-1:-1;;;;;52261:22:0;::::1;::::0;::::1;::::0;149:18:1;;52261:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52169:22;:140::i;28640:234::-:0;28755:4;8273:10;28816:28;8273:10;28833:2;28837:6;28816:9;:28::i;44248:532::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;44437:10:::1;:24:::0;;-1:-1:-1;;44472:36:0;-1:-1:-1;;;44437:24:0::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;44472:36:0;;;;;-1:-1:-1;;;44472:36:0;;::::1;;;-1:-1:-1::0;;;;44566:26:0;-1:-1:-1;;;44519:36:0;;::::1;;-1:-1:-1::0;;;;44566:26:0;;-1:-1:-1;;;44566:26:0;;::::1;::::0;;;::::1;;::::0;;38640:3:::1;44566:26:::0;44519:36;44625:31:::1;44472:36:::0;44437:24;44625:31:::1;:::i;28937:201::-:0;-1:-1:-1;;;;;29103:18:0;;;29071:7;29103:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28937:201::o;51811:109::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;9049:6;;51864:48:::1;::::0;-1:-1:-1;;;;;9049:6:0;;;;51890:21:::1;51864:48:::0;::::1;;;::::0;::::1;::::0;;;51890:21;9049:6;51864:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;43336:111:::0;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43405:26:0::1;43434:5;43405:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;43405:34:0::1;::::0;;43336:111::o;9885:238::-;9049:6;;-1:-1:-1;;;;;9049:6:0;8273:10;9196:23;9188:68;;;;-1:-1:-1;;;9188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9988:22:0;::::1;9966:110;;;::::0;-1:-1:-1;;;9966:110:0;;11622:2:1;9966:110:0::1;::::0;::::1;11604:21:1::0;11661:2;11641:18;;;11634:30;11700:34;11680:18;;;11673:62;-1:-1:-1;;;11751:18:1;;;11744:36;11797:19;;9966:110:0::1;11420:402:1::0;9966:110:0::1;10087:28;10106:8;10087:18;:28::i;28086:108::-:0;28174:12;;;28086:108::o;35497:380::-;-1:-1:-1;;;;;35633:19:0;;35625:68;;;;-1:-1:-1;;;35625:68:0;;12029:2:1;35625:68:0;;;12011:21:1;12068:2;12048:18;;;12041:30;12107:34;12087:18;;;12080:62;-1:-1:-1;;;12158:18:1;;;12151:34;12202:19;;35625:68:0;11827:400:1;35625:68:0;-1:-1:-1;;;;;35712:21:0;;35704:68;;;;-1:-1:-1;;;35704:68:0;;12434:2:1;35704:68:0;;;12416:21:1;12473:2;12453:18;;;12446:30;12512:34;12492:18;;;12485:62;-1:-1:-1;;;12563:18:1;;;12556:32;12605:19;;35704:68:0;12232:398:1;35704:68:0;-1:-1:-1;;;;;35785:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35837:32;;1688:25:1;;;35837:32:0;;1661:18:1;35837:32:0;;;;;;;35497:380;;;:::o;36168:502::-;36303:24;36330:25;36340:5;36347:7;36330:9;:25::i;:::-;36303:52;;-1:-1:-1;;36370:16:0;:37;36366:297;;36470:6;36450:16;:26;;36424:117;;;;-1:-1:-1;;;36424:117:0;;12837:2:1;36424:117:0;;;12819:21:1;12876:2;12856:18;;;12849:30;12915:31;12895:18;;;12888:59;12964:18;;36424:117:0;12635:353:1;36424:117:0;36585:51;36594:5;36601:7;36629:6;36610:16;:25;36585:8;:51::i;45746:2734::-;45875:13;;;;45870:183;;-1:-1:-1;;;;;45931:23:0;;;;;;:17;:23;;;;;;;;;:48;;-1:-1:-1;;;;;;45958:21:0;;;;;;:17;:21;;;;;;;;45931:48;45905:136;;;;-1:-1:-1;;;45905:136:0;;13195:2:1;45905:136:0;;;13177:21:1;13234:2;13214:18;;;13207:30;13273:28;13253:18;;;13246:56;13319:18;;45905:136:0;12993:350:1;45905:136:0;46065:28;46096:24;46114:4;46096:9;:24::i;:::-;46199:22;;46274:16;;46065:55;;-1:-1:-1;46162:59:0;;;;46274:16;;46273:17;:57;;;;;46307:23;46273:57;:103;;;;-1:-1:-1;;;;;;46347:29:0;;;;;;:25;:29;;;;;;;;46273:103;46255:169;;;46403:9;:7;:9::i;:::-;46436:14;:12;:14::i;:::-;-1:-1:-1;;;;;46552:23:0;;;;;;:17;:23;;;;;;;;46551:24;:50;;;;-1:-1:-1;;;;;;46580:21:0;;;;;;:17;:21;;;;;;;;46579:22;46551:50;46547:1078;;;-1:-1:-1;;;;;46676:31:0;;;;;;:25;:31;;;;;;;;46672:942;;;46748:9;;46761:4;;46739:18;;46748:9;;46739:6;:18;:::i;:::-;46738:27;;;;:::i;:::-;46728:7;:37;46810:15;;46829:4;;46801:24;;46810:15;;;;;46801:6;:24;:::i;:::-;46800:33;;;;:::i;:::-;46784:13;:49;46878:15;;46897:4;;46869:24;;46878:15;;;;;46869:6;:24;:::i;:::-;46868:33;;;;:::i;:::-;46852:13;:49;46941:10;;46955:4;;46932:19;;-1:-1:-1;;;46941:10:0;;;;46932:6;:19;:::i;:::-;46931:28;;;;:::i;:::-;46920:8;:39;46672:942;;;-1:-1:-1;;;;;47019:29:0;;;;;;:25;:29;;;;;;;;47015:599;;;47091:10;;47105:4;;47082:19;;-1:-1:-1;;;47091:10:0;;;;47082:6;:19;:::i;:::-;47081:28;;;;:::i;:::-;47071:7;:38;47154:16;;47174:4;;47145:25;;-1:-1:-1;;;47154:16:0;;;;47145:6;:25;:::i;:::-;47144:34;;;;:::i;:::-;47128:13;:50;47223:16;;47243:4;;47214:25;;-1:-1:-1;;;47223:16:0;;;;47214:6;:25;:::i;:::-;47213:34;;;;:::i;:::-;47197:13;:50;47287:11;;47302:4;;47278:20;;-1:-1:-1;;;47287:11:0;;;;47278:6;:20;:::i;47015:599::-;47367:14;;47385:4;;47358:23;;-1:-1:-1;;;47367:14:0;;;;47358:6;:23;:::i;:::-;47357:32;;;;:::i;:::-;47347:7;:42;47434:20;;47458:4;;47425:29;;-1:-1:-1;;;47434:20:0;;;;47425:6;:29;:::i;:::-;47424:38;;;;:::i;:::-;47408:13;:54;47507:20;;47531:4;;47498:29;;-1:-1:-1;;;47507:20:0;;;;47498:6;:29;:::i;:::-;47497:38;;;;:::i;:::-;47481:13;:54;47575:15;;47594:4;;47566:24;;-1:-1:-1;;;47575:15:0;;;;47566:6;:24;:::i;:::-;47565:33;;;;:::i;:::-;47554:8;:44;47015:599;47637:23;47766:8;;47737:13;;47708;;47685:7;;47663:6;:29;;;;:::i;:::-;:58;;;;:::i;:::-;:87;;;;:::i;:::-;:111;;;;:::i;:::-;47637:137;;47785:42;47801:4;47807:2;47811:15;47785;:42::i;:::-;-1:-1:-1;;;;;47843:23:0;;;;;;:17;:23;;;;;;;;47842:24;:50;;;;-1:-1:-1;;;;;;47871:21:0;;;;;;:17;:21;;;;;;;;47870:22;47842:50;:70;;;;;47902:10;-1:-1:-1;;;;;47896:16:0;:2;-1:-1:-1;;;;;47896:16:0;;;47842:70;:104;;;;-1:-1:-1;;;;;;47917:29:0;;;;;;:25;:29;;;;;;;;47916:30;47842:104;:136;;;;-1:-1:-1;;;;;;47951:27:0;;;;;;:23;:27;;;;;;;;47950:28;47842:136;47838:232;;;48020:9;;48003:13;48013:2;48003:9;:13::i;:::-;:26;;47995:63;;;;-1:-1:-1;;;47995:63:0;;13550:2:1;47995:63:0;;;13532:21:1;13589:2;13569:18;;;13562:30;13628:26;13608:18;;;13601:54;13672:18;;47995:63:0;13348:348:1;47995:63:0;48082:17;48144:8;;48128:13;;48112;;48102:7;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;:50;;;;:::i;:::-;48082:70;-1:-1:-1;48167:13:0;;48163:284;;48197:47;48213:4;48227;48234:9;48197:15;:47::i;:::-;48285:13;;48259:22;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;48342:13:0;;48313:25;:42;;:25;;:42;;48342:13;;48313:42;:::i;:::-;;;;-1:-1:-1;;48387:7:0;;48370:13;:24;;:13;;:24;;48387:7;;48370:24;:::i;:::-;;;;-1:-1:-1;;48427:8:0;;48409:14;:26;;:14;;:26;;48427:8;;48409:26;:::i;:::-;;;;-1:-1:-1;;48163:284:0;48457:15;49025;;49015:7;:25;49067:21;;49051:13;:37;49115:21;;49099:13;:37;49158:16;;49147:8;:27;48971:211;48457:15;45859:2621;;;;45746:2734;;;:::o;10283:191::-;10376:6;;;-1:-1:-1;;;;;10393:17:0;;;-1:-1:-1;;;;;;10393:17:0;;;;;;;10426:40;;10376:6;;;10393:17;10376:6;;10426:40;;10357:16;;10426:40;10346:128;10283:191;:::o;19285:248::-;19456:58;;;-1:-1:-1;;;;;13893:32:1;;19456:58:0;;;13875:51:1;13942:18;;;;13935:34;;;19456:58:0;;;;;;;;;;13848:18:1;;;;19456:58:0;;;;;;;;-1:-1:-1;;;;;19456:58:0;-1:-1:-1;;;19456:58:0;;;19402:123;;19436:5;;19402:19;:123::i;:::-;19285:248;;;:::o;49190:1684::-;40240:16;:23;;-1:-1:-1;;40240:23:0;40259:4;40240:23;;;:16;49266:24:::1;49284:4;49266:9;:24::i;:::-;49240:50;;49301:24;49407:13;;49366:25;;49328:22;;:63;;;;:::i;:::-;:92;;;;:::i;:::-;49301:119:::0;-1:-1:-1;49435:21:0;;;:76:::1;;;49495:16;49478:14;;49460:15;:32;;;;:::i;:::-;:51;49435:76;49431:115;;;49528:7;;;;49431:115;49558:26;49612:1;49587:22;;:26;;;;:::i;:::-;49558:55;;49624:25;49652:21;49624:49;;49684:14;49776:13;;49735:25;;49701:18;:59;;;;:::i;:::-;:88;;;;:::i;:::-;49684:105;;49800:24;49817:6;49800:16;:24::i;:::-;49835:18;49856:41;49880:17:::0;49856:21:::1;:41;:::i;:::-;49835:62;;49910:23;49992:6;49950:25;;49937:10;:38;;;;:::i;:::-;49936:62;;;;:::i;:::-;49910:88:::0;-1:-1:-1;50009:23:0::1;50071:6:::0;50036:31:::1;50049:18:::0;50036:10;:31:::1;:::i;:::-;50035:42;;;;:::i;:::-;50009:68;;50088:17;50139:6;50122:13;;50109:10;:26;;;;:::i;:::-;50108:37;;;;:::i;:::-;50088:57;;50183:1;50162:18;:22;:45;;;;;50206:1;50188:15;:19;50162:45;50158:127;;;50224:49;50237:18;50257:15;50224:12;:49::i;:::-;50342:19;::::0;50334:109:::1;::::0;50295:12:::1;::::0;-1:-1:-1;;;;;50342:19:0::1;::::0;50423:5:::1;::::0;50389:15;;50295:12;50334:109;50295:12;50334:109;50389:15;50342:19;50423:5;50334:109:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;50476:13:0::1;::::0;50468:97:::1;::::0;50320:123;;-1:-1:-1;;;;;;50476:13:0::1;::::0;50545:5:::1;::::0;50517:9;;50468:97:::1;::::0;;;50517:9;50476:13;50545:5;50468:97:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;50626:14:0::1;::::0;50454:111;;-1:-1:-1;50626:18:0;50622:109:::1;;50661:58;50685:4;50692:10;50704:14;;50661:15;:58::i;:::-;-1:-1:-1::0;;50768:1:0::1;50743:22;:26:::0;;;50780:25:::1;:29:::0;;;50820:13:::1;:17:::0;;;50848:14:::1;:18:::0;-1:-1:-1;;;;;;;;40274:1:0::1;40286:16:::0;:24;;-1:-1:-1;;40286:24:0;;;49190:1684::o;48488:475::-;48549:7;;:12;:47;;;;-1:-1:-1;48578:13:0;;:18;48549:47;:82;;;;-1:-1:-1;48613:13:0;;:18;48549:82;:113;;;;-1:-1:-1;48649:8:0;;:13;48549:113;48531:150;;;48488:475::o;48531:150::-;48711:7;;;48693:15;:25;48753:13;;;48729:21;:37;48801:13;;;48777:21;:37;48844:8;;;48825:16;:27;-1:-1:-1;48865:11:0;;;;48887:17;;;;48915;;;48943:12;48488:475::o;32741:708::-;-1:-1:-1;;;;;32872:18:0;;32864:68;;;;-1:-1:-1;;;32864:68:0;;14392:2:1;32864:68:0;;;14374:21:1;14431:2;14411:18;;;14404:30;14470:34;14450:18;;;14443:62;-1:-1:-1;;;14521:18:1;;;14514:35;14566:19;;32864:68:0;14190:401:1;32864:68:0;-1:-1:-1;;;;;32951:16:0;;32943:64;;;;-1:-1:-1;;;32943:64:0;;14798:2:1;32943:64:0;;;14780:21:1;14837:2;14817:18;;;14810:30;14876:34;14856:18;;;14849:62;-1:-1:-1;;;14927:18:1;;;14920:33;14970:19;;32943:64:0;14596:399:1;32943:64:0;-1:-1:-1;;;;;33093:15:0;;33071:19;33093:15;;;;;;;;;;;33141:21;;;;33119:109;;;;-1:-1:-1;;;33119:109:0;;15202:2:1;33119:109:0;;;15184:21:1;15241:2;15221:18;;;15214:30;15280:34;15260:18;;;15253:62;-1:-1:-1;;;15331:18:1;;;15324:36;15377:19;;33119:109:0;15000:402:1;33119:109:0;-1:-1:-1;;;;;33264:15:0;;;:9;:15;;;;;;;;;;;33282:20;;;33264:38;;33324:13;;;;;;;;:23;;33296:6;;33264:9;33324:23;;33296:6;;33324:23;:::i;:::-;;;;;;;;33380:2;-1:-1:-1;;;;;33365:26:0;33374:4;-1:-1:-1;;;;;33365:26:0;;33384:6;33365:26;;;;1688:25:1;;1676:2;1661:18;;1542:177;33365:26:0;;;;;;;;33404:37;19285:248;22252:802;22676:23;22702:106;22744:4;22702:106;;;;;;;;;;;;;;;;;22710:5;-1:-1:-1;;;;;22702:27:0;;;:106;;;;;:::i;:::-;22823:17;;22676:132;;-1:-1:-1;22823:21:0;22819:228;;22938:10;22927:30;;;;;;;;;;;;:::i;:::-;22901:134;;;;-1:-1:-1;;;22901:134:0;;15859:2:1;22901:134:0;;;15841:21:1;15898:2;15878:18;;;15871:30;15937:34;15917:18;;;15910:62;-1:-1:-1;;;15988:18:1;;;15981:40;16038:19;;22901:134:0;15657:406:1;50882:465:0;50972:16;;;50986:1;50972:16;;;;;;;;50948:21;;50972:16;;;;;;;;;;-1:-1:-1;50972:16:0;50948:40;;51017:4;50999;51004:1;50999:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;50999:23:0;;;-1:-1:-1;;;;;50999:23:0;;;;;51043:13;-1:-1:-1;;;;;51043:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51033:4;51038:1;51033:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;51033:30:0;;;-1:-1:-1;;;;;51033:30:0;;;;;51074:60;51091:4;51106:13;51122:11;51074:8;:60::i;:::-;51145:194;;-1:-1:-1;;;51145:194:0;;-1:-1:-1;;;;;51145:13:0;:64;;;;:194;;51224:11;;51250:1;;51266:4;;51293;;51313:15;;51145:194;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50937:410;50882:465;:::o;51355:410::-;51436:60;51453:4;51468:13;51484:11;51436:8;:60::i;:::-;51507:13;-1:-1:-1;;;;;51507:29:0;;51544:9;51577:4;51597:11;51623:1;51666;51709:7;9049:6;;-1:-1:-1;;;;;9049:6:0;;8976:87;51709:7;51507:250;;;;;;-1:-1:-1;;;;;;51507:250:0;;;-1:-1:-1;;;;;17932:15:1;;;51507:250:0;;;17914:34:1;17964:18;;;17957:34;;;;18007:18;;;18000:34;;;;18050:18;;;18043:34;18114:15;;;18093:19;;;18086:44;51731:15:0;18146:19:1;;;18139:35;17848:19;;51507:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;51355:410;;:::o;14331:229::-;14468:12;14500:52;14522:6;14530:4;14536:1;14539:12;14500:21;:52::i;:::-;14493:59;14331:229;-1:-1:-1;;;;14331:229:0:o;15547:571::-;15717:12;15789:5;15764:21;:30;;15742:118;;;;-1:-1:-1;;;15742:118:0;;18698:2:1;15742:118:0;;;18680:21:1;18737:2;18717:18;;;18710:30;18776:34;18756:18;;;18749:62;-1:-1:-1;;;18827:18:1;;;18820:36;18873:19;;15742:118:0;18496:402:1;15742:118:0;-1:-1:-1;;;;;11784:19:0;;;15871:60;;;;-1:-1:-1;;;15871:60:0;;19105:2:1;15871:60:0;;;19087:21:1;19144:2;19124:18;;;19117:30;19183:31;19163:18;;;19156:59;19232:18;;15871:60:0;18903:353:1;15871:60:0;15945:12;15959:23;15986:6;-1:-1:-1;;;;;15986:11:0;16005:5;16026:4;15986:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15944:97;;;;16059:51;16076:7;16085:10;16097:12;16059:16;:51::i;:::-;16052:58;15547:571;-1:-1:-1;;;;;;;15547:571:0:o;18507:712::-;18657:12;18686:7;18682:530;;;-1:-1:-1;18717:10:0;18710:17;;18682:530;18831:17;;:21;18827:374;;19029:10;19023:17;19090:15;19077:10;19073:2;19069:19;19062:44;18827:374;19172:12;19165:20;;-1:-1:-1;;;19165:20:0;;;;;;;;:::i;238:250:1:-;323:1;333:113;347:6;344:1;341:13;333:113;;;423:11;;;417:18;404:11;;;397:39;369:2;362:10;333:113;;;-1:-1:-1;;480:1:1;462:16;;455:27;238:250::o;493:396::-;642:2;631:9;624:21;605:4;674:6;668:13;717:6;712:2;701:9;697:18;690:34;733:79;805:6;800:2;789:9;785:18;780:2;772:6;768:15;733:79;:::i;:::-;873:2;852:15;-1:-1:-1;;848:29:1;833:45;;;;880:2;829:54;;493:396;-1:-1:-1;;493:396:1:o;894:131::-;-1:-1:-1;;;;;969:31:1;;959:42;;949:70;;1015:1;1012;1005:12;1030:315;1098:6;1106;1159:2;1147:9;1138:7;1134:23;1130:32;1127:52;;;1175:1;1172;1165:12;1127:52;1214:9;1201:23;1233:31;1258:5;1233:31;:::i;:::-;1283:5;1335:2;1320:18;;;;1307:32;;-1:-1:-1;;;1030:315:1:o;1917:159::-;1984:20;;2044:6;2033:18;;2023:29;;2013:57;;2066:1;2063;2056:12;2013:57;1917:159;;;:::o;2081:401::-;2163:6;2171;2179;2187;2240:3;2228:9;2219:7;2215:23;2211:33;2208:53;;;2257:1;2254;2247:12;2208:53;2280:28;2298:9;2280:28;:::i;:::-;2270:38;;2327:37;2360:2;2349:9;2345:18;2327:37;:::i;:::-;2317:47;;2383:37;2416:2;2405:9;2401:18;2383:37;:::i;:::-;2373:47;;2439:37;2472:2;2461:9;2457:18;2439:37;:::i;:::-;2429:47;;2081:401;;;;;;;:::o;2487:456::-;2564:6;2572;2580;2633:2;2621:9;2612:7;2608:23;2604:32;2601:52;;;2649:1;2646;2639:12;2601:52;2688:9;2675:23;2707:31;2732:5;2707:31;:::i;:::-;2757:5;-1:-1:-1;2814:2:1;2799:18;;2786:32;2827:33;2786:32;2827:33;:::i;:::-;2487:456;;2879:7;;-1:-1:-1;;;2933:2:1;2918:18;;;;2905:32;;2487:456::o;2948:118::-;3034:5;3027:13;3020:21;3013:5;3010:32;3000:60;;3056:1;3053;3046:12;3071:241;3127:6;3180:2;3168:9;3159:7;3155:23;3151:32;3148:52;;;3196:1;3193;3186:12;3148:52;3235:9;3222:23;3254:28;3276:5;3254:28;:::i;3506:247::-;3565:6;3618:2;3606:9;3597:7;3593:23;3589:32;3586:52;;;3634:1;3631;3624:12;3586:52;3673:9;3660:23;3692:31;3717:5;3692:31;:::i;3758:180::-;3817:6;3870:2;3858:9;3849:7;3845:23;3841:32;3838:52;;;3886:1;3883;3876:12;3838:52;-1:-1:-1;3909:23:1;;3758:180;-1:-1:-1;3758:180:1:o;4383:382::-;4448:6;4456;4509:2;4497:9;4488:7;4484:23;4480:32;4477:52;;;4525:1;4522;4515:12;4477:52;4564:9;4551:23;4583:31;4608:5;4583:31;:::i;:::-;4633:5;-1:-1:-1;4690:2:1;4675:18;;4662:32;4703:30;4662:32;4703:30;:::i;:::-;4752:7;4742:17;;;4383:382;;;;;:::o;4770:403::-;4853:6;4861;4914:2;4902:9;4893:7;4889:23;4885:32;4882:52;;;4930:1;4927;4920:12;4882:52;4969:9;4956:23;4988:31;5013:5;4988:31;:::i;:::-;5038:5;-1:-1:-1;5095:2:1;5080:18;;5067:32;5108:33;5067:32;5108:33;:::i;5571:380::-;5650:1;5646:12;;;;5693;;;5714:61;;5768:4;5760:6;5756:17;5746:27;;5714:61;5821:2;5813:6;5810:14;5790:18;5787:38;5784:161;;5867:10;5862:3;5858:20;5855:1;5848:31;5902:4;5899:1;5892:15;5930:4;5927:1;5920:15;5784:161;;5571:380;;;:::o;5956:127::-;6017:10;6012:3;6008:20;6005:1;5998:31;6048:4;6045:1;6038:15;6072:4;6069:1;6062:15;6088:128;6155:9;;;6176:11;;;6173:37;;;6190:18;;:::i;6221:356::-;6423:2;6405:21;;;6442:18;;;6435:30;6501:34;6496:2;6481:18;;6474:62;6568:2;6553:18;;6221:356::o;6582:168::-;6649:6;6675:10;;;6687;;;6671:27;;6710:11;;;6707:37;;;6724:18;;:::i;:::-;6707:37;6582:168;;;;:::o;7458:125::-;7523:9;;;7544:10;;;7541:36;;;7557:18;;:::i;7588:422::-;7677:1;7720:5;7677:1;7734:270;7755:7;7745:8;7742:21;7734:270;;;7814:4;7810:1;7806:6;7802:17;7796:4;7793:27;7790:53;;;7823:18;;:::i;:::-;7873:7;7863:8;7859:22;7856:55;;;7893:16;;;;7856:55;7972:22;;;;7932:15;;;;7734:270;;;7738:3;7588:422;;;;;:::o;8015:806::-;8064:5;8094:8;8084:80;;-1:-1:-1;8135:1:1;8149:5;;8084:80;8183:4;8173:76;;-1:-1:-1;8220:1:1;8234:5;;8173:76;8265:4;8283:1;8278:59;;;;8351:1;8346:130;;;;8258:218;;8278:59;8308:1;8299:10;;8322:5;;;8346:130;8383:3;8373:8;8370:17;8367:43;;;8390:18;;:::i;:::-;-1:-1:-1;;8446:1:1;8432:16;;8461:5;;8258:218;;8560:2;8550:8;8547:16;8541:3;8535:4;8532:13;8528:36;8522:2;8512:8;8509:16;8504:2;8498:4;8495:12;8491:35;8488:77;8485:159;;;-1:-1:-1;8597:19:1;;;8629:5;;8485:159;8676:34;8701:8;8695:4;8676:34;:::i;:::-;8746:6;8742:1;8738:6;8734:19;8725:7;8722:32;8719:58;;;8757:18;;:::i;:::-;8795:20;;8015:806;-1:-1:-1;;;8015:806:1:o;8826:140::-;8884:5;8913:47;8954:4;8944:8;8940:19;8934:4;8913:47;:::i;8971:168::-;9044:9;;;9075;;9092:15;;;9086:22;;9072:37;9062:71;;9113:18;;:::i;9144:217::-;9184:1;9210;9200:132;;9254:10;9249:3;9245:20;9242:1;9235:31;9289:4;9286:1;9279:15;9317:4;9314:1;9307:15;9200:132;-1:-1:-1;9346:9:1;;9144:217::o;11231:184::-;11301:6;11354:2;11342:9;11333:7;11329:23;11325:32;11322:52;;;11370:1;11367;11360:12;11322:52;-1:-1:-1;11393:16:1;;11231:184;-1:-1:-1;11231:184:1:o;15407:245::-;15474:6;15527:2;15515:9;15506:7;15502:23;15498:32;15495:52;;;15543:1;15540;15533:12;15495:52;15575:9;15569:16;15594:28;15616:5;15594:28;:::i;16200:127::-;16261:10;16256:3;16252:20;16249:1;16242:31;16292:4;16289:1;16282:15;16316:4;16313:1;16306:15;16332:251;16402:6;16455:2;16443:9;16434:7;16430:23;16426:32;16423:52;;;16471:1;16468;16461:12;16423:52;16503:9;16497:16;16522:31;16547:5;16522:31;:::i;16588:980::-;16850:4;16898:3;16887:9;16883:19;16929:6;16918:9;16911:25;16955:2;16993:6;16988:2;16977:9;16973:18;16966:34;17036:3;17031:2;17020:9;17016:18;17009:31;17060:6;17095;17089:13;17126:6;17118;17111:22;17164:3;17153:9;17149:19;17142:26;;17203:2;17195:6;17191:15;17177:29;;17224:1;17234:195;17248:6;17245:1;17242:13;17234:195;;;17313:13;;-1:-1:-1;;;;;17309:39:1;17297:52;;17404:15;;;;17369:12;;;;17345:1;17263:9;17234:195;;;-1:-1:-1;;;;;;;17485:32:1;;;;17480:2;17465:18;;17458:60;-1:-1:-1;;;17549:3:1;17534:19;17527:35;17446:3;16588:980;-1:-1:-1;;;16588:980:1:o;18185:306::-;18273:6;18281;18289;18342:2;18330:9;18321:7;18317:23;18313:32;18310:52;;;18358:1;18355;18348:12;18310:52;18387:9;18381:16;18371:26;;18437:2;18426:9;18422:18;18416:25;18406:35;;18481:2;18470:9;18466:18;18460:25;18450:35;;18185:306;;;;;:::o;19261:287::-;19390:3;19428:6;19422:13;19444:66;19503:6;19498:3;19491:4;19483:6;19479:17;19444:66;:::i;:::-;19526:16;;;;;19261:287;-1:-1:-1;;19261:287:1:o

Swarm Source

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